diff --git a/src/Transpiler.ts b/src/Transpiler.ts index 3d9dc5499..35dc40b74 100644 --- a/src/Transpiler.ts +++ b/src/Transpiler.ts @@ -741,7 +741,12 @@ export class LuaTranspiler { case "splice": return `TS_splice(${caller}, ${params})`; case "join": - return `table.concat(${caller}, ${params})`; + if (node.arguments.length === 0) { + // if seperator is omitted default seperator is "," + return `table.concat(${caller}, ",")`; + } else { + return `table.concat(${caller}, ${params})`; + } default: throw new TranspileError("Unsupported array function: " + expression.name.escapedText, node); } diff --git a/test/integration/lua/lualib.spec.ts b/test/integration/lua/lualib.spec.ts index 57063709d..09f0d1b35 100644 --- a/test/integration/lua/lualib.spec.ts +++ b/test/integration/lua/lualib.spec.ts @@ -138,4 +138,35 @@ export class LuaLibArrayTests { Expect(result).toBe(JSON.stringify(inp.splice(start))); } } + + @TestCase([], "") + @TestCase(["test1"], "test1") + @TestCase(["test1", "test2"], "test1,test2") + @TestCase(["test1", "test2"], "test1;test2", ";") + @TestCase(["test1", "test2"], "test1test2", "") + @Test("array.join") + public join(inp: T[], expected: string, seperator?: string) { + let seperatorLua; + if (seperator === "") { + seperatorLua = "\"\""; + } else if (seperator) { + seperatorLua = "\"" + seperator + "\""; + } else { + seperatorLua = ""; + } + // Transpile + let lua = util.transpileString( + `let joinTestTable = ${JSON.stringify(inp)}; + return joinTestTable.join(${seperatorLua});`, + util.dummyTypes.Array + ); + + // Execute + let result = util.executeLua(lua); + + // Assert + let joinedInp = inp.join(seperator); + Expect(result).toBe(joinedInp); + } + }