Mercurial > vim
view src/testdir/test_lispindent.vim @ 32962:7771cb060685 v9.0.1781
patch 9.0.1781: Problems when setting bin/paste option
Commit: https://github.com/vim/vim/commit/757593c07a4f4ac43eb6c6e52fc299abc9bc08bc
Author: Christian Brabandt <cb@256bit.org>
Date: Tue Aug 22 21:44:10 2023 +0200
patch 9.0.1781: Problems when setting bin/paste option
Problem: Problems when setting bin/paste option
Solution: When setting binary/paste, remember that this also affects
depending options, so that :verbose set returns the right
location.
Mention if depending options for 'binary' or 'paste' have been reset
indirectly. Add a test to verify it works.
Also noticed as small bug, that the global option value for expandtab
was not reset when paste option is set, so fix that while at it.
closes: #12837
closes: #12879
Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: zeertzjq <zeertzjq@outlook.com>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Tue, 22 Aug 2023 22:00:03 +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