@@ -87,7 +87,6 @@ void main() {
87
87
for (final browser in Browser .values) {
88
88
group (browser.name, () {
89
89
late Process driverProcess;
90
- late TestWebDriver driver;
91
90
var isStoppingProcess = false ;
92
91
final processStopped = Completer <void >();
93
92
@@ -107,121 +106,154 @@ void main() {
107
106
return processStopped.future;
108
107
});
109
108
110
- setUp (() async {
111
- late WebDriver rawDriver;
112
- for (var i = 0 ; i < 3 ; i++ ) {
113
- try {
114
- rawDriver = await createDriver (
115
- spec: browser.isChromium
116
- ? WebDriverSpec .JsonWire
117
- : WebDriverSpec .W3c ,
118
- uri: browser.driverUri,
119
- desired: {
120
- 'goog:chromeOptions' : {
121
- 'args' : [
122
- '--headless=new' ,
123
- '--disable-search-engine-choice-screen' ,
124
- ],
125
- },
126
- 'moz:firefoxOptions' : {
127
- 'args' : ['-headless' ]
128
- },
129
- },
130
- );
131
- break ;
132
- } on SocketException {
133
- // webdriver server taking a bit longer to start up...
134
- if (i == 2 ) {
135
- rethrow ;
136
- }
137
-
138
- await Future .delayed (const Duration (milliseconds: 500 ));
139
- }
140
- }
109
+ for (final wasm in [false , true ]) {
110
+ group (wasm ? 'dart2wasm' : 'dart2js' , () {
111
+ final config = _TestConfiguration (browser, () => server, wasm);
141
112
142
- // logs.get() isn't supported on Firefox
143
- if (browser != Browser .firefox) {
144
- rawDriver.logs.get (LogType .browser).listen ((entry) {
145
- print ('[console]: ${entry .message }' );
113
+ setUp (() async {
114
+ await config.setUp ();
146
115
});
116
+ tearDown (() => config.tearDown ());
117
+
118
+ config.declareTests ();
119
+ });
120
+ }
121
+ });
122
+ }
123
+ }
124
+
125
+ final class _TestConfiguration {
126
+ final Browser browser;
127
+ final TestAssetServer Function () _server;
128
+ final bool isDart2Wasm;
129
+
130
+ late TestWebDriver driver;
131
+
132
+ _TestConfiguration (this .browser, this ._server, this .isDart2Wasm);
133
+
134
+ TestAssetServer get server => _server ();
135
+
136
+ Future <void > setUp () async {
137
+ late WebDriver rawDriver;
138
+ for (var i = 0 ; i < 3 ; i++ ) {
139
+ try {
140
+ rawDriver = await createDriver (
141
+ spec: browser.isChromium ? WebDriverSpec .JsonWire : WebDriverSpec .W3c ,
142
+ uri: browser.driverUri,
143
+ desired: {
144
+ 'goog:chromeOptions' : {
145
+ 'args' : [
146
+ '--headless=new' ,
147
+ '--disable-search-engine-choice-screen' ,
148
+ ],
149
+ },
150
+ 'moz:firefoxOptions' : {
151
+ 'args' : ['-headless' ]
152
+ },
153
+ },
154
+ );
155
+ break ;
156
+ } on SocketException {
157
+ // webdriver server taking a bit longer to start up...
158
+ if (i == 2 ) {
159
+ rethrow ;
147
160
}
148
161
149
- driver = TestWebDriver (server, rawDriver);
150
- await driver.driver.get ('http://localhost:8080/' );
151
- await driver.waitReady ();
162
+ await Future .delayed (const Duration (milliseconds: 500 ));
163
+ }
164
+ }
165
+
166
+ // logs.get() isn't supported on Firefox
167
+ if (browser != Browser .firefox) {
168
+ rawDriver.logs.get (LogType .browser).listen ((entry) {
169
+ print ('[console]: ${entry .message }' );
152
170
});
171
+ }
153
172
154
- tearDown (() => driver.driver.quit ());
173
+ driver = TestWebDriver (server, rawDriver);
174
+ await driver.driver.get (isDart2Wasm
175
+ ? 'http://localhost:8080/?wasm=1'
176
+ : 'http://localhost:8080/' );
177
+ await driver.waitReady ();
178
+ }
155
179
156
- test ('compatibility check' , () async {
157
- final result = await driver.probeImplementations ();
180
+ Future <void > tearDown () async {
181
+ await driver.driver.quit ();
182
+ }
158
183
159
- expect (result.missingFeatures, browser.missingFeatures);
160
- expect (result.impls, browser.availableImplementations);
161
- });
184
+ void declareTests () {
185
+ test ('compatibility check' , () async {
186
+ // Make sure we're not testing the same compiler twice due to e.g. bugs in
187
+ // the loader script.
188
+ expect (await driver.isDart2wasm (), isDart2Wasm);
162
189
163
- test ('picks recommended option' , () async {
164
- final (storage, access) = await driver.openDatabase ();
165
- expect ((storage, access), browser.defaultImplementation);
166
- });
190
+ final result = await driver.probeImplementations ();
191
+
192
+ expect (result.missingFeatures, browser.missingFeatures);
193
+ expect (result.impls, browser.availableImplementations);
194
+ });
195
+
196
+ test ('picks recommended option' , () async {
197
+ final (storage, access) = await driver.openDatabase ();
198
+ expect ((storage, access), browser.defaultImplementation);
199
+ });
200
+
201
+ for (final (storage, access) in browser.availableImplementations) {
202
+ test ('$storage through $access ' , () async {
203
+ await driver.openDatabase (
204
+ implementation: (storage, access),
205
+ onlyOpenVfs: true ,
206
+ );
207
+ await driver.assertFile (false );
208
+
209
+ await driver.execute ('CREATE TABLE foo (bar TEXT);' );
210
+ var events = await driver.countEvents ();
211
+ expect (events.updates, 0 );
212
+ expect (events.commits, 0 );
213
+ expect (events.rollbacks, 0 );
214
+ await driver.execute ("INSERT INTO foo (bar) VALUES ('hello');" );
215
+ events = await driver.countEvents ();
216
+ expect (events.updates, 1 );
217
+ expect (events.commits, 1 );
218
+
219
+ expect (await driver.assertFile (true ), isPositive);
220
+ await driver.flush ();
221
+
222
+ await driver.execute ('begin' );
223
+ await driver.execute ('rollback' );
224
+ events = await driver.countEvents ();
225
+ expect (events.rollbacks, 1 );
226
+
227
+ if (storage != StorageMode .inMemory) {
228
+ await driver.driver.refresh ();
229
+ await driver.waitReady ();
167
230
168
- for (final (storage, access) in browser.availableImplementations) {
169
- test ('$storage through $access ' , () async {
170
231
await driver.openDatabase (
171
232
implementation: (storage, access),
172
233
onlyOpenVfs: true ,
173
234
);
174
- await driver.assertFile (false );
175
-
176
- await driver.execute ('CREATE TABLE foo (bar TEXT);' );
177
- var events = await driver.countEvents ();
178
- expect (events.updates, 0 );
179
- expect (events.commits, 0 );
180
- expect (events.rollbacks, 0 );
181
- await driver.execute ("INSERT INTO foo (bar) VALUES ('hello');" );
182
- events = await driver.countEvents ();
183
- expect (events.updates, 1 );
184
- expect (events.commits, 1 );
185
-
186
- expect (await driver.assertFile (true ), isPositive);
187
- await driver.flush ();
188
-
189
- await driver.execute ('begin' );
190
- await driver.execute ('rollback' );
191
- events = await driver.countEvents ();
192
- expect (events.rollbacks, 1 );
193
-
194
- if (storage != StorageMode .inMemory) {
195
- await driver.driver.refresh ();
196
- await driver.waitReady ();
197
-
198
- await driver.openDatabase (
199
- implementation: (storage, access),
200
- onlyOpenVfs: true ,
201
- );
202
- await driver.assertFile (true );
203
-
204
- await driver.driver.refresh ();
205
- await driver.waitReady ();
206
- await driver.delete (storage);
207
- await driver.openDatabase (
208
- implementation: (storage, access),
209
- onlyOpenVfs: true ,
210
- );
211
- await driver.assertFile (false );
212
- }
213
- });
235
+ await driver.assertFile (true );
214
236
215
- test ('check large write and read' , () async {
237
+ await driver.driver.refresh ();
238
+ await driver.waitReady ();
239
+ await driver.delete (storage);
216
240
await driver.openDatabase (
217
241
implementation: (storage, access),
218
242
onlyOpenVfs: true ,
219
243
);
220
244
await driver.assertFile (false );
245
+ }
246
+ });
221
247
222
- await driver.checkReadWrite ();
223
- });
224
- }
225
- });
248
+ test ('check large write and read' , () async {
249
+ await driver.openDatabase (
250
+ implementation: (storage, access),
251
+ onlyOpenVfs: true ,
252
+ );
253
+ await driver.assertFile (false );
254
+
255
+ await driver.checkReadWrite ();
256
+ });
257
+ }
226
258
}
227
259
}
0 commit comments