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