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