mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
Merge #7842 'win: fnamemodify()'
This commit is contained in:
commit
b55f831678
@ -2202,7 +2202,13 @@ static int path_get_absolute_path(const char_u *fname, char_u *buf,
|
||||
|
||||
// expand it if forced or not an absolute path
|
||||
if (force || !path_is_absolute_path(fname)) {
|
||||
if ((p = vim_strrchr(fname, PATHSEP)) != NULL) {
|
||||
p = vim_strrchr(fname, '/');
|
||||
#ifdef WIN32
|
||||
if (p == NULL) {
|
||||
p = vim_strrchr(fname, '\\');
|
||||
}
|
||||
#endif
|
||||
if (p != NULL) {
|
||||
// relative to root
|
||||
if (p == fname) {
|
||||
// only one path component
|
||||
|
39
test/functional/eval/fnamemodify_spec.lua
Normal file
39
test/functional/eval/fnamemodify_spec.lua
Normal file
@ -0,0 +1,39 @@
|
||||
local helpers = require('test.functional.helpers')(after_each)
|
||||
local clear = helpers.clear
|
||||
local eq = helpers.eq
|
||||
local iswin = helpers.iswin
|
||||
local fnamemodify = helpers.funcs.fnamemodify
|
||||
local command = helpers.command
|
||||
local write_file = helpers.write_file
|
||||
|
||||
describe('fnamemodify()', function()
|
||||
setup(function()
|
||||
write_file('Xtest-fnamemodify.txt', [[foobar]])
|
||||
end)
|
||||
|
||||
before_each(clear)
|
||||
|
||||
teardown(function()
|
||||
os.remove('Xtest-fnamemodify.txt')
|
||||
end)
|
||||
|
||||
it('works', function()
|
||||
local root = helpers.pathroot()
|
||||
eq(root, fnamemodify([[/]], ':p:h'))
|
||||
eq(root, fnamemodify([[/]], ':p'))
|
||||
if iswin() then
|
||||
eq(root, fnamemodify([[\]], ':p:h'))
|
||||
eq(root, fnamemodify([[\]], ':p'))
|
||||
command('set shellslash')
|
||||
root = string.sub(root, 1, -2)..'/'
|
||||
eq(root, fnamemodify([[\]], ':p:h'))
|
||||
eq(root, fnamemodify([[\]], ':p'))
|
||||
eq(root, fnamemodify([[/]], ':p:h'))
|
||||
eq(root, fnamemodify([[/]], ':p'))
|
||||
end
|
||||
end)
|
||||
|
||||
it(':8 works', function()
|
||||
eq('Xtest-fnamemodify.txt', fnamemodify([[Xtest-fnamemodify.txt]], ':8'))
|
||||
end)
|
||||
end)
|
@ -4,8 +4,6 @@ local helpers = require('test.functional.helpers')(after_each)
|
||||
local clear, source = helpers.clear, helpers.source
|
||||
local call, eq, nvim = helpers.call, helpers.eq, helpers.meths
|
||||
|
||||
if helpers.pending_win32(pending) then return end
|
||||
|
||||
local function expected_empty()
|
||||
eq({}, nvim.get_vvar('errors'))
|
||||
end
|
||||
@ -16,17 +14,21 @@ describe('filename modifiers', function()
|
||||
|
||||
source([=[
|
||||
func Test_fnamemodify()
|
||||
let tmpdir = resolve('/tmp')
|
||||
if has('win32')
|
||||
set shellslash
|
||||
else
|
||||
set shell=sh
|
||||
endif
|
||||
let tmpdir = resolve($TMPDIR)
|
||||
call assert_true(isdirectory(tmpdir))
|
||||
execute 'cd '. tmpdir
|
||||
set shell=sh
|
||||
set shellslash
|
||||
let $HOME=fnamemodify('.', ':p:h:h:h')
|
||||
call assert_equal('/', fnamemodify('.', ':p')[-1:])
|
||||
call assert_equal('p', fnamemodify('.', ':p:h')[-1:])
|
||||
call assert_equal(tmpdir[strchars(tmpdir) - 1], fnamemodify('.', ':p:h')[-1:])
|
||||
call assert_equal('t', fnamemodify('test.out', ':p')[-1:])
|
||||
call assert_equal('test.out', fnamemodify('test.out', ':.'))
|
||||
call assert_equal('../testdir/a', fnamemodify('../testdir/a', ':.'))
|
||||
call assert_equal('test.out', fnamemodify('test.out', ':~'))
|
||||
call assert_equal(fnamemodify(tmpdir, ':~').'/test.out', fnamemodify('test.out', ':~'))
|
||||
call assert_equal('../testdir/a', fnamemodify('../testdir/a', ':~'))
|
||||
call assert_equal('a', fnamemodify('../testdir/a', ':t'))
|
||||
call assert_equal('', fnamemodify('.', ':p:t'))
|
||||
@ -53,8 +55,10 @@ describe('filename modifiers', function()
|
||||
quit
|
||||
|
||||
call assert_equal("'abc\ndef'", fnamemodify("abc\ndef", ':S'))
|
||||
set shell=tcsh
|
||||
call assert_equal("'abc\\\ndef'", fnamemodify("abc\ndef", ':S'))
|
||||
if executable('tcsh')
|
||||
set shell=tcsh
|
||||
call assert_equal("'abc\\\ndef'", fnamemodify("abc\ndef", ':S'))
|
||||
endif
|
||||
endfunc
|
||||
|
||||
func Test_expand()
|
||||
|
Loading…
Reference in New Issue
Block a user