mirror of
https://github.com/neovim/neovim.git
synced 2024-12-20 03:05:11 -07:00
Move and adapt os_get_absolute_path
unit tests to vim_FullName
* Add two new unit tests to `vim_FullName` * Make `os_get_absolute_path` static
This commit is contained in:
parent
4348d1e6f7
commit
aa7218b646
10
src/path.c
10
src/path.c
@ -30,6 +30,7 @@
|
||||
#define URL_SLASH 1 /* path_is_url() has found "://" */
|
||||
#define URL_BACKSLASH 2 /* path_is_url() has found ":\\" */
|
||||
|
||||
static int os_get_absolute_path(char_u *fname, char_u *buf, int len, int force);
|
||||
static bool is_executable(const char_u *name);
|
||||
static bool is_executable_in_path(const char_u *name);
|
||||
|
||||
@ -2023,7 +2024,14 @@ int append_path(char *path, const char *to_append, int max_len)
|
||||
return OK;
|
||||
}
|
||||
|
||||
int os_get_absolute_path(char_u *fname, char_u *buf, int len, int force)
|
||||
/// Expand a given file to its absolute path.
|
||||
///
|
||||
/// @param fname The filename which should be expanded.
|
||||
/// @param buf Buffer to store the absolute path of `fname`.
|
||||
/// @param len Length of `buf`.
|
||||
/// @param force Also expand when `fname` is already absolute.
|
||||
/// @return `FAIL` for failure, `OK` for success.
|
||||
static int os_get_absolute_path(char_u *fname, char_u *buf, int len, int force)
|
||||
{
|
||||
char_u *p;
|
||||
*buf = NUL;
|
||||
|
@ -97,15 +97,6 @@ int os_full_dir_name(char *directory, char *buffer, int len);
|
||||
// Append to_append to path with a slash in between.
|
||||
int append_path(char *path, const char *to_append, int max_len);
|
||||
|
||||
/// Expand a given file to its absolute path.
|
||||
///
|
||||
/// @param fname The filename which should be expanded.
|
||||
/// @param buf Buffer to store the absolute path of `fname`.
|
||||
/// @param len Length of `buf`.
|
||||
/// @param force Also expand when `fname` is already absolute.
|
||||
/// @return `FAIL` for failure, `OK` for success.
|
||||
int os_get_absolute_path(char_u *fname, char_u *buf, int len, int force);
|
||||
|
||||
/// Check if the given file is absolute.
|
||||
///
|
||||
/// This just checks if the file name starts with '/' or '~'.
|
||||
|
@ -105,7 +105,7 @@ describe 'path function', ->
|
||||
it 'returns empty string if given file contains no seperator', ->
|
||||
eq '', path_next_component 'file.txt'
|
||||
|
||||
describe 'former os function', ->
|
||||
describe 'more path function', ->
|
||||
setup ->
|
||||
lfs.mkdir 'unit-test-directory'
|
||||
(io.open 'unit-test-directory/test.file', 'w').close!
|
||||
@ -122,26 +122,40 @@ describe 'former os function', ->
|
||||
os.remove 'unit-test-directory/test.file'
|
||||
lfs.rmdir 'unit-test-directory'
|
||||
|
||||
describe 'os_get_absolute_path', ->
|
||||
ffi.cdef 'int os_get_absolute_path(char *fname, char *buf, int len, int force);'
|
||||
describe 'vim_FullName', ->
|
||||
ffi.cdef 'int vim_FullName(char *fname, char *buf, int len, int force);'
|
||||
|
||||
os_get_absolute_path = (filename, buffer, length, force) ->
|
||||
vim_FullName = (filename, buffer, length, force) ->
|
||||
filename = to_cstr filename
|
||||
path.os_get_absolute_path filename, buffer, length, force
|
||||
path.vim_FullName filename, buffer, length, force
|
||||
|
||||
before_each ->
|
||||
-- Create empty string buffer which will contain the resulting path.
|
||||
export len = (string.len lfs.currentdir!) + 33
|
||||
export buffer = cstr len, ''
|
||||
|
||||
it 'fails if given filename contains non-existing directory', ->
|
||||
it 'fails if given filename is NULL', ->
|
||||
force_expansion = 1
|
||||
result = os_get_absolute_path 'non_existing_dir/test.file', buffer, len, force_expansion
|
||||
result = path.vim_FullName NULL, buffer, len, force_expansion
|
||||
eq FAIL, result
|
||||
|
||||
it 'uses the filename if the filename is a URL', ->
|
||||
force_expansion = 1
|
||||
filename = 'http://www.neovim.org'
|
||||
result = vim_FullName filename, buffer, len, force_expansion
|
||||
eq filename, (ffi.string buffer)
|
||||
eq OK, result
|
||||
|
||||
it 'fails and uses filename if given filename contains non-existing directory', ->
|
||||
force_expansion = 1
|
||||
filename = 'non_existing_dir/test.file'
|
||||
result = vim_FullName filename, buffer, len, force_expansion
|
||||
eq filename, (ffi.string buffer)
|
||||
eq FAIL, result
|
||||
|
||||
it 'concatenates given filename if it does not contain a slash', ->
|
||||
force_expansion = 1
|
||||
result = os_get_absolute_path 'test.file', buffer, len, force_expansion
|
||||
result = vim_FullName 'test.file', buffer, len, force_expansion
|
||||
expected = lfs.currentdir! .. '/test.file'
|
||||
eq expected, (ffi.string buffer)
|
||||
eq OK, result
|
||||
@ -149,7 +163,7 @@ describe 'former os function', ->
|
||||
it 'concatenates given filename if it is a directory but does not contain a
|
||||
slash', ->
|
||||
force_expansion = 1
|
||||
result = os_get_absolute_path '..', buffer, len, force_expansion
|
||||
result = vim_FullName '..', buffer, len, force_expansion
|
||||
expected = lfs.currentdir! .. '/..'
|
||||
eq expected, (ffi.string buffer)
|
||||
eq OK, result
|
||||
@ -159,7 +173,7 @@ describe 'former os function', ->
|
||||
it 'enters given directory (instead of just concatenating the strings) if
|
||||
possible and if path contains a slash', ->
|
||||
force_expansion = 1
|
||||
result = os_get_absolute_path '../test.file', buffer, len, force_expansion
|
||||
result = vim_FullName '../test.file', buffer, len, force_expansion
|
||||
old_dir = lfs.currentdir!
|
||||
lfs.chdir '..'
|
||||
expected = lfs.currentdir! .. '/test.file'
|
||||
@ -170,19 +184,20 @@ describe 'former os function', ->
|
||||
it 'just copies the path if it is already absolute and force=0', ->
|
||||
force_expansion = 0
|
||||
absolute_path = '/absolute/path'
|
||||
result = os_get_absolute_path absolute_path, buffer, len, force_expansion
|
||||
result = vim_FullName absolute_path, buffer, len, force_expansion
|
||||
eq absolute_path, (ffi.string buffer)
|
||||
eq OK, result
|
||||
|
||||
it 'fails when the path is relative to HOME', ->
|
||||
it 'fails and uses filename when the path is relative to HOME', ->
|
||||
force_expansion = 1
|
||||
absolute_path = '~/home.file'
|
||||
result = os_get_absolute_path absolute_path, buffer, len, force_expansion
|
||||
result = vim_FullName absolute_path, buffer, len, force_expansion
|
||||
eq absolute_path, (ffi.string buffer)
|
||||
eq FAIL, result
|
||||
|
||||
it 'works with some "normal" relative path with directories', ->
|
||||
force_expansion = 1
|
||||
result = os_get_absolute_path 'unit-test-directory/test.file', buffer, len, force_expansion
|
||||
result = vim_FullName 'unit-test-directory/test.file', buffer, len, force_expansion
|
||||
eq OK, result
|
||||
eq lfs.currentdir! .. '/unit-test-directory/test.file', (ffi.string buffer)
|
||||
|
||||
@ -191,7 +206,7 @@ describe 'former os function', ->
|
||||
filename = to_cstr 'unit-test-directory/test.file'
|
||||
-- Don't use the wrapper here but pass a cstring directly to the c
|
||||
-- function.
|
||||
result = path.os_get_absolute_path filename, buffer, len, force_expansion
|
||||
result = path.vim_FullName filename, buffer, len, force_expansion
|
||||
eq lfs.currentdir! .. '/unit-test-directory/test.file', (ffi.string buffer)
|
||||
eq 'unit-test-directory/test.file', (ffi.string filename)
|
||||
eq OK, result
|
||||
@ -211,7 +226,7 @@ describe 'former os function', ->
|
||||
eq OK, path.append_path path1, to_append, 100
|
||||
eq "path1/path2", (ffi.string path1)
|
||||
|
||||
it 'fails if there is not enough space left for to_append', ->
|
||||
it 'fails and uses filename if there is not enough space left for to_append', ->
|
||||
path1 = cstr 11, 'path1/'
|
||||
to_append = to_cstr 'path2'
|
||||
eq FAIL, (path.append_path path1, to_append, 11)
|
||||
|
Loading…
Reference in New Issue
Block a user