1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
{:cimport, :internalize, :eq, :ffi, :lib, :cstr, :to_cstr, :NULL} = require 'test.unit.helpers'
require 'lfs'
env = cimport './src/nvim/os/os.h'
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
describe 'os_get_pid', ->
it 'returns the process ID', ->
stat_file = io.open '/proc/self/stat'
if stat_file
stat_str = stat_file\read '*l'
stat_file\close!
pid = tonumber (stat_str\match '%d+')
eq pid, tonumber env.os_get_pid!
else
-- /proc is not available on all systems, test if pid is nonzero.
eq true, (env.os_get_pid! > 0)
describe 'os_get_hostname', ->
it 'returns the hostname', ->
handle = io.popen 'hostname'
hostname = handle\read '*l'
handle\close!
hostname_buf = cstr 255, ''
env.os_get_hostname hostname_buf, 255
eq hostname, (ffi.string hostname_buf)
|