forked from TypeScriptToLua/TypeScriptToLua
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathobjectLiteral.spec.ts
More file actions
66 lines (56 loc) · 2.11 KB
/
objectLiteral.spec.ts
File metadata and controls
66 lines (56 loc) · 2.11 KB
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
import * as util from "../util";
test.each([
{ inp: `{a:3,b:"4"}`, out: '{a = 3, b = "4"}' },
{ inp: `{"a":3,b:"4"}`, out: '{a = 3, b = "4"}' },
{ inp: `{["a"]:3,b:"4"}`, out: '{a = 3, b = "4"}' },
{ inp: `{["a"+123]:3,b:"4"}`, out: '{["a" .. 123] = 3, b = "4"}' },
{ inp: `{[myFunc()]:3,b:"4"}`, out: '{\n [myFunc(_G)] = 3,\n b = "4"\n}' },
{ inp: `{x}`, out: `{x = x}` },
])("Object Literal (%p)", ({ inp, out }) => {
const lua = util.transpileString(`const myvar = ${inp};`);
expect(lua).toBe(`local myvar = ${out}`);
});
describe("property shorthand", () => {
test("should support property shorthand", () => {
const result = util.transpileAndExecute(`
const x = 1;
const o = { x };
return o.x;
`);
expect(result).toBe(1);
});
test.each([NaN, Infinity])("should support %p shorthand", identifier => {
const result = util.transpileAndExecute(`return ({ ${identifier} }).${identifier}`);
expect(result).toBe(identifier);
});
test("should support _G shorthand", () => {
const result = util.transpileAndExecute(
`return ({ _G })._G.foobar;`,
undefined,
`foobar = "foobar"`,
"declare const _G: any;"
);
expect(result).toBe("foobar");
});
test("should support export property shorthand", () => {
const code = `
export const x = 1;
const o = { x };
export const y = o.x;
`;
expect(util.transpileExecuteAndReturnExport(code, "y")).toBe(1);
});
});
test("undefined as object key", () => {
const code = `const foo = {undefined: "foo"};
return foo.undefined;`;
expect(util.transpileAndExecute(code)).toBe("foo");
});
test.each([`({x: "foobar"}.x)`, `({x: "foobar"}["x"])`, `({x: () => "foobar"}.x())`, `({x: () => "foobar"}["x"]())`])(
"object literal property access (%p)",
expression => {
const code = `return ${expression}`;
const expectResult = eval(expression);
expect(util.transpileAndExecute(code)).toBe(expectResult);
}
);