@@ -46,12 +46,18 @@ def setUpClass(cls):
46
46
cls ._server_process .ready .wait ()
47
47
cls ._port = cls ._server_process .port .value
48
48
49
- # Open the second server process
49
+ # Open the second server process, used for testing custom hosts
50
50
cls ._server_process2 = cls .ProtocolServerProcess (cls .host , get_application )
51
51
cls ._server_process2 .start ()
52
52
cls ._server_process2 .ready .wait ()
53
53
cls ._port2 = cls ._server_process2 .port .value
54
54
55
+ # Open the third server process, used for testing offline fallback
56
+ cls ._server_process3 = cls .ProtocolServerProcess (cls .host , get_application )
57
+ cls ._server_process3 .start ()
58
+ cls ._server_process3 .ready .wait ()
59
+ cls ._port3 = cls ._server_process3 .port .value
60
+
55
61
# Open a Playwright browser window
56
62
if sys .platform == "win32" :
57
63
asyncio .set_event_loop_policy (asyncio .WindowsProactorEventLoopPolicy ())
@@ -67,9 +73,11 @@ def tearDownClass(cls):
67
73
# Close the Playwright browser
68
74
cls .playwright .stop ()
69
75
70
- # Close the second server process
76
+ # Close the other server processes
71
77
cls ._server_process2 .terminate ()
72
78
cls ._server_process2 .join ()
79
+ cls ._server_process3 .terminate ()
80
+ cls ._server_process3 .join ()
73
81
74
82
# Repurposed from ChannelsLiveServerTestCase._post_teardown
75
83
cls ._server_process .terminate ()
@@ -600,3 +608,20 @@ def test_url_router(self):
600
608
601
609
finally :
602
610
new_page .close ()
611
+
612
+ def test_offline_components (self ):
613
+ new_page = self .browser .new_page ()
614
+ try :
615
+ server3_url = self .live_server_url .replace (
616
+ str (self ._port ), str (self ._port3 )
617
+ )
618
+ new_page .goto (f"{ server3_url } /offline/" )
619
+ new_page .wait_for_selector ("div:not([hidden]) > #online" )
620
+ self .assertIsNotNone (new_page .query_selector ("div[hidden] > #offline" ))
621
+ self ._server_process3 .terminate ()
622
+ self ._server_process3 .join ()
623
+ new_page .wait_for_selector ("div:not([hidden]) > #offline" )
624
+ self .assertIsNotNone (new_page .query_selector ("div[hidden] > #online" ))
625
+
626
+ finally :
627
+ new_page .close ()
0 commit comments