1" Tests for parsing the modeline.
2
3func Test_modeline_invalid()
4  " This was reading allocated memory in the past.
5  call writefile(['vi:0', 'nothing'], 'Xmodeline')
6  let modeline = &modeline
7  set modeline
8  call assert_fails('split Xmodeline', 'E518:')
9
10  let &modeline = modeline
11  bwipe!
12  call delete('Xmodeline')
13endfunc
14
15func 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
29endfunc
30
31func 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
44endfunc
45
46func Test_modeline_keymap()
47  if !has('keymap')
48    return
49  endif
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
61endfunc
62
63func 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
79endfunc
80
81func Test_modeline_filetype_fails()
82  call s:modeline_fails('filetype', 'ft=evil$CMD')
83endfunc
84
85func Test_modeline_syntax_fails()
86  call s:modeline_fails('syntax', 'syn=evil$CMD')
87endfunc
88
89func Test_modeline_keymap_fails()
90  if !has('keymap')
91    return
92  endif
93  call s:modeline_fails('keymap', 'keymap=evil$CMD')
94endfunc
95