@@ -87,7 +87,6 @@ void main() {
8787 for (final browser in Browser .values) {
8888 group (browser.name, () {
8989 late Process driverProcess;
90- late TestWebDriver driver;
9190 var isStoppingProcess = false ;
9291 final processStopped = Completer <void >();
9392
@@ -107,121 +106,154 @@ void main() {
107106 return processStopped.future;
108107 });
109108
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);
141112
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 ();
146115 });
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 ;
147160 }
148161
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 }' );
152170 });
171+ }
153172
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+ }
155179
156- test ('compatibility check' , () async {
157- final result = await driver.probeImplementations ();
180+ Future <void > tearDown () async {
181+ await driver.driver.quit ();
182+ }
158183
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);
162189
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 ();
167230
168- for (final (storage, access) in browser.availableImplementations) {
169- test ('$storage through $access ' , () async {
170231 await driver.openDatabase (
171232 implementation: (storage, access),
172233 onlyOpenVfs: true ,
173234 );
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 );
214236
215- test ('check large write and read' , () async {
237+ await driver.driver.refresh ();
238+ await driver.waitReady ();
239+ await driver.delete (storage);
216240 await driver.openDatabase (
217241 implementation: (storage, access),
218242 onlyOpenVfs: true ,
219243 );
220244 await driver.assertFile (false );
245+ }
246+ });
221247
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+ }
226258 }
227259}
0 commit comments