| Index: test/codegen/lib/html/indexeddb_2_test.dart
|
| diff --git a/test/codegen/lib/html/indexeddb_2_test.dart b/test/codegen/lib/html/indexeddb_2_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..7350559240b0ac83dffdd1d86afb666e8f6481f4
|
| --- /dev/null
|
| +++ b/test/codegen/lib/html/indexeddb_2_test.dart
|
| @@ -0,0 +1,106 @@
|
| +library IndexedDB1Test;
|
| +import 'package:unittest/unittest.dart';
|
| +import 'package:unittest/html_config.dart';
|
| +import 'dart:async';
|
| +import 'dart:html' as html;
|
| +import 'dart:indexed_db' as idb;
|
| +import 'dart:collection';
|
| +import 'utils.dart';
|
| +
|
| +// Write and re-read Maps: simple Maps; Maps with DAGs; Maps with cycles.
|
| +
|
| +const String DB_NAME = 'Test2';
|
| +const String STORE_NAME = 'TEST';
|
| +const int VERSION = 1;
|
| +
|
| +testReadWrite(key, value, check,
|
| + [dbName = DB_NAME, storeName = STORE_NAME, version = VERSION]) {
|
| +
|
| + createObjectStore(e) {
|
| + var store = e.target.result.createObjectStore(storeName);
|
| + expect(store, isNotNull);
|
| + }
|
| +
|
| + var db;
|
| + // Delete any existing DBs.
|
| + return html.window.indexedDB.deleteDatabase(dbName).then(expectAsync((_) {
|
| + return html.window.indexedDB.open(dbName, version: version,
|
| + onUpgradeNeeded: createObjectStore);
|
| + })).then(expectAsync((result) {
|
| + db = result;
|
| + var transaction = db.transactionList([storeName], 'readwrite');
|
| + transaction.objectStore(storeName).put(value, key);
|
| +
|
| + return transaction.completed;
|
| + })).then(expectAsync((db) {
|
| + var transaction = db.transaction(storeName, 'readonly');
|
| + return transaction.objectStore(storeName).getObject(key);
|
| + })).then(expectAsync((object) {
|
| + db.close();
|
| + check(value, object);
|
| + })).catchError((e) {
|
| + if (db != null) {
|
| + db.close();
|
| + }
|
| + throw e;
|
| + });
|
| +}
|
| +
|
| +List<String> get nonNativeListData {
|
| + var list = new List<String>();
|
| + list.add("data");
|
| + list.add("clone");
|
| + list.add("error");
|
| + list.add("test");
|
| + return list;
|
| +}
|
| +
|
| +main() {
|
| + useHtmlConfiguration();
|
| +
|
| + var obj1 = {'a': 100, 'b': 's'};
|
| + var obj2 = {'x': obj1, 'y': obj1}; // DAG.
|
| +
|
| + var obj3 = {};
|
| + obj3['a'] = 100;
|
| + obj3['b'] = obj3; // Cycle.
|
| +
|
| + var obj4 = new SplayTreeMap<String, dynamic>(); // Different implementation.
|
| + obj4['a'] = 100;
|
| + obj4['b'] = 's';
|
| +
|
| + var cyclic_list = [1, 2, 3];
|
| + cyclic_list[1] = cyclic_list;
|
| +
|
| + go(name, data) => test(name,
|
| + () => testReadWrite(123, data, verifyGraph));
|
| +
|
| + test('test_verifyGraph', () {
|
| + // Nice to know verifyGraph is working before we rely on it.
|
| + verifyGraph(obj4, obj4);
|
| + verifyGraph(obj1, new Map.from(obj1));
|
| + verifyGraph(obj4, new Map.from(obj4));
|
| +
|
| + var l1 = [1,2,3];
|
| + var l2 = [const [1, 2, 3], const [1, 2, 3]];
|
| + verifyGraph([l1, l1], l2);
|
| + expect(() => verifyGraph([[1, 2, 3], [1, 2, 3]], l2), throws);
|
| +
|
| + verifyGraph(cyclic_list, cyclic_list);
|
| + });
|
| +
|
| + // Don't bother with these tests if it's unsupported.
|
| + // Support is tested in indexeddb_1_test
|
| + if (idb.IdbFactory.supported) {
|
| + go('test_simple', obj1);
|
| + go('test_DAG', obj2);
|
| + go('test_cycle', obj3);
|
| + go('test_simple_splay', obj4);
|
| + go('const_array_1', const [const [1], const [2]]);
|
| + go('const_array_dag', const [const [1], const [1]]);
|
| + go('array_deferred_copy', [1,2,3, obj3, obj3, 6]);
|
| + go('array_deferred_copy_2', [1,2,3, [4, 5, obj3], [obj3, 6]]);
|
| + go('cyclic_list', cyclic_list);
|
| + go('non-native lists', nonNativeListData);
|
| + }
|
| +}
|
|
|