Merge #7842 'win: fnamemodify()'

This commit is contained in:
Justin M. Keyes 2018-01-29 22:56:35 +01:00 committed by GitHub
commit b55f831678
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 59 additions and 10 deletions

View File

@ -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

View 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)

View File

@ -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()