xref: /vim-8.2.3635/src/testdir/test_options.vim (revision abdcfd1c)
1c8ce6152SBram Moolenaar" Test for options
2c8ce6152SBram Moolenaar
3b00ef050SBram Moolenaarsource shared.vim
48c5a278fSBram Moolenaarsource check.vim
5cde0ff39SBram Moolenaarsource view_util.vim
68c5a278fSBram Moolenaar
71e115360SBram Moolenaarfunc Test_whichwrap()
8c8ce6152SBram Moolenaar  set whichwrap=b,s
9c8ce6152SBram Moolenaar  call assert_equal('b,s', &whichwrap)
10c8ce6152SBram Moolenaar
11c8ce6152SBram Moolenaar  set whichwrap+=h,l
12c8ce6152SBram Moolenaar  call assert_equal('b,s,h,l', &whichwrap)
13c8ce6152SBram Moolenaar
14c8ce6152SBram Moolenaar  set whichwrap+=h,l
15c8ce6152SBram Moolenaar  call assert_equal('b,s,h,l', &whichwrap)
16c8ce6152SBram Moolenaar
17c8ce6152SBram Moolenaar  set whichwrap+=h,l
18c8ce6152SBram Moolenaar  call assert_equal('b,s,h,l', &whichwrap)
19c8ce6152SBram Moolenaar
20aaaf57d8SBram Moolenaar  set whichwrap=h,h
21aaaf57d8SBram Moolenaar  call assert_equal('h', &whichwrap)
22aaaf57d8SBram Moolenaar
23aaaf57d8SBram Moolenaar  set whichwrap=h,h,h
24aaaf57d8SBram Moolenaar  call assert_equal('h', &whichwrap)
25aaaf57d8SBram Moolenaar
26004a6781SBram Moolenaar  " For compatibility with Vim 3.0 and before, number values are also
27004a6781SBram Moolenaar  " supported for 'whichwrap'
28004a6781SBram Moolenaar  set whichwrap=1
29004a6781SBram Moolenaar  call assert_equal('b', &whichwrap)
30004a6781SBram Moolenaar  set whichwrap=2
31004a6781SBram Moolenaar  call assert_equal('s', &whichwrap)
32004a6781SBram Moolenaar  set whichwrap=4
33004a6781SBram Moolenaar  call assert_equal('h,l', &whichwrap)
34004a6781SBram Moolenaar  set whichwrap=8
35004a6781SBram Moolenaar  call assert_equal('<,>', &whichwrap)
36004a6781SBram Moolenaar  set whichwrap=16
37004a6781SBram Moolenaar  call assert_equal('[,]', &whichwrap)
38004a6781SBram Moolenaar  set whichwrap=31
39004a6781SBram Moolenaar  call assert_equal('b,s,h,l,<,>,[,]', &whichwrap)
40004a6781SBram Moolenaar
41c8ce6152SBram Moolenaar  set whichwrap&
421e115360SBram Moolenaarendfunc
43c8ce6152SBram Moolenaar
441e115360SBram Moolenaarfunc Test_isfname()
45187a4f28SBram Moolenaar  " This used to cause Vim to access uninitialized memory.
46187a4f28SBram Moolenaar  set isfname=
47187a4f28SBram Moolenaar  call assert_equal("~X", expand("~X"))
48187a4f28SBram Moolenaar  set isfname&
491e115360SBram Moolenaarendfunc
50187a4f28SBram Moolenaar
511e115360SBram Moolenaarfunc Test_wildchar()
52a12e4035SBram Moolenaar  " Empty 'wildchar' used to access invalid memory.
53a12e4035SBram Moolenaar  call assert_fails('set wildchar=', 'E521:')
54a12e4035SBram Moolenaar  call assert_fails('set wildchar=abc', 'E521:')
55a12e4035SBram Moolenaar  set wildchar=<Esc>
56a12e4035SBram Moolenaar  let a=execute('set wildchar?')
57a12e4035SBram Moolenaar  call assert_equal("\n  wildchar=<Esc>", a)
58a12e4035SBram Moolenaar  set wildchar=27
59a12e4035SBram Moolenaar  let a=execute('set wildchar?')
60a12e4035SBram Moolenaar  call assert_equal("\n  wildchar=<Esc>", a)
61a12e4035SBram Moolenaar  set wildchar&
621e115360SBram Moolenaarendfunc
63a12e4035SBram Moolenaar
642e61e2d0SBram Moolenaarfunc Test_wildoptions()
652e61e2d0SBram Moolenaar  set wildoptions=
662e61e2d0SBram Moolenaar  set wildoptions+=tagfile
672e61e2d0SBram Moolenaar  set wildoptions+=tagfile
682e61e2d0SBram Moolenaar  call assert_equal('tagfile', &wildoptions)
692e61e2d0SBram Moolenaarendfunc
702e61e2d0SBram Moolenaar
716b915c0cSBram Moolenaarfunc Test_options_command()
72c8ce6152SBram Moolenaar  let caught = 'ok'
73c8ce6152SBram Moolenaar  try
74c8ce6152SBram Moolenaar    options
75c8ce6152SBram Moolenaar  catch
76c8ce6152SBram Moolenaar    let caught = v:throwpoint . "\n" . v:exception
77c8ce6152SBram Moolenaar  endtry
78c8ce6152SBram Moolenaar  call assert_equal('ok', caught)
79c8ce6152SBram Moolenaar
80e0b5949aSBram Moolenaar  " Check if the option-window is opened horizontally.
81e0b5949aSBram Moolenaar  wincmd j
82e0b5949aSBram Moolenaar  call assert_notequal('option-window', bufname(''))
83e0b5949aSBram Moolenaar  wincmd k
84e0b5949aSBram Moolenaar  call assert_equal('option-window', bufname(''))
85e0b5949aSBram Moolenaar  " close option-window
86e0b5949aSBram Moolenaar  close
87e0b5949aSBram Moolenaar
88e0b5949aSBram Moolenaar  " Open the option-window vertically.
89e0b5949aSBram Moolenaar  vert options
90e0b5949aSBram Moolenaar  " Check if the option-window is opened vertically.
91e0b5949aSBram Moolenaar  wincmd l
92e0b5949aSBram Moolenaar  call assert_notequal('option-window', bufname(''))
93e0b5949aSBram Moolenaar  wincmd h
94e0b5949aSBram Moolenaar  call assert_equal('option-window', bufname(''))
95e0b5949aSBram Moolenaar  " close option-window
96e0b5949aSBram Moolenaar  close
97e0b5949aSBram Moolenaar
987a1637f4SBram Moolenaar  " Open the option-window at the top.
997a1637f4SBram Moolenaar  set splitbelow
1007a1637f4SBram Moolenaar  topleft options
1017a1637f4SBram Moolenaar  call assert_equal(1, winnr())
1027a1637f4SBram Moolenaar  close
1037a1637f4SBram Moolenaar
1047a1637f4SBram Moolenaar  " Open the option-window at the bottom.
1057a1637f4SBram Moolenaar  set nosplitbelow
1067a1637f4SBram Moolenaar  botright options
1077a1637f4SBram Moolenaar  call assert_equal(winnr('$'), winnr())
1087a1637f4SBram Moolenaar  close
1097a1637f4SBram Moolenaar  set splitbelow&
1107a1637f4SBram Moolenaar
111e0b5949aSBram Moolenaar  " Open the option-window in a new tab.
112e0b5949aSBram Moolenaar  tab options
113e0b5949aSBram Moolenaar  " Check if the option-window is opened in a tab.
114e0b5949aSBram Moolenaar  normal gT
115e0b5949aSBram Moolenaar  call assert_notequal('option-window', bufname(''))
116e0b5949aSBram Moolenaar  normal gt
117e0b5949aSBram Moolenaar  call assert_equal('option-window', bufname(''))
118c8ce6152SBram Moolenaar  " close option-window
119c8ce6152SBram Moolenaar  close
120004a6781SBram Moolenaar
121004a6781SBram Moolenaar  " Open the options window browse
122004a6781SBram Moolenaar  if has('browse')
123004a6781SBram Moolenaar    browse set
124004a6781SBram Moolenaar    call assert_equal('option-window', bufname(''))
125004a6781SBram Moolenaar    close
126004a6781SBram Moolenaar  endif
1271e115360SBram Moolenaarendfunc
128c8ce6152SBram Moolenaar
1291e115360SBram Moolenaarfunc Test_path_keep_commas()
130c8ce6152SBram Moolenaar  " Test that changing 'path' keeps two commas.
131c8ce6152SBram Moolenaar  set path=foo,,bar
132c8ce6152SBram Moolenaar  set path-=bar
133c8ce6152SBram Moolenaar  set path+=bar
134c8ce6152SBram Moolenaar  call assert_equal('foo,,bar', &path)
135c8ce6152SBram Moolenaar
136c8ce6152SBram Moolenaar  set path&
1371e115360SBram Moolenaarendfunc
13895ec9d6aSBram Moolenaar
13995ec9d6aSBram Moolenaarfunc Test_signcolumn()
1406d91bcb4SBram Moolenaar  CheckFeature signs
14195ec9d6aSBram Moolenaar  call assert_equal("auto", &signcolumn)
14295ec9d6aSBram Moolenaar  set signcolumn=yes
14395ec9d6aSBram Moolenaar  set signcolumn=no
14495ec9d6aSBram Moolenaar  call assert_fails('set signcolumn=nope')
14595ec9d6aSBram Moolenaarendfunc
14695ec9d6aSBram Moolenaar
147d0b5138bSBram Moolenaarfunc Test_filetype_valid()
148d0b5138bSBram Moolenaar  set ft=valid_name
149d0b5138bSBram Moolenaar  call assert_equal("valid_name", &filetype)
150d0b5138bSBram Moolenaar  set ft=valid-name
151d0b5138bSBram Moolenaar  call assert_equal("valid-name", &filetype)
152d0b5138bSBram Moolenaar
153d0b5138bSBram Moolenaar  call assert_fails(":set ft=wrong;name", "E474:")
154d0b5138bSBram Moolenaar  call assert_fails(":set ft=wrong\\\\name", "E474:")
155d0b5138bSBram Moolenaar  call assert_fails(":set ft=wrong\\|name", "E474:")
156d0b5138bSBram Moolenaar  call assert_fails(":set ft=wrong/name", "E474:")
157d0b5138bSBram Moolenaar  call assert_fails(":set ft=wrong\\\nname", "E474:")
158d0b5138bSBram Moolenaar  call assert_equal("valid-name", &filetype)
159d0b5138bSBram Moolenaar
160d0b5138bSBram Moolenaar  exe "set ft=trunc\x00name"
161d0b5138bSBram Moolenaar  call assert_equal("trunc", &filetype)
162d0b5138bSBram Moolenaarendfunc
163d0b5138bSBram Moolenaar
164d0b5138bSBram Moolenaarfunc Test_syntax_valid()
1656d91bcb4SBram Moolenaar  CheckFeature syntax
166d0b5138bSBram Moolenaar  set syn=valid_name
167d0b5138bSBram Moolenaar  call assert_equal("valid_name", &syntax)
168d0b5138bSBram Moolenaar  set syn=valid-name
169d0b5138bSBram Moolenaar  call assert_equal("valid-name", &syntax)
170d0b5138bSBram Moolenaar
171d0b5138bSBram Moolenaar  call assert_fails(":set syn=wrong;name", "E474:")
172d0b5138bSBram Moolenaar  call assert_fails(":set syn=wrong\\\\name", "E474:")
173d0b5138bSBram Moolenaar  call assert_fails(":set syn=wrong\\|name", "E474:")
174d0b5138bSBram Moolenaar  call assert_fails(":set syn=wrong/name", "E474:")
175d0b5138bSBram Moolenaar  call assert_fails(":set syn=wrong\\\nname", "E474:")
176d0b5138bSBram Moolenaar  call assert_equal("valid-name", &syntax)
177d0b5138bSBram Moolenaar
178d0b5138bSBram Moolenaar  exe "set syn=trunc\x00name"
179d0b5138bSBram Moolenaar  call assert_equal("trunc", &syntax)
180d0b5138bSBram Moolenaarendfunc
181d0b5138bSBram Moolenaar
182d0b5138bSBram Moolenaarfunc Test_keymap_valid()
1836d91bcb4SBram Moolenaar  CheckFeature keymap
184d0b5138bSBram Moolenaar  call assert_fails(":set kmp=valid_name", "E544:")
185d0b5138bSBram Moolenaar  call assert_fails(":set kmp=valid_name", "valid_name")
186d0b5138bSBram Moolenaar  call assert_fails(":set kmp=valid-name", "E544:")
187d0b5138bSBram Moolenaar  call assert_fails(":set kmp=valid-name", "valid-name")
188d0b5138bSBram Moolenaar
189d0b5138bSBram Moolenaar  call assert_fails(":set kmp=wrong;name", "E474:")
190d0b5138bSBram Moolenaar  call assert_fails(":set kmp=wrong\\\\name", "E474:")
191d0b5138bSBram Moolenaar  call assert_fails(":set kmp=wrong\\|name", "E474:")
192d0b5138bSBram Moolenaar  call assert_fails(":set kmp=wrong/name", "E474:")
193d0b5138bSBram Moolenaar  call assert_fails(":set kmp=wrong\\\nname", "E474:")
194d0b5138bSBram Moolenaar
195d0b5138bSBram Moolenaar  call assert_fails(":set kmp=trunc\x00name", "E544:")
196d0b5138bSBram Moolenaar  call assert_fails(":set kmp=trunc\x00name", "trunc")
197d0b5138bSBram Moolenaarendfunc
1987554da40SBram Moolenaar
199f422bcc7SBram Moolenaarfunc Check_dir_option(name)
2007554da40SBram Moolenaar  " Check that it's possible to set the option.
201f422bcc7SBram Moolenaar  exe 'set ' . a:name . '=/usr/share/dict/words'
202f422bcc7SBram Moolenaar  call assert_equal('/usr/share/dict/words', eval('&' . a:name))
203f422bcc7SBram Moolenaar  exe 'set ' . a:name . '=/usr/share/dict/words,/and/there'
204f422bcc7SBram Moolenaar  call assert_equal('/usr/share/dict/words,/and/there', eval('&' . a:name))
205f422bcc7SBram Moolenaar  exe 'set ' . a:name . '=/usr/share/dict\ words'
206f422bcc7SBram Moolenaar  call assert_equal('/usr/share/dict words', eval('&' . a:name))
2077554da40SBram Moolenaar
2087554da40SBram Moolenaar  " Check rejecting weird characters.
209f422bcc7SBram Moolenaar  call assert_fails("set " . a:name . "=/not&there", "E474:")
210f422bcc7SBram Moolenaar  call assert_fails("set " . a:name . "=/not>there", "E474:")
211f422bcc7SBram Moolenaar  call assert_fails("set " . a:name . "=/not.*there", "E474:")
212f422bcc7SBram Moolenaarendfunc
213f422bcc7SBram Moolenaar
21460629d64SBram Moolenaarfunc Test_cinkeys()
21560629d64SBram Moolenaar  " This used to cause invalid memory access
21660629d64SBram Moolenaar  set cindent cinkeys=0
21760629d64SBram Moolenaar  norm a
21860629d64SBram Moolenaar  set cindent& cinkeys&
21960629d64SBram Moolenaarendfunc
22060629d64SBram Moolenaar
221f422bcc7SBram Moolenaarfunc Test_dictionary()
222f422bcc7SBram Moolenaar  call Check_dir_option('dictionary')
223f422bcc7SBram Moolenaarendfunc
224f422bcc7SBram Moolenaar
225f422bcc7SBram Moolenaarfunc Test_thesaurus()
226f422bcc7SBram Moolenaar  call Check_dir_option('thesaurus')
227698f8b20SBram Moolenaarendfun
228698f8b20SBram Moolenaar
229226c5342SBram Moolenaarfunc Test_complete()
230226c5342SBram Moolenaar  " Trailing single backslash used to cause invalid memory access.
231226c5342SBram Moolenaar  set complete=s\
232226c5342SBram Moolenaar  new
233226c5342SBram Moolenaar  call feedkeys("i\<C-N>\<Esc>", 'xt')
234226c5342SBram Moolenaar  bwipe!
235ee4e0c1eSBram Moolenaar  call assert_fails('set complete=ix', 'E535:')
236226c5342SBram Moolenaar  set complete&
237226c5342SBram Moolenaarendfun
238226c5342SBram Moolenaar
239698f8b20SBram Moolenaarfunc Test_set_completion()
240698f8b20SBram Moolenaar  call feedkeys(":set di\<C-A>\<C-B>\"\<CR>", 'tx')
241698f8b20SBram Moolenaar  call assert_equal('"set dictionary diff diffexpr diffopt digraph directory display', @:)
242698f8b20SBram Moolenaar
243297610baSBram Moolenaar  call feedkeys(":setlocal di\<C-A>\<C-B>\"\<CR>", 'tx')
244297610baSBram Moolenaar  call assert_equal('"setlocal dictionary diff diffexpr diffopt digraph directory display', @:)
245297610baSBram Moolenaar
246297610baSBram Moolenaar  call feedkeys(":setglobal di\<C-A>\<C-B>\"\<CR>", 'tx')
247297610baSBram Moolenaar  call assert_equal('"setglobal dictionary diff diffexpr diffopt digraph directory display', @:)
248297610baSBram Moolenaar
249698f8b20SBram Moolenaar  " Expand boolan options. When doing :set no<Tab>
250698f8b20SBram Moolenaar  " vim displays the options names without "no" but completion uses "no...".
251698f8b20SBram Moolenaar  call feedkeys(":set nodi\<C-A>\<C-B>\"\<CR>", 'tx')
252698f8b20SBram Moolenaar  call assert_equal('"set nodiff digraph', @:)
253698f8b20SBram Moolenaar
254698f8b20SBram Moolenaar  call feedkeys(":set invdi\<C-A>\<C-B>\"\<CR>", 'tx')
255698f8b20SBram Moolenaar  call assert_equal('"set invdiff digraph', @:)
256698f8b20SBram Moolenaar
257698f8b20SBram Moolenaar  " Expand abbreviation of options.
258698f8b20SBram Moolenaar  call feedkeys(":set ts\<C-A>\<C-B>\"\<CR>", 'tx')
259*abdcfd1cSBram Moolenaar  call assert_equal('"set tabstop thesaurus thesaurusfunc ttyscroll', @:)
260698f8b20SBram Moolenaar
261698f8b20SBram Moolenaar  " Expand current value
262698f8b20SBram Moolenaar  call feedkeys(":set fileencodings=\<C-A>\<C-B>\"\<CR>", 'tx')
263698f8b20SBram Moolenaar  call assert_equal('"set fileencodings=ucs-bom,utf-8,default,latin1', @:)
264698f8b20SBram Moolenaar
265698f8b20SBram Moolenaar  call feedkeys(":set fileencodings:\<C-A>\<C-B>\"\<CR>", 'tx')
266698f8b20SBram Moolenaar  call assert_equal('"set fileencodings:ucs-bom,utf-8,default,latin1', @:)
267698f8b20SBram Moolenaar
268698f8b20SBram Moolenaar  " Expand key codes.
269698f8b20SBram Moolenaar  call feedkeys(":set <H\<C-A>\<C-B>\"\<CR>", 'tx')
270698f8b20SBram Moolenaar  call assert_equal('"set <Help> <Home>', @:)
271698f8b20SBram Moolenaar
272698f8b20SBram Moolenaar  " Expand terminal options.
273698f8b20SBram Moolenaar  call feedkeys(":set t_A\<C-A>\<C-B>\"\<CR>", 'tx')
274e023e88bSBram Moolenaar  call assert_equal('"set t_AB t_AF t_AU t_AL', @:)
2750ff5dedfSBram Moolenaar  call assert_fails('call feedkeys(":set <t_afoo>=\<C-A>\<CR>", "xt")', 'E474:')
276698f8b20SBram Moolenaar
277698f8b20SBram Moolenaar  " Expand directories.
278698f8b20SBram Moolenaar  call feedkeys(":set cdpath=./\<C-A>\<C-B>\"\<CR>", 'tx')
279698f8b20SBram Moolenaar  call assert_match(' ./samples/ ', @:)
280b96a32efSBram Moolenaar  call assert_notmatch(' ./summarize.vim ', @:)
281698f8b20SBram Moolenaar
282698f8b20SBram Moolenaar  " Expand files and directories.
283698f8b20SBram Moolenaar  call feedkeys(":set tags=./\<C-A>\<C-B>\"\<CR>", 'tx')
284b96a32efSBram Moolenaar  call assert_match(' ./samples/.* ./summarize.vim', @:)
285698f8b20SBram Moolenaar
286698f8b20SBram Moolenaar  call feedkeys(":set tags=./\\\\ dif\<C-A>\<C-B>\"\<CR>", 'tx')
287698f8b20SBram Moolenaar  call assert_equal('"set tags=./\\ diff diffexpr diffopt', @:)
2880331faf7SBram Moolenaar  set tags&
2891363a30cSBram Moolenaar
2901363a30cSBram Moolenaar  " Expanding the option names
2911363a30cSBram Moolenaar  call feedkeys(":set \<Tab>\<C-B>\"\<CR>", 'xt')
2921363a30cSBram Moolenaar  call assert_equal('"set all', @:)
2931363a30cSBram Moolenaar
2941363a30cSBram Moolenaar  " Expanding a second set of option names
2951363a30cSBram Moolenaar  call feedkeys(":set wrapscan \<Tab>\<C-B>\"\<CR>", 'xt')
2961363a30cSBram Moolenaar  call assert_equal('"set wrapscan all', @:)
2971363a30cSBram Moolenaar
2981363a30cSBram Moolenaar  " Expanding a special keycode
2991363a30cSBram Moolenaar  call feedkeys(":set <Home>\<Tab>\<C-B>\"\<CR>", 'xt')
3001363a30cSBram Moolenaar  call assert_equal('"set <Home>', @:)
3011363a30cSBram Moolenaar
3021363a30cSBram Moolenaar  " Expanding an invalid special keycode
3031363a30cSBram Moolenaar  call feedkeys(":set <abcd>\<Tab>\<C-B>\"\<CR>", 'xt')
3041363a30cSBram Moolenaar  call assert_equal("\"set <abcd>\<Tab>", @:)
3051363a30cSBram Moolenaar
3061363a30cSBram Moolenaar  " Expanding a terminal keycode
3071363a30cSBram Moolenaar  call feedkeys(":set t_AB\<Tab>\<C-B>\"\<CR>", 'xt')
3081363a30cSBram Moolenaar  call assert_equal("\"set t_AB", @:)
3091363a30cSBram Moolenaar
3101363a30cSBram Moolenaar  " Expanding an invalid option name
3111363a30cSBram Moolenaar  call feedkeys(":set abcde=\<Tab>\<C-B>\"\<CR>", 'xt')
3121363a30cSBram Moolenaar  call assert_equal("\"set abcde=\<Tab>", @:)
3131363a30cSBram Moolenaar
3141363a30cSBram Moolenaar  " Expanding after a = for a boolean option
3151363a30cSBram Moolenaar  call feedkeys(":set wrapscan=\<Tab>\<C-B>\"\<CR>", 'xt')
3161363a30cSBram Moolenaar  call assert_equal("\"set wrapscan=\<Tab>", @:)
3171363a30cSBram Moolenaar
3181363a30cSBram Moolenaar  " Expanding a numeric option
3191363a30cSBram Moolenaar  call feedkeys(":set tabstop+=\<Tab>\<C-B>\"\<CR>", 'xt')
3201363a30cSBram Moolenaar  call assert_equal("\"set tabstop+=" .. &tabstop, @:)
3211363a30cSBram Moolenaar
3221363a30cSBram Moolenaar  " Expanding a non-boolean option
3231363a30cSBram Moolenaar  call feedkeys(":set invtabstop=\<Tab>\<C-B>\"\<CR>", 'xt')
3241363a30cSBram Moolenaar  call assert_equal("\"set invtabstop=", @:)
3251363a30cSBram Moolenaar
3261363a30cSBram Moolenaar  " Expand options for 'spellsuggest'
3271363a30cSBram Moolenaar  call feedkeys(":set spellsuggest=best,file:xyz\<Tab>\<C-B>\"\<CR>", 'xt')
3281363a30cSBram Moolenaar  call assert_equal("\"set spellsuggest=best,file:xyz", @:)
3291363a30cSBram Moolenaar
3301363a30cSBram Moolenaar  " Expand value for 'key'
3311363a30cSBram Moolenaar  set key=abcd
3321363a30cSBram Moolenaar  call feedkeys(":set key=\<Tab>\<C-B>\"\<CR>", 'xt')
3331363a30cSBram Moolenaar  call assert_equal('"set key=*****', @:)
3341363a30cSBram Moolenaar  set key=
335d5e8c928SBram Moolenaar
336d5e8c928SBram Moolenaar  " Expand values for 'filetype'
337d5e8c928SBram Moolenaar  call feedkeys(":set filetype=sshdconfi\<Tab>\<C-B>\"\<CR>", 'xt')
338d5e8c928SBram Moolenaar  call assert_equal('"set filetype=sshdconfig', @:)
339d5e8c928SBram Moolenaar  call feedkeys(":set filetype=a\<C-A>\<C-B>\"\<CR>", 'xt')
340d5e8c928SBram Moolenaar  call assert_equal('"set filetype=' .. getcompletion('a*', 'filetype')->join(), @:)
341698f8b20SBram Moolenaarendfunc
342698f8b20SBram Moolenaar
343698f8b20SBram Moolenaarfunc Test_set_errors()
344698f8b20SBram Moolenaar  call assert_fails('set scroll=-1', 'E49:')
345698f8b20SBram Moolenaar  call assert_fails('set backupcopy=', 'E474:')
346698f8b20SBram Moolenaar  call assert_fails('set regexpengine=3', 'E474:')
347698f8b20SBram Moolenaar  call assert_fails('set history=10001', 'E474:')
348f8a07126SBram Moolenaar  call assert_fails('set numberwidth=21', 'E474:')
3499b9be007SBram Moolenaar  call assert_fails('set colorcolumn=-a', 'E474:')
3509b9be007SBram Moolenaar  call assert_fails('set colorcolumn=a', 'E474:')
3519b9be007SBram Moolenaar  call assert_fails('set colorcolumn=1,', 'E474:')
3529b9be007SBram Moolenaar  call assert_fails('set colorcolumn=1;', 'E474:')
353698f8b20SBram Moolenaar  call assert_fails('set cmdheight=-1', 'E487:')
354698f8b20SBram Moolenaar  call assert_fails('set cmdwinheight=-1', 'E487:')
355698f8b20SBram Moolenaar  if has('conceal')
356698f8b20SBram Moolenaar    call assert_fails('set conceallevel=-1', 'E487:')
357698f8b20SBram Moolenaar    call assert_fails('set conceallevel=4', 'E474:')
358698f8b20SBram Moolenaar  endif
359698f8b20SBram Moolenaar  call assert_fails('set helpheight=-1', 'E487:')
360698f8b20SBram Moolenaar  call assert_fails('set history=-1', 'E487:')
361698f8b20SBram Moolenaar  call assert_fails('set report=-1', 'E487:')
362698f8b20SBram Moolenaar  call assert_fails('set shiftwidth=-1', 'E487:')
363698f8b20SBram Moolenaar  call assert_fails('set sidescroll=-1', 'E487:')
364698f8b20SBram Moolenaar  call assert_fails('set tabstop=-1', 'E487:')
365698f8b20SBram Moolenaar  call assert_fails('set textwidth=-1', 'E487:')
366698f8b20SBram Moolenaar  call assert_fails('set timeoutlen=-1', 'E487:')
367698f8b20SBram Moolenaar  call assert_fails('set updatecount=-1', 'E487:')
368698f8b20SBram Moolenaar  call assert_fails('set updatetime=-1', 'E487:')
369698f8b20SBram Moolenaar  call assert_fails('set winheight=-1', 'E487:')
370698f8b20SBram Moolenaar  call assert_fails('set tabstop!', 'E488:')
371698f8b20SBram Moolenaar  call assert_fails('set xxx', 'E518:')
372698f8b20SBram Moolenaar  call assert_fails('set beautify?', 'E519:')
373698f8b20SBram Moolenaar  call assert_fails('set undolevels=x', 'E521:')
374698f8b20SBram Moolenaar  call assert_fails('set tabstop=', 'E521:')
375698f8b20SBram Moolenaar  call assert_fails('set comments=-', 'E524:')
376698f8b20SBram Moolenaar  call assert_fails('set comments=a', 'E525:')
377698f8b20SBram Moolenaar  call assert_fails('set foldmarker=x', 'E536:')
378698f8b20SBram Moolenaar  call assert_fails('set commentstring=x', 'E537:')
379698f8b20SBram Moolenaar  call assert_fails('set complete=x', 'E539:')
38085773bf3SBram Moolenaar  call assert_fails('set rulerformat=%-', 'E539:')
38185773bf3SBram Moolenaar  call assert_fails('set rulerformat=%(', 'E542:')
38285773bf3SBram Moolenaar  call assert_fails('set rulerformat=%15(%%', 'E542:')
38385773bf3SBram Moolenaar  call assert_fails('set statusline=%$', 'E539:')
384698f8b20SBram Moolenaar  call assert_fails('set statusline=%{', 'E540:')
385698f8b20SBram Moolenaar  call assert_fails('set statusline=%(', 'E542:')
38685773bf3SBram Moolenaar  call assert_fails('set statusline=%)', 'E542:')
38785773bf3SBram Moolenaar
38824922ec2SBram Moolenaar  if has('cursorshape')
38924922ec2SBram Moolenaar    " This invalid value for 'guicursor' used to cause Vim to crash.
39024922ec2SBram Moolenaar    call assert_fails('set guicursor=i-ci,r-cr:h', 'E545:')
39124922ec2SBram Moolenaar    call assert_fails('set guicursor=i-ci', 'E545:')
392698f8b20SBram Moolenaar    call assert_fails('set guicursor=x', 'E545:')
3939b9be007SBram Moolenaar    call assert_fails('set guicursor=x:', 'E546:')
39424922ec2SBram Moolenaar    call assert_fails('set guicursor=r-cr:horx', 'E548:')
39524922ec2SBram Moolenaar    call assert_fails('set guicursor=r-cr:hor0', 'E549:')
39624922ec2SBram Moolenaar  endif
3979b9be007SBram Moolenaar  if has('mouseshape')
3989b9be007SBram Moolenaar    call assert_fails('se mouseshape=i-r:x', 'E547:')
3999b9be007SBram Moolenaar  endif
400698f8b20SBram Moolenaar  call assert_fails('set backupext=~ patchmode=~', 'E589:')
401698f8b20SBram Moolenaar  call assert_fails('set winminheight=10 winheight=9', 'E591:')
4021363a30cSBram Moolenaar  set winminheight& winheight&
4031363a30cSBram Moolenaar  set winheight=10 winminheight=10
4041363a30cSBram Moolenaar  call assert_fails('set winheight=9', 'E591:')
4051363a30cSBram Moolenaar  set winminheight& winheight&
406698f8b20SBram Moolenaar  call assert_fails('set winminwidth=10 winwidth=9', 'E592:')
4071363a30cSBram Moolenaar  set winminwidth& winwidth&
4081363a30cSBram Moolenaar  call assert_fails('set winwidth=9 winminwidth=10', 'E592:')
4091363a30cSBram Moolenaar  set winwidth& winminwidth&
410698f8b20SBram Moolenaar  call assert_fails("set showbreak=\x01", 'E595:')
411698f8b20SBram Moolenaar  call assert_fails('set t_foo=', 'E846:')
412004a6781SBram Moolenaar  call assert_fails('set tabstop??', 'E488:')
413004a6781SBram Moolenaar  call assert_fails('set wrapscan!!', 'E488:')
414004a6781SBram Moolenaar  call assert_fails('set tabstop&&', 'E488:')
415004a6781SBram Moolenaar  call assert_fails('set wrapscan<<', 'E488:')
416004a6781SBram Moolenaar  call assert_fails('set wrapscan=1', 'E474:')
417004a6781SBram Moolenaar  call assert_fails('set autoindent@', 'E488:')
418004a6781SBram Moolenaar  call assert_fails('set wildchar=<abc>', 'E474:')
419004a6781SBram Moolenaar  call assert_fails('set cmdheight=1a', 'E521:')
4201363a30cSBram Moolenaar  call assert_fails('set invcmdheight', 'E474:')
42185773bf3SBram Moolenaar  if has('python') || has('python3')
422004a6781SBram Moolenaar    call assert_fails('set pyxversion=6', 'E474:')
423004a6781SBram Moolenaar  endif
4241363a30cSBram Moolenaar  call assert_fails("let &tabstop='ab'", 'E521:')
425531be47aSBram Moolenaar  call assert_fails('set spellcapcheck=%\\(', 'E54:')
42685773bf3SBram Moolenaar  call assert_fails('set sessionoptions=curdir,sesdir', 'E474:')
42785773bf3SBram Moolenaar  call assert_fails('set foldmarker={{{,', 'E474:')
42885773bf3SBram Moolenaar  call assert_fails('set sessionoptions=sesdir,curdir', 'E474:')
42985773bf3SBram Moolenaar  call assert_fails('set listchars=trail:· ambiwidth=double', 'E834:')
43085773bf3SBram Moolenaar  set listchars&
43185773bf3SBram Moolenaar  call assert_fails('set fillchars=stl:· ambiwidth=double', 'E835:')
43285773bf3SBram Moolenaar  set fillchars&
43385773bf3SBram Moolenaar  call assert_fails('set fileencoding=latin1,utf-8', 'E474:')
43485773bf3SBram Moolenaar  set nomodifiable
43585773bf3SBram Moolenaar  call assert_fails('set fileencoding=latin1', 'E21:')
43685773bf3SBram Moolenaar  set modifiable&
43759585497SYegappan Lakshmanan  call assert_fails('set t_#-&', 'E522:')
4387554da40SBram Moolenaarendfunc
43967391145SBram Moolenaar
440cfb38142SBram Moolenaarfunc CheckWasSet(name)
441cfb38142SBram Moolenaar  let verb_cm = execute('verbose set ' .. a:name .. '?')
442cfb38142SBram Moolenaar  call assert_match('Last set from.*test_options.vim', verb_cm)
443cfb38142SBram Moolenaarendfunc
444cfb38142SBram Moolenaarfunc CheckWasNotSet(name)
445cfb38142SBram Moolenaar  let verb_cm = execute('verbose set ' .. a:name .. '?')
446cfb38142SBram Moolenaar  call assert_notmatch('Last set from', verb_cm)
447cfb38142SBram Moolenaarendfunc
448cfb38142SBram Moolenaar
44935bc7d6cSBram Moolenaar" Must be executed before other tests that set 'term'.
45035bc7d6cSBram Moolenaarfunc Test_000_term_option_verbose()
4518c5a278fSBram Moolenaar  CheckNotGui
4528c5a278fSBram Moolenaar
453cfb38142SBram Moolenaar  call CheckWasNotSet('t_cm')
45435bc7d6cSBram Moolenaar
45535bc7d6cSBram Moolenaar  let term_save = &term
45635bc7d6cSBram Moolenaar  set term=ansi
457cfb38142SBram Moolenaar  call CheckWasSet('t_cm')
45835bc7d6cSBram Moolenaar  let &term = term_save
45935bc7d6cSBram Moolenaarendfunc
46035bc7d6cSBram Moolenaar
461cfb38142SBram Moolenaarfunc Test_copy_context()
462cfb38142SBram Moolenaar  setlocal list
463cfb38142SBram Moolenaar  call CheckWasSet('list')
464cfb38142SBram Moolenaar  split
465cfb38142SBram Moolenaar  call CheckWasSet('list')
466cfb38142SBram Moolenaar  quit
467cfb38142SBram Moolenaar  setlocal nolist
468cfb38142SBram Moolenaar
469cfb38142SBram Moolenaar  set ai
470cfb38142SBram Moolenaar  call CheckWasSet('ai')
471cfb38142SBram Moolenaar  set filetype=perl
472cfb38142SBram Moolenaar  call CheckWasSet('filetype')
473cfb38142SBram Moolenaar  set fo=tcroq
474cfb38142SBram Moolenaar  call CheckWasSet('fo')
475cfb38142SBram Moolenaar
476cfb38142SBram Moolenaar  split Xsomebuf
477cfb38142SBram Moolenaar  call CheckWasSet('ai')
478cfb38142SBram Moolenaar  call CheckWasNotSet('filetype')
479cfb38142SBram Moolenaar  call CheckWasSet('fo')
480cfb38142SBram Moolenaarendfunc
481cfb38142SBram Moolenaar
48267391145SBram Moolenaarfunc Test_set_ttytype()
4838c5a278fSBram Moolenaar  CheckUnix
4848c5a278fSBram Moolenaar  CheckNotGui
4858c5a278fSBram Moolenaar
48667391145SBram Moolenaar  " Setting 'ttytype' used to cause a double-free when exiting vim and
48767391145SBram Moolenaar  " when vim is compiled with -DEXITFREE.
48867391145SBram Moolenaar  set ttytype=ansi
48967391145SBram Moolenaar  call assert_equal('ansi', &ttytype)
49067391145SBram Moolenaar  call assert_equal(&ttytype, &term)
49167391145SBram Moolenaar  set ttytype=xterm
49267391145SBram Moolenaar  call assert_equal('xterm', &ttytype)
49367391145SBram Moolenaar  call assert_equal(&ttytype, &term)
494f803a769SBram Moolenaar  try
495f803a769SBram Moolenaar    set ttytype=
49669e05691SBram Moolenaar    call assert_report('set ttytype= did not fail')
4975daa9116SBram Moolenaar  catch /E529/
498f803a769SBram Moolenaar  endtry
499f803a769SBram Moolenaar
500f803a769SBram Moolenaar  " Some systems accept any terminal name and return dumb settings,
501f803a769SBram Moolenaar  " check for failure of finding the entry and for missing 'cm' entry.
502f803a769SBram Moolenaar  try
503f803a769SBram Moolenaar    set ttytype=xxx
50469e05691SBram Moolenaar    call assert_report('set ttytype=xxx did not fail')
505f803a769SBram Moolenaar  catch /E522\|E437/
506f803a769SBram Moolenaar  endtry
507f803a769SBram Moolenaar
50867391145SBram Moolenaar  set ttytype&
50967391145SBram Moolenaar  call assert_equal(&ttytype, &term)
510ee4e0c1eSBram Moolenaar
511ee4e0c1eSBram Moolenaar  if has('gui') && !has('gui_running')
512ee4e0c1eSBram Moolenaar    call assert_fails('set term=gui', 'E531:')
513ee4e0c1eSBram Moolenaar  endif
51467391145SBram Moolenaarendfunc
5152f5463dfSBram Moolenaar
5162f5463dfSBram Moolenaarfunc Test_set_all()
5172f5463dfSBram Moolenaar  set tw=75
5182f5463dfSBram Moolenaar  set iskeyword=a-z,A-Z
5192f5463dfSBram Moolenaar  set nosplitbelow
5202f5463dfSBram Moolenaar  let out = execute('set all')
5212f5463dfSBram Moolenaar  call assert_match('textwidth=75', out)
5222f5463dfSBram Moolenaar  call assert_match('iskeyword=a-z,A-Z', out)
5232f5463dfSBram Moolenaar  call assert_match('nosplitbelow', out)
5242f5463dfSBram Moolenaar  set tw& iskeyword& splitbelow&
5252f5463dfSBram Moolenaarendfunc
5262f5463dfSBram Moolenaar
5276b915c0cSBram Moolenaarfunc Test_set_one_column()
5286b915c0cSBram Moolenaar  let out_mult = execute('set all')->split("\n")
5296b915c0cSBram Moolenaar  let out_one = execute('set! all')->split("\n")
530ab505b1aSBram Moolenaar  call assert_true(len(out_mult) < len(out_one))
5316b915c0cSBram Moolenaarendfunc
5326b915c0cSBram Moolenaar
5332f5463dfSBram Moolenaarfunc Test_set_values()
534bdd2c290SBram Moolenaar  " opt_test.vim is generated from ../optiondefs.h using gen_opt_test.vim
5352f5463dfSBram Moolenaar  if filereadable('opt_test.vim')
5362f5463dfSBram Moolenaar    source opt_test.vim
537e8512d7fSBram Moolenaar  else
538e8512d7fSBram Moolenaar    throw 'Skipped: opt_test.vim does not exist'
5392f5463dfSBram Moolenaar  endif
5402f5463dfSBram Moolenaarendfunc
541a701b3b6SBram Moolenaar
5420c1e3744SBram Moolenaarfunc Test_renderoptions()
5430c1e3744SBram Moolenaar  " Only do this for Windows Vista and later, fails on Windows XP and earlier.
5440c1e3744SBram Moolenaar  " Doesn't hurt to do this on a non-Windows system.
5450c1e3744SBram Moolenaar  if windowsversion() !~ '^[345]\.'
5460c1e3744SBram Moolenaar    set renderoptions=type:directx
5470c1e3744SBram Moolenaar    set rop=type:directx
5480c1e3744SBram Moolenaar  endif
5490c1e3744SBram Moolenaarendfunc
5500c1e3744SBram Moolenaar
551a701b3b6SBram Moolenaarfunc ResetIndentexpr()
552a701b3b6SBram Moolenaar  set indentexpr=
553a701b3b6SBram Moolenaarendfunc
554a701b3b6SBram Moolenaar
555a701b3b6SBram Moolenaarfunc Test_set_indentexpr()
556a701b3b6SBram Moolenaar  " this was causing usage of freed memory
557a701b3b6SBram Moolenaar  set indentexpr=ResetIndentexpr()
558a701b3b6SBram Moolenaar  new
559a701b3b6SBram Moolenaar  call feedkeys("i\<c-f>", 'x')
560a701b3b6SBram Moolenaar  call assert_equal('', &indentexpr)
561a701b3b6SBram Moolenaar  bwipe!
562a701b3b6SBram Moolenaarendfunc
563b8e22a05SBram Moolenaar
564b8e22a05SBram Moolenaarfunc Test_backupskip()
56598ad1e17SBram Moolenaar  " Option 'backupskip' may contain several comma-separated path
56698ad1e17SBram Moolenaar  " specifications if one or more of the environment variables TMPDIR, TMP,
56798ad1e17SBram Moolenaar  " or TEMP is defined.  To simplify testing, convert the string value into a
56898ad1e17SBram Moolenaar  " list.
56998ad1e17SBram Moolenaar  let bsklist = split(&bsk, ',')
57098ad1e17SBram Moolenaar
571b8e22a05SBram Moolenaar  if has("mac")
57298ad1e17SBram Moolenaar    let found = (index(bsklist, '/private/tmp/*') >= 0)
57398ad1e17SBram Moolenaar    call assert_true(found, '/private/tmp not in option bsk: ' . &bsk)
574b8e22a05SBram Moolenaar  elseif has("unix")
57598ad1e17SBram Moolenaar    let found = (index(bsklist, '/tmp/*') >= 0)
57698ad1e17SBram Moolenaar    call assert_true(found, '/tmp not in option bsk: ' . &bsk)
577b8e22a05SBram Moolenaar  endif
578b8e22a05SBram Moolenaar
57998ad1e17SBram Moolenaar  " If our test platform is Windows, the path(s) in option bsk will use
58098ad1e17SBram Moolenaar  " backslash for the path separator and the components could be in short
58198ad1e17SBram Moolenaar  " (8.3) format.  As such, we need to replace the backslashes with forward
58298ad1e17SBram Moolenaar  " slashes and convert the path components to long format.  The expand()
58398ad1e17SBram Moolenaar  " function will do this but it cannot handle comma-separated paths.  This is
58498ad1e17SBram Moolenaar  " why bsk was converted from a string into a list of strings above.
58598ad1e17SBram Moolenaar  "
58698ad1e17SBram Moolenaar  " One final complication is that the wildcard "/*" is at the end of each
58798ad1e17SBram Moolenaar  " path and so expand() might return a list of matching files.  To prevent
58898ad1e17SBram Moolenaar  " this, we need to remove the wildcard before calling expand() and then
58998ad1e17SBram Moolenaar  " append it afterwards.
59098ad1e17SBram Moolenaar  if has('win32')
59198ad1e17SBram Moolenaar    let item_nbr = 0
59298ad1e17SBram Moolenaar    while item_nbr < len(bsklist)
59398ad1e17SBram Moolenaar      let path_spec = bsklist[item_nbr]
59498ad1e17SBram Moolenaar      let path_spec = strcharpart(path_spec, 0, strlen(path_spec)-2)
59598ad1e17SBram Moolenaar      let path_spec = substitute(expand(path_spec), '\\', '/', 'g')
59698ad1e17SBram Moolenaar      let bsklist[item_nbr] = path_spec . '/*'
59798ad1e17SBram Moolenaar      let item_nbr += 1
59898ad1e17SBram Moolenaar    endwhile
59998ad1e17SBram Moolenaar  endif
60098ad1e17SBram Moolenaar
60198ad1e17SBram Moolenaar  " Option bsk will also include these environment variables if defined.
60298ad1e17SBram Moolenaar  " If they're defined, verify they appear in the option value.
60398ad1e17SBram Moolenaar  for var in  ['$TMPDIR', '$TMP', '$TEMP']
604b8e22a05SBram Moolenaar    if exists(var)
605b8e22a05SBram Moolenaar      let varvalue = substitute(expand(var), '\\', '/', 'g')
606cbbd0f65SBram Moolenaar      let varvalue = substitute(varvalue, '/$', '', '')
607cbbd0f65SBram Moolenaar      let varvalue .= '/*'
608cbbd0f65SBram Moolenaar      let found = (index(bsklist, varvalue) >= 0)
609cbbd0f65SBram Moolenaar      call assert_true(found, var . ' (' . varvalue . ') not in option bsk: ' . &bsk)
610b8e22a05SBram Moolenaar    endif
611b8e22a05SBram Moolenaar  endfor
61206e2c81fSBram Moolenaar
613b00ef050SBram Moolenaar  " Duplicates from environment variables should be filtered out (option has
614b00ef050SBram Moolenaar  " P_NODUP).  Run this in a separate instance and write v:errors in a file,
615b00ef050SBram Moolenaar  " so that we see what happens on startup.
616b00ef050SBram Moolenaar  let after =<< trim [CODE]
617b00ef050SBram Moolenaar      let bsklist = split(&backupskip, ',')
618b00ef050SBram Moolenaar      call assert_equal(uniq(copy(bsklist)), bsklist)
619b00ef050SBram Moolenaar      call writefile(['errors:'] + v:errors, 'Xtestout')
620b00ef050SBram Moolenaar      qall
621b00ef050SBram Moolenaar  [CODE]
622b00ef050SBram Moolenaar  call writefile(after, 'Xafter')
623b00ef050SBram Moolenaar  let cmd = GetVimProg() . ' --not-a-term -S Xafter --cmd "set enc=utf8"'
624b00ef050SBram Moolenaar
625b00ef050SBram Moolenaar  let saveenv = {}
626b00ef050SBram Moolenaar  for var in ['TMPDIR', 'TMP', 'TEMP']
627b00ef050SBram Moolenaar    let saveenv[var] = getenv(var)
628b00ef050SBram Moolenaar    call setenv(var, '/duplicate/path')
629b00ef050SBram Moolenaar  endfor
630b00ef050SBram Moolenaar
631b00ef050SBram Moolenaar  exe 'silent !' . cmd
632b00ef050SBram Moolenaar  call assert_equal(['errors:'], readfile('Xtestout'))
633b00ef050SBram Moolenaar
634b00ef050SBram Moolenaar  " restore environment variables
635b00ef050SBram Moolenaar  for var in ['TMPDIR', 'TMP', 'TEMP']
636b00ef050SBram Moolenaar    call setenv(var, saveenv[var])
637b00ef050SBram Moolenaar  endfor
638b00ef050SBram Moolenaar
639b00ef050SBram Moolenaar  call delete('Xtestout')
640b00ef050SBram Moolenaar  call delete('Xafter')
641b00ef050SBram Moolenaar
64206e2c81fSBram Moolenaar  " Duplicates should be filtered out (option has P_NODUP)
64306e2c81fSBram Moolenaar  let backupskip = &backupskip
64406e2c81fSBram Moolenaar  set backupskip=
64506e2c81fSBram Moolenaar  set backupskip+=/test/dir
64606e2c81fSBram Moolenaar  set backupskip+=/other/dir
64706e2c81fSBram Moolenaar  set backupskip+=/test/dir
64806e2c81fSBram Moolenaar  call assert_equal('/test/dir,/other/dir', &backupskip)
64906e2c81fSBram Moolenaar  let &backupskip = backupskip
650b8e22a05SBram Moolenaarendfunc
65125782a7fSBram Moolenaar
65225782a7fSBram Moolenaarfunc Test_copy_winopt()
65325782a7fSBram Moolenaar  set hidden
65425782a7fSBram Moolenaar
65525782a7fSBram Moolenaar  " Test copy option from current buffer in window
65625782a7fSBram Moolenaar  split
65725782a7fSBram Moolenaar  enew
65825782a7fSBram Moolenaar  setlocal numberwidth=5
65925782a7fSBram Moolenaar  wincmd w
66025782a7fSBram Moolenaar  call assert_equal(4,&numberwidth)
66125782a7fSBram Moolenaar  bnext
66225782a7fSBram Moolenaar  call assert_equal(5,&numberwidth)
66325782a7fSBram Moolenaar  bw!
66425782a7fSBram Moolenaar  call assert_equal(4,&numberwidth)
66525782a7fSBram Moolenaar
66625782a7fSBram Moolenaar  " Test copy value from window that used to be display the buffer
66725782a7fSBram Moolenaar  split
66825782a7fSBram Moolenaar  enew
66925782a7fSBram Moolenaar  setlocal numberwidth=6
67025782a7fSBram Moolenaar  bnext
67125782a7fSBram Moolenaar  wincmd w
67225782a7fSBram Moolenaar  call assert_equal(4,&numberwidth)
67325782a7fSBram Moolenaar  bnext
67425782a7fSBram Moolenaar  call assert_equal(6,&numberwidth)
67525782a7fSBram Moolenaar  bw!
67625782a7fSBram Moolenaar
67725782a7fSBram Moolenaar  " Test that if buffer is current, don't use the stale cached value
67825782a7fSBram Moolenaar  " from the last time the buffer was displayed.
67925782a7fSBram Moolenaar  split
68025782a7fSBram Moolenaar  enew
68125782a7fSBram Moolenaar  setlocal numberwidth=7
68225782a7fSBram Moolenaar  bnext
68325782a7fSBram Moolenaar  bnext
68425782a7fSBram Moolenaar  setlocal numberwidth=8
68525782a7fSBram Moolenaar  wincmd w
68625782a7fSBram Moolenaar  call assert_equal(4,&numberwidth)
68725782a7fSBram Moolenaar  bnext
68825782a7fSBram Moolenaar  call assert_equal(8,&numberwidth)
68925782a7fSBram Moolenaar  bw!
69025782a7fSBram Moolenaar
69125782a7fSBram Moolenaar  " Test value is not copied if window already has seen the buffer
69225782a7fSBram Moolenaar  enew
69325782a7fSBram Moolenaar  split
69425782a7fSBram Moolenaar  setlocal numberwidth=9
69525782a7fSBram Moolenaar  bnext
69625782a7fSBram Moolenaar  setlocal numberwidth=10
69725782a7fSBram Moolenaar  wincmd w
69825782a7fSBram Moolenaar  call assert_equal(4,&numberwidth)
69925782a7fSBram Moolenaar  bnext
70025782a7fSBram Moolenaar  call assert_equal(4,&numberwidth)
70125782a7fSBram Moolenaar  bw!
7027cb33a14SBram Moolenaar
7037cb33a14SBram Moolenaar  set hidden&
70425782a7fSBram Moolenaarendfunc
705fc089609SBram Moolenaar
706fc089609SBram Moolenaarfunc Test_shortmess_F()
707fc089609SBram Moolenaar  new
708fc089609SBram Moolenaar  call assert_match('\[No Name\]', execute('file'))
709fc089609SBram Moolenaar  set shortmess+=F
710fc089609SBram Moolenaar  call assert_match('\[No Name\]', execute('file'))
711fc089609SBram Moolenaar  call assert_match('^\s*$', execute('file foo'))
712fc089609SBram Moolenaar  call assert_match('foo', execute('file'))
713fc089609SBram Moolenaar  set shortmess-=F
714fc089609SBram Moolenaar  call assert_match('bar', execute('file bar'))
715fc089609SBram Moolenaar  call assert_match('bar', execute('file'))
716fc089609SBram Moolenaar  set shortmess&
717fc089609SBram Moolenaar  bwipe
718fc089609SBram Moolenaarendfunc
7192f0f8711SBram Moolenaar
7202f0f8711SBram Moolenaarfunc Test_shortmess_F2()
7212f0f8711SBram Moolenaar  e file1
7222f0f8711SBram Moolenaar  e file2
7232f0f8711SBram Moolenaar  call assert_match('file1', execute('bn', ''))
7242f0f8711SBram Moolenaar  call assert_match('file2', execute('bn', ''))
7252f0f8711SBram Moolenaar  set shortmess+=F
7262f0f8711SBram Moolenaar  call assert_true(empty(execute('bn', '')))
727eda65221SBram Moolenaar  call assert_false(test_getvalue('need_fileinfo'))
7282f0f8711SBram Moolenaar  call assert_true(empty(execute('bn', '')))
729ce90e36fSBram Moolenaar  call assert_false('need_fileinfo'->test_getvalue())
7302f0f8711SBram Moolenaar  set hidden
7312f0f8711SBram Moolenaar  call assert_true(empty(execute('bn', '')))
732eda65221SBram Moolenaar  call assert_false(test_getvalue('need_fileinfo'))
7332f0f8711SBram Moolenaar  call assert_true(empty(execute('bn', '')))
734eda65221SBram Moolenaar  call assert_false(test_getvalue('need_fileinfo'))
7352f0f8711SBram Moolenaar  set nohidden
7362f0f8711SBram Moolenaar  call assert_true(empty(execute('bn', '')))
737eda65221SBram Moolenaar  call assert_false(test_getvalue('need_fileinfo'))
7382f0f8711SBram Moolenaar  call assert_true(empty(execute('bn', '')))
739eda65221SBram Moolenaar  call assert_false(test_getvalue('need_fileinfo'))
7402f0f8711SBram Moolenaar  set shortmess&
7412f0f8711SBram Moolenaar  call assert_match('file1', execute('bn', ''))
7422f0f8711SBram Moolenaar  call assert_match('file2', execute('bn', ''))
7432f0f8711SBram Moolenaar  bwipe
7442f0f8711SBram Moolenaar  bwipe
7452f0f8711SBram Moolenaarendfunc
746375e3390SBram Moolenaar
747375e3390SBram Moolenaarfunc Test_local_scrolloff()
748375e3390SBram Moolenaar  set so=5
749375e3390SBram Moolenaar  set siso=7
750375e3390SBram Moolenaar  split
751375e3390SBram Moolenaar  call assert_equal(5, &so)
752375e3390SBram Moolenaar  setlocal so=3
753375e3390SBram Moolenaar  call assert_equal(3, &so)
754375e3390SBram Moolenaar  wincmd w
755375e3390SBram Moolenaar  call assert_equal(5, &so)
756375e3390SBram Moolenaar  wincmd w
757375e3390SBram Moolenaar  setlocal so<
758375e3390SBram Moolenaar  call assert_equal(5, &so)
759375e3390SBram Moolenaar  setlocal so=0
760375e3390SBram Moolenaar  call assert_equal(0, &so)
761375e3390SBram Moolenaar  setlocal so=-1
762375e3390SBram Moolenaar  call assert_equal(5, &so)
763375e3390SBram Moolenaar
764375e3390SBram Moolenaar  call assert_equal(7, &siso)
765375e3390SBram Moolenaar  setlocal siso=3
766375e3390SBram Moolenaar  call assert_equal(3, &siso)
767375e3390SBram Moolenaar  wincmd w
768375e3390SBram Moolenaar  call assert_equal(7, &siso)
769375e3390SBram Moolenaar  wincmd w
770375e3390SBram Moolenaar  setlocal siso<
771375e3390SBram Moolenaar  call assert_equal(7, &siso)
772375e3390SBram Moolenaar  setlocal siso=0
773375e3390SBram Moolenaar  call assert_equal(0, &siso)
774375e3390SBram Moolenaar  setlocal siso=-1
775375e3390SBram Moolenaar  call assert_equal(7, &siso)
776375e3390SBram Moolenaar
777375e3390SBram Moolenaar  close
778375e3390SBram Moolenaar  set so&
779375e3390SBram Moolenaar  set siso&
780375e3390SBram Moolenaarendfunc
781449ac47fSBram Moolenaar
782449ac47fSBram Moolenaarfunc Test_writedelay()
7835feabe00SBram Moolenaar  CheckFunction reltimefloat
7845feabe00SBram Moolenaar
785449ac47fSBram Moolenaar  new
786449ac47fSBram Moolenaar  call setline(1, 'empty')
787449ac47fSBram Moolenaar  redraw
788449ac47fSBram Moolenaar  set writedelay=10
789449ac47fSBram Moolenaar  let start = reltime()
790449ac47fSBram Moolenaar  call setline(1, repeat('x', 70))
791449ac47fSBram Moolenaar  redraw
792449ac47fSBram Moolenaar  let elapsed = reltimefloat(reltime(start))
793449ac47fSBram Moolenaar  set writedelay=0
794449ac47fSBram Moolenaar  " With 'writedelay' set should take at least 30 * 10 msec
795449ac47fSBram Moolenaar  call assert_inrange(30 * 0.01, 999.0, elapsed)
796449ac47fSBram Moolenaar
797449ac47fSBram Moolenaar  bwipe!
798b4e6a2d0SBram Moolenaarendfunc
799b4e6a2d0SBram Moolenaar
800b4e6a2d0SBram Moolenaarfunc Test_visualbell()
8017a66627cSBram Moolenaar  set belloff=
802b4e6a2d0SBram Moolenaar  set visualbell
803b4e6a2d0SBram Moolenaar  call assert_beeps('normal 0h')
804b4e6a2d0SBram Moolenaar  set novisualbell
8057a66627cSBram Moolenaar  set belloff=all
806449ac47fSBram Moolenaarendfunc
8075d98dc2aSBram Moolenaar
8085d98dc2aSBram Moolenaar" Test for the 'write' option
8095d98dc2aSBram Moolenaarfunc Test_write()
8105d98dc2aSBram Moolenaar  new
8115d98dc2aSBram Moolenaar  call setline(1, ['L1'])
8125d98dc2aSBram Moolenaar  set nowrite
8135d98dc2aSBram Moolenaar  call assert_fails('write Xfile', 'E142:')
8145d98dc2aSBram Moolenaar  set write
8155d98dc2aSBram Moolenaar  close!
8165d98dc2aSBram Moolenaarendfunc
8175d98dc2aSBram Moolenaar
8185d98dc2aSBram Moolenaar" Test for 'buftype' option
8195d98dc2aSBram Moolenaarfunc Test_buftype()
8205d98dc2aSBram Moolenaar  new
8215d98dc2aSBram Moolenaar  call setline(1, ['L1'])
8225d98dc2aSBram Moolenaar  set buftype=nowrite
8235d98dc2aSBram Moolenaar  call assert_fails('write', 'E382:')
824a3a9c8efSBram Moolenaar
825a3a9c8efSBram Moolenaar  for val in ['', 'nofile', 'nowrite', 'acwrite', 'quickfix', 'help', 'terminal', 'prompt', 'popup']
826a3a9c8efSBram Moolenaar    exe 'set buftype=' .. val
827a3a9c8efSBram Moolenaar    call writefile(['something'], 'XBuftype')
828a3a9c8efSBram Moolenaar    call assert_fails('write XBuftype', 'E13:', 'with buftype=' .. val)
829a3a9c8efSBram Moolenaar  endfor
830a3a9c8efSBram Moolenaar
831a3a9c8efSBram Moolenaar  call delete('XBuftype')
832a3a9c8efSBram Moolenaar  bwipe!
8335d98dc2aSBram Moolenaarendfunc
8345d98dc2aSBram Moolenaar
835578fe947SBram Moolenaar" Test for the 'rightleftcmd' option
836578fe947SBram Moolenaarfunc Test_rightleftcmd()
837578fe947SBram Moolenaar  CheckFeature rightleft
838578fe947SBram Moolenaar  set rightleft
839578fe947SBram Moolenaar  set rightleftcmd
840578fe947SBram Moolenaar
841578fe947SBram Moolenaar  let g:l = []
842578fe947SBram Moolenaar  func AddPos()
843578fe947SBram Moolenaar    call add(g:l, screencol())
844578fe947SBram Moolenaar    return ''
845578fe947SBram Moolenaar  endfunc
846578fe947SBram Moolenaar  cmap <expr> <F2> AddPos()
847578fe947SBram Moolenaar
848578fe947SBram Moolenaar  call feedkeys("/\<F2>abc\<Left>\<F2>\<Right>\<Right>\<F2>" ..
849578fe947SBram Moolenaar        \ "\<Left>\<F2>\<Esc>", 'xt')
850578fe947SBram Moolenaar  call assert_equal([&co - 1, &co - 4, &co - 2, &co - 3], g:l)
851578fe947SBram Moolenaar
852578fe947SBram Moolenaar  cunmap <F2>
853578fe947SBram Moolenaar  unlet g:l
854578fe947SBram Moolenaar  set rightleftcmd&
855578fe947SBram Moolenaar  set rightleft&
856578fe947SBram Moolenaarendfunc
857578fe947SBram Moolenaar
858cde0ff39SBram Moolenaar" Test for the "debug" option
859cde0ff39SBram Moolenaarfunc Test_debug_option()
860cde0ff39SBram Moolenaar  set debug=beep
861cde0ff39SBram Moolenaar  exe "normal \<C-c>"
862cde0ff39SBram Moolenaar  call assert_equal('Beep!', Screenline(&lines))
863cde0ff39SBram Moolenaar  set debug&
864cde0ff39SBram Moolenaarendfunc
865cde0ff39SBram Moolenaar
866004a6781SBram Moolenaar" Test for the default CDPATH option
867004a6781SBram Moolenaarfunc Test_opt_default_cdpath()
868004a6781SBram Moolenaar  CheckFeature file_in_path
869004a6781SBram Moolenaar  let after =<< trim [CODE]
870004a6781SBram Moolenaar    call assert_equal(',/path/to/dir1,/path/to/dir2', &cdpath)
871004a6781SBram Moolenaar    call writefile(v:errors, 'Xtestout')
872004a6781SBram Moolenaar    qall
873004a6781SBram Moolenaar  [CODE]
874004a6781SBram Moolenaar  if has('unix')
875004a6781SBram Moolenaar    let $CDPATH='/path/to/dir1:/path/to/dir2'
876004a6781SBram Moolenaar  else
877004a6781SBram Moolenaar    let $CDPATH='/path/to/dir1;/path/to/dir2'
878004a6781SBram Moolenaar  endif
879004a6781SBram Moolenaar  if RunVim([], after, '')
880004a6781SBram Moolenaar    call assert_equal([], readfile('Xtestout'))
881004a6781SBram Moolenaar    call delete('Xtestout')
882004a6781SBram Moolenaar  endif
883004a6781SBram Moolenaarendfunc
884004a6781SBram Moolenaar
885004a6781SBram Moolenaar" Test for setting keycodes using set
886004a6781SBram Moolenaarfunc Test_opt_set_keycode()
887004a6781SBram Moolenaar  call assert_fails('set <t_k1=l', 'E474:')
888004a6781SBram Moolenaar  call assert_fails('set <Home=l', 'E474:')
889004a6781SBram Moolenaar  set <t_k9>=abcd
890004a6781SBram Moolenaar  call assert_equal('abcd', &t_k9)
891004a6781SBram Moolenaar  set <t_k9>&
892004a6781SBram Moolenaar  set <F9>=xyz
893004a6781SBram Moolenaar  call assert_equal('xyz', &t_k9)
894004a6781SBram Moolenaar  set <t_k9>&
895004a6781SBram Moolenaarendfunc
896004a6781SBram Moolenaar
897004a6781SBram Moolenaar" Test for changing options in a sandbox
898004a6781SBram Moolenaarfunc Test_opt_sandbox()
899004a6781SBram Moolenaar  for opt in ['backupdir', 'cdpath', 'exrc']
900004a6781SBram Moolenaar    call assert_fails('sandbox set ' .. opt .. '?', 'E48:')
9011363a30cSBram Moolenaar    call assert_fails('sandbox let &' .. opt .. ' = 1', 'E48:')
902004a6781SBram Moolenaar  endfor
9031363a30cSBram Moolenaar  call assert_fails('sandbox let &modelineexpr = 1', 'E48:')
904004a6781SBram Moolenaarendfunc
905004a6781SBram Moolenaar
906004a6781SBram Moolenaar" Test for setting an option with local value to global value
907004a6781SBram Moolenaarfunc Test_opt_local_to_global()
908004a6781SBram Moolenaar  setglobal equalprg=gprg
909004a6781SBram Moolenaar  setlocal equalprg=lprg
910004a6781SBram Moolenaar  call assert_equal('gprg', &g:equalprg)
911004a6781SBram Moolenaar  call assert_equal('lprg', &l:equalprg)
912004a6781SBram Moolenaar  call assert_equal('lprg', &equalprg)
913004a6781SBram Moolenaar  set equalprg<
914004a6781SBram Moolenaar  call assert_equal('', &l:equalprg)
915004a6781SBram Moolenaar  call assert_equal('gprg', &equalprg)
916004a6781SBram Moolenaar  setglobal equalprg=gnewprg
917004a6781SBram Moolenaar  setlocal equalprg=lnewprg
918004a6781SBram Moolenaar  setlocal equalprg<
919004a6781SBram Moolenaar  call assert_equal('gnewprg', &l:equalprg)
920004a6781SBram Moolenaar  call assert_equal('gnewprg', &equalprg)
921004a6781SBram Moolenaar  set equalprg&
92259585497SYegappan Lakshmanan
92359585497SYegappan Lakshmanan  " Test for setting the global/local value of a boolean option
92459585497SYegappan Lakshmanan  setglobal autoread
92559585497SYegappan Lakshmanan  setlocal noautoread
92659585497SYegappan Lakshmanan  call assert_false(&autoread)
92759585497SYegappan Lakshmanan  set autoread<
92859585497SYegappan Lakshmanan  call assert_true(&autoread)
92959585497SYegappan Lakshmanan  setglobal noautoread
93059585497SYegappan Lakshmanan  setlocal autoread
93159585497SYegappan Lakshmanan  setlocal autoread<
93259585497SYegappan Lakshmanan  call assert_false(&autoread)
93359585497SYegappan Lakshmanan  set autoread&
934004a6781SBram Moolenaarendfunc
935004a6781SBram Moolenaar
936042414faSDominique Pellefunc Test_set_in_sandbox()
937042414faSDominique Pelle  " Some boolean options cannot be set in sandbox, some can.
938042414faSDominique Pelle  call assert_fails('sandbox set modelineexpr', 'E48:')
939042414faSDominique Pelle  sandbox set number
940042414faSDominique Pelle  call assert_true(&number)
941042414faSDominique Pelle  set number&
942042414faSDominique Pelle
943042414faSDominique Pelle  " Some boolean options cannot be set in sandbox, some can.
944042414faSDominique Pelle  if has('python') || has('python3')
945042414faSDominique Pelle    call assert_fails('sandbox set pyxversion=3', 'E48:')
946042414faSDominique Pelle  endif
947042414faSDominique Pelle  sandbox set tabstop=4
948042414faSDominique Pelle  call assert_equal(4, &tabstop)
949042414faSDominique Pelle  set tabstop&
950042414faSDominique Pelle
951042414faSDominique Pelle  " Some string options cannot be set in sandbox, some can.
952042414faSDominique Pelle  call assert_fails('sandbox set backupdir=/tmp', 'E48:')
953042414faSDominique Pelle  sandbox set filetype=perl
954042414faSDominique Pelle  call assert_equal('perl', &filetype)
955042414faSDominique Pelle  set filetype&
956042414faSDominique Pelleendfunc
957042414faSDominique Pelle
958004a6781SBram Moolenaar" Test for incrementing, decrementing and multiplying a number option value
959004a6781SBram Moolenaarfunc Test_opt_num_op()
960004a6781SBram Moolenaar  set shiftwidth=4
961004a6781SBram Moolenaar  set sw+=2
962004a6781SBram Moolenaar  call assert_equal(6, &sw)
963004a6781SBram Moolenaar  set sw-=2
964004a6781SBram Moolenaar  call assert_equal(4, &sw)
965004a6781SBram Moolenaar  set sw^=2
966004a6781SBram Moolenaar  call assert_equal(8, &sw)
967004a6781SBram Moolenaar  set shiftwidth&
968004a6781SBram Moolenaarendfunc
969004a6781SBram Moolenaar
97065d032c7SBram Moolenaar" Test for setting option values using v:false and v:true
97165d032c7SBram Moolenaarfunc Test_opt_boolean()
97265d032c7SBram Moolenaar  set number&
97365d032c7SBram Moolenaar  set number
97465d032c7SBram Moolenaar  call assert_equal(1, &nu)
97565d032c7SBram Moolenaar  set nonu
97665d032c7SBram Moolenaar  call assert_equal(0, &nu)
97765d032c7SBram Moolenaar  let &nu = v:true
97865d032c7SBram Moolenaar  call assert_equal(1, &nu)
97965d032c7SBram Moolenaar  let &nu = v:false
98065d032c7SBram Moolenaar  call assert_equal(0, &nu)
98165d032c7SBram Moolenaar  set number&
98265d032c7SBram Moolenaarendfunc
98365d032c7SBram Moolenaar
984bdd2c290SBram Moolenaar" Test for the 'window' option
985bdd2c290SBram Moolenaarfunc Test_window_opt()
986bdd2c290SBram Moolenaar  " Needs only one open widow
987bdd2c290SBram Moolenaar  %bw!
988bdd2c290SBram Moolenaar  call setline(1, range(1, 8))
989bdd2c290SBram Moolenaar  set window=5
990bdd2c290SBram Moolenaar  exe "normal \<C-F>"
991bdd2c290SBram Moolenaar  call assert_equal(4, line('w0'))
992bdd2c290SBram Moolenaar  exe "normal \<C-F>"
993bdd2c290SBram Moolenaar  call assert_equal(7, line('w0'))
994bdd2c290SBram Moolenaar  exe "normal \<C-F>"
995bdd2c290SBram Moolenaar  call assert_equal(8, line('w0'))
996bdd2c290SBram Moolenaar  exe "normal \<C-B>"
997bdd2c290SBram Moolenaar  call assert_equal(5, line('w0'))
998bdd2c290SBram Moolenaar  exe "normal \<C-B>"
999bdd2c290SBram Moolenaar  call assert_equal(2, line('w0'))
1000bdd2c290SBram Moolenaar  exe "normal \<C-B>"
1001bdd2c290SBram Moolenaar  call assert_equal(1, line('w0'))
1002bdd2c290SBram Moolenaar  set window=1
1003bdd2c290SBram Moolenaar  exe "normal gg\<C-F>"
1004bdd2c290SBram Moolenaar  call assert_equal(2, line('w0'))
1005bdd2c290SBram Moolenaar  exe "normal \<C-F>"
1006bdd2c290SBram Moolenaar  call assert_equal(3, line('w0'))
1007bdd2c290SBram Moolenaar  exe "normal \<C-B>"
1008bdd2c290SBram Moolenaar  call assert_equal(2, line('w0'))
1009bdd2c290SBram Moolenaar  exe "normal \<C-B>"
1010bdd2c290SBram Moolenaar  call assert_equal(1, line('w0'))
1011bdd2c290SBram Moolenaar  enew!
1012bdd2c290SBram Moolenaar  set window&
1013bdd2c290SBram Moolenaarendfunc
1014bdd2c290SBram Moolenaar
10155d3c9f8cSBram Moolenaar" Test for the 'winminheight' option
10165d3c9f8cSBram Moolenaarfunc Test_opt_winminheight()
10175d3c9f8cSBram Moolenaar  only!
10185d3c9f8cSBram Moolenaar  let &winheight = &lines + 4
10195d3c9f8cSBram Moolenaar  call assert_fails('let &winminheight = &lines + 2', 'E36:')
10205d3c9f8cSBram Moolenaar  call assert_true(&winminheight <= &lines)
10215d3c9f8cSBram Moolenaar  set winminheight&
10225d3c9f8cSBram Moolenaar  set winheight&
10235d3c9f8cSBram Moolenaarendfunc
10245d3c9f8cSBram Moolenaar
102539d4cab4SBram Moolenaarfunc Test_opt_winminheight_term()
102639d4cab4SBram Moolenaar  CheckRunVimInTerminal
102739d4cab4SBram Moolenaar
102839d4cab4SBram Moolenaar  " The tabline should be taken into account.
102939d4cab4SBram Moolenaar  let lines =<< trim END
103039d4cab4SBram Moolenaar    set wmh=0 stal=2
103139d4cab4SBram Moolenaar    below sp | wincmd _
103239d4cab4SBram Moolenaar    below sp | wincmd _
103339d4cab4SBram Moolenaar    below sp | wincmd _
103439d4cab4SBram Moolenaar    below sp
103539d4cab4SBram Moolenaar  END
103639d4cab4SBram Moolenaar  call writefile(lines, 'Xwinminheight')
103739d4cab4SBram Moolenaar  let buf = RunVimInTerminal('-S Xwinminheight', #{rows: 11})
103839d4cab4SBram Moolenaar  call term_sendkeys(buf, ":set wmh=1\n")
103939d4cab4SBram Moolenaar  call WaitForAssert({-> assert_match('E36: Not enough room', term_getline(buf, 11))})
104039d4cab4SBram Moolenaar
104139d4cab4SBram Moolenaar  call StopVimInTerminal(buf)
104239d4cab4SBram Moolenaar  call delete('Xwinminheight')
104339d4cab4SBram Moolenaarendfunc
104439d4cab4SBram Moolenaar
10459e813b3dSBram Moolenaarfunc Test_opt_winminheight_term_tabs()
10469e813b3dSBram Moolenaar  CheckRunVimInTerminal
10479e813b3dSBram Moolenaar
10489e813b3dSBram Moolenaar  " The tabline should be taken into account.
10499e813b3dSBram Moolenaar  let lines =<< trim END
10509e813b3dSBram Moolenaar    set wmh=0 stal=2
10519e813b3dSBram Moolenaar    split
10529e813b3dSBram Moolenaar    split
10539e813b3dSBram Moolenaar    split
10549e813b3dSBram Moolenaar    split
10559e813b3dSBram Moolenaar    tabnew
10569e813b3dSBram Moolenaar  END
10579e813b3dSBram Moolenaar  call writefile(lines, 'Xwinminheight')
10589e813b3dSBram Moolenaar  let buf = RunVimInTerminal('-S Xwinminheight', #{rows: 11})
10599e813b3dSBram Moolenaar  call term_sendkeys(buf, ":set wmh=1\n")
10609e813b3dSBram Moolenaar  call WaitForAssert({-> assert_match('E36: Not enough room', term_getline(buf, 11))})
10619e813b3dSBram Moolenaar
10629e813b3dSBram Moolenaar  call StopVimInTerminal(buf)
10639e813b3dSBram Moolenaar  call delete('Xwinminheight')
10649e813b3dSBram Moolenaarendfunc
10659e813b3dSBram Moolenaar
10665d3c9f8cSBram Moolenaar" Test for the 'winminwidth' option
10675d3c9f8cSBram Moolenaarfunc Test_opt_winminwidth()
10685d3c9f8cSBram Moolenaar  only!
10695d3c9f8cSBram Moolenaar  let &winwidth = &columns + 4
10705d3c9f8cSBram Moolenaar  call assert_fails('let &winminwidth = &columns + 2', 'E36:')
10715d3c9f8cSBram Moolenaar  call assert_true(&winminwidth <= &columns)
10725d3c9f8cSBram Moolenaar  set winminwidth&
10735d3c9f8cSBram Moolenaar  set winwidth&
10745d3c9f8cSBram Moolenaarendfunc
10755d3c9f8cSBram Moolenaar
1076994b89d2SBram Moolenaar" Test for setting option value containing spaces with isfname+=32
1077994b89d2SBram Moolenaarfunc Test_isfname_with_options()
1078994b89d2SBram Moolenaar  set isfname+=32
1079994b89d2SBram Moolenaar  setlocal keywordprg=:term\ help.exe
1080994b89d2SBram Moolenaar  call assert_equal(':term help.exe', &keywordprg)
1081994b89d2SBram Moolenaar  set isfname&
1082994b89d2SBram Moolenaar  setlocal keywordprg&
1083994b89d2SBram Moolenaarendfunc
1084994b89d2SBram Moolenaar
108574667060SBram Moolenaar" Test that resetting laststatus does change scroll option
108674667060SBram Moolenaarfunc Test_opt_reset_scroll()
108774667060SBram Moolenaar  CheckRunVimInTerminal
108874667060SBram Moolenaar  let vimrc =<< trim [CODE]
108974667060SBram Moolenaar    set scroll=2
109074667060SBram Moolenaar    set laststatus=2
109174667060SBram Moolenaar  [CODE]
109274667060SBram Moolenaar  call writefile(vimrc, 'Xscroll')
109374667060SBram Moolenaar  let buf = RunVimInTerminal('-S Xscroll', {'rows': 16, 'cols': 45})
109474667060SBram Moolenaar  call term_sendkeys(buf, ":verbose set scroll?\n")
109574667060SBram Moolenaar  call WaitForAssert({-> assert_match('Last set.*window size', term_getline(buf, 15))})
109674667060SBram Moolenaar  call assert_match('^\s*scroll=7$', term_getline(buf, 14))
109774667060SBram Moolenaar  call StopVimInTerminal(buf)
109874667060SBram Moolenaar
109974667060SBram Moolenaar  " clean up
110074667060SBram Moolenaar  call delete('Xscroll')
110174667060SBram Moolenaarendfunc
110274667060SBram Moolenaar
11036d37e8e3SDominique Pelle" Check that VIM_POSIX env variable influences default value of 'cpo' and 'shm'
11046d37e8e3SDominique Pellefunc Test_VIM_POSIX()
11056d37e8e3SDominique Pelle  let saved_VIM_POSIX = getenv("VIM_POSIX")
11066d37e8e3SDominique Pelle
11076d37e8e3SDominique Pelle  call setenv('VIM_POSIX', "1")
11086d37e8e3SDominique Pelle  let after =<< trim [CODE]
11096d37e8e3SDominique Pelle    call writefile([&cpo, &shm], 'X_VIM_POSIX')
11106d37e8e3SDominique Pelle    qall
11116d37e8e3SDominique Pelle  [CODE]
11126d37e8e3SDominique Pelle  if RunVim([], after, '')
11136d37e8e3SDominique Pelle    call assert_equal(['aAbBcCdDeEfFgHiIjJkKlLmMnoOpPqrRsStuvwWxXyZ$!%*-+<>#{|&/\.;',
11146d37e8e3SDominique Pelle          \            'AS'], readfile('X_VIM_POSIX'))
11156d37e8e3SDominique Pelle  endif
11166d37e8e3SDominique Pelle
11176d37e8e3SDominique Pelle  call setenv('VIM_POSIX', v:null)
11186d37e8e3SDominique Pelle  let after =<< trim [CODE]
11196d37e8e3SDominique Pelle    call writefile([&cpo, &shm], 'X_VIM_POSIX')
11206d37e8e3SDominique Pelle    qall
11216d37e8e3SDominique Pelle  [CODE]
11226d37e8e3SDominique Pelle  if RunVim([], after, '')
11236d37e8e3SDominique Pelle    call assert_equal(['aAbBcCdDeEfFgHiIjJkKlLmMnoOpPqrRsStuvwWxXyZ$!%*-+<>;',
11246d37e8e3SDominique Pelle          \            'S'], readfile('X_VIM_POSIX'))
11256d37e8e3SDominique Pelle  endif
11266d37e8e3SDominique Pelle
11276d37e8e3SDominique Pelle  call delete('X_VIM_POSIX')
11286d37e8e3SDominique Pelle  call setenv('VIM_POSIX', saved_VIM_POSIX)
11296d37e8e3SDominique Pelleendfunc
11306d37e8e3SDominique Pelle
113159585497SYegappan Lakshmanan" Test for setting an option to a Vi or Vim default
113259585497SYegappan Lakshmananfunc Test_opt_default()
113359585497SYegappan Lakshmanan  set formatoptions&vi
113459585497SYegappan Lakshmanan  call assert_equal('vt', &formatoptions)
113559585497SYegappan Lakshmanan  set formatoptions&vim
113659585497SYegappan Lakshmanan  call assert_equal('tcq', &formatoptions)
11375ffefbb3SBram Moolenaar
11385ffefbb3SBram Moolenaar  call assert_equal('ucs-bom,utf-8,default,latin1', &fencs)
11395ffefbb3SBram Moolenaar  set fencs=latin1
11405ffefbb3SBram Moolenaar  set fencs&
11415ffefbb3SBram Moolenaar  call assert_equal('ucs-bom,utf-8,default,latin1', &fencs)
11425ffefbb3SBram Moolenaar  set fencs=latin1
11435ffefbb3SBram Moolenaar  set all&
11445ffefbb3SBram Moolenaar  call assert_equal('ucs-bom,utf-8,default,latin1', &fencs)
114559585497SYegappan Lakshmananendfunc
114659585497SYegappan Lakshmanan
114759585497SYegappan Lakshmanan" Test for the 'cmdheight' option
114859585497SYegappan Lakshmananfunc Test_cmdheight()
114959585497SYegappan Lakshmanan  %bw!
115059585497SYegappan Lakshmanan  let ht = &lines
115159585497SYegappan Lakshmanan  set cmdheight=9999
115259585497SYegappan Lakshmanan  call assert_equal(1, winheight(0))
115359585497SYegappan Lakshmanan  call assert_equal(ht - 1, &cmdheight)
115459585497SYegappan Lakshmanan  set cmdheight&
115559585497SYegappan Lakshmananendfunc
115659585497SYegappan Lakshmanan
11572d6d718dSYegappan Lakshmanan" To specify a control character as a option value, '^' can be used
11582d6d718dSYegappan Lakshmananfunc Test_opt_control_char()
11592d6d718dSYegappan Lakshmanan  set wildchar=^v
11602d6d718dSYegappan Lakshmanan  call assert_equal("\<C-V>", nr2char(&wildchar))
11612d6d718dSYegappan Lakshmanan  set wildcharm=^r
11622d6d718dSYegappan Lakshmanan  call assert_equal("\<C-R>", nr2char(&wildcharm))
11632d6d718dSYegappan Lakshmanan  " Bug: This doesn't work for the 'cedit' and 'termwinkey' options
11642d6d718dSYegappan Lakshmanan  set wildchar& wildcharm&
11652d6d718dSYegappan Lakshmananendfunc
11662d6d718dSYegappan Lakshmanan
11672d6d718dSYegappan Lakshmanan" Test for the 'errorbells' option
11682d6d718dSYegappan Lakshmananfunc Test_opt_errorbells()
11692d6d718dSYegappan Lakshmanan  set errorbells
11702d6d718dSYegappan Lakshmanan  call assert_beeps('s/a1b2/x1y2/')
11712d6d718dSYegappan Lakshmanan  set noerrorbells
11722d6d718dSYegappan Lakshmananendfunc
11732d6d718dSYegappan Lakshmanan
1174042414faSDominique Pellefunc Test_opt_scrolljump()
1175042414faSDominique Pelle  help
1176042414faSDominique Pelle  resize 10
1177042414faSDominique Pelle
1178042414faSDominique Pelle  " Test with positive 'scrolljump'.
1179042414faSDominique Pelle  set scrolljump=2
1180042414faSDominique Pelle  norm! Lj
1181042414faSDominique Pelle  call assert_equal({'lnum':11, 'leftcol':0, 'col':0, 'topfill':0,
1182042414faSDominique Pelle        \            'topline':3, 'coladd':0, 'skipcol':0, 'curswant':0},
1183042414faSDominique Pelle        \           winsaveview())
1184042414faSDominique Pelle
1185042414faSDominique Pelle  " Test with negative 'scrolljump' (percentage of window height).
1186042414faSDominique Pelle  set scrolljump=-40
1187042414faSDominique Pelle  norm! ggLj
1188042414faSDominique Pelle  call assert_equal({'lnum':11, 'leftcol':0, 'col':0, 'topfill':0,
1189042414faSDominique Pelle         \            'topline':5, 'coladd':0, 'skipcol':0, 'curswant':0},
1190042414faSDominique Pelle         \           winsaveview())
1191042414faSDominique Pelle
1192042414faSDominique Pelle  set scrolljump&
1193042414faSDominique Pelle  bw
1194042414faSDominique Pelleendfunc
1195042414faSDominique Pelle
11965d98dc2aSBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
1197