From eb6651b7a936736be4b9572f7cfec1ac2f8aa07a Mon Sep 17 00:00:00 2001 From: James McCoy Date: Mon, 27 Feb 2017 11:49:51 -0500 Subject: vim-patch:7.4.1991 Problem: glob() does not add a symbolic link when there are no wildcards. Solution: Remove the call to mch_getperm(). https://github.com/vim/vim/commit/00efded1064427ab3f84e4d57af62e0aab876fc6 --- src/nvim/path.c | 2 +- src/nvim/version.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/nvim/path.c b/src/nvim/path.c index ea06fb8dde..dfcafc85de 100644 --- a/src/nvim/path.c +++ b/src/nvim/path.c @@ -1225,7 +1225,7 @@ int gen_expand_wildcards(int num_pat, char_u **pat, int *num_file, * "vim c:/" work. */ if (flags & EW_NOTFOUND) { addfile(&ga, t, flags | EW_DIR | EW_FILE); - } else if (os_path_exists(t)) { + } else { addfile(&ga, t, flags); } xfree(t); diff --git a/src/nvim/version.c b/src/nvim/version.c index fe443ce01f..9404bae711 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -449,7 +449,7 @@ static int included_patches[] = { // 1994, // 1993, // 1992, - // 1991, + 1991, 1990, 1989, // 1988 NA -- cgit From 2f5aee561e94703f09b8cb85dfd5a42b06153992 Mon Sep 17 00:00:00 2001 From: James McCoy Date: Mon, 27 Feb 2017 12:06:27 -0500 Subject: vim-patch:7.4.1992 Problem: Values for true and false can be confusing. Solution: Update the documentation. Add a test. Make v:true evaluate to TRUE for a non-zero-arg. https://github.com/vim/vim/commit/e381d3d5e098546854b008e01ca1d28ba1a4a057 --- src/nvim/eval.c | 12 ++-- src/nvim/testdir/test_alot.vim | 1 + src/nvim/testdir/test_true_false.vim | 125 +++++++++++++++++++++++++++++++++++ src/nvim/version.c | 2 +- 4 files changed, 134 insertions(+), 6 deletions(-) create mode 100644 src/nvim/testdir/test_true_false.vim (limited to 'src') diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 942a82a040..ab8f75d318 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -7715,11 +7715,13 @@ static void emsg_funcname(char *ermsg, char_u *name) */ static int non_zero_arg(typval_T *argvars) { - return (argvars[0].v_type == VAR_NUMBER - && argvars[0].vval.v_number != 0) - || (argvars[0].v_type == VAR_STRING - && argvars[0].vval.v_string != NULL - && *argvars[0].vval.v_string != NUL); + return ((argvars[0].v_type == VAR_NUMBER + && argvars[0].vval.v_number != 0) + || (argvars[0].v_type == VAR_SPECIAL + && argvars[0].vval.v_special == kSpecialVarTrue) + || (argvars[0].v_type == VAR_STRING + && argvars[0].vval.v_string != NULL + && *argvars[0].vval.v_string != NUL)); } /********************************************* diff --git a/src/nvim/testdir/test_alot.vim b/src/nvim/testdir/test_alot.vim index 04cc279619..3da9b82a9f 100644 --- a/src/nvim/testdir/test_alot.vim +++ b/src/nvim/testdir/test_alot.vim @@ -27,5 +27,6 @@ source test_tabline.vim source test_tabpage.vim source test_tagcase.vim source test_tagjump.vim +source test_true_false.vim source test_unlet.vim source test_window_cmd.vim diff --git a/src/nvim/testdir/test_true_false.vim b/src/nvim/testdir/test_true_false.vim new file mode 100644 index 0000000000..ab557b3fd8 --- /dev/null +++ b/src/nvim/testdir/test_true_false.vim @@ -0,0 +1,125 @@ +" Test behavior of boolean-like values. + +" Test what is explained at ":help TRUE" and ":help FALSE". +func Test_if() + if v:false + call assert_true(false, 'v:false is false') + endif + if 0 + call assert_true(false, 'zero is false') + endif + if "0" + call assert_true(false, 'zero string is false') + endif + if "foo" + call assert_true(false, 'foo is false') + endif + if " " + call assert_true(false, 'space is false') + endif + if empty("foo") + call assert_true(false, 'foo is not empty') + endif + + if v:true + else + call assert_true(false, 'v:true is true') + endif + if 1 + else + call assert_true(false, 'one is true') + endif + if "1" + else + call assert_true(false, 'one string is true') + endif + if "1foo" + else + call assert_true(false, 'one in string is true') + endif + + call assert_fails('if [1]', 'E745') + call assert_fails('if {1: 1}', 'E728') + call assert_fails('if function("string")', 'E703') + call assert_fails('if 1.3")', 'E805') +endfunc + +function Try_arg_true_false(expr, false_val, true_val) + for v in ['v:false', '0', '"0"', '"foo"', '" "'] + let r = eval(substitute(a:expr, '%v%', v, '')) + call assert_equal(a:false_val, r, 'result for ' . v . ' is not ' . string(a:false_val) . ' but ' . string(r)) + endfor + for v in ['v:true', '1', '"1"', '"1foo"'] + let r = eval(substitute(a:expr, '%v%', v, '')) + call assert_equal(a:true_val, r, 'result for ' . v . ' is not ' . string(a:true_val) . ' but ' . string(r)) + endfor +endfunc + +" Test using TRUE or FALSE values for an argument. +func Test_true_false_arg() + call Try_arg_true_false('count(["a", "A"], "a", %v%)', 1, 2) + + set wildignore=*.swp + call Try_arg_true_false('expand("foo.swp", %v%)', "", "foo.swp") + call Try_arg_true_false('expand("foo.vim", 0, %v%)', "foo.vim", ["foo.vim"]) + + call setreg('a', ['x', 'y']) + call Try_arg_true_false('getreg("a", 1, %v%)', "x\ny\n", ['x', 'y']) + + set wildignore=*.vim + call Try_arg_true_false('glob("runtest.vim", %v%)', "", "runtest.vim") + set wildignore=*.swp + call Try_arg_true_false('glob("runtest.vim", 0, %v%)', "runtest.vim", ["runtest.vim"]) + if has('unix') + silent !ln -s doesntexit Xlink + call Try_arg_true_false('glob("Xlink", 0, 0, %v%)', "", "Xlink") + silent !rm Xlink + endif + + set wildignore=*.vim + call Try_arg_true_false('globpath(".", "runtest.vim", %v%)', "", "./runtest.vim") + set wildignore=*.swp + call Try_arg_true_false('globpath(".", "runtest.vim", 0, %v%)', "./runtest.vim", ["./runtest.vim"]) + if has('unix') + silent !ln -s doesntexit Xlink + call Try_arg_true_false('globpath(".", "Xlink", 0, 0, %v%)', "", "./Xlink") + silent !rm Xlink + endif +endfunc + +function Try_arg_non_zero(expr, false_val, true_val) + for v in ['v:false', '0', '[1]', '{2:3}', '3.4'] + let r = eval(substitute(a:expr, '%v%', v, '')) + call assert_equal(a:false_val, r, 'result for ' . v . ' is not ' . a:false_val . ' but ' . r) + endfor + for v in ['v:true', '1', '" "', '"0"'] + let r = eval(substitute(a:expr, '%v%', v, '')) + call assert_equal(a:true_val, r, 'result for ' . v . ' is not ' . a:true_val . ' but ' . r) + endfor +endfunc + + +" Test using non-zero-arg for an argument. +func Test_non_zero_arg() + " call test_settime(93784) + " call Try_arg_non_zero("mode(%v%)", 'x', 'x!') + " call test_settime(0) + + call Try_arg_non_zero("shellescape('foo%', %v%)", "'foo%'", "'foo\\%'") + + " visualmode() needs to be called twice to check + for v in [v:false, 0, [1], {2:3}, 3.4] + normal vv + let r = visualmode(v) + call assert_equal('v', r, 'result for ' . string(v) . ' is not "v" but ' . r) + let r = visualmode(v) + call assert_equal('v', r, 'result for ' . string(v) . ' is not "v" but ' . r) + endfor + for v in [v:true, 1, " ", "0"] + normal vv + let r = visualmode(v) + call assert_equal('v', r, 'result for ' . v . ' is not "v" but ' . r) + let r = visualmode(v) + call assert_equal('', r, 'result for ' . v . ' is not "" but ' . r) + endfor +endfunc diff --git a/src/nvim/version.c b/src/nvim/version.c index 9404bae711..c007acba14 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -448,7 +448,7 @@ static int included_patches[] = { // 1995 NA // 1994, // 1993, - // 1992, + 1992, 1991, 1990, 1989, -- cgit From f863b23fd9aa53e65cd0e79957e9cfcff216af29 Mon Sep 17 00:00:00 2001 From: James McCoy Date: Mon, 27 Feb 2017 15:00:51 -0500 Subject: vim-patch:7.4.1993 Problem: Not all TRUE and FALSE arguments are tested. Solution: Add a few more tests. https://github.com/vim/vim/commit/6bb450145e96d7b182769fd9502a267da72667ec --- src/nvim/testdir/test_true_false.vim | 19 +++++++++++++++++++ src/nvim/version.c | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/nvim/testdir/test_true_false.vim b/src/nvim/testdir/test_true_false.vim index ab557b3fd8..c134693192 100644 --- a/src/nvim/testdir/test_true_false.vim +++ b/src/nvim/testdir/test_true_false.vim @@ -85,6 +85,25 @@ func Test_true_false_arg() call Try_arg_true_false('globpath(".", "Xlink", 0, 0, %v%)', "", "./Xlink") silent !rm Xlink endif + + abbr asdf asdff + call Try_arg_true_false('hasmapto("asdff", "i", %v%)', 0, 1) + + call Try_arg_true_false('index(["a", "A"], "A", 0, %v%)', 1, 0) + + call Try_arg_true_false('maparg("asdf", "i", %v%)', "", "asdff") + call Try_arg_true_false('maparg("asdf", "i", 1, %v%)', "asdff", {'silent': 0, 'noremap': 0, 'lhs': 'asdf', 'mode': '!', 'nowait': 0, 'expr': 0, 'sid': 3, 'rhs': 'asdff', 'buffer': 0}) + + call Try_arg_true_false('hasmapto("asdf", "i", %v%)', 0, 1) + + new colored + call setline(1, '') + syn match brackets "<.*>" + syn match here "here" transparent + let brackets_id = synID(1, 1, 0) + let here_id = synID(1, 3, 0) + call Try_arg_true_false('synID(1, 3, %v%)', here_id, brackets_id) + bwipe! endfunc function Try_arg_non_zero(expr, false_val, true_val) diff --git a/src/nvim/version.c b/src/nvim/version.c index c007acba14..042c41df76 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -447,7 +447,7 @@ static int included_patches[] = { 1996, // 1995 NA // 1994, - // 1993, + 1993, 1992, 1991, 1990, -- cgit From 1fa6d95c67852b7f3c9cba06ca4bc48620f344db Mon Sep 17 00:00:00 2001 From: James McCoy Date: Mon, 27 Feb 2017 15:05:03 -0500 Subject: vim-patch:7.4.1994 Problem: True-false test fails. Solution: Filter the dict to only keep the value that matters. https://github.com/vim/vim/commit/05e418d436410cd8bbf5a29ff81e8ad68408b1e8 --- src/nvim/testdir/test_true_false.vim | 8 +++++++- src/nvim/version.c | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/nvim/testdir/test_true_false.vim b/src/nvim/testdir/test_true_false.vim index c134693192..84aca737ac 100644 --- a/src/nvim/testdir/test_true_false.vim +++ b/src/nvim/testdir/test_true_false.vim @@ -91,8 +91,14 @@ func Test_true_false_arg() call Try_arg_true_false('index(["a", "A"], "A", 0, %v%)', 1, 0) + function FilterMapArg(d) + if type(a:d) == type({}) + return filter(a:d, 'v:key == "rhs"') + endif + return a:d + endfunction call Try_arg_true_false('maparg("asdf", "i", %v%)', "", "asdff") - call Try_arg_true_false('maparg("asdf", "i", 1, %v%)', "asdff", {'silent': 0, 'noremap': 0, 'lhs': 'asdf', 'mode': '!', 'nowait': 0, 'expr': 0, 'sid': 3, 'rhs': 'asdff', 'buffer': 0}) + call Try_arg_true_false('FilterMapArg(maparg("asdf", "i", 1, %v%))', "asdff", {'rhs': 'asdff'}) call Try_arg_true_false('hasmapto("asdf", "i", %v%)', 0, 1) diff --git a/src/nvim/version.c b/src/nvim/version.c index 042c41df76..d95c62ef01 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -446,7 +446,7 @@ static int included_patches[] = { 1997, 1996, // 1995 NA - // 1994, + 1994, 1993, 1992, 1991, -- cgit