1" Tests for :help! {subject}
2
3func Test_help_tagjump()
4  help
5  call assert_equal("help", &filetype)
6  call assert_true(getline('.') =~ '\*help.txt\*')
7  helpclose
8
9  help |
10  call assert_equal("help", &filetype)
11  call assert_true(getline('.') =~ '\*bar\*')
12  helpclose
13
14  help "
15  call assert_equal("help", &filetype)
16  call assert_true(getline('.') =~ '\*quote\*')
17  helpclose
18
19  help *
20  call assert_equal("help", &filetype)
21  call assert_true(getline('.') =~ '\*star\*')
22  helpclose
23
24  help "*
25  call assert_equal("help", &filetype)
26  call assert_true(getline('.') =~ '\*quotestar\*')
27  helpclose
28
29  help sm?le
30  call assert_equal("help", &filetype)
31  call assert_true(getline('.') =~ '\*:smile\*')
32  helpclose
33
34  help ??
35  call assert_equal("help", &filetype)
36  call assert_true(getline('.') =~ '\*??\*')
37  helpclose
38
39  help :?
40  call assert_equal("help", &filetype)
41  call assert_true(getline('.') =~ '\*:?\*')
42  helpclose
43
44  help q?
45  call assert_equal("help", &filetype)
46  call assert_true(getline('.') =~ '\*q?\*')
47  call assert_true(expand('<cword>') == 'q?')
48  helpclose
49
50  help -?
51  call assert_equal("help", &filetype)
52  call assert_true(getline('.') =~ '\*-?\*')
53  helpclose
54
55  help v_g?
56  call assert_equal("help", &filetype)
57  call assert_true(getline('.') =~ '\*v_g?\*')
58  helpclose
59
60  help expr-!=?
61  call assert_equal("help", &filetype)
62  call assert_true(getline('.') =~ '\*expr-!=?\*')
63  call assert_true(expand('<cword>') == 'expr-!=?')
64  helpclose
65
66  help expr-isnot?
67  call assert_equal("help", &filetype)
68  call assert_true(getline('.') =~ '\*expr-isnot?\*')
69  call assert_true(expand('<cword>') == 'expr-isnot?')
70  helpclose
71
72  help FileW*Post
73  call assert_equal("help", &filetype)
74  call assert_true(getline('.') =~ '\*FileWritePost\*')
75  helpclose
76
77  help `ls`
78  call assert_equal("help", &filetype)
79  call assert_true(getline('.') =~ '\*:ls\*')
80  helpclose
81
82  help ^X
83  call assert_equal("help", &filetype)
84  call assert_true(getline('.') =~ '\*CTRL-X\*')
85  helpclose
86
87  help i_^_CTRL-D
88  call assert_equal("help", &filetype)
89  call assert_true(getline('.') =~ '\*i_^_CTRL-D\*')
90  helpclose
91
92  help i^x^y
93  call assert_equal("help", &filetype)
94  call assert_true(getline('.') =~ '\*i_CTRL-X_CTRL-Y\*')
95  helpclose
96
97  exe "help i\<C-\>\<C-G>"
98  call assert_equal("help", &filetype)
99  call assert_true(getline('.') =~ '\*i_CTRL-\\_CTRL-G\*')
100  helpclose
101
102  exec "help \<C-V>"
103  call assert_equal("help", &filetype)
104  call assert_true(getline('.') =~ '\*CTRL-V\*')
105  helpclose
106
107  help /\|
108  call assert_equal("help", &filetype)
109  call assert_true(getline('.') =~ '\*/\\bar\*')
110  helpclose
111
112  help \_$
113  call assert_equal("help", &filetype)
114  call assert_true(getline('.') =~ '\*/\\_$\*')
115  helpclose
116
117  help CTRL-\_CTRL-N
118  call assert_equal("help", &filetype)
119  call assert_true(getline('.') =~ '\*CTRL-\\_CTRL-N\*')
120  helpclose
121
122  help `:pwd`,
123  call assert_equal("help", &filetype)
124  call assert_true(getline('.') =~ '\*:pwd\*')
125  helpclose
126
127  help `:ls`.
128  call assert_equal("help", &filetype)
129  call assert_true(getline('.') =~ '\*:ls\*')
130  helpclose
131
132  exec "help! ('textwidth'"
133  call assert_equal("help", &filetype)
134  call assert_true(getline('.') =~ "\\*'textwidth'\\*")
135  helpclose
136
137  exec "help! ('buflisted'),"
138  call assert_equal("help", &filetype)
139  call assert_true(getline('.') =~ "\\*'buflisted'\\*")
140  helpclose
141
142  exec "help! abs({expr})"
143  call assert_equal("help", &filetype)
144  call assert_true(getline('.') =~ '\*abs()\*')
145  helpclose
146
147  exec "help! arglistid([{winnr}"
148  call assert_equal("help", &filetype)
149  call assert_true(getline('.') =~ '\*arglistid()\*')
150  helpclose
151
152  exec "help! 'autoindent'."
153  call assert_equal("help", &filetype)
154  call assert_true(getline('.') =~ "\\*'autoindent'\\*")
155  helpclose
156
157  exec "help! {address}."
158  call assert_equal("help", &filetype)
159  call assert_true(getline('.') =~ '\*{address}\*')
160  helpclose
161
162  " Use special patterns in the help tag
163  for h in ['/\w', '/\%^', '/\%(', '/\zs', '/\@<=', '/\_$', '[++opt]', '/\{']
164    exec "help! " . h
165    call assert_equal("help", &filetype)
166    let pat = '\*' . escape(h, '\$[') . '\*'
167    call assert_true(getline('.') =~ pat, pat)
168    helpclose
169  endfor
170
171  exusage
172  call assert_equal("help", &filetype)
173  call assert_true(getline('.') =~ '\*:index\*')
174  helpclose
175
176  viusage
177  call assert_equal("help", &filetype)
178  call assert_true(getline('.') =~ '\*normal-index\*')
179  helpclose
180endfunc
181
182let s:langs = ['en', 'ab', 'ja']
183
184func s:doc_config_setup()
185  let s:helpfile_save = &helpfile
186  let &helpfile="Xdir1/doc-en/doc/testdoc.txt"
187  let s:rtp_save = &rtp
188  let &rtp="Xdir1/doc-en"
189  if has('multi_lang')
190    let s:helplang_save=&helplang
191  endif
192
193  call delete('Xdir1', 'rf')
194
195  for lang in s:langs
196    if lang ==# 'en'
197      let tagfname = 'tags'
198      let docfname = 'testdoc.txt'
199    else
200      let tagfname = 'tags-' . lang
201      let docfname = 'testdoc.' . lang . 'x'
202    endif
203    let docdir = "Xdir1/doc-" . lang . "/doc"
204    call mkdir(docdir, "p")
205    call writefile(["\t*test-char*", "\t*test-col*"], docdir . '/' . docfname)
206    call writefile(["test-char\t" . docfname . "\t/*test-char*",
207          \         "test-col\t" . docfname . "\t/*test-col*"],
208          \         docdir . '/' . tagfname)
209  endfor
210endfunc
211
212func s:doc_config_teardown()
213  call delete('Xdir1', 'rf')
214
215  let &helpfile = s:helpfile_save
216  let &rtp = s:rtp_save
217  if has('multi_lang')
218    let &helplang = s:helplang_save
219  endif
220endfunc
221
222func s:get_help_compl_list(cmd)
223  return getcompletion(a:cmd, 'help')
224endfunc
225
226func Test_help_complete()
227  try
228    let list = []
229    call s:doc_config_setup()
230
231    " 'helplang=' and help file lang is 'en'
232    if has('multi_lang')
233      set helplang=
234    endif
235    let list = s:get_help_compl_list("test")
236    call assert_equal(['test-col', 'test-char'], list)
237
238    if has('multi_lang')
239      " 'helplang=ab' and help file lang is 'en'
240      set helplang=ab
241      let list = s:get_help_compl_list("test")
242      call assert_equal(['test-col', 'test-char'], list)
243
244      " 'helplang=' and help file lang is 'en' and 'ab'
245      set rtp+=Xdir1/doc-ab
246      set helplang=
247      let list = s:get_help_compl_list("test")
248      call assert_equal(sort(['test-col@en', 'test-col@ab',
249            \             'test-char@en', 'test-char@ab']), sort(list))
250
251      " 'helplang=ab' and help file lang is 'en' and 'ab'
252      set helplang=ab
253      let list = s:get_help_compl_list("test")
254      call assert_equal(sort(['test-col', 'test-col@en',
255            \             'test-char', 'test-char@en']), sort(list))
256
257      " 'helplang=' and help file lang is 'en', 'ab' and 'ja'
258      set rtp+=Xdir1/doc-ja
259      set helplang=
260      let list = s:get_help_compl_list("test")
261      call assert_equal(sort(['test-col@en', 'test-col@ab',
262            \             'test-col@ja', 'test-char@en',
263            \             'test-char@ab', 'test-char@ja']), sort(list))
264
265      " 'helplang=ab' and help file lang is 'en', 'ab' and 'ja'
266      set helplang=ab
267      let list = s:get_help_compl_list("test")
268      call assert_equal(sort(['test-col', 'test-col@en',
269            \             'test-col@ja', 'test-char',
270            \             'test-char@en', 'test-char@ja']), sort(list))
271
272      " 'helplang=ab,ja' and help file lang is 'en', 'ab' and 'ja'
273      set helplang=ab,ja
274      let list = s:get_help_compl_list("test")
275      call assert_equal(sort(['test-col', 'test-col@ja',
276            \             'test-col@en', 'test-char',
277            \             'test-char@ja', 'test-char@en']), sort(list))
278    endif
279  catch
280    call assert_exception('X')
281  finally
282    call s:doc_config_teardown()
283  endtry
284endfunc
285
286func Test_help_respect_current_file_lang()
287  try
288    let list = []
289    call s:doc_config_setup()
290
291    if has('multi_lang')
292      function s:check_help_file_ext(help_keyword, ext)
293        exec 'help ' . a:help_keyword
294        call assert_equal(a:ext, expand('%:e'))
295        call feedkeys("\<C-]>", 'tx')
296        call assert_equal(a:ext, expand('%:e'))
297        pop
298        helpclose
299      endfunc
300
301      set rtp+=Xdir1/doc-ab
302      set rtp+=Xdir1/doc-ja
303
304      set helplang=ab
305      call s:check_help_file_ext('test-char', 'abx')
306      call s:check_help_file_ext('test-char@ja', 'jax')
307      set helplang=ab,ja
308      call s:check_help_file_ext('test-char@ja', 'jax')
309      call s:check_help_file_ext('test-char@en', 'txt')
310    endif
311  catch
312    call assert_exception('X')
313  finally
314    call s:doc_config_teardown()
315  endtry
316endfunc
317
318" vim: shiftwidth=2 sts=2 expandtab
319