UNPKG

ts-simple-ast

Version:

TypeScript compiler wrapper for AST navigation and code generation.

166 lines (164 loc) 8.99 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const chai_1 = require("chai"); const compiler_1 = require("./../../../compiler"); const testHelpers_1 = require("./../testHelpers"); describe("EnumDeclaration", () => { describe("getMember", () => { it("should get a member by its name", () => { const { firstChild } = testHelpers_1.getInfoFromText("enum MyEnum { member1, member2 }"); chai_1.expect(firstChild.getMember("member2").getText()).to.equal("member2"); }); it("should get a member by a function", () => { const { firstChild } = testHelpers_1.getInfoFromText("enum MyEnum { member1, member2 }"); chai_1.expect(firstChild.getMember(m => m.getName() === "member2").getText()).to.equal("member2"); }); }); describe("getMemberOrThrow", () => { it("should get a member by its name", () => { const { firstChild } = testHelpers_1.getInfoFromText("enum MyEnum { member1, member2 }"); chai_1.expect(firstChild.getMemberOrThrow("member2").getText()).to.equal("member2"); }); it("should get a member by a function", () => { const { firstChild } = testHelpers_1.getInfoFromText("enum MyEnum { member1, member2 }"); chai_1.expect(firstChild.getMemberOrThrow(m => m.getName() === "member2").getText()).to.equal("member2"); }); it("should get a member by a function", () => { const { firstChild } = testHelpers_1.getInfoFromText("enum MyEnum { member1, member2 }"); chai_1.expect(() => firstChild.getMemberOrThrow(m => m.getName() === "member9")).to.throw(); }); }); describe("getMembers", () => { it("should get all the members", () => { const { firstChild } = testHelpers_1.getInfoFromText("enum MyEnum { member1 = 1, member2 }"); const members = firstChild.getMembers(); chai_1.expect(members.length).to.equal(2); }); }); describe("insertMembers", () => { function doTest(startCode, index, structures, expectedCode) { const { firstChild, sourceFile } = testHelpers_1.getInfoFromText(startCode); const result = firstChild.insertMembers(index, structures); chai_1.expect(sourceFile.getFullText()).to.equal(expectedCode); chai_1.expect(result.length).to.equal(structures.length); } it("should insert a member without a value", () => { doTest("enum MyEnum {\n}\n", 0, [{ name: "myName" }], "enum MyEnum {\n myName\n}\n"); }); it("should insert a member with a value", () => { doTest("enum MyEnum {\n}\n", 0, [{ name: "myName", value: 5 }], "enum MyEnum {\n myName = 5\n}\n"); }); it("should insert a member and add a comma to the previous member when no comma exists", () => { doTest("enum MyEnum {\n member1\n}\n", 1, [{ name: "member2" }], "enum MyEnum {\n member1,\n member2\n}\n"); }); it("should insert a member and not add a comma to the prevous member when a comma exists", () => { doTest("enum MyEnum {\n member1,\n}\n", 1, [{ name: "member2" }], "enum MyEnum {\n member1,\n member2\n}\n"); }); it("should insert in the middle", () => { doTest("enum MyEnum {\n member1,\n member3\n}\n", 1, [{ name: "member2" }], "enum MyEnum {\n member1,\n member2,\n member3\n}\n"); }); it("should insert multiple", () => { doTest("enum MyEnum {\n}\n", 0, [{ name: "member1" }, { name: "member2", value: 2, docs: [{ description: "description" }] }, { name: "member3" }], "enum MyEnum {\n member1,\n /**\n * description\n */\n member2 = 2,\n member3\n}\n"); }); }); describe("insertMember", () => { function doTest(startCode, index, structure, expectedCode) { const { firstChild, sourceFile } = testHelpers_1.getInfoFromText(startCode); const result = firstChild.insertMember(index, structure); chai_1.expect(sourceFile.getFullText()).to.equal(expectedCode); chai_1.expect(result).to.be.instanceOf(compiler_1.EnumMember); } it("should add a member", () => { doTest("enum MyEnum {\n member2\n}\n", 0, { name: "member1" }, "enum MyEnum {\n member1,\n member2\n}\n"); }); }); describe("addMember", () => { function doTest(startCode, structure, expectedCode) { const { firstChild, sourceFile } = testHelpers_1.getInfoFromText(startCode); const result = firstChild.addMember(structure); chai_1.expect(sourceFile.getFullText()).to.equal(expectedCode); chai_1.expect(result).to.be.instanceOf(compiler_1.EnumMember); } it("should add a member", () => { doTest("enum MyEnum {\n member1\n}\n", { name: "member2" }, "enum MyEnum {\n member1,\n member2\n}\n"); }); }); describe("addMembers", () => { function doTest(startCode, structures, expectedCode) { const { firstChild, sourceFile } = testHelpers_1.getInfoFromText(startCode); const result = firstChild.addMembers(structures); chai_1.expect(sourceFile.getFullText()).to.equal(expectedCode); chai_1.expect(result.length).to.equal(structures.length); } it("should add members", () => { doTest("enum MyEnum {\n member1\n}\n", [{ name: "member2" }, { name: "member3" }], "enum MyEnum {\n member1,\n member2,\n member3\n}\n"); }); }); describe("isConstEnum", () => { it("should have a const keyword when it has one", () => { const { firstChild } = testHelpers_1.getInfoFromText("const enum MyEnum {}"); chai_1.expect(firstChild.isConstEnum()).is.true; }); it("should not have a const keyword when it doesn't have one", () => { const { firstChild } = testHelpers_1.getInfoFromText("enum MyEnum {}"); chai_1.expect(firstChild.isConstEnum()).is.false; }); }); describe("getConstKeyword", () => { it("should get a const keyword when it has one", () => { const { firstChild } = testHelpers_1.getInfoFromText("const enum MyEnum {}"); chai_1.expect(firstChild.getConstKeyword().getText()).to.equal("const"); }); it("should not get a const keyword when it doesn't have one", () => { const { firstChild } = testHelpers_1.getInfoFromText("enum MyEnum {}"); chai_1.expect(firstChild.getConstKeyword()).is.undefined; }); }); describe("setIsConstEnum", () => { it("should set as const enum when not one", () => { const { firstChild } = testHelpers_1.getInfoFromText("enum MyEnum {}"); firstChild.setIsConstEnum(true); chai_1.expect(firstChild.getText()).to.equal("const enum MyEnum {}"); }); it("should set as not const enum when is one", () => { const { firstChild } = testHelpers_1.getInfoFromText("const enum MyEnum {}"); firstChild.setIsConstEnum(false); chai_1.expect(firstChild.getText()).to.equal("enum MyEnum {}"); }); it("should stay the same if setting to same value", () => { const { firstChild } = testHelpers_1.getInfoFromText("const enum MyEnum {}"); firstChild.setIsConstEnum(true); chai_1.expect(firstChild.getText()).to.equal("const enum MyEnum {}"); }); }); describe("fill", () => { function doTest(startingCode, structure, expectedCode) { const { firstChild, sourceFile } = testHelpers_1.getInfoFromText(startingCode); firstChild.fill(structure); chai_1.expect(firstChild.getText()).to.equal(expectedCode); } it("should not modify anything if the structure doesn't change anything", () => { doTest("enum Identifier {\n}", {}, "enum Identifier {\n}"); }); it("should modify when changed", () => { const structure = { isConst: true, members: [{ name: "member" }] }; doTest("enum Identifier {\n}", structure, "const enum Identifier {\n member\n}"); }); }); describe("remove", () => { function doTest(text, index, expectedText) { const { sourceFile } = testHelpers_1.getInfoFromText(text); sourceFile.getEnums()[index].remove(); chai_1.expect(sourceFile.getFullText()).to.equal(expectedText); } it("should remove the enum declaration", () => { doTest("enum I {}\n\nenum J {}\n\nenum K {}", 1, "enum I {}\n\nenum K {}"); }); }); }); //# sourceMappingURL=enumDeclarationTests.js.map