aboutsummaryrefslogtreecommitdiff
path: root/tests/ldblib.js
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ldblib.js')
-rw-r--r--tests/ldblib.js117
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"
+ );
+
+});