ts-simple-ast
Version:
TypeScript compiler wrapper for AST navigation and code generation.
166 lines (164 loc) • 8.99 kB
JavaScript
"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