import { namekey, Output, refkey } from "@alloy-js/core"; import { describe, expect, it } from "vitest"; import * as ts from "../src/index.js"; it("renders an enum with only named members, no value", () => { expect( , ).toRenderTo(` enum MyEnum { foo, bar, } `); }); it("renders enum member with falsy value", () => { expect( , ).toRenderTo(` enum MyEnum { foo = 0, bar = "", } `); }); it("renders an enum with enum children", () => { expect( , ).toRenderTo(` enum MyEnum { foo = 1, bar = 2, } `); }); it("renders an enum with enum children specifying JS Value", () => { expect( , ).toRenderTo(` enum MyEnum { foo = "1", bar = 2, } `); }); it("renders an enum given a JS value", () => { const members = { foo: 1, bar: 2, }; expect( , ).toRenderTo(` enum MyEnum { foo = 1, bar = 2, } `); }); it("renders an enum given a JS value and children", () => { const members = { foo: 1, bar: 2, }; expect( custom = "hello" , ).toRenderTo(` enum MyEnum { foo = 1, bar = 2, custom = "hello" } `); }); it("uses the naming policy", () => { const members = { "foo-prop": 1, "bar-prop": 2, }; const policy = ts.createTSNamePolicy(); expect( , ).toRenderTo(` enum MyEnum { FooProp = 1, BarProp = 2, } `); }); it("takes a namekey for all its elements", () => { const enumKey = namekey("my-enum"); const memberKey = namekey("member-one"); expect( , ).toRenderTo(` enum my-enum { "member-one", } `); }); describe("symbols", () => { it("can reference enum members by refkey", () => { const memberOne = refkey(); const memberTwo = refkey(); expect( {memberOne}; {memberTwo}; , ).toRenderTo(` enum MyEnum { foo = "1", "mangled-name" = 2, } MyEnum.foo; MyEnum["mangled-name"]; `); }); });