Bram Moolenaar | 9cf4b50 | 2018-07-23 04:12:03 +0200 | [diff] [blame] | 1 | " Tests for parsing the modeline. |
| 2 | |
Bram Moolenaar | cd96eef | 2018-07-23 04:49:23 +0200 | [diff] [blame] | 3 | func Test_modeline_invalid() |
Bram Moolenaar | 9691f82 | 2018-11-03 19:06:25 +0100 | [diff] [blame] | 4 | " This was reading allocated memory in the past. |
Bram Moolenaar | 9cf4b50 | 2018-07-23 04:12:03 +0200 | [diff] [blame] | 5 | call writefile(['vi:0', 'nothing'], 'Xmodeline') |
Bram Moolenaar | 9691f82 | 2018-11-03 19:06:25 +0100 | [diff] [blame] | 6 | let modeline = &modeline |
| 7 | set modeline |
Bram Moolenaar | 9cf4b50 | 2018-07-23 04:12:03 +0200 | [diff] [blame] | 8 | call assert_fails('split Xmodeline', 'E518:') |
Bram Moolenaar | 916a818 | 2018-11-25 02:18:29 +0100 | [diff] [blame] | 9 | |
Bram Moolenaar | 9691f82 | 2018-11-03 19:06:25 +0100 | [diff] [blame] | 10 | let &modeline = modeline |
Bram Moolenaar | 9cf4b50 | 2018-07-23 04:12:03 +0200 | [diff] [blame] | 11 | bwipe! |
Bram Moolenaar | 7624af0 | 2018-07-24 04:51:20 +0200 | [diff] [blame] | 12 | call delete('Xmodeline') |
Bram Moolenaar | 9cf4b50 | 2018-07-23 04:12:03 +0200 | [diff] [blame] | 13 | endfunc |
Bram Moolenaar | 916a818 | 2018-11-25 02:18:29 +0100 | [diff] [blame] | 14 | |
| 15 | func Test_modeline_filetype() |
| 16 | call writefile(['vim: set ft=c :', 'nothing'], 'Xmodeline_filetype') |
| 17 | let modeline = &modeline |
| 18 | set modeline |
| 19 | filetype plugin on |
| 20 | split Xmodeline_filetype |
| 21 | call assert_equal("c", &filetype) |
| 22 | call assert_equal(1, b:did_ftplugin) |
| 23 | call assert_equal("ccomplete#Complete", &ofu) |
| 24 | |
| 25 | bwipe! |
| 26 | call delete('Xmodeline_filetype') |
| 27 | let &modeline = modeline |
| 28 | filetype plugin off |
| 29 | endfunc |
| 30 | |
| 31 | func Test_modeline_syntax() |
| 32 | call writefile(['vim: set syn=c :', 'nothing'], 'Xmodeline_syntax') |
| 33 | let modeline = &modeline |
| 34 | set modeline |
| 35 | syntax enable |
| 36 | split Xmodeline_syntax |
| 37 | call assert_equal("c", &syntax) |
| 38 | call assert_equal("c", b:current_syntax) |
| 39 | |
| 40 | bwipe! |
| 41 | call delete('Xmodeline_syntax') |
| 42 | let &modeline = modeline |
| 43 | syntax off |
| 44 | endfunc |
| 45 | |
| 46 | func Test_modeline_keymap() |
Bram Moolenaar | 4ace6ab | 2018-11-25 04:25:58 +0100 | [diff] [blame] | 47 | if !has('keymap') |
| 48 | return |
| 49 | endif |
Bram Moolenaar | 916a818 | 2018-11-25 02:18:29 +0100 | [diff] [blame] | 50 | call writefile(['vim: set keymap=greek :', 'nothing'], 'Xmodeline_keymap') |
| 51 | let modeline = &modeline |
| 52 | set modeline |
| 53 | split Xmodeline_keymap |
| 54 | call assert_equal("greek", &keymap) |
| 55 | call assert_match('greek\|grk', b:keymap_name) |
| 56 | |
| 57 | bwipe! |
| 58 | call delete('Xmodeline_keymap') |
| 59 | let &modeline = modeline |
| 60 | set keymap= iminsert=0 imsearch=-1 |
| 61 | endfunc |
| 62 | |
| 63 | func s:modeline_fails(what, text) |
| 64 | let fname = "Xmodeline_fails_" . a:what |
| 65 | call writefile(['vim: set ' . a:text . ' :', 'nothing'], fname) |
| 66 | let modeline = &modeline |
| 67 | set modeline |
| 68 | filetype plugin on |
| 69 | syntax enable |
| 70 | call assert_fails('split ' . fname, 'E474:') |
| 71 | call assert_equal("", &filetype) |
| 72 | call assert_equal("", &syntax) |
| 73 | |
| 74 | bwipe! |
| 75 | call delete(fname) |
| 76 | let &modeline = modeline |
| 77 | filetype plugin off |
| 78 | syntax off |
| 79 | endfunc |
| 80 | |
| 81 | func Test_modeline_filetype_fails() |
| 82 | call s:modeline_fails('filetype', 'ft=evil$CMD') |
| 83 | endfunc |
| 84 | |
| 85 | func Test_modeline_syntax_fails() |
| 86 | call s:modeline_fails('syntax', 'syn=evil$CMD') |
| 87 | endfunc |
| 88 | |
| 89 | func Test_modeline_keymap_fails() |
Bram Moolenaar | 3067a4d | 2018-11-25 05:06:48 +0100 | [diff] [blame] | 90 | if !has('keymap') |
| 91 | return |
| 92 | endif |
Bram Moolenaar | 916a818 | 2018-11-25 02:18:29 +0100 | [diff] [blame] | 93 | call s:modeline_fails('keymap', 'keymap=evil$CMD') |
| 94 | endfunc |