@@ -4986,4 +4986,162 @@ func Test_WinScrolled_Resized_eiw()
4986
4986
call StopVimInTerminal (buf )
4987
4987
endfunc
4988
4988
4989
+ " Test that TabClosedPre and TabClosed are triggered when closing a tab.
4990
+ func Test_autocmd_tabclosedpre ()
4991
+ augroup testing
4992
+ au TabClosedPre * call add (g: tabpagenr_pre , t :testvar)
4993
+ au TabClosed * call add (g: tabpagenr_post , t :testvar)
4994
+ augroup END
4995
+
4996
+ " Test 'tabclose' triggering
4997
+ let g: tabpagenr_pre = []
4998
+ let g: tabpagenr_post = []
4999
+ let t :testvar = 1
5000
+ tabnew
5001
+ let t :testvar = 2
5002
+ tabnew
5003
+ let t :testvar = 3
5004
+ tabnew
5005
+ let t :testvar = 4
5006
+ tabnext
5007
+ tabclose
5008
+ tabclose
5009
+ tabclose
5010
+ call assert_equal ([1 , 2 , 3 ], g: tabpagenr_pre )
5011
+ call assert_equal ([2 , 3 , 4 ], g: tabpagenr_post )
5012
+
5013
+ " Test 'tabclose {count}' triggering
5014
+ let g: tabpagenr_pre = []
5015
+ let g: tabpagenr_post = []
5016
+ let t :testvar = 1
5017
+ tabnew
5018
+ let t :testvar = 2
5019
+ tabnew
5020
+ let t :testvar = 3
5021
+ tabclose 2
5022
+ tabclose 2
5023
+ call assert_equal ([2 , 3 ], g: tabpagenr_pre )
5024
+ call assert_equal ([3 , 1 ], g: tabpagenr_post )
5025
+
5026
+ " Test 'tabonly' triggering
5027
+ let g: tabpagenr_pre = []
5028
+ let g: tabpagenr_post = []
5029
+ let t :testvar = 1
5030
+ tabnew
5031
+ let t :testvar = 2
5032
+ tabonly
5033
+ call assert_equal ([1 ], g: tabpagenr_pre )
5034
+ call assert_equal ([2 ], g: tabpagenr_post )
5035
+
5036
+ " Test 'q' and 'close' triggering (closing the last window in a tab)
5037
+ let g: tabpagenr_pre = []
5038
+ let g: tabpagenr_post = []
5039
+ split
5040
+ let t :testvar = 1
5041
+ tabnew
5042
+ let t :testvar = 2
5043
+ split
5044
+ vsplit
5045
+ tabnew
5046
+ let t :testvar = 3
5047
+ tabnext
5048
+ only
5049
+ quit
5050
+ quit
5051
+ close
5052
+ close
5053
+ call assert_equal ([1 , 2 ], g: tabpagenr_pre )
5054
+ call assert_equal ([2 , 3 ], g: tabpagenr_post )
5055
+
5056
+ func ClearAutomcdAndCreateTabs ()
5057
+ au ! TabClosedPre
5058
+ bw !
5059
+ e Z
5060
+ tabonly
5061
+ tabnew A
5062
+ tabnew B
5063
+ tabnew C
5064
+ endfunc
5065
+
5066
+ func GetTabs ()
5067
+ redir = > tabsout
5068
+ tabs
5069
+ redir END
5070
+ let tabsout = substitute (tabsout, ' \n' , ' ' , ' g' )
5071
+ let tabsout = substitute (tabsout, ' Tab page ' , ' ' , ' g' )
5072
+ let tabsout = substitute (tabsout, ' ' , ' ' , ' g' )
5073
+ return tabsout
5074
+ endfunc
5075
+
5076
+ call CleanUpTestAuGroup ()
5077
+
5078
+ " Close tab in TabClosedPre autocmd
5079
+ call ClearAutomcdAndCreateTabs ()
5080
+ au TabClosedPre * tabclose
5081
+ call assert_fails (' tabclose' , ' E1312' )
5082
+ call ClearAutomcdAndCreateTabs ()
5083
+ au TabClosedPre * tabclose
5084
+ call assert_fails (' tabclose 2' , ' E1312' )
5085
+ call ClearAutomcdAndCreateTabs ()
5086
+ au TabClosedPre * tabclose 1
5087
+ call assert_fails (' tabclose' , ' E1312' )
5088
+
5089
+ " Close other (all) tabs in TabClosedPre autocmd
5090
+ call ClearAutomcdAndCreateTabs ()
5091
+ au TabClosedPre * tabonly
5092
+ call assert_fails (' tabclose' , ' E1312' )
5093
+ call ClearAutomcdAndCreateTabs ()
5094
+ au TabClosedPre * tabonly
5095
+ call assert_fails (' tabclose 2' , ' E1312' )
5096
+ call ClearAutomcdAndCreateTabs ()
5097
+ au TabClosedPre * tabclose 4
5098
+ call assert_fails (' tabclose 2' , ' E1312' )
5099
+
5100
+ " Open new tabs in TabClosedPre autocmd
5101
+ call ClearAutomcdAndCreateTabs ()
5102
+ au TabClosedPre * tabnew D
5103
+ call assert_fails (' tabclose' , ' E1312' )
5104
+ call ClearAutomcdAndCreateTabs ()
5105
+ au TabClosedPre * tabnew D
5106
+ call assert_fails (' tabclose 1' , ' E1312' )
5107
+
5108
+ " Moving the tab page in TabClosedPre autocmd
5109
+ call ClearAutomcdAndCreateTabs ()
5110
+ au TabClosedPre * tabmove 0
5111
+ tabclose
5112
+ call assert_equal (' 1Z2A3>B' , GetTabs ())
5113
+ call ClearAutomcdAndCreateTabs ()
5114
+ au TabClosedPre * tabmove 0
5115
+ tabclose 1
5116
+ call assert_equal (' 1A2B3>C' , GetTabs ())
5117
+ tabonly
5118
+ call assert_equal (' 1>C' , GetTabs ())
5119
+
5120
+ " Switching tab page in TabClosedPre autocmd
5121
+ call ClearAutomcdAndCreateTabs ()
5122
+ au TabClosedPre * tabnext | e Y
5123
+ tabclose
5124
+ call assert_equal (' 1Y2A3>B' , GetTabs ())
5125
+ call ClearAutomcdAndCreateTabs ()
5126
+ au TabClosedPre * tabnext | e Y
5127
+ tabclose 1
5128
+ call assert_equal (' 1Y2B3>C' , GetTabs ())
5129
+ tabonly
5130
+ call assert_equal (' 1>Y' , GetTabs ())
5131
+
5132
+ " Create new windows in TabClosedPre autocmd
5133
+ call ClearAutomcdAndCreateTabs ()
5134
+ au TabClosedPre * split | e X| vsplit | e Y | split | e Z
5135
+ call assert_fails (' tabclose' , ' E242' )
5136
+ call ClearAutomcdAndCreateTabs ()
5137
+ au TabClosedPre * new X | new Y | new Z
5138
+ call assert_fails (' tabclose 1' , ' E242' )
5139
+
5140
+ " Clean up
5141
+ au !
5142
+ only
5143
+ tabonly
5144
+ bw !
5145
+ endfunc
5146
+
4989
5147
" vim: shiftwidth = 2 sts = 2 expandtab
0 commit comments