169a76fedSBram Moolenaar" Tests for smartindent 253f1673cSBram Moolenaar 353f1673cSBram Moolenaar" Tests for not doing smart indenting when it isn't set. 41e115360SBram Moolenaarfunc Test_nosmartindent() 553f1673cSBram Moolenaar new 653f1673cSBram Moolenaar call append(0, [" some test text", 753f1673cSBram Moolenaar \ " test text", 853f1673cSBram Moolenaar \ "test text", 953f1673cSBram Moolenaar \ " test text"]) 1053f1673cSBram Moolenaar set nocindent nosmartindent autoindent 1153f1673cSBram Moolenaar exe "normal! gg/some\<CR>" 1253f1673cSBram Moolenaar exe "normal! 2cc#test\<Esc>" 1353f1673cSBram Moolenaar call assert_equal(" #test", getline(1)) 1453f1673cSBram Moolenaar enew! | close 151e115360SBram Moolenaarendfunc 1669a76fedSBram Moolenaar 171e115360SBram Moolenaarfunc MyIndent() 181e115360SBram Moolenaarendfunc 1969a76fedSBram Moolenaar 2069a76fedSBram Moolenaar" When 'indentexpr' is set, setting 'si' has no effect. 211e115360SBram Moolenaarfunc Test_smartindent_has_no_effect() 2269a76fedSBram Moolenaar new 2369a76fedSBram Moolenaar exe "normal! i\<Tab>one\<Esc>" 24ca68ae13SBram Moolenaar setlocal noautoindent smartindent indentexpr= 2569a76fedSBram Moolenaar exe "normal! Gotwo\<Esc>" 2669a76fedSBram Moolenaar call assert_equal("\ttwo", getline("$")) 2769a76fedSBram Moolenaar 2869a76fedSBram Moolenaar set indentexpr=MyIndent 2969a76fedSBram Moolenaar exe "normal! Gothree\<Esc>" 3069a76fedSBram Moolenaar call assert_equal("three", getline("$")) 3169a76fedSBram Moolenaar 3269a76fedSBram Moolenaar delfunction! MyIndent 3369a76fedSBram Moolenaar bwipe! 341e115360SBram Moolenaarendfunc 3569a76fedSBram Moolenaar 36bd7206e0SBram Moolenaar" Test for inserting '{' and '} with smartindent 37bd7206e0SBram Moolenaarfunc Test_smartindent_braces() 38bd7206e0SBram Moolenaar new 39ca68ae13SBram Moolenaar setlocal smartindent shiftwidth=4 40bd7206e0SBram Moolenaar call setline(1, [' if (a)', "\tif (b)", "\t return 1"]) 41bd7206e0SBram Moolenaar normal 2ggO{ 42bd7206e0SBram Moolenaar normal 3ggA { 43bd7206e0SBram Moolenaar normal 4ggo} 44bd7206e0SBram Moolenaar normal o} 45bd7206e0SBram Moolenaar normal 4ggO#define FOO 1 46bd7206e0SBram Moolenaar call assert_equal([ 47bd7206e0SBram Moolenaar \ ' if (a)', 48bd7206e0SBram Moolenaar \ ' {', 49bd7206e0SBram Moolenaar \ "\tif (b) {", 50bd7206e0SBram Moolenaar \ '#define FOO 1', 51bd7206e0SBram Moolenaar \ "\t return 1", 52bd7206e0SBram Moolenaar \ "\t}", 53bd7206e0SBram Moolenaar \ ' }' 54bd7206e0SBram Moolenaar \ ], getline(1, '$')) 55ca68ae13SBram Moolenaar close! 56ca68ae13SBram Moolenaarendfunc 57ca68ae13SBram Moolenaar 58ca68ae13SBram Moolenaar" Test for adding a new line before and after comments with smartindent 59ca68ae13SBram Moolenaarfunc Test_si_add_line_around_comment() 60ca68ae13SBram Moolenaar new 61ca68ae13SBram Moolenaar setlocal smartindent shiftwidth=4 62ca68ae13SBram Moolenaar call setline(1, [' A', '# comment1', '# comment2']) 63ca68ae13SBram Moolenaar exe "normal GoC\<Esc>2GOB" 64ca68ae13SBram Moolenaar call assert_equal([' A', ' B', '# comment1', '# comment2', ' C'], 65ca68ae13SBram Moolenaar \ getline(1, '$')) 66ca68ae13SBram Moolenaar close! 67ca68ae13SBram Moolenaarendfunc 68ca68ae13SBram Moolenaar 69ca68ae13SBram Moolenaar" After a C style comment, indent for a following line should line up with the 70ca68ae13SBram Moolenaar" line containing the start of the comment. 71ca68ae13SBram Moolenaarfunc Test_si_indent_after_c_comment() 72ca68ae13SBram Moolenaar new 73ca68ae13SBram Moolenaar setlocal smartindent shiftwidth=4 fo+=ro 74ca68ae13SBram Moolenaar exe "normal i\<C-t>/*\ncomment\n/\n#define FOOBAR\n75\<Esc>ggOabc" 75ca68ae13SBram Moolenaar normal 3jOcont 76ca68ae13SBram Moolenaar call assert_equal([' abc', ' /*', ' * comment', ' * cont', 77ca68ae13SBram Moolenaar \ ' */', '#define FOOBAR', ' 75'], getline(1, '$')) 78ca68ae13SBram Moolenaar close! 79ca68ae13SBram Moolenaarendfunc 80ca68ae13SBram Moolenaar 81ca68ae13SBram Moolenaar" Test for indenting a statement after a if condition split across lines 82ca68ae13SBram Moolenaarfunc Test_si_if_cond_split_across_lines() 83ca68ae13SBram Moolenaar new 84ca68ae13SBram Moolenaar setlocal smartindent shiftwidth=4 85ca68ae13SBram Moolenaar exe "normal i\<C-t>if (cond1 &&\n\<C-t>cond2) {\ni = 10;\n}" 86ca68ae13SBram Moolenaar call assert_equal([' if (cond1 &&', "\t cond2) {", "\ti = 10;", 87ca68ae13SBram Moolenaar \ ' }'], getline(1, '$')) 88ca68ae13SBram Moolenaar close! 89ca68ae13SBram Moolenaarendfunc 90ca68ae13SBram Moolenaar 91ca68ae13SBram Moolenaar" Test for inserting lines before and after a one line comment 92ca68ae13SBram Moolenaarfunc Test_si_one_line_comment() 93ca68ae13SBram Moolenaar new 94ca68ae13SBram Moolenaar setlocal smartindent shiftwidth=4 95ca68ae13SBram Moolenaar exe "normal i\<C-t>abc;\n\<C-t>/* comment */" 96ca68ae13SBram Moolenaar normal oi = 10; 97ca68ae13SBram Moolenaar normal kOj = 1; 98ca68ae13SBram Moolenaar call assert_equal([' abc;', "\tj = 1;", "\t/* comment */", "\ti = 10;"], 99ca68ae13SBram Moolenaar \ getline(1, '$')) 100ca68ae13SBram Moolenaar close! 101ca68ae13SBram Moolenaarendfunc 102ca68ae13SBram Moolenaar 103ca68ae13SBram Moolenaar" Test for smartindent with a comment continued across multiple lines 104ca68ae13SBram Moolenaarfunc Test_si_comment_line_continuation() 105ca68ae13SBram Moolenaar new 106ca68ae13SBram Moolenaar setlocal smartindent shiftwidth=4 107ca68ae13SBram Moolenaar call setline(1, ['# com1', '# com2 \', ' contd', '# com3', ' xyz']) 108ca68ae13SBram Moolenaar normal ggOabc 109ca68ae13SBram Moolenaar call assert_equal([' abc', '# com1', '# com2 \', ' contd', '# com3', 110ca68ae13SBram Moolenaar \ ' xyz'], getline(1, '$')) 111bd7206e0SBram Moolenaar close! 112bd7206e0SBram Moolenaarendfunc 113bd7206e0SBram Moolenaar 114*41a7f82dSYegappan Lakshmanan" When 'paste' is set, 'smartindent' should not take effect. 115*41a7f82dSYegappan Lakshmananfunc Test_si_with_paste() 116*41a7f82dSYegappan Lakshmanan new 117*41a7f82dSYegappan Lakshmanan setlocal smartindent autoindent 118*41a7f82dSYegappan Lakshmanan set paste 119*41a7f82dSYegappan Lakshmanan " insert text that will trigger smartindent 120*41a7f82dSYegappan Lakshmanan exe "norm! i {\nif (x)\ni = 1;\n#define FOO 1\nj = 2;\n}" 121*41a7f82dSYegappan Lakshmanan exe "norm! Ok = 3;" 122*41a7f82dSYegappan Lakshmanan exe "norm! 4G>>" 123*41a7f82dSYegappan Lakshmanan call assert_equal([' {', 'if (x)', 'i = 1;', '#define FOO 1', 124*41a7f82dSYegappan Lakshmanan \ 'j = 2;', 'k = 3;', '}'], getline(1, '$')) 125*41a7f82dSYegappan Lakshmanan call assert_true(&smartindent) 126*41a7f82dSYegappan Lakshmanan set nopaste 127*41a7f82dSYegappan Lakshmanan %d _ 128*41a7f82dSYegappan Lakshmanan exe "norm! i {\nif (x)\ni = 1;\n#define FOO 1\nj = 2;\n}" 129*41a7f82dSYegappan Lakshmanan exe "norm! Ok = 3;" 130*41a7f82dSYegappan Lakshmanan exe "norm! 4G>>" 131*41a7f82dSYegappan Lakshmanan call assert_equal([' {', "\t if (x)", "\t\t i = 1;", 132*41a7f82dSYegappan Lakshmanan \ '#define FOO 1', "\t\t j = 2;", "\t k = 3;", ' }'], 133*41a7f82dSYegappan Lakshmanan \ getline(1, '$')) 134*41a7f82dSYegappan Lakshmanan bw! 135*41a7f82dSYegappan Lakshmananendfunc 136*41a7f82dSYegappan Lakshmanan 13769a76fedSBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 138