summaryrefslogtreecommitdiffstats
path: root/src/testdir/test_lispindent.vim
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/testdir/test_lispindent.vim129
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