diff options
-rw-r--r-- | README.md | 2 | ||||
-rw-r--r-- | src/loslib.js | 8 | ||||
-rw-r--r-- | tests/loslib.js | 31 |
3 files changed, 39 insertions, 2 deletions
@@ -25,6 +25,7 @@ - [ ] Package - [ ] os - [x] `os.exit()` + - [x] `os.getenv()` - [x] `os.remove()` - [x] `os.rename()` - [x] `os.time()` @@ -33,7 +34,6 @@ - [ ] `os.date()` - [ ] `os.difftime()` - [ ] `os.execute()` - - [ ] `os.getenv()` - [ ] `os.setlocale()` - [ ] io - [ ] `io.stdin` diff --git a/src/loslib.js b/src/loslib.js index aa868f5..1cc7d84 100644 --- a/src/loslib.js +++ b/src/loslib.js @@ -67,7 +67,7 @@ const syslib = { }; // Only with Node -if (process && process.exit) { +if (process && process.exit && process.env) { const os_exit = function(L) { let status; if (lua.lua_isboolean(L, 1)) @@ -80,7 +80,13 @@ if (process && process.exit) { return 0; }; + const os_getenv = function(L) { + lua.lua_pushliteral(L, process.env[lua.to_jsstring(lauxlib.luaL_checkstring(L, 1))]); /* if NULL push nil */ + return 1; + }; + syslib.exit = os_exit; + syslib.getenv = os_getenv; } diff --git a/tests/loslib.js b/tests/loslib.js index 968a338..c460919 100644 --- a/tests/loslib.js +++ b/tests/loslib.js @@ -34,3 +34,34 @@ test('os.time', function (t) { ); }); + + +test('os.getenv', function (t) { + let luaCode = ` + return os.getenv('HOME') + `, 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.ok( + lua.lua_isstring(L, -1), + "Correct element(s) on the stack" + ); + +}); |