Mercurial > vim
comparison src/testdir/test_user_func.vim @ 32274:83caf07aedd6 v9.0.1468
patch 9.0.1468: recursively calling :defer function if it does :qa
Commit: https://github.com/vim/vim/commit/a1f2b5ddc63d4e2b6ab047d8c839dd8477b36aba
Author: zeertzjq <zeertzjq@outlook.com>
Date: Tue Apr 18 21:04:53 2023 +0100
patch 9.0.1468: recursively calling :defer function if it does :qa
Problem: Recursively calling :defer function if it does :qa in a compiled
function.
Solution: Clear the defer entry before calling the function. (closes #12271)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Tue, 18 Apr 2023 22:15:04 +0200 |
parents | 854aeaac48b7 |
children | 774c94489feb |
comparison
equal
deleted
inserted
replaced
32273:a7e63171cbfb | 32274:83caf07aedd6 |
---|---|
649 call assert_equal('yes', caught) | 649 call assert_equal('yes', caught) |
650 call assert_false(filereadable('XDeleteOne')) | 650 call assert_false(filereadable('XDeleteOne')) |
651 call assert_false(filereadable('XDeleteTwo')) | 651 call assert_false(filereadable('XDeleteTwo')) |
652 endfunc | 652 endfunc |
653 | 653 |
654 func Test_defer_quitall() | 654 func Test_defer_quitall_func() |
655 let lines =<< trim END | 655 let lines =<< trim END |
656 vim9script | |
657 func DeferLevelTwo() | 656 func DeferLevelTwo() |
658 call writefile(['text'], 'XQuitallTwo', 'D') | 657 call writefile(['text'], 'XQuitallFuncTwo', 'D') |
659 call writefile(['quit'], 'XQuitallThree', 'a') | 658 call writefile(['quit'], 'XQuitallFuncThree', 'a') |
660 qa! | 659 qa! |
661 endfunc | 660 endfunc |
662 | 661 |
662 func DeferLevelOne() | |
663 call writefile(['text'], 'XQuitalFunclOne', 'D') | |
664 defer DeferLevelTwo() | |
665 endfunc | |
666 | |
667 call DeferLevelOne() | |
668 END | |
669 call writefile(lines, 'XdeferQuitallFunc', 'D') | |
670 call system(GetVimCommand() .. ' -X -S XdeferQuitallFunc') | |
671 call assert_equal(0, v:shell_error) | |
672 call assert_false(filereadable('XQuitallFuncOne')) | |
673 call assert_false(filereadable('XQuitallFuncTwo')) | |
674 call assert_equal(['quit'], readfile('XQuitallFuncThree')) | |
675 | |
676 call delete('XQuitallFuncThree') | |
677 endfunc | |
678 | |
679 func Test_defer_quitall_def() | |
680 let lines =<< trim END | |
681 vim9script | |
682 def DeferLevelTwo() | |
683 call writefile(['text'], 'XQuitallDefTwo', 'D') | |
684 call writefile(['quit'], 'XQuitallDefThree', 'a') | |
685 qa! | |
686 enddef | |
687 | |
663 def DeferLevelOne() | 688 def DeferLevelOne() |
664 call writefile(['text'], 'XQuitallOne', 'D') | 689 call writefile(['text'], 'XQuitallDefOne', 'D') |
665 call DeferLevelTwo() | 690 defer DeferLevelTwo() |
666 enddef | 691 enddef |
667 | 692 |
668 DeferLevelOne() | 693 DeferLevelOne() |
669 END | 694 END |
670 call writefile(lines, 'XdeferQuitall', 'D') | 695 call writefile(lines, 'XdeferQuitallDef', 'D') |
671 let res = system(GetVimCommand() .. ' -X -S XdeferQuitall') | 696 call system(GetVimCommand() .. ' -X -S XdeferQuitallDef') |
672 call assert_equal(0, v:shell_error) | 697 call assert_equal(0, v:shell_error) |
673 call assert_false(filereadable('XQuitallOne')) | 698 call assert_false(filereadable('XQuitallDefOne')) |
674 call assert_false(filereadable('XQuitallTwo')) | 699 call assert_false(filereadable('XQuitallDefTwo')) |
675 call assert_equal(['quit'], readfile('XQuitallThree')) | 700 call assert_equal(['quit'], readfile('XQuitallDefThree')) |
676 | 701 |
677 call delete('XQuitallThree') | 702 call delete('XQuitallDefThree') |
678 endfunc | 703 endfunc |
679 | 704 |
680 func Test_defer_quitall_in_expr_func() | 705 func Test_defer_quitall_in_expr_func() |
681 let lines =<< trim END | 706 let lines =<< trim END |
682 def DefIndex(idx: number, val: string): bool | 707 def DefIndex(idx: number, val: string): bool |
691 assert_equal(2, indexof(['a', 'b', 'c'], funcref('g:DefIndex'))) | 716 assert_equal(2, indexof(['a', 'b', 'c'], funcref('g:DefIndex'))) |
692 enddef | 717 enddef |
693 call Test_defer_in_funcref() | 718 call Test_defer_in_funcref() |
694 END | 719 END |
695 call writefile(lines, 'XdeferQuitallExpr', 'D') | 720 call writefile(lines, 'XdeferQuitallExpr', 'D') |
696 let res = system(GetVimCommand() .. ' -X -S XdeferQuitallExpr') | 721 call system(GetVimCommand() .. ' -X -S XdeferQuitallExpr') |
697 call assert_equal(0, v:shell_error) | 722 call assert_equal(0, v:shell_error) |
698 call assert_false(filereadable('Xentry0')) | 723 call assert_false(filereadable('Xentry0')) |
699 call assert_false(filereadable('Xentry1')) | 724 call assert_false(filereadable('Xentry1')) |
700 call assert_false(filereadable('Xentry2')) | 725 call assert_false(filereadable('Xentry2')) |
701 endfunc | 726 endfunc |