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