mirror of
https://github.com/neovim/neovim.git
synced 2025-11-09 20:15:24 +00:00
Add unit tests for executable_file and mch_can_exe.
Caution: There is a pending test which should be implemented.
This commit is contained in:
committed by
Thiago de Arruda
parent
71ff9337d9
commit
1e5a6acebd
@@ -1,26 +1,44 @@
|
|||||||
{:cimport, :eq, :ffi} = require 'test.unit.helpers'
|
{:cimport, :eq, :ffi, :lib, :cstr} = require 'test.unit.helpers'
|
||||||
|
|
||||||
cstr = ffi.typeof 'char[?]'
|
-- os = cimport './src/os_unix.h'
|
||||||
os = cimport './src/os_unix.h'
|
os = lib
|
||||||
|
ffi.cdef [[
|
||||||
|
enum BOOLEAN {
|
||||||
|
TRUE = 1, FALSE = 0
|
||||||
|
};
|
||||||
|
int mch_isdir(char_u * name);
|
||||||
|
int executable_file(char_u *name);
|
||||||
|
int mch_can_exe(char_u *name);
|
||||||
|
]]
|
||||||
|
|
||||||
|
{:TRUE, :FALSE} = lib
|
||||||
|
|
||||||
describe 'os_unix function', ->
|
describe 'os_unix function', ->
|
||||||
|
setup ->
|
||||||
|
lfs.mkdir 'unit-test-directory'
|
||||||
|
lfs.touch 'unit-test-directory/test.file'
|
||||||
|
|
||||||
|
-- Since the tests are executed, they are called by an executable. We use
|
||||||
|
-- that to unit test several functions.
|
||||||
|
export absolute_executable = arg[0]
|
||||||
|
|
||||||
|
-- Split absolute_executable into a directory and the actual file name and
|
||||||
|
-- append the directory to $PATH.
|
||||||
|
export directory, executable = if (string.find absolute_executable, '/')
|
||||||
|
string.match(absolute_executable, '^(.*)/(.*)$')
|
||||||
|
else
|
||||||
|
string.match(absolute_executable, '^(.*)\\(.*)$')
|
||||||
|
|
||||||
|
package.path = package.path .. ';' .. directory
|
||||||
|
|
||||||
|
teardown ->
|
||||||
|
lfs.rmdir 'unit-test-directory'
|
||||||
|
|
||||||
describe 'mch_isdir', ->
|
describe 'mch_isdir', ->
|
||||||
TRUE = 1
|
|
||||||
FALSE = 0
|
|
||||||
|
|
||||||
ffi.cdef('int mch_isdir(char * name);')
|
|
||||||
|
|
||||||
mch_isdir = (name) ->
|
mch_isdir = (name) ->
|
||||||
name = cstr (string.len name), name
|
name = cstr (string.len name), name
|
||||||
os.mch_isdir(name)
|
os.mch_isdir(name)
|
||||||
|
|
||||||
setup ->
|
|
||||||
lfs.mkdir 'empty-test-directory'
|
|
||||||
lfs.touch 'empty-test-directory/test.file'
|
|
||||||
|
|
||||||
teardown ->
|
|
||||||
lfs.rmdir 'empty-test-directory'
|
|
||||||
|
|
||||||
it 'returns false if an empty string is given', ->
|
it 'returns false if an empty string is given', ->
|
||||||
eq FALSE, (mch_isdir '')
|
eq FALSE, (mch_isdir '')
|
||||||
|
|
||||||
@@ -36,5 +54,51 @@ describe 'os_unix function', ->
|
|||||||
it 'returns true if the parent directory is given', ->
|
it 'returns true if the parent directory is given', ->
|
||||||
eq TRUE, (mch_isdir '..')
|
eq TRUE, (mch_isdir '..')
|
||||||
|
|
||||||
it 'returns true if an newly created directory is given', ->
|
it 'returns true if an arbitrary directory is given', ->
|
||||||
eq TRUE, (mch_isdir 'empty-test-directory')
|
eq TRUE, (mch_isdir 'unit-test-directory')
|
||||||
|
|
||||||
|
describe 'executable_file', ->
|
||||||
|
executable_file = (name) ->
|
||||||
|
name = cstr (string.len name), name
|
||||||
|
os.executable_file name
|
||||||
|
|
||||||
|
it 'returns false when given a directory', ->
|
||||||
|
eq FALSE, (executable_file 'unit-test-directory')
|
||||||
|
|
||||||
|
it 'returns false when the given file does not exists', ->
|
||||||
|
eq FALSE, (executable_file 'does-not-exist.file')
|
||||||
|
|
||||||
|
it 'returns true when given an executable regular file', ->
|
||||||
|
eq TRUE, (executable_file absolute_executable)
|
||||||
|
|
||||||
|
it 'returns false when given a regular file without executable bit set', ->
|
||||||
|
-- This is a critical test since Windows does not have any executable
|
||||||
|
-- bit. Thus executable_file returns TRUE on every regular file on
|
||||||
|
-- Windows. This test must probably differentiate between Windows and
|
||||||
|
-- other systems, which have an executable bit.
|
||||||
|
pending 'Test executable_file with a regular file which is not
|
||||||
|
executable. Need a solution which also works on Windows.'
|
||||||
|
|
||||||
|
describe 'mch_can_exe', ->
|
||||||
|
mch_can_exe = (name) ->
|
||||||
|
name = cstr (string.len name), name
|
||||||
|
os.mch_can_exe name
|
||||||
|
|
||||||
|
it 'returns false when given a directory', ->
|
||||||
|
eq FALSE, (mch_can_exe 'unit-test-directory')
|
||||||
|
|
||||||
|
it 'returns true when given an executable in the current directory', ->
|
||||||
|
old_dir = lfs.currentdir!
|
||||||
|
lfs.chdir directory
|
||||||
|
eq TRUE, (mch_can_exe executable)
|
||||||
|
lfs.chdir old_dir
|
||||||
|
|
||||||
|
it 'returns true when given an executable inside $PATH', ->
|
||||||
|
eq TRUE, (mch_can_exe executable)
|
||||||
|
|
||||||
|
it 'returns true when given an executable relative to the current dir', ->
|
||||||
|
old_dir = lfs.currentdir!
|
||||||
|
lfs.chdir directory
|
||||||
|
relative_executable = './' .. executable
|
||||||
|
eq TRUE, (mch_can_exe relative_executable)
|
||||||
|
lfs.chdir old_dir
|
||||||
|
|||||||
Reference in New Issue
Block a user