" 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\<CR>"
  exe "normal! 2cc#test\<Esc>"
  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\<Tab>one\<Esc>"
  setlocal noautoindent smartindent indentexpr=
  exe "normal! Gotwo\<Esc>"
  call assert_equal("\ttwo", getline("$"))

  set indentexpr=MyIndent
  exe "normal! Gothree\<Esc>"
  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\<Esc>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\<C-t>/*\ncomment\n/\n#define FOOBAR\n75\<Esc>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\<C-t>if (cond1 &&\n\<C-t>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\<C-t>abc;\n\<C-t>/* 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\<C-X>\<C-N>#", 'tx')
  call assert_equal('  foo#', getline(2))

  call setline(2, '')
  call feedkeys("1Go  f\<C-X>\<C-N>}", '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\<C-X>\<C-N>#", 'tx')
  call assert_equal('  foo#', getline(2))
  bwipe!
endfunc

" vim: shiftwidth=2 sts=2 expandtab
