all files / dist/ AssertionsClassGenerator.js

100% Statements 54/54
100% Branches 0/0
100% Functions 26/26
100% Lines 54/54
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                                                                                                                                                                                               
"use strict";
var typeInfo = require("ts-type-info");
var AssertionsClassGenerator = (function () {
    /* istanbul ignore next */ function AssertionsClassGenerator() {
    }
    AssertionsClassGenerator.prototype.fillFile = function (file) {
        this.addImportsToFile(file);
        this.addInterfaceToFile(file);
        this.addDefaultClassToFile(file);
        this.addWrapperAssertionClassToFile(file);
    };
    AssertionsClassGenerator.prototype.addImportsToFile = function (file) {
        file.addImport({
            starImportName: "assert",
            moduleSpecifier: "assert"
        });
    };
    AssertionsClassGenerator.prototype.addInterfaceToFile = function (file) {
        var interfaceDef = file.addInterface({
            name: "Assertions",
            isExported: true
        });
        interfaceDef.addMethod({
            name: "describe",
            parameters: [{ name: "description", type: "string" }, { name: "spec", type: "() => void" }]
        });
        interfaceDef.addMethod({
            name: "it",
            parameters: [{ name: "expectation", type: "string" }, { name: "assertion", type: "() => void" }]
        });
        interfaceDef.addMethod({
            name: "strictEqual",
            parameters: [{ name: "actual" }, { name: "expected" }]
        });
    };
    AssertionsClassGenerator.prototype.addWrapperAssertionClassToFile = function (file) {
        var classDef = file.addClass({
            name: "WrapperAssertions",
            isExported: true,
            properties: [{
                    name: "assertAnyCount",
                    scope: typeInfo.Scope.Private,
                    defaultExpression: "0"
                }],
            methods: [{
                    name: "describe",
                    parameters: [{ name: "description", type: "string" }, { name: "spec", type: "() => void" }],
                    onWriteFunctionBody: function (writer) {
                        writer.writeLine("this.assertions.describe(description, spec);");
                    }
                }, {
                    name: "it",
                    parameters: [{ name: "expectation", type: "string" }, { name: "assertion", type: "() => void" }],
                    onWriteFunctionBody: function (writer) {
                        writer.write("if (this.assertAnyCount > 0)").block(function () {
                            writer.writeLine("assertion();");
                        });
                        writer.write("else").block(function () {
                            writer.writeLine("this.assertions.it(expectation, assertion);");
                        });
                    }
                }, {
                    name: "strictEqual",
                    parameters: [{ name: "actual" }, { name: "expected" }],
                    onWriteFunctionBody: function (writer) {
                        writer.writeLine("this.assertions.strictEqual(actual, expected);");
                    }
                }, {
                    name: "assertAny",
                    parameters: [{ name: "checks", isRestParameter: true, type: "(() => void)[]" }],
                    onWriteFunctionBody: function (writer) {
                        writer.writeLine("this.assertAnyCount++;");
                        writer.write("try ").inlineBlock(function () {
                            writer.writeLine("let didOverallPass = false");
                            writer.write("for (const check of checks)").block(function () {
                                writer.writeLine("let didPass = true;");
                                writer.write("try ").inlineBlock(function () {
                                    writer.writeLine("check();");
                                }).write(" catch (err)").block(function () {
                                    writer.writeLine("didPass = false;");
                                });
                                writer.write("if (didPass)").block(function () {
                                    writer.writeLine("didOverallPass = true;");
                                    writer.writeLine("break;");
                                });
                            });
                            writer.write("if (!didOverallPass)").block(function () {
                                writer.writeLine("throw new Error(\"Did not equal any of the union types.\");");
                            });
                        }).write(" finally ").inlineBlock(function () {
                            writer.writeLine("this.assertAnyCount--;");
                        });
                    }
                }, {
                    name: "isNull",
                    parameters: [{ name: "actual", type: "any" }, { name: "expected", type: "any" }],
                    onWriteFunctionBody: function (writer) {
                        writer.write("if (actual != null || expected == null)").block(function () {
                            writer.writeLine("return false;");
                        });
                        writer.write("this.it(\"should not be null\", () => ").inlineBlock(function () {
                            writer.writeLine("throw new Error(\"It's null\");");
                        }).write(");");
                        writer.writeLine("return true;");
                    }
                }]
        });
        classDef.setConstructor({
            parameters: [{
                    scope: typeInfo.ClassConstructorParameterScope.Private,
                    isReadonly: true,
                    name: "assertions",
                    type: "Assertions"
                }]
        });
    };
    AssertionsClassGenerator.prototype.addDefaultClassToFile = function (file) {
        var classDef = file.addClass({
            name: "DefaultAssertions",
            isExported: false
        });
        classDef.addImplements("Assertions");
        classDef.addMethod({
            name: "describe",
            parameters: [{ name: "description", type: "string" }, { name: "spec", type: "() => void" }],
            onWriteFunctionBody: function (writer) {
                writer.writeLine("describe(description, spec);");
            }
        });
        classDef.addMethod({
            name: "it",
            parameters: [{ name: "expectation", type: "string" }, { name: "assertion", type: "() => void" }],
            onWriteFunctionBody: function (writer) {
                writer.writeLine("it(expectation, assertion);");
            }
        });
        classDef.addMethod({
            name: "strictEqual",
            parameters: [{ name: "actual" }, { name: "expected" }],
            onWriteFunctionBody: function (writer) {
                writer.writeLine("assert.strictEqual(actual, expected);");
            }
        });
    };
    return AssertionsClassGenerator;
}());
exports.AssertionsClassGenerator = AssertionsClassGenerator;
 
//# sourceMappingURL=AssertionsClassGenerator.js.map