@@ -46,6 +46,50 @@ describe('isDarkMode', function () {
4646 } ) ;
4747} ) ;
4848
49+ describe ( 'profiler-theme-change event' , function ( ) {
50+ it ( 'is dispatched when the theme changes' , function ( ) {
51+ resetForTest ( ) ;
52+ // Initialize in light mode.
53+ isDarkMode ( ) ;
54+
55+ const listener = jest . fn ( ) ;
56+ window . addEventListener ( 'profiler-theme-change' , listener ) ;
57+
58+ // Switch to dark via a storage event.
59+ jest . spyOn ( Storage . prototype , 'getItem' ) . mockImplementation ( ( ) => 'dark' ) ;
60+ window . dispatchEvent ( new StorageEvent ( 'storage' , { key : 'theme' } ) ) ;
61+
62+ expect ( listener ) . toHaveBeenCalledTimes ( 1 ) ;
63+ window . removeEventListener ( 'profiler-theme-change' , listener ) ;
64+ } ) ;
65+
66+ it ( 'is not dispatched during initialization' , function ( ) {
67+ resetForTest ( ) ;
68+
69+ const listener = jest . fn ( ) ;
70+ window . addEventListener ( 'profiler-theme-change' , listener ) ;
71+
72+ isDarkMode ( ) ; // triggers setup
73+
74+ expect ( listener ) . not . toHaveBeenCalled ( ) ;
75+ window . removeEventListener ( 'profiler-theme-change' , listener ) ;
76+ } ) ;
77+
78+ it ( 'is not dispatched when the theme stays the same' , function ( ) {
79+ resetForTest ( ) ;
80+ isDarkMode ( ) ; // initialize as light
81+
82+ const listener = jest . fn ( ) ;
83+ window . addEventListener ( 'profiler-theme-change' , listener ) ;
84+
85+ // Storage event fires but the resolved theme is still light.
86+ window . dispatchEvent ( new StorageEvent ( 'storage' , { key : 'theme' } ) ) ;
87+
88+ expect ( listener ) . not . toHaveBeenCalled ( ) ;
89+ window . removeEventListener ( 'profiler-theme-change' , listener ) ;
90+ } ) ;
91+ } ) ;
92+
4993describe ( 'initTheme' , function ( ) {
5094 it ( 'sets the document element class' , function ( ) {
5195 resetForTest ( ) ;
0 commit comments