forked from TypeScriptToLua/TypeScriptToLua
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patharray.spec.ts
More file actions
131 lines (116 loc) · 3.98 KB
/
array.spec.ts
File metadata and controls
131 lines (116 loc) · 3.98 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
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
import { Expect, Test, TestCase } from "alsatian";
import * as util from "../src/util";
export class ArrayTests {
@Test("Array access")
public arrayAccess(): void {
const result = util.transpileAndExecute(
`const arr: number[] = [3,5,1];
return arr[1];`
);
Expect(result).toBe(5);
}
@Test("Array union access")
public arrayUnionAccess(): void {
const result = util.transpileAndExecute(
`function makeArray(): number[] | string[] { return [3,5,1]; }
const arr = makeArray();
return arr[1];`
);
Expect(result).toBe(5);
}
@Test("Array union length")
public arrayUnionLength(): void {
const result = util.transpileAndExecute(
`function makeArray(): number[] | string[] { return [3,5,1]; }
const arr = makeArray();
return arr.length;`
);
Expect(result).toBe(3);
}
@Test("Array intersection access")
public arrayIntersectionAccess(): void {
const result = util.transpileAndExecute(
`type I = number[] & {foo: string};
function makeArray(): I {
let t = [3,5,1];
(t as I).foo = "bar";
return (t as I);
}
const arr = makeArray();
return arr[1];`
);
Expect(result).toBe(5);
}
@Test("Array intersection length")
public arrayIntersectionLength(): void {
const result = util.transpileAndExecute(
`type I = number[] & {foo: string};
function makeArray(): I {
let t = [3,5,1];
(t as I).foo = "bar";
return (t as I);
}
const arr = makeArray();
return arr.length;`
);
Expect(result).toBe(3);
}
@TestCase("firstElement()", 3)
@TestCase("name", "array")
@TestCase("length", 1)
@Test("Derived array access")
public derivedArrayAccess(member: string, expected: any): void {
const luaHeader = `local arr = {name="array", firstElement=function(self) return self[1]; end};`;
const typeScriptHeader =
`interface CustomArray<T> extends Array<T>{
name:string,
firstElement():number;
};
declare const arr: CustomArray<number>;`;
const result = util.transpileAndExecute(
`
arr[0] = 3;
return arr.${member};`,
undefined,
luaHeader,
typeScriptHeader
);
Expect(result).toBe(expected);
}
@Test("Array delete")
public arrayDelete(): void {
const result = util.transpileAndExecute(
`const myarray = [1,2,3,4];
delete myarray[2];
return \`\${myarray[0]},\${myarray[1]},\${myarray[2]},\${myarray[3]}\`;`
);
Expect(result).toBe("1,2,nil,4");
}
@Test("Array delete return true")
public arrayDeleteReturnTrue(): void {
const result = util.transpileAndExecute(
`const myarray = [1,2,3,4];
const exists = delete myarray[2];
return \`\${exists}:\${myarray[0]},\${myarray[1]},\${myarray[2]},\${myarray[3]}\`;`
);
Expect(result).toBe("true:1,2,nil,4");
}
@Test("Array delete return false")
public arrayDeleteReturnFalse(): void {
const result = util.transpileAndExecute(
`const myarray = [1,2,3,4];
const exists = delete myarray[4];
return \`\${exists}:\${myarray[0]},\${myarray[1]},\${myarray[2]},\${myarray[3]}\`;`
);
Expect(result).toBe("true:1,2,3,4");
}
@Test("Array property access")
public arrayPropertyAccess(): void {
const code =
`type A = number[] & {foo?: string};
const a: A = [1,2,3];
a.foo = "bar";
return \`\${a.foo}\${a[0]}\${a[1]}\${a[2]}\`;`;
Expect(util.transpileAndExecute(code)).toBe("bar123");
}
}