all files / dist/ TestRunnerFactoryGenerator.js

96.1% Statements 74/77
77.78% Branches 14/18
100% Functions 16/16
96.1% Lines 74/77
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155                                                10× 10× 10× 10× 10×                         10×     13×             13× 13× 13×             13× 10× 10×               13× 13× 13×       10×           10×           10×           10× 10×            
"use strict";
var typeInfo = require("ts-type-info");
var wrappers_1 = require("./wrappers");
var TestRunnerFactoryGenerator = (function () {
    /* istanbul ignore next */ function TestRunnerFactoryGenerator() {
    }
    TestRunnerFactoryGenerator.prototype.fillTestFile = function (testFile, structures) {
        var testRunnerFactory = testFile.addClass({
            name: "TestRunnerFactory",
            isExported: true,
            constructorDef: {
                parameters: [{
                        name: "assertions",
                        type: "Assertions",
                        isOptional: true
                    }],
                onWriteFunctionBody: function (writer) {
                    writer.writeLine("this.assertions = new WrapperAssertions(assertions || new DefaultAssertions());");
                }
            },
            properties: [{
                    name: "assertions",
                    type: "WrapperAssertions",
                    scope: typeInfo.Scope.Private,
                    isReadonly: true
                }]
        });
        testRunnerFactory.addMethod({
            name: "getStrictEqualTestRunner",
            onWriteFunctionBody: function (writer) {
                writer.writeLine("return new StrictEqualTestRunner(this.assertions);");
            }
        });
        var _loop_1 = function (structure) {
            var typeParameters = structure.getTypeParameters();
            var argsCacheName = structure.getName() + "TestRunnerArgsCache";
            var testRunnerName = structure.getName() + "TestRunner";
            var testRunnerVariableName = "v" + testRunnerName;
            if (structure.hasTypeParameters()) {
                var typeParamsArray = [];
                for (var i = 0; i < structure.getTypeParametersCount() * 2; i++)
                    typeParamsArray.push("any");
                testRunnerFactory.addProperty({
                    name: "" + argsCacheName,
                    defaultExpression: "new TestRunnerArgsCache<" + testRunnerName + "<" + typeParamsArray.join(", ") + ">>()",
                    isReadonly: true,
                    scope: typeInfo.Scope.Private
                });
            }
            else {
                testRunnerFactory.addProperty({
                    name: "" + testRunnerName,
                    type: "" + testRunnerName,
                    scope: typeInfo.Scope.Private
                });
            }
            var method = testRunnerFactory.addMethod({
                name: "get" + testRunnerName,
                onWriteFunctionBody: function (methodWriter) {
                    if (structure.hasTypeParameters()) {
                        methodWriter.write("const args = [");
                        typeParameters.forEach(function (typeParam, i) {
                            methodWriter.conditionalWrite(i > 0, ", ");
                            methodWriter.write(typeParam.getName() + "TestRunner");
                        });
                        methodWriter.write("];").newLine();
                        methodWriter.writeLine("const index = this." + argsCacheName + ".getIndex(args);").newLine();
                        methodWriter.write("if (index >= 0)").block(function () {
                            methodWriter.writeLine("return this." + argsCacheName + ".getItemAtIndex(index);");
                        }).newLine();
                        methodWriter.writeLine("const " + testRunnerVariableName + " = new " + testRunnerName + "(this.assertions);");
                        methodWriter.writeLine("this." + argsCacheName + ".addItem(" + testRunnerVariableName + ", args);");
                    }
                    else {
                        methodWriter.write("if (this." + testRunnerName + " != null)").block(function () {
                            methodWriter.write("return this." + testRunnerName + ";");
                        });
                        methodWriter.newLine();
                        methodWriter.writeLine("const " + testRunnerVariableName + " = new " + testRunnerName + "(this.assertions);");
                        methodWriter.writeLine("this." + testRunnerName + " = " + testRunnerVariableName + ";");
                    }
                    methodWriter.newLine();
                    methodWriter.write(testRunnerVariableName + ".initialize(");
                    var writeType = function (typeDef) {
                        var validExtendsDefs = typeDef.getImmediateValidDefinitions();
                        Iif (typeDef.isTypeParameterType()) {
                            methodWriter.write(typeDef.getText() + "TestRunner");
                        }
                        else if (validExtendsDefs.length === 0)
                            methodWriter.write("this.getStrictEqualTestRunner()");
                        else {
                            var typeArgs = typeDef.getTypeArguments();
                            var testRunnerName_1 = validExtendsDefs[0].getName() + "TestRunner";
                            methodWriter.write("this.get" + testRunnerName_1 + "(");
                            typeArgs.forEach(function (typeArg, i) {
                                methodWriter.conditionalWrite(i !== 0, ", ");
                                writeType(typeArg);
                            });
                            methodWriter.write(")");
                        }
                    };
                    structure.getInitializeDependencies().forEach(function (dep, i) {
                        methodWriter.conditionalWrite(i > 0, ", ");
                        if (dep instanceof wrappers_1.StructureTypeParameterWrapper) {
                            var testRunnerName_2 = dep.getName() + "TestRunner";
                            methodWriter.write("" + testRunnerName_2);
                        }
                        else Eif (dep instanceof wrappers_1.StructureTypeWrapper) {
                            writeType(dep);
                        }
                        else if (dep instanceof wrappers_1.StructureWrapper) {
                            // todo: handle type parameters... currently this is a bug
                            methodWriter.write("this.get" + dep.getName() + "TestRunner()");
                        }
                    });
                    methodWriter.write(");").newLine();
                    methodWriter.newLine();
                    methodWriter.writeLine("return " + testRunnerVariableName + ";");
                }
            });
            // add type parameters for actual
            typeParameters.forEach(function (typeParam) {
                var constraintType = typeParam.getConstraintType();
                method.addTypeParameter({
                    name: typeParam.getName(),
                    constraintType: constraintType == null ? undefined : constraintType.getText()
                });
            });
            // add type parameters for expected
            typeParameters.forEach(function (typeParam) {
                var constraintType = typeParam.getConstraintType();
                method.addTypeParameter({
                    name: typeParam.getTestStructureName(),
                    constraintType: constraintType == null ? undefined : constraintType.getTestStructureName()
                });
            });
            // add type parameters as method parameters
            typeParameters.forEach(function (typeParam) {
                method.addParameter({
                    name: typeParam.getName() + "TestRunner",
                    type: "TestRunner<" + typeParam.getName() + ", " + typeParam.getTestStructureName() + ">"
                });
            });
        };
        for (var _i = 0, structures_1 = structures; _i < structures_1.length; _i++) {
            var structure = structures_1[_i];
            _loop_1(structure);
        }
    };
    return TestRunnerFactoryGenerator;
}());
exports.TestRunnerFactoryGenerator = TestRunnerFactoryGenerator;
 
//# sourceMappingURL=TestRunnerFactoryGenerator.js.map