diff src/testdir/test_lispindent.vim @ 30805:4edfa418f8ba v9.0.0737

patch 9.0.0737: Lisp word only recognized when a space follows Commit: https://github.com/vim/vim/commit/d26c5805bcbd630dab0478c2d22503a6e32a83c1 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Oct 13 12:30:08 2022 +0100 patch 9.0.0737: Lisp word only recognized when a space follows Problem: Lisp word only recognized when a space follows. Solution: Also match a word at the end of a line. Rename the test. Use a compiled function to avoid backslashes.
author Bram Moolenaar <Bram@vim.org>
date Thu, 13 Oct 2022 13:45:06 +0200
parents
children 942f1b3bc694
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/src/testdir/test_lispindent.vim
@@ -0,0 +1,103 @@
+" 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_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