@@ -37,8 +37,9 @@ describe("BadgeService", () => {
3737
3838 describe ( "given a single tab is open" , ( ) => {
3939 beforeEach ( ( ) => {
40- badgeApi . tabs = [ 1 ] ;
41- badgeApi . setActiveTab ( tabId ) ;
40+ badgeApi . tabs = [ tabId ] ;
41+ badgeApi . setActiveTabs ( [ tabId ] ) ;
42+ badgeApi . setLastActivatedTab ( tabId ) ;
4243 badgeServiceSubscription = badgeService . startListening ( ) ;
4344 } ) ;
4445
@@ -187,17 +188,18 @@ describe("BadgeService", () => {
187188 } ) ;
188189 } ) ;
189190
190- describe ( "given multiple tabs are open" , ( ) => {
191+ describe ( "given multiple tabs are open, only one active " , ( ) => {
191192 const tabId = 1 ;
192193 const tabIds = [ 1 , 2 , 3 ] ;
193194
194195 beforeEach ( ( ) => {
195196 badgeApi . tabs = tabIds ;
196- badgeApi . setActiveTab ( tabId ) ;
197+ badgeApi . setActiveTabs ( [ tabId ] ) ;
198+ badgeApi . setLastActivatedTab ( tabId ) ;
197199 badgeServiceSubscription = badgeService . startListening ( ) ;
198200 } ) ;
199201
200- it ( "sets state for each tab when no other state has been set" , async ( ) => {
202+ it ( "sets general state for active tab when no other state has been set" , async ( ) => {
201203 const state : BadgeState = {
202204 text : "text" ,
203205 backgroundColor : "color" ,
@@ -213,6 +215,67 @@ describe("BadgeService", () => {
213215 3 : undefined ,
214216 } ) ;
215217 } ) ;
218+
219+ it ( "only updates the active tab when setting state" , async ( ) => {
220+ const state : BadgeState = {
221+ text : "text" ,
222+ backgroundColor : "color" ,
223+ icon : BadgeIcon . Locked ,
224+ } ;
225+ badgeApi . setState . mockReset ( ) ;
226+
227+ await badgeService . setState ( "state-1" , BadgeStatePriority . Default , state , tabId ) ;
228+ await badgeService . setState ( "state-2" , BadgeStatePriority . Default , state , 2 ) ;
229+ await badgeService . setState ( "state-2" , BadgeStatePriority . Default , state , 2 ) ;
230+
231+ await new Promise ( ( resolve ) => setTimeout ( resolve , 0 ) ) ;
232+ expect ( badgeApi . setState ) . toHaveBeenCalledTimes ( 1 ) ;
233+ } ) ;
234+ } ) ;
235+
236+ describe ( "given multiple tabs are open and multiple are active" , ( ) => {
237+ const activeTabIds = [ 1 , 2 ] ;
238+ const tabIds = [ 1 , 2 , 3 ] ;
239+
240+ beforeEach ( ( ) => {
241+ badgeApi . tabs = tabIds ;
242+ badgeApi . setActiveTabs ( activeTabIds ) ;
243+ badgeApi . setLastActivatedTab ( 1 ) ;
244+ badgeServiceSubscription = badgeService . startListening ( ) ;
245+ } ) ;
246+
247+ it ( "sets general state for active tabs when no other state has been set" , async ( ) => {
248+ const state : BadgeState = {
249+ text : "text" ,
250+ backgroundColor : "color" ,
251+ icon : BadgeIcon . Locked ,
252+ } ;
253+
254+ await badgeService . setState ( "state-name" , BadgeStatePriority . Default , state ) ;
255+
256+ await new Promise ( ( resolve ) => setTimeout ( resolve , 0 ) ) ;
257+ expect ( badgeApi . specificStates ) . toEqual ( {
258+ 1 : state ,
259+ 2 : state ,
260+ 3 : undefined ,
261+ } ) ;
262+ } ) ;
263+
264+ it ( "only updates the active tabs when setting general state" , async ( ) => {
265+ const state : BadgeState = {
266+ text : "text" ,
267+ backgroundColor : "color" ,
268+ icon : BadgeIcon . Locked ,
269+ } ;
270+ badgeApi . setState . mockReset ( ) ;
271+
272+ await badgeService . setState ( "state-1" , BadgeStatePriority . Default , state , 1 ) ;
273+ await badgeService . setState ( "state-2" , BadgeStatePriority . Default , state , 2 ) ;
274+ await badgeService . setState ( "state-3" , BadgeStatePriority . Default , state , 3 ) ;
275+
276+ await new Promise ( ( resolve ) => setTimeout ( resolve , 0 ) ) ;
277+ expect ( badgeApi . setState ) . toHaveBeenCalledTimes ( 2 ) ;
278+ } ) ;
216279 } ) ;
217280 } ) ;
218281
@@ -222,7 +285,8 @@ describe("BadgeService", () => {
222285
223286 beforeEach ( ( ) => {
224287 badgeApi . tabs = [ tabId ] ;
225- badgeApi . setActiveTab ( tabId ) ;
288+ badgeApi . setActiveTabs ( [ tabId ] ) ;
289+ badgeApi . setLastActivatedTab ( tabId ) ;
226290 badgeServiceSubscription = badgeService . startListening ( ) ;
227291 } ) ;
228292
@@ -491,13 +555,14 @@ describe("BadgeService", () => {
491555 } ) ;
492556 } ) ;
493557
494- describe ( "given multiple tabs are open" , ( ) => {
558+ describe ( "given multiple tabs are open, only one active " , ( ) => {
495559 const tabId = 1 ;
496560 const tabIds = [ 1 , 2 , 3 ] ;
497561
498562 beforeEach ( ( ) => {
499563 badgeApi . tabs = tabIds ;
500- badgeApi . setActiveTab ( tabId ) ;
564+ badgeApi . setActiveTabs ( [ tabId ] ) ;
565+ badgeApi . setLastActivatedTab ( tabId ) ;
501566 badgeServiceSubscription = badgeService . startListening ( ) ;
502567 } ) ;
503568
@@ -528,5 +593,62 @@ describe("BadgeService", () => {
528593 } ) ;
529594 } ) ;
530595 } ) ;
596+
597+ describe ( "given multiple tabs are open and multiple are active" , ( ) => {
598+ const tabId = 1 ;
599+ const activeTabIds = [ 1 , 2 ] ;
600+ const tabIds = [ 1 , 2 , 3 ] ;
601+
602+ beforeEach ( ( ) => {
603+ badgeApi . tabs = tabIds ;
604+ badgeApi . setActiveTabs ( activeTabIds ) ;
605+ badgeApi . setLastActivatedTab ( tabId ) ;
606+ badgeServiceSubscription = badgeService . startListening ( ) ;
607+ } ) ;
608+
609+ it ( "sets general state for all active tabs when no other state has been set" , async ( ) => {
610+ const generalState : BadgeState = {
611+ text : "general-text" ,
612+ backgroundColor : "general-color" ,
613+ icon : BadgeIcon . Unlocked ,
614+ } ;
615+
616+ await badgeService . setState ( "general-state" , BadgeStatePriority . Default , generalState ) ;
617+
618+ await new Promise ( ( resolve ) => setTimeout ( resolve , 0 ) ) ;
619+ expect ( badgeApi . specificStates ) . toEqual ( {
620+ [ tabIds [ 0 ] ] : generalState ,
621+ [ tabIds [ 1 ] ] : generalState ,
622+ [ tabIds [ 2 ] ] : undefined ,
623+ } ) ;
624+ } ) ;
625+
626+ it ( "sets tab-specific state for provided tab" , async ( ) => {
627+ const generalState : BadgeState = {
628+ text : "general-text" ,
629+ backgroundColor : "general-color" ,
630+ icon : BadgeIcon . Unlocked ,
631+ } ;
632+ const specificState : BadgeState = {
633+ text : "tab-text" ,
634+ icon : BadgeIcon . Locked ,
635+ } ;
636+
637+ await badgeService . setState ( "general-state" , BadgeStatePriority . Default , generalState ) ;
638+ await badgeService . setState (
639+ "tab-state" ,
640+ BadgeStatePriority . Default ,
641+ specificState ,
642+ tabIds [ 0 ] ,
643+ ) ;
644+
645+ await new Promise ( ( resolve ) => setTimeout ( resolve , 0 ) ) ;
646+ expect ( badgeApi . specificStates ) . toEqual ( {
647+ [ tabIds [ 0 ] ] : { ...specificState , backgroundColor : "general-color" } ,
648+ [ tabIds [ 1 ] ] : generalState ,
649+ [ tabIds [ 2 ] ] : undefined ,
650+ } ) ;
651+ } ) ;
652+ } ) ;
531653 } ) ;
532654} ) ;
0 commit comments