Files
neovim/test/unit/os/env.moon
Thomas Wienecke ab0c96187c Fix bugs, clean code, add tests.
* Add const specifiers, update comments, add assert.
* Move os_unix.moon tests to os/fs.moon + clean tests.
* Add uv_fs_req_cleanup call.
* Add tests with absolute paths to mch_isdir.
* Add to_cstr to test/unit/helpers.moon and fix respective unit tests.
2014-03-07 17:30:39 -03:00

93 lines
2.9 KiB
Plaintext

{:cimport, :internalize, :eq, :ffi, :lib, :cstr, :to_cstr} = require 'test.unit.helpers'
require 'lfs'
-- fs = cimport './src/os/os.h'
-- remove these statements once 'cimport' is working properly for misc1.h
env = lib
ffi.cdef [[
const char *mch_getenv(const char *name);
int mch_setenv(const char *name, const char *value, int override);
char *mch_getenvname_at_index(size_t index);
]]
NULL = ffi.cast 'void*', 0
describe 'env function', ->
mch_setenv = (name, value, override) ->
env.mch_setenv (to_cstr name), (to_cstr value), override
mch_getenv = (name) ->
rval = env.mch_getenv (to_cstr name)
if rval != NULL
ffi.string rval
else
NULL
describe 'mch_setenv', ->
OK = 0
it 'sets an env variable and returns OK', ->
name = 'NEOVIM_UNIT_TEST_SETENV_1N'
value = 'NEOVIM_UNIT_TEST_SETENV_1V'
eq nil, os.getenv name
eq OK, (mch_setenv name, value, 1)
eq value, os.getenv name
it "dosn't overwrite an env variable if overwrite is 0", ->
name = 'NEOVIM_UNIT_TEST_SETENV_2N'
value = 'NEOVIM_UNIT_TEST_SETENV_2V'
value_updated = 'NEOVIM_UNIT_TEST_SETENV_2V_UPDATED'
eq OK, (mch_setenv name, value, 0)
eq value, os.getenv name
eq OK, (mch_setenv name, value_updated, 0)
eq value, os.getenv name
describe 'mch_getenv', ->
it 'reads an env variable', ->
name = 'NEOVIM_UNIT_TEST_GETENV_1N'
value = 'NEOVIM_UNIT_TEST_GETENV_1V'
eq NULL, mch_getenv name
-- need to use mch_setenv, because lua dosn't have a setenv function
mch_setenv name, value, 1
eq value, mch_getenv name
it 'returns NULL if the env variable is not found', ->
name = 'NEOVIM_UNIT_TEST_GETENV_NOTFOUND'
eq NULL, mch_getenv name
describe 'mch_getenvname_at_index', ->
it 'returns names of environment variables', ->
test_name = 'NEOVIM_UNIT_TEST_GETENVNAME_AT_INDEX_1N'
test_value = 'NEOVIM_UNIT_TEST_GETENVNAME_AT_INDEX_1V'
mch_setenv test_name, test_value, 1
i = 0
names = {}
found_name = false
name = env.mch_getenvname_at_index i
while name != NULL
table.insert names, ffi.string name
if (ffi.string name) == test_name
found_name = true
i += 1
name = env.mch_getenvname_at_index i
eq true, (table.getn names) > 0
eq true, found_name
it 'returns NULL if the index is out of bounds', ->
huge = ffi.new 'size_t', 10000
maxuint32 = ffi.new 'size_t', 4294967295
eq NULL, env.mch_getenvname_at_index huge
eq NULL, env.mch_getenvname_at_index maxuint32
if ffi.abi '64bit'
-- couldn't use a bigger number because it gets converted to
-- double somewere, should be big enough anyway
-- maxuint64 = ffi.new 'size_t', 18446744073709551615
maxuint64 = ffi.new 'size_t', 18446744073709000000
eq NULL, env.mch_getenvname_at_index maxuint64