"use strict"; const test = require('tape'); const lua = require('../src/lua.js'); const lauxlib = require('../src/lauxlib.js'); const lualib = require('../src/lualib.js'); const {to_luastring} = require("../src/fengaricore.js"); test('require an existing module', function (t) { let luaCode = ` return require('os') `, L; t.plan(3); t.doesNotThrow(function () { L = lauxlib.luaL_newstate(); lualib.luaL_openlibs(L); lauxlib.luaL_loadstring(L, to_luastring(luaCode)); }, "Lua program loaded without error"); t.doesNotThrow(function () { lua.lua_call(L, 0, -1); }, "Lua program ran without error"); t.ok( lua.lua_istable(L, -1), "Correct element(s) on the stack" ); }); test('require a file', function (t) { let luaCode = ` return require('tests/module-hello')() `, L; t.plan(3); t.doesNotThrow(function () { L = lauxlib.luaL_newstate(); lualib.luaL_openlibs(L); lauxlib.luaL_loadstring(L, to_luastring(luaCode)); }, "Lua program loaded without error"); t.doesNotThrow(function () { lua.lua_call(L, 0, -1); }, "Lua program ran without error"); t.strictEqual( lua.lua_tojsstring(L, -1), "hello from module", "Correct element(s) on the stack" ); }); test('package.loadlib', function (t) { let luaCode = ` return package.loadlib('./tests/lib-hello.js.mod', 'hello')() `, L; t.plan(3); t.doesNotThrow(function () { L = lauxlib.luaL_newstate(); lualib.luaL_openlibs(L); lauxlib.luaL_loadstring(L, to_luastring(luaCode)); }, "Lua program loaded without error"); t.doesNotThrow(function () { lua.lua_call(L, 0, -1); }, "Lua program ran without error"); t.strictEqual( lua.lua_tojsstring(L, -1), "hello from js lib", "Correct element(s) on the stack" ); }); test('package.searchpath', function (t) { let luaCode = ` return package.searchpath('module-hello', './?.lua;./tests/?.lua') `, L; t.plan(3); t.doesNotThrow(function () { L = lauxlib.luaL_newstate(); lualib.luaL_openlibs(L); lauxlib.luaL_loadstring(L, to_luastring(luaCode)); }, "Lua program loaded without error"); t.doesNotThrow(function () { lua.lua_call(L, 0, -1); }, "Lua program ran without error"); t.strictEqual( lua.lua_tojsstring(L, -1), "./tests/module-hello.lua", "Correct element(s) on the stack" ); });