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  call writefile(['vim: set keymap=greek :', 'nothing'], 'Xmodeline_keymap')
48  let modeline = &modeline
49  set modeline
50  split Xmodeline_keymap
51  call assert_equal("greek", &keymap)
52  call assert_match('greek\|grk', b:keymap_name)
53
54  bwipe!
55  call delete('Xmodeline_keymap')
56  let &modeline = modeline
57  set keymap= iminsert=0 imsearch=-1
58endfunc
59
60func s:modeline_fails(what, text)
61  let fname = "Xmodeline_fails_" . a:what
62  call writefile(['vim: set ' . a:text . ' :', 'nothing'], fname)
63  let modeline = &modeline
64  set modeline
65  filetype plugin on
66  syntax enable
67  call assert_fails('split ' . fname, 'E474:')
68  call assert_equal("", &filetype)
69  call assert_equal("", &syntax)
70
71  bwipe!
72  call delete(fname)
73  let &modeline = modeline
74  filetype plugin off
75  syntax off
76endfunc
77
78func Test_modeline_filetype_fails()
79  call s:modeline_fails('filetype', 'ft=evil$CMD')
80endfunc
81
82func Test_modeline_syntax_fails()
83  call s:modeline_fails('syntax', 'syn=evil$CMD')
84endfunc
85
86func Test_modeline_keymap_fails()
87  call s:modeline_fails('keymap', 'keymap=evil$CMD')
88endfunc
89