diff options
Diffstat (limited to 'test/unit/os/users_spec.moon')
-rw-r--r-- | test/unit/os/users_spec.moon | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/test/unit/os/users_spec.moon b/test/unit/os/users_spec.moon new file mode 100644 index 0000000000..d6b618eb8c --- /dev/null +++ b/test/unit/os/users_spec.moon @@ -0,0 +1,74 @@ +{:cimport, :internalize, :eq, :ffi, :lib, :cstr} = require 'test.unit.helpers' + +users = cimport './src/nvim/os/os.h', 'unistd.h' + +NULL = ffi.cast 'void*', 0 +OK = 1 +FAIL = 0 + +garray_new = () -> + ffi.new 'garray_T[1]' + +garray_get_len = (array) -> + array[0].ga_len + +garray_get_item = (array, index) -> + (ffi.cast 'void **', array[0].ga_data)[index] + + +describe 'users function', -> + + -- will probably not work on windows + current_username = os.getenv 'USER' + + describe 'os_get_usernames', -> + + it 'returns FAIL if called with NULL', -> + eq FAIL, users.os_get_usernames NULL + + it 'fills the names garray with os usernames and returns OK', -> + ga_users = garray_new! + eq OK, users.os_get_usernames ga_users + user_count = garray_get_len ga_users + assert.is_true user_count > 0 + current_username_found = false + for i = 0, user_count - 1 + name = ffi.string (garray_get_item ga_users, i) + if name == current_username + current_username_found = true + assert.is_true current_username_found + + describe 'os_get_user_name', -> + + it 'should write the username into the buffer and return OK', -> + name_out = ffi.new 'char[100]' + eq OK, users.os_get_user_name(name_out, 100) + eq current_username, ffi.string name_out + + describe 'os_get_uname', -> + + it 'should write the username into the buffer and return OK', -> + name_out = ffi.new 'char[100]' + user_id = lib.getuid! + eq OK, users.os_get_uname(user_id, name_out, 100) + eq current_username, ffi.string name_out + + it 'should FAIL if the userid is not found', -> + name_out = ffi.new 'char[100]' + -- hoping nobody has this uid + user_id = 2342 + eq FAIL, users.os_get_uname(user_id, name_out, 100) + eq '2342', ffi.string name_out + + describe 'os_get_user_directory', -> + + it 'should return NULL if called with NULL', -> + eq NULL, users.os_get_user_directory NULL + + it 'should return $HOME for the current user', -> + home = os.getenv('HOME') + eq home, ffi.string (users.os_get_user_directory current_username) + + it 'should return NULL if the user is not found', -> + eq NULL, users.os_get_user_directory 'neovim_user_not_found_test' + |