test_makeencoding.vim (2997B)
1 " Tests for 'makeencoding'. 2 3 source shared.vim 4 source check.vim 5 6 CheckFeature quickfix 7 let s:python = PythonProg() 8 if s:python == '' 9 throw 'Skipped: python program missing' 10 endif 11 12 let s:script = 'test_makeencoding.py' 13 14 if has('iconv') 15 let s:message_tbl = { 16 \ 'utf-8': 'ÀÈÌÒÙ こんにちは 你好', 17 \ 'latin1': 'ÀÈÌÒÙ', 18 \ 'cp932': 'こんにちは', 19 \ 'cp936': '你好', 20 \} 21 else 22 let s:message_tbl = { 23 \ 'utf-8': 'ÀÈÌÒÙ こんにちは 你好', 24 \ 'latin1': 'ÀÈÌÒÙ', 25 \} 26 endif 27 28 29 " Tests for :cgetfile and :lgetfile. 30 func Test_getfile() 31 set errorfile=Xerror.txt 32 set errorformat=%f(%l)\ :\ %m 33 34 " :cgetfile 35 for enc in keys(s:message_tbl) 36 let &makeencoding = enc 37 exec "silent !" . s:python . " " . s:script . " " . enc . " > " . &errorfile 38 cgetfile 39 copen 40 call assert_equal("Xfoobar.c|10| " . s:message_tbl[enc] . " (" . enc . ")", 41 \ getline('.')) 42 cclose 43 endfor 44 45 " :lgetfile 46 for enc in keys(s:message_tbl) 47 let &makeencoding = enc 48 exec "silent !" . s:python . " " . s:script . " " . enc . " > " . &errorfile 49 lgetfile 50 lopen 51 call assert_equal("Xfoobar.c|10| " . s:message_tbl[enc] . " (" . enc . ")", 52 \ getline('.')) 53 lclose 54 endfor 55 56 call delete(&errorfile) 57 endfunc 58 59 60 " Tests for :grep and :lgrep. 61 func Test_grep() 62 let &grepprg = s:python 63 set grepformat=%f(%l)\ :\ %m 64 65 " :grep 66 for enc in keys(s:message_tbl) 67 let &makeencoding = enc 68 exec "silent grep! " . s:script . " " . enc 69 copen 70 call assert_equal("Xfoobar.c|10| " . s:message_tbl[enc] . " (" . enc . ")", 71 \ getline('.')) 72 cclose 73 endfor 74 75 " :lgrep 76 for enc in keys(s:message_tbl) 77 let &makeencoding = enc 78 exec "silent lgrep! " . s:script . " " . enc 79 lopen 80 call assert_equal("Xfoobar.c|10| " . s:message_tbl[enc] . " (" . enc . ")", 81 \ getline('.')) 82 lclose 83 endfor 84 endfunc 85 86 87 " Tests for :make and :lmake. 88 func Test_make() 89 let &makeprg = s:python 90 set errorformat=%f(%l)\ :\ %m 91 92 " :make 93 for enc in keys(s:message_tbl) 94 let &makeencoding = enc 95 exec "silent make! " . s:script . " " . enc 96 copen 97 call assert_equal("Xfoobar.c|10| " . s:message_tbl[enc] . " (" . enc . ")", 98 \ getline('.')) 99 cclose 100 endfor 101 102 " :lmake 103 for enc in keys(s:message_tbl) 104 let &makeencoding = enc 105 exec "silent lmake! " . s:script . " " . enc 106 lopen 107 call assert_equal("Xfoobar.c|10| " . s:message_tbl[enc] . " (" . enc . ")", 108 \ getline('.')) 109 lclose 110 endfor 111 endfunc 112 113 " Test for an error file with a long line that needs an encoding conversion 114 func Test_longline_conversion() 115 new 116 call setline(1, ['Xfile:10:' .. repeat("\xe0", 2000)]) 117 write ++enc=latin1 Xerr.out 118 bw! 119 set errorformat& 120 set makeencoding=latin1 121 cfile Xerr.out 122 call assert_equal(repeat("\u00e0", 2000), getqflist()[0].text) 123 call delete('Xerr.out') 124 set makeencoding& 125 endfunc 126 127 " vim: shiftwidth=2 sts=2 expandtab