test_checkpath.vim 3.3 KB

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