@@ -179,6 +179,55 @@ test.describe('desktop shell smoke', () => {
179179 await expect ( window . locator ( '#detail' ) ) . toHaveAttribute ( 'role' , 'status' )
180180 } )
181181
182+ test ( 'offline title-bar geometry follows native fullscreen state across reloads' , async ( ) => {
183+ test . skip ( process . platform !== 'darwin' , 'The traffic-light lane is macOS-specific' )
184+ app = await launchApp ( 'http://127.0.0.1:1' )
185+ const window = await app . firstWindow ( )
186+ await expect ( window . locator ( '#server' ) ) . toBeVisible ( )
187+ await expect ( window . locator ( 'html' ) ) . toHaveAttribute ( 'data-sim-desktop-title-bar' , 'inset' )
188+ await app . evaluate ( ( { BrowserWindow } ) => {
189+ BrowserWindow . getAllWindows ( ) [ 0 ] . setFullScreen ( true )
190+ } )
191+ await expect ( window . locator ( 'html' ) ) . toHaveAttribute ( 'data-sim-desktop-title-bar' , 'fullscreen' )
192+ await window . reload ( )
193+ await expect ( window . locator ( '#server' ) ) . toBeVisible ( )
194+ await expect ( window . locator ( 'html' ) ) . toHaveAttribute ( 'data-sim-desktop-title-bar' , 'fullscreen' )
195+ await expect ( window . locator ( '.desktop-title-bar-page' ) ) . toHaveCSS ( 'padding-top' , '0px' )
196+ await app . evaluate ( ( { BrowserWindow } ) => {
197+ BrowserWindow . getAllWindows ( ) [ 0 ] . setFullScreen ( false )
198+ } )
199+ await expect ( window . locator ( 'html' ) ) . toHaveAttribute ( 'data-sim-desktop-title-bar' , 'inset' )
200+ } )
201+
202+ test ( 'bundled dialogs follow the app theme independently of the system theme' , async ( ) => {
203+ app = await launchApp ( origin )
204+ const window = await app . firstWindow ( )
205+ await expect ( window . locator ( '#app' ) ) . toBeVisible ( )
206+ await app . evaluate ( ( { nativeTheme } ) => {
207+ nativeTheme . themeSource = 'light'
208+ } )
209+ await window . evaluate ( ( ) => {
210+ document . documentElement . className = 'dark'
211+ } )
212+ const dialogPromise = app . waitForEvent ( 'window' )
213+ await app . evaluate ( ( { BrowserWindow } ) => {
214+ BrowserWindow . getAllWindows ( ) [ 0 ] . webContents . emit ( 'unresponsive' )
215+ } )
216+ const prompt = await dialogPromise
217+ await expect ( prompt . getByRole ( 'dialog' ) ) . toBeVisible ( )
218+ await expect ( prompt . locator ( 'html' ) ) . toHaveClass ( 'dark' )
219+ await expect ( prompt . locator ( 'html' ) ) . toHaveCSS ( 'color-scheme' , 'dark' )
220+ await expect ( prompt . locator ( '#dialog-message' ) ) . toHaveCSS ( '-webkit-font-smoothing' , 'auto' )
221+ await expect ( prompt . locator ( '#dialog-message' ) ) . toHaveCSS ( 'font-weight' , '400' )
222+ await expect ( prompt . locator ( '#dialog-message' ) ) . toHaveCSS ( 'font-size' , '14px' )
223+ await window . evaluate ( ( ) => {
224+ document . documentElement . className = 'light'
225+ } )
226+ await expect ( prompt . locator ( 'html' ) ) . toHaveClass ( 'light' )
227+ await expect ( prompt . locator ( 'html' ) ) . toHaveCSS ( 'color-scheme' , 'light' )
228+ await prompt . getByRole ( 'button' , { name : 'Wait' , exact : true } ) . click ( )
229+ } )
230+
182231 test ( 'recovery messages use an isolated EMCN dialog with a safe keyboard default' , async ( ) => {
183232 app = await launchApp ( 'http://127.0.0.1:1' )
184233 const window = await app . firstWindow ( )
@@ -188,7 +237,9 @@ test.describe('desktop shell smoke', () => {
188237 BrowserWindow . getAllWindows ( ) [ 0 ] . webContents . emit ( 'unresponsive' )
189238 } )
190239 const prompt = await dialogPromise
191- await expect ( prompt . getByRole ( 'dialog' , { name : 'Sim' , exact : true } ) ) . toBeVisible ( )
240+ await expect (
241+ prompt . getByRole ( 'dialog' , { name : 'Sim isn’t responding' , exact : true } )
242+ ) . toBeVisible ( )
192243 await expect ( prompt . getByText ( 'Sim isn’t responding' ) ) . toBeVisible ( )
193244 await expect ( prompt . getByRole ( 'button' , { name : 'Wait' , exact : true } ) ) . toBeFocused ( )
194245 await expect
@@ -213,10 +264,7 @@ test.describe('desktop shell smoke', () => {
213264 win . webContents . ipc . removeHandler ( 'shell:configuration' )
214265 win . webContents . ipc . handle ( 'shell:configuration' , ( ) => ( {
215266 title : 'Long recovery message' ,
216- message : 'Recovery details' ,
217- detail : Array . from ( { length : 80 } , ( _ , index ) => `Diagnostic detail ${ index + 1 } ` ) . join (
218- '\n'
219- ) ,
267+ text : Array . from ( { length : 80 } , ( _ , index ) => `Diagnostic detail ${ index + 1 } ` ) . join ( '\n' ) ,
220268 type : 'warning' ,
221269 buttons : [ 'Wait' , 'Reload' ] ,
222270 defaultId : 0 ,
@@ -291,8 +339,6 @@ test.describe('desktop shell smoke', () => {
291339 } )
292340
293341 const closed = picker . waitForEvent ( 'close' )
294- // The main process destroys the window on the key-down, so the key-up half
295- // of `press` has no target to reach; the close event is the assertion.
296342 await picker . keyboard . press ( 'Escape' ) . catch ( ( ) => { } )
297343 await closed
298344 expect ( app . windows ( ) ) . toHaveLength ( 1 )
0 commit comments