@@ -23,12 +23,8 @@ import 'test_utils.dart';
23
23
24
24
final context = TestContext ();
25
25
26
- // Note: The following delay is required to reduce flakiness. It makes
27
- // sure the service worker execution context is ready.
28
- const executionContextDelay = 1 ;
29
-
30
26
void main () async {
31
- late Target serviceWorkerTarget ;
27
+ late Worker worker ;
32
28
late Browser browser;
33
29
late String extensionPath;
34
30
@@ -58,13 +54,13 @@ void main() async {
58
54
],
59
55
);
60
56
61
- serviceWorkerTarget = await browser
57
+ final serviceWorkerTarget = await browser
62
58
.waitForTarget ((target) => target.type == 'service_worker' );
59
+ worker = (await serviceWorkerTarget.worker)! ;
63
60
});
64
61
65
62
tearDown (() async {
66
- final worker = (await serviceWorkerTarget.worker)! ;
67
- await Future .delayed (Duration (seconds: executionContextDelay));
63
+ await workerEvalDelay ();
68
64
await worker.evaluate (_clearStorageJs ());
69
65
});
70
66
@@ -78,17 +74,15 @@ void main() async {
78
74
// Navigate to the Dart app:
79
75
final appTab =
80
76
await navigateToPage (browser, url: appUrl, isNew: true );
81
- final worker = (await serviceWorkerTarget.worker)! ;
82
- await Future .delayed (Duration (seconds: executionContextDelay));
83
77
// Verify that we have debug info for the Dart app:
84
- final tabIdForAppJs = _tabIdForTabJs (appUrl );
85
- final appTabId = ( await worker. evaluate (tabIdForAppJs)) as int ;
78
+ await workerEvalDelay ( );
79
+ final appTabId = await _getTabId (appUrl, worker : worker) ;
86
80
final debugInfoKey = '$appTabId -debugInfo' ;
87
- final storageObj = await worker. evaluate (
88
- _fetchStorageObjJs ( debugInfoKey, storageArea : 'session' ));
89
- final json = storageObj[debugInfoKey];
90
- final debugInfo =
91
- serializers. deserialize ( jsonDecode (json)) as DebugInfo ;
81
+ final debugInfo = await _fetchStorageObj < DebugInfo > (
82
+ debugInfoKey,
83
+ storageArea : 'session' ,
84
+ worker : worker,
85
+ ) ;
92
86
expect (debugInfo.appId, isNotNull);
93
87
expect (debugInfo.appEntrypointPath, isNotNull);
94
88
expect (debugInfo.appInstanceId, isNotNull);
@@ -116,12 +110,11 @@ void main() async {
116
110
// Close the settings tab:
117
111
await settingsTab.close ();
118
112
// Check that is has been saved in local storage:
119
- final worker = (await serviceWorkerTarget.worker)! ;
120
- final storageObj = await worker.evaluate (
121
- _fetchStorageObjJs ('devToolsOpener' , storageArea: 'local' ));
122
- final json = storageObj['devToolsOpener' ];
123
- final devToolsOpener =
124
- serializers.deserialize (jsonDecode (json)) as DevToolsOpener ;
113
+ final devToolsOpener = await _fetchStorageObj <DevToolsOpener >(
114
+ 'devToolsOpener' ,
115
+ storageArea: 'local' ,
116
+ worker: worker,
117
+ );
125
118
expect (devToolsOpener.newWindow, isTrue);
126
119
});
127
120
@@ -131,22 +124,21 @@ void main() async {
131
124
final appUrl = context.appUrl;
132
125
final devToolsUrlFragment =
133
126
useSse ? 'debugger?uri=sse' : 'debugger?uri=ws' ;
134
- final windowIdForAppJs = _windowIdForTabJs (appUrl);
135
127
// Navigate to the Dart app:
136
128
final appTab =
137
129
await navigateToPage (browser, url: appUrl, isNew: true );
138
130
// Click on the Dart Debug Extension icon:
139
- final worker = (await serviceWorkerTarget.worker)! ;
140
- await Future .delayed (Duration (seconds: executionContextDelay));
141
- await worker.evaluate (clickIconJs);
131
+ await workerEvalDelay ();
132
+ await clickOnExtensionIcon (worker);
142
133
// Verify the extension opened the Dart docs in the same window:
143
134
var devToolsTabTarget = await browser.waitForTarget (
144
135
(target) => target.url.contains (devToolsUrlFragment));
145
136
final devToolsPage = await devToolsTabTarget.page;
146
- final windowIdForDevToolsJs = _windowIdForTabJs (devToolsPage.url! );
147
- var devToolsWindowId =
148
- (await worker.evaluate (windowIdForDevToolsJs)) as int ? ;
149
- var appWindowId = (await worker.evaluate (windowIdForAppJs)) as int ? ;
137
+ var devToolsWindowId = await _getWindowId (
138
+ devToolsPage.url! ,
139
+ worker: worker,
140
+ );
141
+ var appWindowId = await _getWindowId (appUrl, worker: worker);
150
142
expect (devToolsWindowId == appWindowId, isTrue);
151
143
// Close the DevTools tab:
152
144
var devToolsTab = await devToolsTabTarget.page;
@@ -168,13 +160,15 @@ void main() async {
168
160
// Navigate to the Dart app:
169
161
await navigateToPage (browser, url: appUrl);
170
162
// Click on the Dart Debug Extension icon:
171
- await worker. evaluate (clickIconJs );
163
+ await clickOnExtensionIcon (worker );
172
164
// Verify the extension opened DevTools in a different window:
173
165
devToolsTabTarget = await browser.waitForTarget (
174
166
(target) => target.url.contains (devToolsUrlFragment));
175
- devToolsWindowId =
176
- (await worker.evaluate (windowIdForDevToolsJs)) as int ? ;
177
- appWindowId = (await worker.evaluate (windowIdForAppJs)) as int ? ;
167
+ devToolsWindowId = await _getWindowId (
168
+ devToolsPage.url! ,
169
+ worker: worker,
170
+ );
171
+ appWindowId = await _getWindowId (appUrl, worker: worker);
178
172
expect (devToolsWindowId == appWindowId, isFalse);
179
173
// Close the DevTools tab:
180
174
devToolsTab = await devToolsTabTarget.page;
@@ -186,6 +180,35 @@ void main() async {
186
180
});
187
181
}
188
182
183
+ Future <int > _getTabId (
184
+ String url, {
185
+ required Worker worker,
186
+ }) async {
187
+ final jsExpression = _tabIdForTabJs (url);
188
+ return (await worker.evaluate (jsExpression)) as int ;
189
+ }
190
+
191
+ Future <int ?> _getWindowId (
192
+ String url, {
193
+ required Worker worker,
194
+ }) async {
195
+ final jsExpression = _windowIdForTabJs (url);
196
+ return (await worker.evaluate (jsExpression)) as int ? ;
197
+ }
198
+
199
+ Future <T > _fetchStorageObj <T >(
200
+ String storageKey, {
201
+ required String storageArea,
202
+ required Worker worker,
203
+ }) async {
204
+ final storageObj = await worker.evaluate (_fetchStorageObjJs (
205
+ storageKey,
206
+ storageArea: storageArea,
207
+ ));
208
+ final json = storageObj[storageKey];
209
+ return serializers.deserialize (jsonDecode (json)) as T ;
210
+ }
211
+
189
212
String _tabIdForTabJs (String tabUrl) {
190
213
return '''
191
214
async () => {
0 commit comments