@@ -238,5 +238,89 @@ public async Task Represented_filename_and_edited_flags()
238238
239239 win . SetDocumentEdited ( false ) ;
240240 }
241+ [ Fact ( Timeout = 20000 ) ]
242+ public async Task Fullscreen_events_fire_on_toggle ( )
243+ {
244+ var window = await Electron . WindowManager . CreateWindowAsync ( new BrowserWindowOptions { Show = true , Fullscreenable = true } , "about:blank" ) ;
245+ try
246+ {
247+ bool entered = false , left = false ;
248+ window . OnEnterFullScreen += ( ) => entered = true ;
249+ window . OnLeaveFullScreen += ( ) => left = true ;
250+ await Task . Delay ( 400 ) ;
251+
252+ window . SetFullScreen ( true ) ;
253+ await WaitUntil ( ( ) => Task . FromResult ( entered ) , 4000 ) ;
254+ entered . Should ( ) . BeTrue ( ) ;
255+
256+ window . SetFullScreen ( false ) ;
257+ await WaitUntil ( ( ) => Task . FromResult ( left ) , 4000 ) ;
258+ left . Should ( ) . BeTrue ( ) ;
259+ }
260+ finally
261+ {
262+ window . Destroy ( ) ;
263+ }
264+ }
265+
266+ [ Fact ( Timeout = 20000 ) ]
267+ public async Task Maximize_and_unmaximize_events_fire ( )
268+ {
269+ var window = await Electron . WindowManager . CreateWindowAsync ( new BrowserWindowOptions { Show = true } , "about:blank" ) ;
270+ try
271+ {
272+ bool maximized = false , unmaximized = false ;
273+ window . OnMaximize += ( ) => maximized = true ;
274+ window . OnUnmaximize += ( ) => unmaximized = true ;
275+ await Task . Delay ( 500 ) ;
276+ window . Maximize ( ) ;
277+ await Task . Delay ( 1500 ) ;
278+ maximized . Should ( ) . BeTrue ( ) ;
279+ window . Unmaximize ( ) ;
280+ await Task . Delay ( 1500 ) ;
281+ unmaximized . Should ( ) . BeTrue ( ) ;
282+ }
283+ finally
284+ {
285+ window . Destroy ( ) ;
286+ }
287+ }
288+
289+ [ Fact ( Timeout = 20000 ) ]
290+ public async Task Minimize_and_restore_events_fire ( )
291+ {
292+ var window = await Electron . WindowManager . CreateWindowAsync ( new BrowserWindowOptions { Show = true } , "about:blank" ) ;
293+ try
294+ {
295+ bool minimized = false , restored = false ;
296+ window . OnMinimize += ( ) => minimized = true ;
297+ window . OnRestore += ( ) => restored = true ;
298+ await Task . Delay ( 500 ) ;
299+ window . Minimize ( ) ;
300+ await Task . Delay ( 1500 ) ; // minimize may take longer
301+ minimized . Should ( ) . BeTrue ( ) ;
302+ window . Restore ( ) ;
303+ await Task . Delay ( 1500 ) ;
304+ restored . Should ( ) . BeTrue ( ) ;
305+ }
306+ finally
307+ {
308+ window . Destroy ( ) ;
309+ }
310+ }
311+
312+ private static async Task < bool > WaitUntil ( Func < Task < bool > > predicate , int timeoutMs , int pollIntervalMs = 100 )
313+ {
314+ var start = DateTime . UtcNow ;
315+ while ( ( DateTime . UtcNow - start ) . TotalMilliseconds < timeoutMs )
316+ {
317+ if ( await predicate ( ) . ConfigureAwait ( false ) )
318+ {
319+ return true ;
320+ }
321+ await Task . Delay ( pollIntervalMs ) . ConfigureAwait ( false ) ;
322+ }
323+ return await predicate ( ) . ConfigureAwait ( false ) ;
324+ }
241325 }
242326}
0 commit comments