1f0ab01f6SBram Moolenaar" Tests for the :checkpath command 2f0ab01f6SBram Moolenaar 3f0ab01f6SBram Moolenaar" Test for 'include' without \zs or \ze 4f0ab01f6SBram Moolenaarfunc Test_checkpath1() 5f0ab01f6SBram Moolenaar call mkdir("Xdir1/dir2", "p") 6f0ab01f6SBram Moolenaar call writefile(['#include "bar.a"'], 'Xdir1/dir2/foo.a') 7f0ab01f6SBram Moolenaar call writefile(['#include "baz.a"'], 'Xdir1/dir2/bar.a') 8f0ab01f6SBram Moolenaar call writefile(['#include "foo.a"'], 'Xdir1/dir2/baz.a') 9f0ab01f6SBram Moolenaar call writefile(['#include <foo.a>'], 'Xbase.a') 10f0ab01f6SBram Moolenaar 11f0ab01f6SBram Moolenaar edit Xbase.a 12f0ab01f6SBram Moolenaar set path=Xdir1/dir2 13f0ab01f6SBram Moolenaar let res = split(execute("checkpath!"), "\n") 14f0ab01f6SBram Moolenaar call assert_equal([ 15f0ab01f6SBram Moolenaar \ '--- Included files in path ---', 16f0ab01f6SBram Moolenaar \ 'Xdir1/dir2/foo.a', 17f0ab01f6SBram Moolenaar \ 'Xdir1/dir2/foo.a -->', 18f0ab01f6SBram Moolenaar \ ' Xdir1/dir2/bar.a', 19f0ab01f6SBram Moolenaar \ ' Xdir1/dir2/bar.a -->', 20f0ab01f6SBram Moolenaar \ ' Xdir1/dir2/baz.a', 21f0ab01f6SBram Moolenaar \ ' Xdir1/dir2/baz.a -->', 22f0ab01f6SBram Moolenaar \ ' "foo.a" (Already listed)'], res) 23f0ab01f6SBram Moolenaar 24f0ab01f6SBram Moolenaar enew 25f0ab01f6SBram Moolenaar call delete("./Xbase.a") 26f0ab01f6SBram Moolenaar call delete("Xdir1", "rf") 27f0ab01f6SBram Moolenaar set path& 28f0ab01f6SBram Moolenaarendfunc 29f0ab01f6SBram Moolenaar 30f0ab01f6SBram Moolenaarfunc DotsToSlashes() 31f0ab01f6SBram Moolenaar return substitute(v:fname, '\.', '/', 'g') . '.b' 32f0ab01f6SBram Moolenaarendfunc 33f0ab01f6SBram Moolenaar 34f0ab01f6SBram Moolenaar" Test for 'include' with \zs and \ze 35f0ab01f6SBram Moolenaarfunc Test_checkpath2() 36f0ab01f6SBram Moolenaar call mkdir("Xdir1/dir2", "p") 37f0ab01f6SBram Moolenaar call writefile(['%inc /bar/'], 'Xdir1/dir2/foo.b') 38f0ab01f6SBram Moolenaar call writefile(['%inc /baz/'], 'Xdir1/dir2/bar.b') 39f0ab01f6SBram Moolenaar call writefile(['%inc /foo/'], 'Xdir1/dir2/baz.b') 40f0ab01f6SBram Moolenaar call writefile(['%inc /foo/'], 'Xbase.b') 41f0ab01f6SBram Moolenaar 42f0ab01f6SBram Moolenaar let &include='^\s*%inc\s*/\zs[^/]\+\ze' 43f0ab01f6SBram Moolenaar let &includeexpr='DotsToSlashes()' 44f0ab01f6SBram Moolenaar 45f0ab01f6SBram Moolenaar edit Xbase.b 46f0ab01f6SBram Moolenaar set path=Xdir1/dir2 47f0ab01f6SBram Moolenaar let res = split(execute("checkpath!"), "\n") 48f0ab01f6SBram Moolenaar call assert_equal([ 49f0ab01f6SBram Moolenaar \ '--- Included files in path ---', 50f0ab01f6SBram Moolenaar \ 'Xdir1/dir2/foo.b', 51f0ab01f6SBram Moolenaar \ 'Xdir1/dir2/foo.b -->', 52f0ab01f6SBram Moolenaar \ ' Xdir1/dir2/bar.b', 53f0ab01f6SBram Moolenaar \ ' Xdir1/dir2/bar.b -->', 54f0ab01f6SBram Moolenaar \ ' Xdir1/dir2/baz.b', 55f0ab01f6SBram Moolenaar \ ' Xdir1/dir2/baz.b -->', 56f0ab01f6SBram Moolenaar \ ' foo (Already listed)'], res) 57f0ab01f6SBram Moolenaar 58f0ab01f6SBram Moolenaar enew 59f0ab01f6SBram Moolenaar call delete("./Xbase.b") 60f0ab01f6SBram Moolenaar call delete("Xdir1", "rf") 61f0ab01f6SBram Moolenaar set path& 62f0ab01f6SBram Moolenaar set include& 63f0ab01f6SBram Moolenaar set includeexpr& 64f0ab01f6SBram Moolenaarendfunc 65f0ab01f6SBram Moolenaar 66f0ab01f6SBram Moolenaarfunc StripNewlineChar() 67f0ab01f6SBram Moolenaar if v:fname =~ '\n$' 68f0ab01f6SBram Moolenaar return v:fname[:-2] 69f0ab01f6SBram Moolenaar endif 70f0ab01f6SBram Moolenaar return v:fname 71f0ab01f6SBram Moolenaarendfunc 72f0ab01f6SBram Moolenaar 73f0ab01f6SBram Moolenaar" Test for 'include' with \zs and no \ze 74f0ab01f6SBram Moolenaarfunc Test_checkpath3() 75f0ab01f6SBram Moolenaar call mkdir("Xdir1/dir2", "p") 76f0ab01f6SBram Moolenaar call writefile(['%inc bar.c'], 'Xdir1/dir2/foo.c') 77f0ab01f6SBram Moolenaar call writefile(['%inc baz.c'], 'Xdir1/dir2/bar.c') 78f0ab01f6SBram Moolenaar call writefile(['%inc foo.c'], 'Xdir1/dir2/baz.c') 79f0ab01f6SBram Moolenaar call writefile(['%inc foo.c'], 'Xdir1/dir2/FALSE.c') 80f0ab01f6SBram Moolenaar call writefile(['%inc FALSE.c foo.c'], 'Xbase.c') 81f0ab01f6SBram Moolenaar 82f0ab01f6SBram Moolenaar let &include='^\s*%inc\s*\%([[:upper:]][^[:space:]]*\s\+\)\?\zs\S\+\ze' 83f0ab01f6SBram Moolenaar let &includeexpr='StripNewlineChar()' 84f0ab01f6SBram Moolenaar 85f0ab01f6SBram Moolenaar edit Xbase.c 86f0ab01f6SBram Moolenaar set path=Xdir1/dir2 87f0ab01f6SBram Moolenaar let res = split(execute("checkpath!"), "\n") 88f0ab01f6SBram Moolenaar call assert_equal([ 89f0ab01f6SBram Moolenaar \ '--- Included files in path ---', 90f0ab01f6SBram Moolenaar \ 'Xdir1/dir2/foo.c', 91f0ab01f6SBram Moolenaar \ 'Xdir1/dir2/foo.c -->', 92f0ab01f6SBram Moolenaar \ ' Xdir1/dir2/bar.c', 93f0ab01f6SBram Moolenaar \ ' Xdir1/dir2/bar.c -->', 94f0ab01f6SBram Moolenaar \ ' Xdir1/dir2/baz.c', 95f0ab01f6SBram Moolenaar \ ' Xdir1/dir2/baz.c -->', 96f0ab01f6SBram Moolenaar \ ' foo.c (Already listed)'], res) 97f0ab01f6SBram Moolenaar 98f0ab01f6SBram Moolenaar enew 99f0ab01f6SBram Moolenaar call delete("./Xbase.c") 100f0ab01f6SBram Moolenaar call delete("Xdir1", "rf") 101f0ab01f6SBram Moolenaar set path& 102f0ab01f6SBram Moolenaar set include& 103f0ab01f6SBram Moolenaar set includeexpr& 104f0ab01f6SBram Moolenaarendfunc 1056d91bcb4SBram Moolenaar 106*531be47aSBram Moolenaar" Test for invalid regex in 'include' and 'define' options 107*531be47aSBram Moolenaarfunc Test_checkpath_errors() 108*531be47aSBram Moolenaar let save_include = &include 109*531be47aSBram Moolenaar set include=\\%( 110*531be47aSBram Moolenaar call assert_fails('checkpath', 'E53:') 111*531be47aSBram Moolenaar let &include = save_include 112*531be47aSBram Moolenaar 113*531be47aSBram Moolenaar let save_define = &define 114*531be47aSBram Moolenaar set define=\\%( 115*531be47aSBram Moolenaar call assert_fails('dsearch abc', 'E53:') 116*531be47aSBram Moolenaar let &define = save_define 117*531be47aSBram Moolenaar 118*531be47aSBram Moolenaar call assert_fails('psearch \%(', 'E53:') 119*531be47aSBram Moolenaarendfunc 120*531be47aSBram Moolenaar 1216d91bcb4SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 122