diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/ldblib.js | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/tests/ldblib.js b/tests/ldblib.js index 475c031..c95ab9e 100644 --- a/tests/ldblib.js +++ b/tests/ldblib.js @@ -89,3 +89,120 @@ test('debug.upvalueid', function (t) { ); }); + + +test('debug.traceback (with a global)', function (t) { + let luaCode = ` + local trace + + rec = function(n) + n = n or 0 + if n < 10 then + rec(n + 1) + else + trace = debug.traceback() + end + end + + rec() + + return trace + `, L; + + t.plan(3); + + t.doesNotThrow(function () { + + L = lauxlib.luaL_newstate(); + + linit.luaL_openlibs(L); + + luaCode = lua.to_luastring(luaCode); + lauxlib.luaL_loadbuffer(L, luaCode, luaCode.length, lua.to_luastring("traceback-test")); + + }, "Lua program loaded without error"); + + t.doesNotThrow(function () { + + lapi.lua_call(L, 0, -1); + + }, "Lua program ran without error"); + + t.strictEqual( + lapi.lua_tojsstring(L, -1), +`stack traceback: +\t...[string "traceback-test"]9: in function 'rec' +\t...[string "traceback-test"]7: in function 'rec' +\t...[string "traceback-test"]7: in function 'rec' +\t...[string "traceback-test"]7: in function 'rec' +\t...[string "traceback-test"]7: in function 'rec' +\t...[string "traceback-test"]7: in function 'rec' +\t...[string "traceback-test"]7: in function 'rec' +\t...[string "traceback-test"]7: in function 'rec' +\t...[string "traceback-test"]7: in function 'rec' +\t...[string "traceback-test"]7: in function 'rec' +\t...[string "traceback-test"]7: in function 'rec' +\t...[string "traceback-test"]15: in main chunk`, + "Correct element(s) on the stack" + ); + +}); + + +test('debug.traceback (with a upvalue)', function (t) { + let luaCode = ` + local trace + local rec + + rec = function(n) + n = n or 0 + if n < 10 then + rec(n + 1) + else + trace = debug.traceback() + end + end + + rec() + + return trace + `, L; + + t.plan(3); + + t.doesNotThrow(function () { + + L = lauxlib.luaL_newstate(); + + linit.luaL_openlibs(L); + + luaCode = lua.to_luastring(luaCode); + lauxlib.luaL_loadbuffer(L, luaCode, luaCode.length, lua.to_luastring("traceback-test")); + + }, "Lua program loaded without error"); + + t.doesNotThrow(function () { + + lapi.lua_call(L, 0, -1); + + }, "Lua program ran without error"); + + t.strictEqual( + lapi.lua_tojsstring(L, -1), +`stack traceback: +\t...[string "traceback-test"]10: in upvalue 'rec' +\t...[string "traceback-test"]8: in upvalue 'rec' +\t...[string "traceback-test"]8: in upvalue 'rec' +\t...[string "traceback-test"]8: in upvalue 'rec' +\t...[string "traceback-test"]8: in upvalue 'rec' +\t...[string "traceback-test"]8: in upvalue 'rec' +\t...[string "traceback-test"]8: in upvalue 'rec' +\t...[string "traceback-test"]8: in upvalue 'rec' +\t...[string "traceback-test"]8: in upvalue 'rec' +\t...[string "traceback-test"]8: in upvalue 'rec' +\t...[string "traceback-test"]8: in local 'rec' +\t...[string "traceback-test"]16: in main chunk`, + "Correct element(s) on the stack" + ); + +}); |