view src/testdir/test_lispindent.vim @ 33293:42b89193ab3e v9.0.1912

patch 9.0.1912: Cirrus-CI running out of credits Commit: https://github.com/vim/vim/commit/6f00d17e8d64ed46c85625e8ac38ed0928b32c58 Author: Christian Brabandt <cb@256bit.org> Date: Tue Sep 19 20:16:46 2023 +0200 patch 9.0.1912: Cirrus-CI running out of credits Problem: Cirrus-CI running out of credits Solution: disable Cirrus-CI for now We are running out of credits for Cirrus CI already at the middle of the month and unfortunately this means our CI now consistently fails. This all hapens because cirrus ci is not enforcing the free-tier limits (see also https://cirrus-ci.org/blog/2023/07/17/limiting-free-usage-of-cirrus-ci/). Perhaps at the beginning of the next month we can revisit and enable just a build without testing it. Hopefully this is won't take too many credits and we can at least verify that building works. Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Tue, 19 Sep 2023 20:30:10 +0200
parents 40df8a6515f6
children
line wrap: on
line source

" 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