-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathweb_test_utils.dart
63 lines (52 loc) · 1.82 KB
/
web_test_utils.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import 'dart:async';
import 'dart:html';
import 'package:js/js.dart';
import 'package:sqlite_async/sqlite_async.dart';
import 'package:test/test.dart';
import 'abstract_test_utils.dart';
@JS('URL.createObjectURL')
external String _createObjectURL(Blob blob);
class TestUtils extends AbstractTestUtils {
late Future<void> _isInitialized;
late final SqliteOptions webOptions;
TestUtils() {
_isInitialized = _init();
}
Future<void> _init() async {
final channel = spawnHybridUri('/test/server/worker_server.dart');
final port = await channel.stream.first as int;
final sqliteWasmUri = 'http://localhost:$port/sqlite3.wasm';
// Cross origin workers are not supported, but we can supply a Blob
var sqliteDriftUri = 'http://localhost:$port/db_worker.js';
final blob = Blob(<String>['importScripts("$sqliteDriftUri");'],
'application/javascript');
sqliteDriftUri = _createObjectURL(blob);
webOptions = SqliteOptions(
webSqliteOptions: WebSqliteOptions(
wasmUri: sqliteWasmUri.toString(), workerUri: sqliteDriftUri));
}
@override
Future<void> cleanDb({required String path}) async {}
@override
Future<TestDefaultSqliteOpenFactory> testFactory(
{String? path,
String? sqlitePath,
List<String> initStatements = const [],
SqliteOptions options = const SqliteOptions.defaults()}) async {
await _isInitialized;
return super.testFactory(
path: path, options: webOptions, initStatements: initStatements);
}
@override
Future<SqliteDatabase> setupDatabase(
{String? path,
List<String> initStatements = const [],
int maxReaders = SqliteDatabase.defaultMaxReaders}) async {
await _isInitialized;
return super.setupDatabase(path: path);
}
@override
List<String> findSqliteLibraries() {
return [];
}
}