Mercurial > vim
view src/testdir/test_lispindent.vim @ 33601:28605af12602 v9.0.2044
patch 9.0.2044: Vim9: exceptions confuse defered functions
Commit: https://github.com/vim/vim/commit/0672595fd50e9ae668676a40e28ebf66d7f52392
Author: Yegappan Lakshmanan <yegappan@yahoo.com>
Date: Wed Oct 18 11:47:37 2023 +0200
patch 9.0.2044: Vim9: exceptions confuse defered functions
Problem: Vim9: exceptions confuse defered functions
Solution: save and restore exception state when calling defered
functions
closes: #13364
closes: #13372
Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Wed, 18 Oct 2023 12:00:05 +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