Skip to content

Commit bd03b58

Browse files
committed
Run test with dart2wasm
1 parent 028f651 commit bd03b58

File tree

7 files changed

+166
-98
lines changed

7 files changed

+166
-98
lines changed

sqlite3_web/build.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@ targets:
4040
exclude:
4141
- "example/worker.dart"
4242
- web/worker.dart
43+
options:
44+
compilers:
45+
dart2js:
46+
dart2wasm:
47+
loader:
4348
# We have a designated target for this step.
4449
build_web_compilers:dart2js_archive_extractor:
4550
enabled: false

sqlite3_web/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ dependencies:
1515
dev_dependencies:
1616
lints: ^5.0.0
1717
test: ^1.25.5
18-
build_web_compilers: ^4.0.9
18+
build_web_compilers: ^4.1.0
1919
build_runner: ^2.4.8
2020
build_daemon: ^4.0.2
2121
webdriver: ^3.0.3

sqlite3_web/test/integration_test.dart

Lines changed: 128 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

sqlite3_web/tool/server.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,10 @@ class TestWebDriver {
111111
await waitFor(() => driver.findElement(By.id('ready')));
112112
}
113113

114+
Future<bool> isDart2wasm() async {
115+
return await driver.executeAsync('isDart2wasm("", arguments[0])', []);
116+
}
117+
114118
Future<
115119
({
116120
Set<(StorageMode, AccessMode)> impls,

sqlite3_web/web/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<meta name="viewport" content="width=device-width, initial-scale=1.0">
88
<meta name="scaffolded-by" content="https://github.com/dart-lang/sdk">
99
<title>web_wasm</title>
10-
<script defer src="main.dart.js"></script>
10+
<script defer src="main.js"></script>
1111
</head>
1212

1313
<body>

sqlite3_web/web/main.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ int rollbacks = 0;
2222
bool listeningForUpdates = false;
2323

2424
void main() {
25+
_addCallbackForWebDriver('isDart2wasm', (_) async {
26+
const isWasm = bool.fromEnvironment('dart.tool.dart2wasm');
27+
return isWasm.toJS;
28+
});
2529
_addCallbackForWebDriver('detectImplementations', _detectImplementations);
2630
_addCallbackForWebDriver('close', (arg) async {
2731
await database?.dispose();

sqlite3_web/web/main.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
(async () => {
2+
const thisScript = document.currentScript;
3+
const params = new URL(document.location.toString()).searchParams;
4+
const wasmOption = params.get("wasm");
5+
6+
function relativeURL(ref) {
7+
const base = thisScript?.src ?? document.baseURI;
8+
return new URL(ref, base).toString();
9+
}
10+
11+
if (wasmOption == "1") {
12+
let { compileStreaming } = await import("./main.mjs");
13+
14+
let app = await compileStreaming(fetch(relativeURL("main.wasm")));
15+
let module = await app.instantiate({});
16+
module.invokeMain();
17+
} else {
18+
const scriptTag = document.createElement("script");
19+
scriptTag.type = "application/javascript";
20+
scriptTag.src = relativeURL("./main.dart2js.js");
21+
document.head.append(scriptTag);
22+
}
23+
})();

0 commit comments

Comments
 (0)