1bd7206e0SBram Moolenaar" Test for various indent options 2bd7206e0SBram Moolenaar 3bd7206e0SBram Moolenaarfunc Test_preserveindent() 4bd7206e0SBram Moolenaar new 5bd7206e0SBram Moolenaar " Test for autoindent copying indent from the previous line 6bd7206e0SBram Moolenaar setlocal autoindent 7bd7206e0SBram Moolenaar call setline(1, [repeat(' ', 16) .. 'line1']) 8bd7206e0SBram Moolenaar call feedkeys("A\nline2", 'xt') 9bd7206e0SBram Moolenaar call assert_equal("\t\tline2", getline(2)) 10bd7206e0SBram Moolenaar setlocal autoindent& 11bd7206e0SBram Moolenaar 12bd7206e0SBram Moolenaar " Test for using CTRL-T with and without 'preserveindent' 13bd7206e0SBram Moolenaar set shiftwidth=4 14bd7206e0SBram Moolenaar call cursor(1, 1) 15bd7206e0SBram Moolenaar call setline(1, " \t ") 16bd7206e0SBram Moolenaar call feedkeys("Al\<C-T>", 'xt') 17bd7206e0SBram Moolenaar call assert_equal("\t\tl", getline(1)) 18bd7206e0SBram Moolenaar set preserveindent 19bd7206e0SBram Moolenaar call setline(1, " \t ") 20bd7206e0SBram Moolenaar call feedkeys("Al\<C-T>", 'xt') 21bd7206e0SBram Moolenaar call assert_equal(" \t \tl", getline(1)) 22bd7206e0SBram Moolenaar set pi& sw& 23bd7206e0SBram Moolenaar 24bd7206e0SBram Moolenaar " Test for using CTRL-T with 'expandtab' and 'preserveindent' 25bd7206e0SBram Moolenaar call cursor(1, 1) 26bd7206e0SBram Moolenaar call setline(1, "\t \t") 27bd7206e0SBram Moolenaar set shiftwidth=4 expandtab preserveindent 28bd7206e0SBram Moolenaar call feedkeys("Al\<C-T>", 'xt') 29bd7206e0SBram Moolenaar call assert_equal("\t \t l", getline(1)) 30bd7206e0SBram Moolenaar set sw& et& pi& 31bd7206e0SBram Moolenaar 32bd7206e0SBram Moolenaar close! 33bd7206e0SBram Moolenaarendfunc 34bd7206e0SBram Moolenaar 35bd7206e0SBram Moolenaar" Test for indent() 36bd7206e0SBram Moolenaarfunc Test_indent_func() 37bd7206e0SBram Moolenaar call assert_equal(-1, indent(-1)) 38bd7206e0SBram Moolenaar new 39bd7206e0SBram Moolenaar call setline(1, "\tabc") 40bd7206e0SBram Moolenaar call assert_equal(8, indent(1)) 41bd7206e0SBram Moolenaar call setline(1, " abc") 42bd7206e0SBram Moolenaar call assert_equal(4, indent(1)) 43bd7206e0SBram Moolenaar call setline(1, " \t abc") 44bd7206e0SBram Moolenaar call assert_equal(12, indent(1)) 45bd7206e0SBram Moolenaar close! 46bd7206e0SBram Moolenaarendfunc 47bd7206e0SBram Moolenaar 48bd7206e0SBram Moolenaar" Test for reindenting a line using the '=' operator 49bd7206e0SBram Moolenaarfunc Test_reindent() 50bd7206e0SBram Moolenaar new 51bd7206e0SBram Moolenaar call setline(1, 'abc') 52bd7206e0SBram Moolenaar set nomodifiable 53bd7206e0SBram Moolenaar call assert_fails('normal ==', 'E21:') 54bd7206e0SBram Moolenaar set modifiable 55bd7206e0SBram Moolenaar 56bd7206e0SBram Moolenaar call setline(1, ['foo', 'bar']) 57bd7206e0SBram Moolenaar call feedkeys('ggVG=', 'xt') 58bd7206e0SBram Moolenaar call assert_equal(['foo', 'bar'], getline(1, 2)) 59bd7206e0SBram Moolenaar close! 60bd7206e0SBram Moolenaarendfunc 61bd7206e0SBram Moolenaar 62bd7206e0SBram Moolenaar" Test for shifting a line with a preprocessor directive ('#') 63bd7206e0SBram Moolenaarfunc Test_preproc_indent() 64bd7206e0SBram Moolenaar new 65bd7206e0SBram Moolenaar set sw=4 66bd7206e0SBram Moolenaar call setline(1, '#define FOO 1') 67bd7206e0SBram Moolenaar normal >> 68bd7206e0SBram Moolenaar call assert_equal(' #define FOO 1', getline(1)) 69bd7206e0SBram Moolenaar 70bd7206e0SBram Moolenaar " with 'smartindent' 71bd7206e0SBram Moolenaar call setline(1, '#define FOO 1') 72bd7206e0SBram Moolenaar set smartindent 73bd7206e0SBram Moolenaar normal >> 74bd7206e0SBram Moolenaar call assert_equal('#define FOO 1', getline(1)) 75bd7206e0SBram Moolenaar set smartindent& 76bd7206e0SBram Moolenaar 77bd7206e0SBram Moolenaar " with 'cindent' 78bd7206e0SBram Moolenaar set cindent 79bd7206e0SBram Moolenaar normal >> 80bd7206e0SBram Moolenaar call assert_equal('#define FOO 1', getline(1)) 81bd7206e0SBram Moolenaar set cindent& 82bd7206e0SBram Moolenaar 83bd7206e0SBram Moolenaar close! 84bd7206e0SBram Moolenaarendfunc 85bd7206e0SBram Moolenaar 86bd7206e0SBram Moolenaar" Test for 'copyindent' 87bd7206e0SBram Moolenaarfunc Test_copyindent() 88bd7206e0SBram Moolenaar new 89bd7206e0SBram Moolenaar set shiftwidth=4 autoindent expandtab copyindent 90bd7206e0SBram Moolenaar call setline(1, " \t abc") 91bd7206e0SBram Moolenaar call feedkeys("ol", 'xt') 92bd7206e0SBram Moolenaar call assert_equal(" \t l", getline(2)) 93bd7206e0SBram Moolenaar set noexpandtab 94bd7206e0SBram Moolenaar call setline(1, " \t abc") 95bd7206e0SBram Moolenaar call feedkeys("ol", 'xt') 96bd7206e0SBram Moolenaar call assert_equal(" \t l", getline(2)) 97bd7206e0SBram Moolenaar set sw& ai& et& ci& 98bd7206e0SBram Moolenaar close! 99bd7206e0SBram Moolenaarendfunc 100bd7206e0SBram Moolenaar 101f5f1e10dSBram Moolenaar" Test for changing multiple lines with lisp indent 102f5f1e10dSBram Moolenaarfunc Test_lisp_indent_change_multiline() 103f5f1e10dSBram Moolenaar new 104f5f1e10dSBram Moolenaar setlocal lisp autoindent 105f5f1e10dSBram Moolenaar call setline(1, ['(if a', ' (if b', ' (return 5)))']) 106f5f1e10dSBram Moolenaar normal! jc2j(return 4)) 107f5f1e10dSBram Moolenaar call assert_equal(' (return 4))', getline(2)) 108f5f1e10dSBram Moolenaar close! 109f5f1e10dSBram Moolenaarendfunc 110f5f1e10dSBram Moolenaar 111f5f1e10dSBram Moolenaarfunc Test_lisp_indent() 112f5f1e10dSBram Moolenaar new 113f5f1e10dSBram Moolenaar setlocal lisp autoindent 114f5f1e10dSBram Moolenaar call setline(1, ['(if a', ' ;; comment', ' \ abc', '', ' " str1\', ' " st\b', ' (return 5)']) 115f5f1e10dSBram Moolenaar normal! jo;; comment 116f5f1e10dSBram Moolenaar normal! jo\ abc 117f5f1e10dSBram Moolenaar normal! jo;; ret 118f5f1e10dSBram Moolenaar normal! jostr1" 119f5f1e10dSBram Moolenaar normal! jostr2" 120f5f1e10dSBram Moolenaar call assert_equal([' ;; comment', ' ;; comment', ' \ abc', ' \ abc', '', ' ;; ret', ' " str1\', ' str1"', ' " st\b', ' str2"'], getline(2, 11)) 121f5f1e10dSBram Moolenaar close! 122f5f1e10dSBram Moolenaarendfunc 123f5f1e10dSBram Moolenaar 124f5f1e10dSBram Moolenaar" Test for setting the 'indentexpr' from a modeline 125f5f1e10dSBram Moolenaarfunc Test_modeline_indent_expr() 126f5f1e10dSBram Moolenaar let modeline = &modeline 127f5f1e10dSBram Moolenaar set modeline 128f5f1e10dSBram Moolenaar func GetIndent() 129f5f1e10dSBram Moolenaar return line('.') * 2 130f5f1e10dSBram Moolenaar endfunc 131f5f1e10dSBram Moolenaar call writefile(['# vim: indentexpr=GetIndent()'], 'Xfile.txt') 132f5f1e10dSBram Moolenaar set modelineexpr 133f5f1e10dSBram Moolenaar new Xfile.txt 134f5f1e10dSBram Moolenaar call assert_equal('GetIndent()', &indentexpr) 135f5f1e10dSBram Moolenaar exe "normal Oa\nb\n" 136f5f1e10dSBram Moolenaar call assert_equal([' a', ' b'], getline(1, 2)) 13795e59a35SBram Moolenaar 138f5f1e10dSBram Moolenaar set modelineexpr& 139f5f1e10dSBram Moolenaar delfunc GetIndent 140f5f1e10dSBram Moolenaar let &modeline = modeline 141f5f1e10dSBram Moolenaar close! 14295e59a35SBram Moolenaar call delete('Xfile.txt') 143f5f1e10dSBram Moolenaarendfunc 144f5f1e10dSBram Moolenaar 145*818ff25cSChristian Brabandtfunc Test_indent_func_with_gq() 146*818ff25cSChristian Brabandt 147*818ff25cSChristian Brabandt function GetTeXIndent() 148*818ff25cSChristian Brabandt " Sample indent expression for TeX files 149*818ff25cSChristian Brabandt let lnum = prevnonblank(v:lnum - 1) 150*818ff25cSChristian Brabandt " At the start of the file use zero indent. 151*818ff25cSChristian Brabandt if lnum == 0 152*818ff25cSChristian Brabandt return 0 153*818ff25cSChristian Brabandt endif 154*818ff25cSChristian Brabandt let line = getline(lnum) 155*818ff25cSChristian Brabandt let ind = indent(lnum) 156*818ff25cSChristian Brabandt " Add a 'shiftwidth' after beginning of environments. 157*818ff25cSChristian Brabandt if line =~ '\\begin{center}' 158*818ff25cSChristian Brabandt let ind = ind + shiftwidth() 159*818ff25cSChristian Brabandt endif 160*818ff25cSChristian Brabandt return ind 161*818ff25cSChristian Brabandt endfunction 162*818ff25cSChristian Brabandt 163*818ff25cSChristian Brabandt new 164*818ff25cSChristian Brabandt setl et sw=2 sts=2 ts=2 tw=50 indentexpr=GetTeXIndent() 165*818ff25cSChristian Brabandt put =[ '\documentclass{article}', '', '\begin{document}', '', 166*818ff25cSChristian Brabandt \ 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce ut enim non', 167*818ff25cSChristian Brabandt \ 'libero efficitur aliquet. Maecenas metus justo, facilisis convallis blandit', 168*818ff25cSChristian Brabandt \ 'non, semper eu urna. Suspendisse diam diam, iaculis faucibus lorem eu,', 169*818ff25cSChristian Brabandt \ 'fringilla condimentum lectus. Quisque euismod diam at convallis vulputate.', 170*818ff25cSChristian Brabandt \ 'Pellentesque laoreet tortor sit amet mauris euismod ornare. Sed varius', 171*818ff25cSChristian Brabandt \ 'bibendum orci vel vehicula. Pellentesque tempor, ipsum et auctor accumsan,', 172*818ff25cSChristian Brabandt \ 'metus lectus ultrices odio, sed elementum mi ante at arcu.', '', '\begin{center}', '', 173*818ff25cSChristian Brabandt \ 'Proin nec risus consequat nunc dapibus consectetur. Mauris lacinia est a augue', 174*818ff25cSChristian Brabandt \ 'tristique accumsan. Morbi pretium, felis molestie eleifend condimentum, arcu', 175*818ff25cSChristian Brabandt \ 'ipsum congue nisl, quis euismod purus libero in ante. Donec id semper purus.', 176*818ff25cSChristian Brabandt \ 'Suspendisse eget aliquam nunc. Maecenas fringilla mauris vitae maximus', 177*818ff25cSChristian Brabandt \ 'condimentum. Cras a quam in mi dictum eleifend at a lorem. Sed convallis', 178*818ff25cSChristian Brabandt \ 'ante a commodo facilisis. Nam suscipit vulputate odio, vel dapibus nisl', 179*818ff25cSChristian Brabandt \ 'dignissim facilisis. Vestibulum ante ipsum primis in faucibus orci luctus et', 180*818ff25cSChristian Brabandt \ 'ultrices posuere cubilia curae;', '', ''] 181*818ff25cSChristian Brabandt 1d_ 182*818ff25cSChristian Brabandt call cursor(5, 1) 183*818ff25cSChristian Brabandt ka 184*818ff25cSChristian Brabandt call cursor(15, 1) 185*818ff25cSChristian Brabandt kb 186*818ff25cSChristian Brabandt norm! 'agqap 187*818ff25cSChristian Brabandt norm! 'bgqap 188*818ff25cSChristian Brabandt let expected = [ '\documentclass{article}', '', '\begin{document}', '', 189*818ff25cSChristian Brabandt \ 'Lorem ipsum dolor sit amet, consectetur adipiscing', 190*818ff25cSChristian Brabandt \ 'elit. Fusce ut enim non libero efficitur aliquet.', 191*818ff25cSChristian Brabandt \ 'Maecenas metus justo, facilisis convallis blandit', 192*818ff25cSChristian Brabandt \ 'non, semper eu urna. Suspendisse diam diam,', 193*818ff25cSChristian Brabandt \ 'iaculis faucibus lorem eu, fringilla condimentum', 194*818ff25cSChristian Brabandt \ 'lectus. Quisque euismod diam at convallis', 195*818ff25cSChristian Brabandt \ 'vulputate. Pellentesque laoreet tortor sit amet', 196*818ff25cSChristian Brabandt \ 'mauris euismod ornare. Sed varius bibendum orci', 197*818ff25cSChristian Brabandt \ 'vel vehicula. Pellentesque tempor, ipsum et auctor', 198*818ff25cSChristian Brabandt \ 'accumsan, metus lectus ultrices odio, sed', 199*818ff25cSChristian Brabandt \ 'elementum mi ante at arcu.', '', '\begin{center}', '', 200*818ff25cSChristian Brabandt \ ' Proin nec risus consequat nunc dapibus', 201*818ff25cSChristian Brabandt \ ' consectetur. Mauris lacinia est a augue', 202*818ff25cSChristian Brabandt \ ' tristique accumsan. Morbi pretium, felis', 203*818ff25cSChristian Brabandt \ ' molestie eleifend condimentum, arcu ipsum congue', 204*818ff25cSChristian Brabandt \ ' nisl, quis euismod purus libero in ante. Donec', 205*818ff25cSChristian Brabandt \ ' id semper purus. Suspendisse eget aliquam nunc.', 206*818ff25cSChristian Brabandt \ ' Maecenas fringilla mauris vitae maximus', 207*818ff25cSChristian Brabandt \ ' condimentum. Cras a quam in mi dictum eleifend', 208*818ff25cSChristian Brabandt \ ' at a lorem. Sed convallis ante a commodo', 209*818ff25cSChristian Brabandt \ ' facilisis. Nam suscipit vulputate odio, vel', 210*818ff25cSChristian Brabandt \ ' dapibus nisl dignissim facilisis. Vestibulum', 211*818ff25cSChristian Brabandt \ ' ante ipsum primis in faucibus orci luctus et', 212*818ff25cSChristian Brabandt \ ' ultrices posuere cubilia curae;', '', ''] 213*818ff25cSChristian Brabandt call assert_equal(expected, getline(1, '$')) 214*818ff25cSChristian Brabandt 215*818ff25cSChristian Brabandt bwipe! 216*818ff25cSChristian Brabandt delmark ab 217*818ff25cSChristian Brabandt delfunction GetTeXIndent 218*818ff25cSChristian Brabandtendfu 219*818ff25cSChristian Brabandt 220bd7206e0SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 221