@@ -16,6 +16,26 @@ describe.concurrent('tabs', () => {
1616 expect ( helper . activeTab ) . toBe ( 'tab1' )
1717 } )
1818
19+ it ( 'addTab 使用 active: false 添加标签但不激活' , ( ) => {
20+ const helper = createTabsHelper < TabData > ( )
21+ helper . addTab ( 'tab1' , { title : 'A' } )
22+ helper . addTab ( 'tab2' , { title : 'B' } , { active : false } )
23+
24+ expect ( helper . getTabs ( ) ) . toEqual ( [
25+ [ 'tab1' , { title : 'A' } ] ,
26+ [ 'tab2' , { title : 'B' } ] ,
27+ ] )
28+ expect ( helper . activeTab ) . toBe ( 'tab1' ) // 仍然是 tab1
29+ } )
30+
31+ it ( 'addTab 使用 active: true 显式激活标签' , ( ) => {
32+ const helper = createTabsHelper < TabData > ( )
33+ helper . addTab ( 'tab1' , { title : 'A' } )
34+ helper . addTab ( 'tab2' , { title : 'B' } , { active : true } )
35+
36+ expect ( helper . activeTab ) . toBe ( 'tab2' )
37+ } )
38+
1939 it ( 'setTabData 更新已存在标签数据' , ( ) => {
2040 const helper = createTabsHelper < TabData > ( )
2141 helper . addTab ( 'tab1' , { title : 'Old' } )
@@ -104,6 +124,38 @@ describe.concurrent('tabs', () => {
104124 expect ( helper . activeTab ) . toBe ( 'tab2' )
105125 } )
106126
127+ it ( 'removeTab 使用 activeNext: false 移除标签但不激活下一个' , async ( ) => {
128+ const helper = createTabsHelper < TabData > ( )
129+ helper . addTab ( 'tab1' , { } )
130+ helper . addTab ( 'tab2' , { } )
131+ helper . addTab ( 'tab3' , { } )
132+
133+ helper . activeTab = 'tab1'
134+ await helper . removeTab ( 'tab1' , { activeNext : false } )
135+
136+ expect ( helper . getTabs ( ) ) . toEqual ( [
137+ [ 'tab2' , { } ] ,
138+ [ 'tab3' , { } ] ,
139+ ] )
140+ expect ( helper . activeTab ) . toBe ( 'tab1' ) // 仍然是 tab1(虽然已被移除)
141+ } )
142+
143+ it ( 'removeTab 使用 activeNext: true 显式激活下一个标签' , async ( ) => {
144+ const helper = createTabsHelper < TabData > ( )
145+ helper . addTab ( 'tab1' , { } )
146+ helper . addTab ( 'tab2' , { } )
147+ helper . addTab ( 'tab3' , { } )
148+
149+ helper . activeTab = 'tab2'
150+ await helper . removeTab ( 'tab2' , { activeNext : true } )
151+
152+ expect ( helper . getTabs ( ) ) . toEqual ( [
153+ [ 'tab1' , { } ] ,
154+ [ 'tab3' , { } ] ,
155+ ] )
156+ expect ( helper . activeTab ) . toBe ( 'tab1' ) // 激活前一个标签
157+ } )
158+
107159 it ( 'removeTab 当 beforeRemove 返回 false 时不移除标签' , async ( ) => {
108160 const helper = createTabsHelper < TabData > ( {
109161 beforeRemove : ( ) => false ,
@@ -135,6 +187,32 @@ describe.concurrent('tabs', () => {
135187 expect ( helper . activeTab ) . toBe ( 'c' )
136188 } )
137189
190+ it ( 'removeOtherTabs 使用 activeNext: false 不激活目标标签' , async ( ) => {
191+ const helper = createTabsHelper < TabData > ( )
192+ helper . addTab ( 'a' , { } )
193+ helper . addTab ( 'b' , { } )
194+ helper . addTab ( 'c' , { } )
195+
196+ helper . activeTab = 'a'
197+ await helper . removeOtherTabs ( 'c' , { activeNext : false } )
198+
199+ expect ( helper . getTabs ( ) ) . toEqual ( [ [ 'c' , { } ] ] )
200+ expect ( helper . activeTab ) . toBe ( 'a' ) // 仍然是 a(虽然已被移除)
201+ } )
202+
203+ it ( 'removeOtherTabs 使用 activeNext: true 激活目标标签' , async ( ) => {
204+ const helper = createTabsHelper < TabData > ( )
205+ helper . addTab ( 'a' , { } )
206+ helper . addTab ( 'b' , { } )
207+ helper . addTab ( 'c' , { } )
208+
209+ helper . activeTab = 'a'
210+ await helper . removeOtherTabs ( 'b' , { activeNext : true } )
211+
212+ expect ( helper . getTabs ( ) ) . toEqual ( [ [ 'b' , { } ] ] )
213+ expect ( helper . activeTab ) . toBe ( 'b' )
214+ } )
215+
138216 it ( 'removeOtherTabs 当无其他可移除标签时不执行' , async ( ) => {
139217 const helper = createTabsHelper < TabData > ( {
140218 isRemovable : ( { tabData } ) => ! tabData . isFixed ,
@@ -165,9 +243,60 @@ describe.concurrent('tabs', () => {
165243 expect ( helper . activeTab ) . toBe ( 'b' )
166244 } )
167245
246+ it ( 'removeSideTabs 移除右侧标签' , async ( ) => {
247+ const helper = createTabsHelper < TabData > ( )
248+ helper . addTab ( 'a' , { } )
249+ helper . addTab ( 'b' , { } )
250+ helper . addTab ( 'c' , { } )
251+ helper . addTab ( 'd' , { } )
252+
253+ helper . activeTab = 'c'
254+ await helper . removeSideTabs ( 'right' , 'b' )
255+
256+ expect ( helper . getTabs ( ) ) . toEqual ( [
257+ [ 'a' , { } ] ,
258+ [ 'b' , { } ] ,
259+ ] )
260+ expect ( helper . activeTab ) . toBe ( 'b' ) // 激活的标签在右侧被移除,所以激活目标标签
261+ } )
262+
263+ it ( 'removeSideTabs 使用 activeNext: false 不激活目标标签' , async ( ) => {
264+ const helper = createTabsHelper < TabData > ( )
265+ helper . addTab ( 'a' , { } )
266+ helper . addTab ( 'b' , { } )
267+ helper . addTab ( 'c' , { } )
268+ helper . addTab ( 'd' , { } )
269+
270+ helper . activeTab = 'a'
271+ await helper . removeSideTabs ( 'left' , 'c' , { activeNext : false } )
272+
273+ expect ( helper . getTabs ( ) ) . toEqual ( [
274+ [ 'c' , { } ] ,
275+ [ 'd' , { } ] ,
276+ ] )
277+ expect ( helper . activeTab ) . toBe ( 'a' ) // 仍然是 a(虽然已被移除)
278+ } )
279+
280+ it ( 'removeSideTabs 使用 activeNext: true 当激活标签在移除侧时激活目标标签' , async ( ) => {
281+ const helper = createTabsHelper < TabData > ( )
282+ helper . addTab ( 'a' , { } )
283+ helper . addTab ( 'b' , { } )
284+ helper . addTab ( 'c' , { } )
285+ helper . addTab ( 'd' , { } )
286+
287+ helper . activeTab = 'd'
288+ await helper . removeSideTabs ( 'right' , 'b' , { activeNext : true } )
289+
290+ expect ( helper . getTabs ( ) ) . toEqual ( [
291+ [ 'a' , { } ] ,
292+ [ 'b' , { } ] ,
293+ ] )
294+ expect ( helper . activeTab ) . toBe ( 'b' ) // d 在右侧被移除,激活 b
295+ } )
296+
168297 it ( '自定义选项覆盖默认行为' , ( ) => {
169298 const customOptions = {
170- isRemovable : ( { tabData } ) => tabData . isRemovable ,
299+ isRemovable : ( { tabData } : { tabData : TabData } ) => ! ! tabData . isRemovable ,
171300 beforeRemove : ( ) => Promise . resolve ( true ) ,
172301 }
173302
0 commit comments