From 6775b78235bfa4bc0fcd2c44a1810d8d9fc61b69 Mon Sep 17 00:00:00 2001 From: Benoit Giannangeli Date: Tue, 2 May 2017 09:08:07 +0200 Subject: Fixed os.time(format) --- src/loslib.js | 10 +++++----- tests/loslib.js | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/src/loslib.js b/src/loslib.js index c7f2c13..854e51e 100644 --- a/src/loslib.js +++ b/src/loslib.js @@ -6,7 +6,7 @@ const llimit = require('./llimit.js'); const setfield = function(L, key, value) { lua.lua_pushinteger(L, value); - lua.lua_setfield(L, -2, key); + lua.lua_setfield(L, -2, lua.to_luastring(key, true)); }; const setallfields = function(L, time) { @@ -25,10 +25,10 @@ const setallfields = function(L, time) { const L_MAXDATEFIELD = (llimit.MAX_INT / 2); const getfield = function(L, key, d, delta) { - let t = lua.lua_getfield(L, -1, lua.to_luastring(key)); /* get field and its type */ + let t = lua.lua_getfield(L, -1, lua.to_luastring(key, true)); /* get field and its type */ let res = lua.lua_tointegerx(L, -1); - if (res !== false) { /* field is not an integer? */ - if (t != lua.LUA_TNIL) /* some other value? */ + if (res === false) { /* field is not an integer? */ + if (t !== lua.LUA_TNIL) /* some other value? */ return lauxlib.luaL_error(L, lua.to_luastring(`field '${key}' is not an integer`), true); else if (d < 0) /* absent field; no default? */ return lauxlib.luaL_error(L, lua.to_luastring(`field '${key}' missing in date table`), true); @@ -53,7 +53,7 @@ const os_time = function(L) { t.setHours(getfield(L, "hour", 12, 0)); t.setDate(getfield(L, "day", -1, 0)); t.setMonth(getfield(L, "month", -1, 1)); - t.setFullYear(getfield(L, "year", -1, 1900)); + t.setFullYear(getfield(L, "year", -1, 0)); setallfields(L, t); } diff --git a/tests/loslib.js b/tests/loslib.js index 56c0bbd..36a22e2 100644 --- a/tests/loslib.js +++ b/tests/loslib.js @@ -35,6 +35,39 @@ test('os.time', function (t) { }); + +test('os.time (with format)', function (t) { + let luaCode = ` + return os.time({day=8,month=2,year=2015}) + `, L; + + t.plan(3); + + t.doesNotThrow(function () { + + L = lauxlib.luaL_newstate(); + + lauxlib.luaL_openlibs(L); + + lauxlib.luaL_loadstring(L, lua.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_tointeger(L, -1), + 1423393200, + "Correct element(s) on the stack" + ); + +}); + + test('os.difftime', function (t) { let luaCode = ` local t1 = os.time() -- cgit v1.2.3-70-g09d2