diff options
Diffstat (limited to 'src/testdir/test_lispindent.vim')
-rw-r--r-- | src/testdir/test_lispindent.vim | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/src/testdir/test_lispindent.vim b/src/testdir/test_lispindent.vim new file mode 100644 index 0000000..770c501 --- /dev/null +++ b/src/testdir/test_lispindent.vim @@ -0,0 +1,129 @@ +" Tests for 'lispwords' settings being global-local. +" And other lisp indent stuff. + +set nocompatible viminfo+=nviminfo + +func Test_global_local_lispwords() + setglobal lispwords=foo,bar,baz + setlocal lispwords-=foo | setlocal lispwords+=quux + call assert_equal('foo,bar,baz', &g:lispwords) + call assert_equal('bar,baz,quux', &l:lispwords) + call assert_equal('bar,baz,quux', &lispwords) + + setlocal lispwords< + call assert_equal('foo,bar,baz', &g:lispwords) + call assert_equal('foo,bar,baz', &l:lispwords) + call assert_equal('foo,bar,baz', &lispwords) +endfunc + +def Test_lisp_indent() + enew! + + append(0, [ + '(defun html-file (base)', + '(format nil "~(~A~).html" base))', + '', + '(defmacro page (name title &rest body)', + '(let ((ti (gensym)))', + '`(with-open-file (*standard-output*', + '(html-file ,name)', + ':direction :output', + ':if-exists :supersede)', + '(let ((,ti ,title))', + '(as title ,ti)', + '(with center ', + '(as h2 (string-upcase ,ti)))', + '(brs 3)', + ',@body))))', + '', + ';;; Utilities for generating links', + '', + '(defmacro with-link (dest &rest body)', + '`(progn', + '(format t "<a href=\"~A\">" (html-file ,dest))', + ',@body', + '(princ "</a>")))' + ]) + assert_equal(7, lispindent(2)) + assert_equal(5, 6->lispindent()) + assert_fails('lispindent(-1)', 'E966: Invalid line number: -1') + + set lisp + set lispwords& + var save_copt = &cpoptions + set cpoptions+=p + normal 1G=G + + assert_equal([ + '(defun html-file (base)', + ' (format nil "~(~A~).html" base))', + '', + '(defmacro page (name title &rest body)', + ' (let ((ti (gensym)))', + ' `(with-open-file (*standard-output*', + ' (html-file ,name)', + ' :direction :output', + ' :if-exists :supersede)', + ' (let ((,ti ,title))', + ' (as title ,ti)', + ' (with center ', + ' (as h2 (string-upcase ,ti)))', + ' (brs 3)', + ' ,@body))))', + '', + ';;; Utilities for generating links', + '', + '(defmacro with-link (dest &rest body)', + ' `(progn', + ' (format t "<a href=\"~A\">" (html-file ,dest))', + ' ,@body', + ' (princ "</a>")))', + '' + ], getline(1, "$")) + + enew! + &cpoptions = save_copt + set nolisp +enddef + +func Test_lispindent_negative() + " in legacy script there is no error + call assert_equal(-1, lispindent(-1)) +endfunc + +func Test_lispindent_with_indentexpr() + enew + setl ai lisp nocin indentexpr=11 + exe "normal a(x\<CR>1\<CR>2)\<Esc>" + let expected = ['(x', ' 1', ' 2)'] + call assert_equal(expected, getline(1, 3)) + " with Lisp indenting the first line is not indented + normal 1G=G + call assert_equal(expected, getline(1, 3)) + + %del + setl lispoptions=expr:1 indentexpr=5 + exe "normal a(x\<CR>1\<CR>2)\<Esc>" + let expected_expr = ['(x', ' 1', ' 2)'] + call assert_equal(expected_expr, getline(1, 3)) + normal 2G2<<=G + call assert_equal(expected_expr, getline(1, 3)) + + setl lispoptions=expr:0 + " with Lisp indenting the first line is not indented + normal 1G3<<=G + call assert_equal(expected, getline(1, 3)) + + bwipe! +endfunc + +func Test_lisp_indent_works() + " This was reading beyond the end of the line + new + exe "norm a\tü(\<CR>=" + set lisp + norm == + bwipe! +endfunc + +" vim: shiftwidth=2 sts=2 expandtab |