From 029f72b1a93430b24b88eb3a72c6114d9f149737 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 10 Apr 2024 22:09:20 +0200 Subject: Adding upstream version 2:9.1.0016. Signed-off-by: Daniel Baumann --- src/testdir/test_smartindent.vim | 159 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 159 insertions(+) create mode 100644 src/testdir/test_smartindent.vim (limited to 'src/testdir/test_smartindent.vim') diff --git a/src/testdir/test_smartindent.vim b/src/testdir/test_smartindent.vim new file mode 100644 index 0000000..9bb7b9c --- /dev/null +++ b/src/testdir/test_smartindent.vim @@ -0,0 +1,159 @@ +" Tests for smartindent + +" Tests for not doing smart indenting when it isn't set. +func Test_nosmartindent() + new + call append(0, [" some test text", + \ " test text", + \ "test text", + \ " test text"]) + set nocindent nosmartindent autoindent + exe "normal! gg/some\" + exe "normal! 2cc#test\" + call assert_equal(" #test", getline(1)) + enew! | close +endfunc + +func MyIndent() +endfunc + +" When 'indentexpr' is set, setting 'si' has no effect. +func Test_smartindent_has_no_effect() + new + exe "normal! i\one\" + setlocal noautoindent smartindent indentexpr= + exe "normal! Gotwo\" + call assert_equal("\ttwo", getline("$")) + + set indentexpr=MyIndent + exe "normal! Gothree\" + call assert_equal("three", getline("$")) + + delfunction! MyIndent + bwipe! +endfunc + +" Test for inserting '{' and '} with smartindent +func Test_smartindent_braces() + new + setlocal smartindent shiftwidth=4 + call setline(1, [' if (a)', "\tif (b)", "\t return 1"]) + normal 2ggO{ + normal 3ggA { + normal 4ggo} + normal o} + normal 4ggO#define FOO 1 + call assert_equal([ + \ ' if (a)', + \ ' {', + \ "\tif (b) {", + \ '#define FOO 1', + \ "\t return 1", + \ "\t}", + \ ' }' + \ ], getline(1, '$')) + close! +endfunc + +" Test for adding a new line before and after comments with smartindent +func Test_si_add_line_around_comment() + new + setlocal smartindent shiftwidth=4 + call setline(1, [' A', '# comment1', '# comment2']) + exe "normal GoC\2GOB" + call assert_equal([' A', ' B', '# comment1', '# comment2', ' C'], + \ getline(1, '$')) + close! +endfunc + +" After a C style comment, indent for a following line should line up with the +" line containing the start of the comment. +func Test_si_indent_after_c_comment() + new + setlocal smartindent shiftwidth=4 fo+=ro + exe "normal i\/*\ncomment\n/\n#define FOOBAR\n75\ggOabc" + normal 3jOcont + call assert_equal([' abc', ' /*', ' * comment', ' * cont', + \ ' */', '#define FOOBAR', ' 75'], getline(1, '$')) + close! +endfunc + +" Test for indenting a statement after a if condition split across lines +func Test_si_if_cond_split_across_lines() + new + setlocal smartindent shiftwidth=4 + exe "normal i\if (cond1 &&\n\cond2) {\ni = 10;\n}" + call assert_equal([' if (cond1 &&', "\t cond2) {", "\ti = 10;", + \ ' }'], getline(1, '$')) + close! +endfunc + +" Test for inserting lines before and after a one line comment +func Test_si_one_line_comment() + new + setlocal smartindent shiftwidth=4 + exe "normal i\abc;\n\/* comment */" + normal oi = 10; + normal kOj = 1; + call assert_equal([' abc;', "\tj = 1;", "\t/* comment */", "\ti = 10;"], + \ getline(1, '$')) + close! +endfunc + +" Test for smartindent with a comment continued across multiple lines +func Test_si_comment_line_continuation() + new + setlocal smartindent shiftwidth=4 + call setline(1, ['# com1', '# com2 \', ' contd', '# com3', ' xyz']) + normal ggOabc + call assert_equal([' abc', '# com1', '# com2 \', ' contd', '# com3', + \ ' xyz'], getline(1, '$')) + close! +endfunc + +" When 'paste' is set, 'smartindent' should not take effect. +func Test_si_with_paste() + new + setlocal smartindent autoindent + set paste + " insert text that will trigger smartindent + exe "norm! i {\nif (x)\ni = 1;\n#define FOO 1\nj = 2;\n}" + exe "norm! Ok = 3;" + exe "norm! 4G>>" + call assert_equal([' {', 'if (x)', 'i = 1;', '#define FOO 1', + \ 'j = 2;', 'k = 3;', '}'], getline(1, '$')) + call assert_true(&smartindent) + set nopaste + %d _ + exe "norm! i {\nif (x)\ni = 1;\n#define FOO 1\nj = 2;\n}" + exe "norm! Ok = 3;" + exe "norm! 4G>>" + call assert_equal([' {', "\t if (x)", "\t\t i = 1;", + \ '#define FOO 1', "\t\t j = 2;", "\t k = 3;", ' }'], + \ getline(1, '$')) + bw! +endfunc + +func Test_si_after_completion() + new + setlocal ai smartindent indentexpr= + call setline(1, 'foo foot') + call feedkeys("o f\\#", 'tx') + call assert_equal(' foo#', getline(2)) + + call setline(2, '') + call feedkeys("1Go f\\}", 'tx') + call assert_equal(' foo}', getline(2)) + + bwipe! +endfunc + +func Test_no_si_after_completion() + new + call setline(1, 'foo foot') + call feedkeys("o f\\#", 'tx') + call assert_equal(' foo#', getline(2)) + bwipe! +endfunc + +" vim: shiftwidth=2 sts=2 expandtab -- cgit v1.2.3