mirror of
https://github.com/neovim/neovim.git
synced 2025-09-16 16:28:17 +00:00
93 lines
2.9 KiB
Plaintext
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 *os_getenv(const char *name);
|
|
int os_setenv(const char *name, const char *value, int override);
|
|
char *os_getenvname_at_index(size_t index);
|
|
]]
|
|
|
|
NULL = ffi.cast 'void*', 0
|
|
|
|
describe 'env function', ->
|
|
|
|
os_setenv = (name, value, override) ->
|
|
env.os_setenv (to_cstr name), (to_cstr value), override
|
|
|
|
os_getenv = (name) ->
|
|
rval = env.os_getenv (to_cstr name)
|
|
if rval != NULL
|
|
ffi.string rval
|
|
else
|
|
NULL
|
|
|
|
describe 'os_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, (os_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, (os_setenv name, value, 0)
|
|
eq value, os.getenv name
|
|
eq OK, (os_setenv name, value_updated, 0)
|
|
eq value, os.getenv name
|
|
|
|
describe 'os_getenv', ->
|
|
|
|
it 'reads an env variable', ->
|
|
name = 'NEOVIM_UNIT_TEST_GETENV_1N'
|
|
value = 'NEOVIM_UNIT_TEST_GETENV_1V'
|
|
eq NULL, os_getenv name
|
|
-- need to use os_setenv, because lua dosn't have a setenv function
|
|
os_setenv name, value, 1
|
|
eq value, os_getenv name
|
|
|
|
it 'returns NULL if the env variable is not found', ->
|
|
name = 'NEOVIM_UNIT_TEST_GETENV_NOTFOUND'
|
|
eq NULL, os_getenv name
|
|
|
|
describe 'os_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'
|
|
os_setenv test_name, test_value, 1
|
|
i = 0
|
|
names = {}
|
|
found_name = false
|
|
name = env.os_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.os_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.os_getenvname_at_index huge
|
|
eq NULL, env.os_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.os_getenvname_at_index maxuint64
|
|
|