xref: /vim-8.2.3635/src/testdir/test_arglist.vim (revision 3cad4703)
172defda8SBram Moolenaar" Test argument list commands
272defda8SBram Moolenaar
3494e9069SBram Moolenaarsource check.vim
49f6277bdSBram Moolenaarsource shared.vim
59f6277bdSBram Moolenaarsource term_util.vim
69f6277bdSBram Moolenaar
7*3cad4703SShougo Matsushitafunc Reset_arglist()
8*3cad4703SShougo Matsushita  args a | %argd
9*3cad4703SShougo Matsushitaendfunc
10*3cad4703SShougo Matsushita
1172defda8SBram Moolenaarfunc Test_argidx()
1272defda8SBram Moolenaar  args a b c
1372defda8SBram Moolenaar  last
1472defda8SBram Moolenaar  call assert_equal(2, argidx())
1572defda8SBram Moolenaar  %argdelete
1672defda8SBram Moolenaar  call assert_equal(0, argidx())
1769a92fb5SBram Moolenaar  " doing it again doesn't result in an error
1869a92fb5SBram Moolenaar  %argdelete
1969a92fb5SBram Moolenaar  call assert_equal(0, argidx())
2069a92fb5SBram Moolenaar  call assert_fails('2argdelete', 'E16:')
2172defda8SBram Moolenaar
2272defda8SBram Moolenaar  args a b c
2372defda8SBram Moolenaar  call assert_equal(0, argidx())
2472defda8SBram Moolenaar  next
2572defda8SBram Moolenaar  call assert_equal(1, argidx())
2672defda8SBram Moolenaar  next
2772defda8SBram Moolenaar  call assert_equal(2, argidx())
2872defda8SBram Moolenaar  1argdelete
2972defda8SBram Moolenaar  call assert_equal(1, argidx())
3072defda8SBram Moolenaar  1argdelete
3172defda8SBram Moolenaar  call assert_equal(0, argidx())
3272defda8SBram Moolenaar  1argdelete
3372defda8SBram Moolenaar  call assert_equal(0, argidx())
3472defda8SBram Moolenaarendfunc
35a24f0a55SBram Moolenaar
36a24f0a55SBram Moolenaarfunc Test_argadd()
37*3cad4703SShougo Matsushita  call Reset_arglist()
38*3cad4703SShougo Matsushita
39a24f0a55SBram Moolenaar  %argdelete
40a24f0a55SBram Moolenaar  argadd a b c
41a24f0a55SBram Moolenaar  call assert_equal(0, argidx())
42a24f0a55SBram Moolenaar
43a24f0a55SBram Moolenaar  %argdelete
44a24f0a55SBram Moolenaar  argadd a
45a24f0a55SBram Moolenaar  call assert_equal(0, argidx())
46a24f0a55SBram Moolenaar  argadd b c d
47a24f0a55SBram Moolenaar  call assert_equal(0, argidx())
48a24f0a55SBram Moolenaar
49a24f0a55SBram Moolenaar  call Init_abc()
50a24f0a55SBram Moolenaar  argadd x
51a24f0a55SBram Moolenaar  call Assert_argc(['a', 'b', 'x', 'c'])
52a24f0a55SBram Moolenaar  call assert_equal(1, argidx())
53a24f0a55SBram Moolenaar
54a24f0a55SBram Moolenaar  call Init_abc()
55a24f0a55SBram Moolenaar  0argadd x
56a24f0a55SBram Moolenaar  call Assert_argc(['x', 'a', 'b', 'c'])
57a24f0a55SBram Moolenaar  call assert_equal(2, argidx())
58a24f0a55SBram Moolenaar
59a24f0a55SBram Moolenaar  call Init_abc()
60a24f0a55SBram Moolenaar  1argadd x
61a24f0a55SBram Moolenaar  call Assert_argc(['a', 'x', 'b', 'c'])
62a24f0a55SBram Moolenaar  call assert_equal(2, argidx())
63a24f0a55SBram Moolenaar
64a24f0a55SBram Moolenaar  call Init_abc()
65a24f0a55SBram Moolenaar  $argadd x
66a24f0a55SBram Moolenaar  call Assert_argc(['a', 'b', 'c', 'x'])
67a24f0a55SBram Moolenaar  call assert_equal(1, argidx())
68a24f0a55SBram Moolenaar
69a24f0a55SBram Moolenaar  call Init_abc()
70a24f0a55SBram Moolenaar  $argadd x
71a24f0a55SBram Moolenaar  +2argadd y
72a24f0a55SBram Moolenaar  call Assert_argc(['a', 'b', 'c', 'x', 'y'])
73a24f0a55SBram Moolenaar  call assert_equal(1, argidx())
742faa29f8SBram Moolenaar
752faa29f8SBram Moolenaar  %argd
762faa29f8SBram Moolenaar  edit d
772faa29f8SBram Moolenaar  arga
78398ee732SBram Moolenaar  call assert_equal(1, len(argv()))
79398ee732SBram Moolenaar  call assert_equal('d', get(argv(), 0, ''))
80398ee732SBram Moolenaar
81398ee732SBram Moolenaar  %argd
82398ee732SBram Moolenaar  edit some\ file
83398ee732SBram Moolenaar  arga
84398ee732SBram Moolenaar  call assert_equal(1, len(argv()))
85398ee732SBram Moolenaar  call assert_equal('some file', get(argv(), 0, ''))
862faa29f8SBram Moolenaar
872faa29f8SBram Moolenaar  %argd
882faa29f8SBram Moolenaar  new
892faa29f8SBram Moolenaar  arga
90398ee732SBram Moolenaar  call assert_equal(0, len(argv()))
91bfb2bb16SDominique Pelle
92bfb2bb16SDominique Pelle  if has('unix')
93bfb2bb16SDominique Pelle    call assert_fails('argadd `Xdoes_not_exist`', 'E479:')
94bfb2bb16SDominique Pelle  endif
95a24f0a55SBram Moolenaarendfunc
96a24f0a55SBram Moolenaar
9732bbd009SBram Moolenaarfunc Test_argadd_empty_curbuf()
9832bbd009SBram Moolenaar  new
9932bbd009SBram Moolenaar  let curbuf = bufnr('%')
10032bbd009SBram Moolenaar  call writefile(['test', 'Xargadd'], 'Xargadd')
10132bbd009SBram Moolenaar  " must not re-use the current buffer.
10232bbd009SBram Moolenaar  argadd Xargadd
10332bbd009SBram Moolenaar  call assert_equal(curbuf, bufnr('%'))
10432bbd009SBram Moolenaar  call assert_equal('', bufname('%'))
10502b31110SBram Moolenaar  call assert_equal(1, '$'->line())
10632bbd009SBram Moolenaar  rew
107073e4b92SBram Moolenaar  call assert_notequal(curbuf, '%'->bufnr())
108073e4b92SBram Moolenaar  call assert_equal('Xargadd', '%'->bufname())
10932bbd009SBram Moolenaar  call assert_equal(2, line('$'))
11032bbd009SBram Moolenaar
111d339828bSBram Moolenaar  call delete('Xargadd')
11232bbd009SBram Moolenaar  %argd
11332bbd009SBram Moolenaar  bwipe!
11432bbd009SBram Moolenaarendfunc
11532bbd009SBram Moolenaar
116a24f0a55SBram Moolenaarfunc Init_abc()
117a24f0a55SBram Moolenaar  args a b c
118a24f0a55SBram Moolenaar  next
119a24f0a55SBram Moolenaarendfunc
120a24f0a55SBram Moolenaar
121a24f0a55SBram Moolenaarfunc Assert_argc(l)
122a24f0a55SBram Moolenaar  call assert_equal(len(a:l), argc())
123a24f0a55SBram Moolenaar  let i = 0
124a24f0a55SBram Moolenaar  while i < len(a:l) && i < argc()
125a24f0a55SBram Moolenaar    call assert_equal(a:l[i], argv(i))
126a24f0a55SBram Moolenaar    let i += 1
127a24f0a55SBram Moolenaar  endwhile
128a24f0a55SBram Moolenaarendfunc
12999dbe291SBram Moolenaar
13099dbe291SBram Moolenaar" Test for [count]argument and [count]argdelete commands
13199dbe291SBram Moolenaar" Ported from the test_argument_count.in test script
1328c34aa09SBram Moolenaarfunc Test_argument()
133*3cad4703SShougo Matsushita  call Reset_arglist()
13499dbe291SBram Moolenaar
13599dbe291SBram Moolenaar  let save_hidden = &hidden
13699dbe291SBram Moolenaar  set hidden
13799dbe291SBram Moolenaar
13899dbe291SBram Moolenaar  let g:buffers = []
13999dbe291SBram Moolenaar  augroup TEST
14099dbe291SBram Moolenaar    au BufEnter * call add(buffers, expand('%:t'))
14199dbe291SBram Moolenaar  augroup END
14299dbe291SBram Moolenaar
14399dbe291SBram Moolenaar  argadd a b c d
14499dbe291SBram Moolenaar  $argu
14599dbe291SBram Moolenaar  $-argu
14699dbe291SBram Moolenaar  -argu
14799dbe291SBram Moolenaar  1argu
14899dbe291SBram Moolenaar  +2argu
14999dbe291SBram Moolenaar
15099dbe291SBram Moolenaar  augroup TEST
15199dbe291SBram Moolenaar    au!
15299dbe291SBram Moolenaar  augroup END
15399dbe291SBram Moolenaar
15499dbe291SBram Moolenaar  call assert_equal(['d', 'c', 'b', 'a', 'c'], g:buffers)
15599dbe291SBram Moolenaar
156949f1989SBram Moolenaar  call assert_equal("\na   b   [c] d   ", execute(':args'))
15799dbe291SBram Moolenaar
15899dbe291SBram Moolenaar  .argd
15999dbe291SBram Moolenaar  call assert_equal(['a', 'b', 'd'], argv())
16099dbe291SBram Moolenaar
16199dbe291SBram Moolenaar  -argd
16299dbe291SBram Moolenaar  call assert_equal(['a', 'd'], argv())
16399dbe291SBram Moolenaar
16499dbe291SBram Moolenaar  $argd
16599dbe291SBram Moolenaar  call assert_equal(['a'], argv())
16699dbe291SBram Moolenaar
16799dbe291SBram Moolenaar  1arga c
16899dbe291SBram Moolenaar  1arga b
16999dbe291SBram Moolenaar  $argu
17099dbe291SBram Moolenaar  $arga x
17199dbe291SBram Moolenaar  call assert_equal(['a', 'b', 'c', 'x'], argv())
17299dbe291SBram Moolenaar
17330141704SBram Moolenaar  0arga y
17430141704SBram Moolenaar  call assert_equal(['y', 'a', 'b', 'c', 'x'], argv())
17599dbe291SBram Moolenaar
17699dbe291SBram Moolenaar  %argd
17799dbe291SBram Moolenaar  call assert_equal([], argv())
17899dbe291SBram Moolenaar
17999dbe291SBram Moolenaar  arga a b c d e f
18099dbe291SBram Moolenaar  2,$-argd
18199dbe291SBram Moolenaar  call assert_equal(['a', 'f'], argv())
18299dbe291SBram Moolenaar
18399dbe291SBram Moolenaar  let &hidden = save_hidden
18499dbe291SBram Moolenaar
1859800bfe0SBram Moolenaar  let save_columns = &columns
1869800bfe0SBram Moolenaar  let &columns = 79
1877147820cSBram Moolenaar  try
1889800bfe0SBram Moolenaar    exe 'args ' .. join(range(1, 81))
1899800bfe0SBram Moolenaar    call assert_equal(join([
1909800bfe0SBram Moolenaar          \ '',
1919800bfe0SBram Moolenaar          \ '[1] 6   11  16  21  26  31  36  41  46  51  56  61  66  71  76  81  ',
1929800bfe0SBram Moolenaar          \ '2   7   12  17  22  27  32  37  42  47  52  57  62  67  72  77  ',
1939800bfe0SBram Moolenaar          \ '3   8   13  18  23  28  33  38  43  48  53  58  63  68  73  78  ',
1949800bfe0SBram Moolenaar          \ '4   9   14  19  24  29  34  39  44  49  54  59  64  69  74  79  ',
1959800bfe0SBram Moolenaar          \ '5   10  15  20  25  30  35  40  45  50  55  60  65  70  75  80  ',
1969800bfe0SBram Moolenaar          \ ], "\n"),
1979800bfe0SBram Moolenaar          \ execute('args'))
1989800bfe0SBram Moolenaar
1999800bfe0SBram Moolenaar    " No trailing newline with one item per row.
2009800bfe0SBram Moolenaar    let long_arg = repeat('X', 81)
2019800bfe0SBram Moolenaar    exe 'args ' .. long_arg
2029800bfe0SBram Moolenaar    call assert_equal("\n[".long_arg.']', execute('args'))
2037147820cSBram Moolenaar  finally
2049800bfe0SBram Moolenaar    let &columns = save_columns
2057147820cSBram Moolenaar  endtry
2069800bfe0SBram Moolenaar
20799dbe291SBram Moolenaar  " Setting argument list should fail when the current buffer has unsaved
20899dbe291SBram Moolenaar  " changes
20999dbe291SBram Moolenaar  %argd
21099dbe291SBram Moolenaar  enew!
21199dbe291SBram Moolenaar  set modified
21299dbe291SBram Moolenaar  call assert_fails('args x y z', 'E37:')
21399dbe291SBram Moolenaar  args! x y z
21499dbe291SBram Moolenaar  call assert_equal(['x', 'y', 'z'], argv())
21599dbe291SBram Moolenaar  call assert_equal('x', expand('%:t'))
21699dbe291SBram Moolenaar
21799dbe291SBram Moolenaar  last | enew | argu
21899dbe291SBram Moolenaar  call assert_equal('z', expand('%:t'))
21999dbe291SBram Moolenaar
22099dbe291SBram Moolenaar  %argdelete
22199dbe291SBram Moolenaar  call assert_fails('argument', 'E163:')
2228c34aa09SBram Moolenaarendfunc
22399dbe291SBram Moolenaar
2245d69da46SBram Moolenaarfunc Test_list_arguments()
225*3cad4703SShougo Matsushita  call Reset_arglist()
2265d69da46SBram Moolenaar
2275d69da46SBram Moolenaar  " four args half the screen width makes two lines with two columns
2285d69da46SBram Moolenaar  let aarg = repeat('a', &columns / 2 - 4)
2295d69da46SBram Moolenaar  let barg = repeat('b', &columns / 2 - 4)
2305d69da46SBram Moolenaar  let carg = repeat('c', &columns / 2 - 4)
2315d69da46SBram Moolenaar  let darg = repeat('d', &columns / 2 - 4)
2325d69da46SBram Moolenaar  exe 'argadd ' aarg barg carg darg
2335d69da46SBram Moolenaar
2345d69da46SBram Moolenaar  redir => result
2355d69da46SBram Moolenaar  args
2365d69da46SBram Moolenaar  redir END
2375d69da46SBram Moolenaar  call assert_match('\[' . aarg . '] \+' . carg . '\n' . barg . ' \+' . darg, trim(result))
2385d69da46SBram Moolenaar
2395d69da46SBram Moolenaar  " if one arg is longer than half the screen make one column
2405d69da46SBram Moolenaar  exe 'argdel' aarg
2415d69da46SBram Moolenaar  let aarg = repeat('a', &columns / 2 + 2)
2425d69da46SBram Moolenaar  exe '0argadd' aarg
2435d69da46SBram Moolenaar  redir => result
2445d69da46SBram Moolenaar  args
2455d69da46SBram Moolenaar  redir END
2465d69da46SBram Moolenaar  call assert_match(aarg . '\n\[' . barg . ']\n' . carg . '\n' . darg, trim(result))
2475d69da46SBram Moolenaar
2485d69da46SBram Moolenaar  %argdelete
2495d69da46SBram Moolenaarendfunc
2505d69da46SBram Moolenaar
2512ac372ccSBram Moolenaarfunc Test_args_with_quote()
2523de8c2d1SBram Moolenaar  " Only on Unix can a file name include a double quote.
2536d91bcb4SBram Moolenaar  CheckUnix
2546d91bcb4SBram Moolenaar
2552ac372ccSBram Moolenaar  args \"foobar
2562ac372ccSBram Moolenaar  call assert_equal('"foobar', argv(0))
2572ac372ccSBram Moolenaar  %argdelete
2582ac372ccSBram Moolenaarendfunc
2592ac372ccSBram Moolenaar
26099dbe291SBram Moolenaar" Test for 0argadd and 0argedit
26199dbe291SBram Moolenaar" Ported from the test_argument_0count.in test script
2628c34aa09SBram Moolenaarfunc Test_zero_argadd()
263*3cad4703SShougo Matsushita  call Reset_arglist()
26499dbe291SBram Moolenaar
26599dbe291SBram Moolenaar  arga a b c d
26699dbe291SBram Moolenaar  2argu
26799dbe291SBram Moolenaar  0arga added
26899dbe291SBram Moolenaar  call assert_equal(['added', 'a', 'b', 'c', 'd'], argv())
26999dbe291SBram Moolenaar
27099dbe291SBram Moolenaar  2argu
27199dbe291SBram Moolenaar  arga third
27299dbe291SBram Moolenaar  call assert_equal(['added', 'a', 'third', 'b', 'c', 'd'], argv())
27399dbe291SBram Moolenaar
27499dbe291SBram Moolenaar  %argd
27599dbe291SBram Moolenaar  arga a b c d
27699dbe291SBram Moolenaar  2argu
27799dbe291SBram Moolenaar  0arge edited
27899dbe291SBram Moolenaar  call assert_equal(['edited', 'a', 'b', 'c', 'd'], argv())
27999dbe291SBram Moolenaar
28099dbe291SBram Moolenaar  2argu
28199dbe291SBram Moolenaar  arga third
28299dbe291SBram Moolenaar  call assert_equal(['edited', 'a', 'third', 'b', 'c', 'd'], argv())
28390305c66SBram Moolenaar
28490305c66SBram Moolenaar  2argu
28590305c66SBram Moolenaar  argedit file\ with\ spaces another file
28690305c66SBram Moolenaar  call assert_equal(['edited', 'a', 'file with spaces', 'another', 'file', 'third', 'b', 'c', 'd'], argv())
28790305c66SBram Moolenaar  call assert_equal('file with spaces', expand('%'))
2888c34aa09SBram Moolenaarendfunc
28999dbe291SBram Moolenaar
29099dbe291SBram Moolenaar" Test for argc()
2918c34aa09SBram Moolenaarfunc Test_argc()
29299dbe291SBram Moolenaar  call Reset_arglist()
29399dbe291SBram Moolenaar  call assert_equal(0, argc())
29499dbe291SBram Moolenaar  argadd a b
29599dbe291SBram Moolenaar  call assert_equal(2, argc())
2968c34aa09SBram Moolenaarendfunc
29799dbe291SBram Moolenaar
29899dbe291SBram Moolenaar" Test for arglistid()
2998c34aa09SBram Moolenaarfunc Test_arglistid()
30099dbe291SBram Moolenaar  call Reset_arglist()
30199dbe291SBram Moolenaar  arga a b
30299dbe291SBram Moolenaar  call assert_equal(0, arglistid())
30399dbe291SBram Moolenaar  split
30499dbe291SBram Moolenaar  arglocal
30599dbe291SBram Moolenaar  call assert_equal(1, arglistid())
30699dbe291SBram Moolenaar  tabnew | tabfirst
30799dbe291SBram Moolenaar  call assert_equal(0, arglistid(2))
30899dbe291SBram Moolenaar  call assert_equal(1, arglistid(1, 1))
30999dbe291SBram Moolenaar  call assert_equal(0, arglistid(2, 1))
31099dbe291SBram Moolenaar  call assert_equal(1, arglistid(1, 2))
31199dbe291SBram Moolenaar  tabonly | only | enew!
31299dbe291SBram Moolenaar  argglobal
31399dbe291SBram Moolenaar  call assert_equal(0, arglistid())
3148c34aa09SBram Moolenaarendfunc
31599dbe291SBram Moolenaar
316e6e3989cSBram Moolenaar" Tests for argv() and argc()
3178c34aa09SBram Moolenaarfunc Test_argv()
31899dbe291SBram Moolenaar  call Reset_arglist()
31999dbe291SBram Moolenaar  call assert_equal([], argv())
32099dbe291SBram Moolenaar  call assert_equal("", argv(2))
321e6e3989cSBram Moolenaar  call assert_equal(0, argc())
32299dbe291SBram Moolenaar  argadd a b c d
323e6e3989cSBram Moolenaar  call assert_equal(4, argc())
32499dbe291SBram Moolenaar  call assert_equal('c', argv(2))
325e6e3989cSBram Moolenaar
326e6e3989cSBram Moolenaar  let w1_id = win_getid()
327e6e3989cSBram Moolenaar  split
328e6e3989cSBram Moolenaar  let w2_id = win_getid()
329e6e3989cSBram Moolenaar  arglocal
330e6e3989cSBram Moolenaar  args e f g
331e6e3989cSBram Moolenaar  tabnew
332e6e3989cSBram Moolenaar  let w3_id = win_getid()
333e6e3989cSBram Moolenaar  split
334e6e3989cSBram Moolenaar  let w4_id = win_getid()
335e6e3989cSBram Moolenaar  argglobal
336e6e3989cSBram Moolenaar  tabfirst
337e6e3989cSBram Moolenaar  call assert_equal(4, argc(w1_id))
338e6e3989cSBram Moolenaar  call assert_equal('b', argv(1, w1_id))
339e6e3989cSBram Moolenaar  call assert_equal(['a', 'b', 'c', 'd'], argv(-1, w1_id))
340e6e3989cSBram Moolenaar
341e6e3989cSBram Moolenaar  call assert_equal(3, argc(w2_id))
342e6e3989cSBram Moolenaar  call assert_equal('f', argv(1, w2_id))
343e6e3989cSBram Moolenaar  call assert_equal(['e', 'f', 'g'], argv(-1, w2_id))
344e6e3989cSBram Moolenaar
345e6e3989cSBram Moolenaar  call assert_equal(3, argc(w3_id))
346e6e3989cSBram Moolenaar  call assert_equal('e', argv(0, w3_id))
347e6e3989cSBram Moolenaar  call assert_equal(['e', 'f', 'g'], argv(-1, w3_id))
348e6e3989cSBram Moolenaar
349e6e3989cSBram Moolenaar  call assert_equal(4, argc(w4_id))
350e6e3989cSBram Moolenaar  call assert_equal('c', argv(2, w4_id))
351e6e3989cSBram Moolenaar  call assert_equal(['a', 'b', 'c', 'd'], argv(-1, w4_id))
352e6e3989cSBram Moolenaar
353e6e3989cSBram Moolenaar  call assert_equal(4, argc(-1))
354e6e3989cSBram Moolenaar  call assert_equal(3, argc())
355e6e3989cSBram Moolenaar  call assert_equal('d', argv(3, -1))
356e6e3989cSBram Moolenaar  call assert_equal(['a', 'b', 'c', 'd'], argv(-1, -1))
357e6e3989cSBram Moolenaar  tabonly | only | enew!
358e6e3989cSBram Moolenaar  " Negative test cases
359e6e3989cSBram Moolenaar  call assert_equal(-1, argc(100))
360e6e3989cSBram Moolenaar  call assert_equal('', argv(1, 100))
361e6e3989cSBram Moolenaar  call assert_equal([], argv(-1, 100))
362e6e3989cSBram Moolenaar  call assert_equal('', argv(10, -1))
3638c34aa09SBram Moolenaarendfunc
36499dbe291SBram Moolenaar
36599dbe291SBram Moolenaar" Test for the :argedit command
3668c34aa09SBram Moolenaarfunc Test_argedit()
36799dbe291SBram Moolenaar  call Reset_arglist()
36899dbe291SBram Moolenaar  argedit a
36999dbe291SBram Moolenaar  call assert_equal(['a'], argv())
37099dbe291SBram Moolenaar  call assert_equal('a', expand('%:t'))
37199dbe291SBram Moolenaar  argedit b
37299dbe291SBram Moolenaar  call assert_equal(['a', 'b'], argv())
37399dbe291SBram Moolenaar  call assert_equal('b', expand('%:t'))
37499dbe291SBram Moolenaar  argedit a
37590305c66SBram Moolenaar  call assert_equal(['a', 'b', 'a'], argv())
37699dbe291SBram Moolenaar  call assert_equal('a', expand('%:t'))
3779b50bba6SBram Moolenaar  " When file name case is ignored, an existing buffer with only case
378cf1ba35fSBram Moolenaar  " difference is re-used.
37990305c66SBram Moolenaar  argedit C D
38090305c66SBram Moolenaar  call assert_equal('C', expand('%:t'))
38190305c66SBram Moolenaar  call assert_equal(['a', 'b', 'a', 'C', 'D'], argv())
38299dbe291SBram Moolenaar  argedit c
3839b50bba6SBram Moolenaar  if has('fname_case')
38490305c66SBram Moolenaar    call assert_equal(['a', 'b', 'a', 'C', 'c', 'D'], argv())
3859b50bba6SBram Moolenaar  else
3869b50bba6SBram Moolenaar    call assert_equal(['a', 'b', 'a', 'C', 'C', 'D'], argv())
3879b50bba6SBram Moolenaar  endif
38899dbe291SBram Moolenaar  0argedit x
3899b50bba6SBram Moolenaar  if has('fname_case')
39090305c66SBram Moolenaar    call assert_equal(['x', 'a', 'b', 'a', 'C', 'c', 'D'], argv())
3919b50bba6SBram Moolenaar  else
3929b50bba6SBram Moolenaar    call assert_equal(['x', 'a', 'b', 'a', 'C', 'C', 'D'], argv())
3939b50bba6SBram Moolenaar  endif
39499dbe291SBram Moolenaar  enew! | set modified
39599dbe291SBram Moolenaar  call assert_fails('argedit y', 'E37:')
39699dbe291SBram Moolenaar  argedit! y
3979b50bba6SBram Moolenaar  if has('fname_case')
39890305c66SBram Moolenaar    call assert_equal(['x', 'y', 'y', 'a', 'b', 'a', 'C', 'c', 'D'], argv())
3999b50bba6SBram Moolenaar  else
4009b50bba6SBram Moolenaar    call assert_equal(['x', 'y', 'y', 'a', 'b', 'a', 'C', 'C', 'D'], argv())
4019b50bba6SBram Moolenaar  endif
40299dbe291SBram Moolenaar  %argd
4039b50bba6SBram Moolenaar  bwipe! C
4049b50bba6SBram Moolenaar  bwipe! D
40546a53dfcSBram Moolenaar
40646a53dfcSBram Moolenaar  " :argedit reuses the current buffer if it is empty
40746a53dfcSBram Moolenaar  %argd
40846a53dfcSBram Moolenaar  " make sure to use a new buffer number for x when it is loaded
40946a53dfcSBram Moolenaar  bw! x
41046a53dfcSBram Moolenaar  new
411a8eee21eSBram Moolenaar  let a = bufnr()
41246a53dfcSBram Moolenaar  argedit x
413a8eee21eSBram Moolenaar  call assert_equal(a, bufnr())
414a8eee21eSBram Moolenaar  call assert_equal('x', bufname())
41546a53dfcSBram Moolenaar  %argd
41646a53dfcSBram Moolenaar  bw! x
4178c34aa09SBram Moolenaarendfunc
41899dbe291SBram Moolenaar
41999dbe291SBram Moolenaar" Test for the :argdelete command
4208c34aa09SBram Moolenaarfunc Test_argdelete()
42199dbe291SBram Moolenaar  call Reset_arglist()
42299dbe291SBram Moolenaar  args aa a aaa b bb
42399dbe291SBram Moolenaar  argdelete a*
42499dbe291SBram Moolenaar  call assert_equal(['b', 'bb'], argv())
42599dbe291SBram Moolenaar  call assert_equal('aa', expand('%:t'))
42699dbe291SBram Moolenaar  last
42799dbe291SBram Moolenaar  argdelete %
42899dbe291SBram Moolenaar  call assert_equal(['b'], argv())
4297b22117cSBram Moolenaar  call assert_fails('argdelete', 'E610:')
43099dbe291SBram Moolenaar  call assert_fails('1,100argdelete', 'E16:')
431531be47aSBram Moolenaar  call assert_fails('argdel /\)/', 'E55:')
432afe8cf61SBram Moolenaar  call assert_fails('1argdel 1', 'E474:')
4337b22117cSBram Moolenaar
4347b22117cSBram Moolenaar  call Reset_arglist()
4357b22117cSBram Moolenaar  args a b c d
4367b22117cSBram Moolenaar  next
4377b22117cSBram Moolenaar  argdel
4387b22117cSBram Moolenaar  call Assert_argc(['a', 'c', 'd'])
4397b22117cSBram Moolenaar  %argdel
440bfb2bb16SDominique Pelle
441bfb2bb16SDominique Pelle  call assert_fails('argdel does_not_exist', 'E480:')
4428c34aa09SBram Moolenaarendfunc
44399dbe291SBram Moolenaar
444b513d307SBram Moolenaarfunc Test_argdelete_completion()
445b513d307SBram Moolenaar  args foo bar
446b513d307SBram Moolenaar
447b513d307SBram Moolenaar  call feedkeys(":argdelete \<C-A>\<C-B>\"\<CR>", 'tx')
448b513d307SBram Moolenaar  call assert_equal('"argdelete bar foo', @:)
449b513d307SBram Moolenaar
450b513d307SBram Moolenaar  call feedkeys(":argdelete x \<C-A>\<C-B>\"\<CR>", 'tx')
451b513d307SBram Moolenaar  call assert_equal('"argdelete x bar foo', @:)
452b513d307SBram Moolenaar
453b513d307SBram Moolenaar  %argd
454b513d307SBram Moolenaarendfunc
455b513d307SBram Moolenaar
45699dbe291SBram Moolenaar" Tests for the :next, :prev, :first, :last, :rewind commands
4578c34aa09SBram Moolenaarfunc Test_argpos()
45899dbe291SBram Moolenaar  call Reset_arglist()
45999dbe291SBram Moolenaar  args a b c d
46099dbe291SBram Moolenaar  last
46199dbe291SBram Moolenaar  call assert_equal(3, argidx())
46299dbe291SBram Moolenaar  call assert_fails('next', 'E165:')
46399dbe291SBram Moolenaar  prev
46499dbe291SBram Moolenaar  call assert_equal(2, argidx())
46599dbe291SBram Moolenaar  Next
46699dbe291SBram Moolenaar  call assert_equal(1, argidx())
46799dbe291SBram Moolenaar  first
46899dbe291SBram Moolenaar  call assert_equal(0, argidx())
46999dbe291SBram Moolenaar  call assert_fails('prev', 'E164:')
47099dbe291SBram Moolenaar  3next
47199dbe291SBram Moolenaar  call assert_equal(3, argidx())
47299dbe291SBram Moolenaar  rewind
47399dbe291SBram Moolenaar  call assert_equal(0, argidx())
47499dbe291SBram Moolenaar  %argd
4758c34aa09SBram Moolenaarendfunc
47653f1673cSBram Moolenaar
47753f1673cSBram Moolenaar" Test for autocommand that redefines the argument list, when doing ":all".
4788c34aa09SBram Moolenaarfunc Test_arglist_autocmd()
47953f1673cSBram Moolenaar  autocmd BufReadPost Xxx2 next Xxx2 Xxx1
48053f1673cSBram Moolenaar  call writefile(['test file Xxx1'], 'Xxx1')
48153f1673cSBram Moolenaar  call writefile(['test file Xxx2'], 'Xxx2')
48253f1673cSBram Moolenaar  call writefile(['test file Xxx3'], 'Xxx3')
48353f1673cSBram Moolenaar
48453f1673cSBram Moolenaar  new
48553f1673cSBram Moolenaar  " redefine arglist; go to Xxx1
48653f1673cSBram Moolenaar  next! Xxx1 Xxx2 Xxx3
487afe8cf61SBram Moolenaar  " open window for all args; Reading Xxx2 will change the arglist and the
488afe8cf61SBram Moolenaar  " third window will get Xxx1:
489afe8cf61SBram Moolenaar  "   win 1: Xxx1
490afe8cf61SBram Moolenaar  "   win 2: Xxx2
491afe8cf61SBram Moolenaar  "   win 3: Xxx1
49253f1673cSBram Moolenaar  all
49353f1673cSBram Moolenaar  call assert_equal('test file Xxx1', getline(1))
49453f1673cSBram Moolenaar  wincmd w
49553f1673cSBram Moolenaar  wincmd w
49653f1673cSBram Moolenaar  call assert_equal('test file Xxx1', getline(1))
49753f1673cSBram Moolenaar  rewind
49853f1673cSBram Moolenaar  call assert_equal('test file Xxx2', getline(1))
49953f1673cSBram Moolenaar
50053f1673cSBram Moolenaar  autocmd! BufReadPost Xxx2
50153f1673cSBram Moolenaar  enew! | only
50253f1673cSBram Moolenaar  call delete('Xxx1')
50353f1673cSBram Moolenaar  call delete('Xxx2')
50453f1673cSBram Moolenaar  call delete('Xxx3')
50553f1673cSBram Moolenaar  argdelete Xxx*
50653f1673cSBram Moolenaar  bwipe! Xxx1 Xxx2 Xxx3
5078c34aa09SBram Moolenaarendfunc
5088c34aa09SBram Moolenaar
5098c34aa09SBram Moolenaarfunc Test_arg_all_expand()
5108c34aa09SBram Moolenaar  call writefile(['test file Xxx1'], 'Xx x')
5118c34aa09SBram Moolenaar  next notexist Xx\ x runtest.vim
5128c34aa09SBram Moolenaar  call assert_equal('notexist Xx\ x runtest.vim', expand('##'))
5138c34aa09SBram Moolenaar  call delete('Xx x')
5148c34aa09SBram Moolenaarendfunc
515e961cba3SBram Moolenaar
516e961cba3SBram Moolenaarfunc Test_large_arg()
517e961cba3SBram Moolenaar  " Argument longer or equal to the number of columns used to cause
518e961cba3SBram Moolenaar  " access to invalid memory.
519e961cba3SBram Moolenaar  exe 'argadd ' .repeat('x', &columns)
520e961cba3SBram Moolenaar  args
521e961cba3SBram Moolenaarendfunc
52272e1b391SBram Moolenaar
52372e1b391SBram Moolenaarfunc Test_argdo()
52472e1b391SBram Moolenaar  next! Xa.c Xb.c Xc.c
52572e1b391SBram Moolenaar  new
52672e1b391SBram Moolenaar  let l = []
52772e1b391SBram Moolenaar  argdo call add(l, expand('%'))
52872e1b391SBram Moolenaar  call assert_equal(['Xa.c', 'Xb.c', 'Xc.c'], l)
52972e1b391SBram Moolenaar  bwipe Xa.c Xb.c Xc.c
53072e1b391SBram Moolenaarendfunc
5319f6277bdSBram Moolenaar
5328e7d6223SBram Moolenaar" Test for quitting Vim with unedited files in the argument list
5339f6277bdSBram Moolenaarfunc Test_quit_with_arglist()
534494e9069SBram Moolenaar  CheckRunVimInTerminal
53521829c5fSBram Moolenaar
5369f6277bdSBram Moolenaar  let buf = RunVimInTerminal('', {'rows': 6})
537818fc9adSBram Moolenaar  call term_sendkeys(buf, ":set nomore\n")
5389f6277bdSBram Moolenaar  call term_sendkeys(buf, ":args a b c\n")
5399f6277bdSBram Moolenaar  call term_sendkeys(buf, ":quit\n")
5406a2c5a7dSBram Moolenaar  call TermWait(buf)
5419f6277bdSBram Moolenaar  call WaitForAssert({-> assert_match('^E173:', term_getline(buf, 6))})
5429f6277bdSBram Moolenaar  call StopVimInTerminal(buf)
543406cd90fSBram Moolenaar
544406cd90fSBram Moolenaar  " Try :confirm quit with unedited files in arglist
545406cd90fSBram Moolenaar  let buf = RunVimInTerminal('', {'rows': 6})
546406cd90fSBram Moolenaar  call term_sendkeys(buf, ":set nomore\n")
547406cd90fSBram Moolenaar  call term_sendkeys(buf, ":args a b c\n")
548406cd90fSBram Moolenaar  call term_sendkeys(buf, ":confirm quit\n")
5496a2c5a7dSBram Moolenaar  call TermWait(buf)
550406cd90fSBram Moolenaar  call WaitForAssert({-> assert_match('^\[Y\]es, (N)o: *$',
551406cd90fSBram Moolenaar        \ term_getline(buf, 6))})
552406cd90fSBram Moolenaar  call term_sendkeys(buf, "N")
5536a2c5a7dSBram Moolenaar  call TermWait(buf)
554406cd90fSBram Moolenaar  call term_sendkeys(buf, ":confirm quit\n")
555406cd90fSBram Moolenaar  call WaitForAssert({-> assert_match('^\[Y\]es, (N)o: *$',
556406cd90fSBram Moolenaar        \ term_getline(buf, 6))})
557406cd90fSBram Moolenaar  call term_sendkeys(buf, "Y")
5586a2c5a7dSBram Moolenaar  call TermWait(buf)
559818fc9adSBram Moolenaar  call WaitForAssert({-> assert_equal("finished", term_getstatus(buf))})
560818fc9adSBram Moolenaar  only!
5611671f448SBram Moolenaar  " When this test fails, swap files are left behind which breaks subsequent
5621671f448SBram Moolenaar  " tests
5631671f448SBram Moolenaar  call delete('.a.swp')
5641671f448SBram Moolenaar  call delete('.b.swp')
5651671f448SBram Moolenaar  call delete('.c.swp')
5669f6277bdSBram Moolenaarendfunc
5679f6277bdSBram Moolenaar
568bb4b93edSBram Moolenaar" Test for ":all" not working when in the cmdline window
569bb4b93edSBram Moolenaarfunc Test_all_not_allowed_from_cmdwin()
57021829c5fSBram Moolenaar  CheckFeature cmdwin
57121829c5fSBram Moolenaar
572bb4b93edSBram Moolenaar  au BufEnter * all
573bb4b93edSBram Moolenaar  next x
574bed72df3SBram Moolenaar  " Use try/catch here, somehow assert_fails() doesn't work on MS-Windows
575bed72df3SBram Moolenaar  " console.
576bed72df3SBram Moolenaar  let caught = 'no'
577bed72df3SBram Moolenaar  try
578bed72df3SBram Moolenaar    exe ":norm! 7q?apat\<CR>"
579bed72df3SBram Moolenaar  catch /E11:/
580bed72df3SBram Moolenaar    let caught = 'yes'
581bed72df3SBram Moolenaar  endtry
582bed72df3SBram Moolenaar  call assert_equal('yes', caught)
583bb4b93edSBram Moolenaar  au! BufEnter
584bb4b93edSBram Moolenaarendfunc
585bb4b93edSBram Moolenaar
5869f6277bdSBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
587