summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenoit Giannangeli <giann008@gmail.com>2017-05-02 09:08:07 +0200
committerBenoit Giannangeli <giann008@gmail.com>2017-05-02 09:08:07 +0200
commit6775b78235bfa4bc0fcd2c44a1810d8d9fc61b69 (patch)
treecf40e9a4f9b15f77c330417cc15cefa1034880d0
parent1555ac83db824b2cb349ea22b2b7ab797ff9859b (diff)
downloadfengari-6775b78235bfa4bc0fcd2c44a1810d8d9fc61b69.tar.gz
fengari-6775b78235bfa4bc0fcd2c44a1810d8d9fc61b69.tar.bz2
fengari-6775b78235bfa4bc0fcd2c44a1810d8d9fc61b69.zip
Fixed os.time(format)
-rw-r--r--src/loslib.js10
-rw-r--r--tests/loslib.js33
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()