X Tutup
Skip to content

Commit 885d92c

Browse files
committed
Fixed some issues with fengari VM execution for tests
1 parent 1e23cb4 commit 885d92c

File tree

7 files changed

+81
-81
lines changed

7 files changed

+81
-81
lines changed

test/src/util.ts

Lines changed: 24 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ import { Expect } from "alsatian";
66
import { LuaTranspiler, TranspileError, LuaTarget } from "../../src/Transpiler";
77
import { CompilerOptions } from "../../src/CommandLineParser";
88

9-
import {lauxlib, lua, lualib, to_luastring} from "fengari";
9+
import {lauxlib, lua, lualib, to_luastring, to_jsstring } from "fengari";
1010

1111
const fs = require("fs");
1212

1313
const libSource = fs.readFileSync(path.join(path.dirname(require.resolve('typescript')), 'lib.d.ts')).toString();
1414

15-
export function transpileString(str: string, options: CompilerOptions = { dontRequireLuaLib: true, luaTarget: LuaTarget.LuaJIT }): string {
15+
export function transpileString(str: string, options: CompilerOptions = { dontRequireLuaLib: true, luaTarget: LuaTarget.Lua53 }): string {
1616
let compilerHost = {
1717
getSourceFile: (filename, languageVersion) => {
1818
if (filename === "file.ts") {
@@ -55,36 +55,35 @@ export function transpileFile(path: string): string {
5555
return result.trim();
5656
}
5757

58-
export enum LuaReturnType {
59-
String,
60-
Number,
61-
Boolean
62-
}
63-
64-
export function executeLua(luaStr: string, type: LuaReturnType = LuaReturnType.String, withLib = true): any {
58+
export function executeLua(luaStr: string, withLib = true): any {
6559
if (withLib) {
6660
luaStr = minimalTestLib + luaStr;
6761
}
6862

6963
const L = lauxlib.luaL_newstate();
7064
lualib.luaL_openlibs(L);
71-
lauxlib.luaL_dostring(L, to_luastring(luaStr));
72-
73-
let result;
74-
75-
switch (type) {
76-
case LuaReturnType.String:
77-
result = lua.lua_tojsstring(L, -1);
78-
break;
79-
case LuaReturnType.Number:
80-
result = lua.lua_tonumber(L, -1);
81-
break;
82-
case LuaReturnType.Boolean:
83-
result = lua.lua_toboolean(L, -1);
84-
break;
65+
const status = lauxlib.luaL_dostring(L, to_luastring(luaStr));
66+
67+
if (status === lua.LUA_OK) {
68+
// Read the return value from stack depending on its type.
69+
if (lua.lua_isboolean(L, -1)) {
70+
return lua.lua_toboolean(L, -1);
71+
} else if (lua.lua_isnil(L, -1)) {
72+
return null;
73+
} else if (lua.lua_isnumber(L, -1)) {
74+
return lua.lua_tonumber(L, -1);
75+
} else if (lua.lua_isstring(L, -1)) {
76+
return lua.lua_tojsstring(L, -1);
77+
} else {
78+
throw new Error("Unsupported lua return type: " + to_jsstring(lua.lua_typename(L, lua.lua_type(L, -1))));
79+
}
80+
} else {
81+
// If the lua VM did not terminate with status code LUA_OK an error occurred.
82+
// Throw a JS error with the message, retrieved by reading a string from the stack.
83+
84+
// Filter control characters out of string which are in there because ????
85+
throw new Error("LUA ERROR: " + to_jsstring(lua.lua_tostring(L, -1).filter(c => c >= 20)));
8586
}
86-
87-
return result;
8887
}
8988

9089
export function expectCodeEqual(code1: string, code2: string) {

test/unit/conditionals.spec.ts

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { Expect, Test, TestCase, FocusTest } from "alsatian";
2-
import * as util from "../src/util"
1+
import { Expect, Test, TestCase } from "alsatian";
2+
import * as util from "../src/util";
33

44
export class LuaConditionalsTests {
55

@@ -8,7 +8,7 @@ export class LuaConditionalsTests {
88
@Test("if")
99
public if(inp: number, expected: number) {
1010
// Transpile
11-
let lua = util.transpileString(
11+
const lua = util.transpileString(
1212
`let input = ${inp}
1313
if (input === 0) {
1414
return 0;
@@ -17,7 +17,7 @@ export class LuaConditionalsTests {
1717
);
1818

1919
// Execute
20-
let result = util.executeLua(lua, util.LuaReturnType.Number);
20+
const result = util.executeLua(lua);
2121

2222
// Assert
2323
Expect(result).toBe(expected);
@@ -28,7 +28,7 @@ export class LuaConditionalsTests {
2828
@Test("ifelse")
2929
public ifelse(inp: number, expected: number) {
3030
// Transpile
31-
let lua = util.transpileString(
31+
const lua = util.transpileString(
3232
`let input = ${inp}
3333
if (input === 0) {
3434
return 0;
@@ -38,7 +38,7 @@ export class LuaConditionalsTests {
3838
);
3939

4040
// Execute
41-
let result = util.executeLua(lua, util.LuaReturnType.Number);
41+
const result = util.executeLua(lua);
4242

4343
// Assert
4444
Expect(result).toBe(expected);
@@ -51,7 +51,7 @@ export class LuaConditionalsTests {
5151
@Test("ifelseif")
5252
public ifelseif(inp: number, expected: number) {
5353
// Transpile
54-
let lua = util.transpileString(
54+
const lua = util.transpileString(
5555
`let input = ${inp}
5656
if (input === 0) {
5757
return 0;
@@ -64,7 +64,7 @@ export class LuaConditionalsTests {
6464
);
6565

6666
// Execute
67-
let result = util.executeLua(lua, util.LuaReturnType.Number);
67+
const result = util.executeLua(lua);
6868

6969
// Assert
7070
Expect(result).toBe(expected);
@@ -77,7 +77,7 @@ export class LuaConditionalsTests {
7777
@Test("ifelseifelse")
7878
public ifelseifelse(inp: number, expected: number) {
7979
// Transpile
80-
let lua = util.transpileString(
80+
const lua = util.transpileString(
8181
`let input = ${inp}
8282
if (input === 0) {
8383
return 0;
@@ -91,7 +91,7 @@ export class LuaConditionalsTests {
9191
);
9292

9393
// Execute
94-
let result = util.executeLua(lua, util.LuaReturnType.Number);
94+
const result = util.executeLua(lua);
9595

9696
// Assert
9797
Expect(result).toBe(expected);
@@ -104,7 +104,7 @@ export class LuaConditionalsTests {
104104
@Test("switch")
105105
public switch(inp: number, expected: number) {
106106
// Transpile
107-
let lua = util.transpileString(
107+
const lua = util.transpileString(
108108
`let result = -1;
109109
110110
switch (${inp}) {
@@ -122,7 +122,7 @@ export class LuaConditionalsTests {
122122
);
123123

124124
// Execute
125-
let result = util.executeLua(lua, util.LuaReturnType.Number);
125+
const result = util.executeLua(lua);
126126

127127
// Assert
128128
Expect(result).toBe(expected);
@@ -135,7 +135,7 @@ export class LuaConditionalsTests {
135135
@Test("switchdefault")
136136
public switchdefault(inp: number, expected: number) {
137137
// Transpile
138-
let lua = util.transpileString(
138+
const lua = util.transpileString(
139139
`let result = -1;
140140
141141
switch (${inp}) {
@@ -156,7 +156,7 @@ export class LuaConditionalsTests {
156156
);
157157

158158
// Execute
159-
let result = util.executeLua(lua, util.LuaReturnType.Number);
159+
const result = util.executeLua(lua);
160160

161161
// Assert
162162
Expect(result).toBe(expected);
@@ -172,7 +172,7 @@ export class LuaConditionalsTests {
172172
@Test("switchfallthrough")
173173
public switchfallthrough(inp: number, expected: number) {
174174
/// Transpile
175-
let lua = util.transpileString(
175+
const lua = util.transpileString(
176176
`let result = -1;
177177
178178
switch (${inp}) {
@@ -202,7 +202,7 @@ export class LuaConditionalsTests {
202202
);
203203

204204
// Execute
205-
let result = util.executeLua(lua, util.LuaReturnType.Number);
205+
const result = util.executeLua(lua);
206206

207207
// Assert
208208
Expect(result).toBe(expected);
@@ -215,7 +215,7 @@ export class LuaConditionalsTests {
215215
@Test("nestedSwitch")
216216
public nestedSwitch(inp: number, expected: number) {
217217
// Transpile
218-
let lua = util.transpileString(
218+
const lua = util.transpileString(
219219
`let result = -1;
220220
221221
switch (${inp}) {
@@ -246,7 +246,7 @@ export class LuaConditionalsTests {
246246
);
247247

248248
// Execute
249-
let result = util.executeLua(lua, util.LuaReturnType.Number);
249+
const result = util.executeLua(lua);
250250

251251
// Assert
252252
Expect(result).toBe(expected);

test/unit/curry.spec.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import { Expect, Test, TestCase } from "alsatian";
2-
import * as util from "../src/util"
2+
import * as util from "../src/util";
33

44
export class LuaCurryTests {
55

66
@Test("currying")
77
public currying() {
88
// Transpile
9-
let lua = util.transpileString(
9+
const lua = util.transpileString(
1010
`(x: number) => (y: number) => x + y;`
1111
);
1212
// Assert
@@ -18,13 +18,13 @@ export class LuaCurryTests {
1818
@TestCase(5, 4)
1919
public curryingAdd(x: number, y: number) {
2020
// Transpile
21-
let lua = util.transpileString(
21+
const lua = util.transpileString(
2222
`let add = (x: number) => (y: number) => x + y;
2323
return add(${x})(${y})`
2424
);
2525

2626
// Execute
27-
let result = util.executeLua(lua, util.LuaReturnType.Number);
27+
const result = util.executeLua(lua);
2828

2929
// Assert
3030
Expect(result).toBe(x + y);

test/unit/error.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Expect, Test, TestCase } from "alsatian";
2-
import * as util from "../src/util"
2+
import * as util from "../src/util";
33

44
export class LuaErrorTests {
55

0 commit comments

Comments
 (0)
X Tutup