blob: 97da8c24bb47f43ea65abef69349e1fd77e0c143 [file] [log] [blame]
Bram Moolenaarf0ab01f2019-05-06 22:00:00 +02001" Tests for the :checkpath command
2
3" Test for 'include' without \zs or \ze
4func Test_checkpath1()
Bram Moolenaar45bbaef2022-09-08 16:39:22 +01005 call mkdir("Xcheckdir1/dir2", "pR")
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +01006 call writefile(['#include "bar.a"'], 'Xcheckdir1/dir2/foo.a')
7 call writefile(['#include "baz.a"'], 'Xcheckdir1/dir2/bar.a')
8 call writefile(['#include "foo.a"'], 'Xcheckdir1/dir2/baz.a')
Bram Moolenaarf0ab01f2019-05-06 22:00:00 +02009 call writefile(['#include <foo.a>'], 'Xbase.a')
10
11 edit Xbase.a
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +010012 set path=Xcheckdir1/dir2
Bram Moolenaarf0ab01f2019-05-06 22:00:00 +020013 let res = split(execute("checkpath!"), "\n")
14 call assert_equal([
15 \ '--- Included files in path ---',
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +010016 \ 'Xcheckdir1/dir2/foo.a',
17 \ 'Xcheckdir1/dir2/foo.a -->',
18 \ ' Xcheckdir1/dir2/bar.a',
19 \ ' Xcheckdir1/dir2/bar.a -->',
20 \ ' Xcheckdir1/dir2/baz.a',
21 \ ' Xcheckdir1/dir2/baz.a -->',
Bram Moolenaarf0ab01f2019-05-06 22:00:00 +020022 \ ' "foo.a" (Already listed)'], res)
23
24 enew
25 call delete("./Xbase.a")
Bram Moolenaarf0ab01f2019-05-06 22:00:00 +020026 set path&
27endfunc
28
29func DotsToSlashes()
30 return substitute(v:fname, '\.', '/', 'g') . '.b'
31endfunc
32
33" Test for 'include' with \zs and \ze
34func Test_checkpath2()
Bram Moolenaar45bbaef2022-09-08 16:39:22 +010035 call mkdir("Xcheckdir2/dir2", "pR")
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +010036 call writefile(['%inc /bar/'], 'Xcheckdir2/dir2/foo.b')
37 call writefile(['%inc /baz/'], 'Xcheckdir2/dir2/bar.b')
38 call writefile(['%inc /foo/'], 'Xcheckdir2/dir2/baz.b')
Bram Moolenaar45bbaef2022-09-08 16:39:22 +010039 call writefile(['%inc /foo/'], 'Xbase.b', 'D')
Bram Moolenaarf0ab01f2019-05-06 22:00:00 +020040
41 let &include='^\s*%inc\s*/\zs[^/]\+\ze'
42 let &includeexpr='DotsToSlashes()'
43
44 edit Xbase.b
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +010045 set path=Xcheckdir2/dir2
Bram Moolenaarf0ab01f2019-05-06 22:00:00 +020046 let res = split(execute("checkpath!"), "\n")
47 call assert_equal([
48 \ '--- Included files in path ---',
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +010049 \ 'Xcheckdir2/dir2/foo.b',
50 \ 'Xcheckdir2/dir2/foo.b -->',
51 \ ' Xcheckdir2/dir2/bar.b',
52 \ ' Xcheckdir2/dir2/bar.b -->',
53 \ ' Xcheckdir2/dir2/baz.b',
54 \ ' Xcheckdir2/dir2/baz.b -->',
Bram Moolenaarf0ab01f2019-05-06 22:00:00 +020055 \ ' foo (Already listed)'], res)
56
57 enew
Bram Moolenaarf0ab01f2019-05-06 22:00:00 +020058 set path&
59 set include&
60 set includeexpr&
61endfunc
62
63func StripNewlineChar()
64 if v:fname =~ '\n$'
65 return v:fname[:-2]
66 endif
67 return v:fname
68endfunc
69
70" Test for 'include' with \zs and no \ze
71func Test_checkpath3()
Bram Moolenaar45bbaef2022-09-08 16:39:22 +010072 call mkdir("Xcheckdir3/dir2", "pR")
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +010073 call writefile(['%inc bar.c'], 'Xcheckdir3/dir2/foo.c')
74 call writefile(['%inc baz.c'], 'Xcheckdir3/dir2/bar.c')
75 call writefile(['%inc foo.c'], 'Xcheckdir3/dir2/baz.c')
76 call writefile(['%inc foo.c'], 'Xcheckdir3/dir2/FALSE.c')
Bram Moolenaar45bbaef2022-09-08 16:39:22 +010077 call writefile(['%inc FALSE.c foo.c'], 'Xbase.c', 'D')
Bram Moolenaarf0ab01f2019-05-06 22:00:00 +020078
79 let &include='^\s*%inc\s*\%([[:upper:]][^[:space:]]*\s\+\)\?\zs\S\+\ze'
80 let &includeexpr='StripNewlineChar()'
81
82 edit Xbase.c
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +010083 set path=Xcheckdir3/dir2
Bram Moolenaarf0ab01f2019-05-06 22:00:00 +020084 let res = split(execute("checkpath!"), "\n")
85 call assert_equal([
86 \ '--- Included files in path ---',
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +010087 \ 'Xcheckdir3/dir2/foo.c',
88 \ 'Xcheckdir3/dir2/foo.c -->',
89 \ ' Xcheckdir3/dir2/bar.c',
90 \ ' Xcheckdir3/dir2/bar.c -->',
91 \ ' Xcheckdir3/dir2/baz.c',
92 \ ' Xcheckdir3/dir2/baz.c -->',
Bram Moolenaarf0ab01f2019-05-06 22:00:00 +020093 \ ' foo.c (Already listed)'], res)
94
95 enew
Bram Moolenaarf0ab01f2019-05-06 22:00:00 +020096 set path&
97 set include&
98 set includeexpr&
99endfunc
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +0200100
Bram Moolenaar531be472020-09-23 22:38:05 +0200101" Test for invalid regex in 'include' and 'define' options
102func Test_checkpath_errors()
103 let save_include = &include
104 set include=\\%(
105 call assert_fails('checkpath', 'E53:')
106 let &include = save_include
107
108 let save_define = &define
109 set define=\\%(
110 call assert_fails('dsearch abc', 'E53:')
111 let &define = save_define
112
113 call assert_fails('psearch \%(', 'E53:')
114endfunc
115
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +0200116" vim: shiftwidth=2 sts=2 expandtab