Chromium Code Reviews| Index: tests/html/indexeddb_1_test.dart |
| diff --git a/tests/html/indexeddb_1_test.dart b/tests/html/indexeddb_1_test.dart |
| index a587f8e31c70393cf97a012017ca63b6f75174ec..4ce1f0736cd4949eec4d17d9266dc4e3235df8b3 100644 |
| --- a/tests/html/indexeddb_1_test.dart |
| +++ b/tests/html/indexeddb_1_test.dart |
| @@ -5,7 +5,7 @@ |
| const String DB_NAME = 'Test'; |
| const String STORE_NAME = 'TEST'; |
| -const String VERSION = '1'; |
| +const int VERSION = 1; |
| testReadWrite(key, value, check, |
| [dbName = DB_NAME, |
| @@ -15,13 +15,13 @@ testReadWrite(key, value, check, |
| fail(e) { |
| guardAsync(() { |
| - Expect.fail('IndexedDB failure'); |
| + throw const Exception('IndexedDB failure'); |
| }); |
| } |
| - createObjectStore() { |
| + createObjectStore(db) { |
| var store = db.createObjectStore(storeName); |
| - Expect.isNotNull(store); |
| + expect(store, isNotNull); |
| } |
| step2(e) { |
| @@ -29,6 +29,7 @@ testReadWrite(key, value, check, |
| var request = transaction.objectStore(storeName).getObject(key); |
| request.on.success.add(expectAsync1((e) { |
| var object = e.target.result; |
| + db.close(); |
| check(value, object); |
| })); |
| request.on.error.add(fail); |
| @@ -44,14 +45,11 @@ testReadWrite(key, value, check, |
| initDb(e) { |
| db = e.target.result; |
| if (version != db.version) { |
| - // TODO. Some browsers do this the w3 way - passing the version to the |
| - // open call and listening to onversionchange. Can we feature-detect the |
| - // difference and make it work? |
| - var request = db.setVersion(version); |
| + // Legacy 'setVersion' upgrade protocol. |
| + var request = db.setVersion('$version'); |
| request.on.success.add( |
| expectAsync1((e) { |
| - createObjectStore(); |
| - |
| + createObjectStore(db); |
| var transaction = e.target.result; |
| transaction.on.complete.add(expectAsync1((e) => step1())); |
| transaction.on.error.add(fail); |
| @@ -63,10 +61,26 @@ testReadWrite(key, value, check, |
| } |
| } |
| - var request = window.indexedDB.open(dbName); |
| - Expect.isNotNull(request); |
| - request.on.success.add(expectAsync1(initDb)); |
| - request.on.error.add(fail); |
| + openDb(e) { |
| + var request = window.indexedDB.open(dbName, version); |
| + expect(request, isNotNull); |
| + request.on.success.add(expectAsync1(initDb)); |
| + request.on.error.add(fail); |
| + if (request is IDBOpenDBRequest) { |
|
vsm
2012/10/04 15:42:10
Can you add some comments on which browsers take w
|
| + // New upgrade protocol. Old API has no 'upgradeNeeded' and uses |
| + // setVersion instead. |
| + request.on.upgradeNeeded.add((e) { |
| + guardAsync(() { |
| + createObjectStore(e.target.result); |
| + }); |
| + }); |
| + } |
| + } |
| + |
| + // Delete any existing DB. |
| + var deleteRequest = window.indexedDB.deleteDatabase(dbName); |
| + deleteRequest.on.success.add(expectAsync1(openDb)); |
| + deleteRequest.on.error.add(fail); |
| }; |
| testReadWriteTyped(key, value, check, |
| @@ -77,13 +91,13 @@ testReadWriteTyped(key, value, check, |
| fail(e) { |
| guardAsync(() { |
| - Expect.fail('IndexedDB failure'); |
| + throw const Exception('IndexedDB failure'); |
| }); |
| } |
| - createObjectStore() { |
| + createObjectStore(db) { |
| IDBObjectStore store = db.createObjectStore(storeName); |
| - Expect.isNotNull(store); |
| + expect(store, isNotNull); |
| } |
| step2(e) { |
| @@ -91,14 +105,14 @@ testReadWriteTyped(key, value, check, |
| IDBRequest request = transaction.objectStore(storeName).getObject(key); |
| request.on.success.add(expectAsync1((e) { |
| var object = e.target.result; |
| + db.close(); |
| check(value, object); |
| })); |
| request.on.error.add(fail); |
| } |
| step1() { |
| - IDBTransaction transaction = |
| - db.transaction([storeName], 'readwrite'); |
| + IDBTransaction transaction = db.transaction([storeName], 'readwrite'); |
| IDBRequest request = transaction.objectStore(storeName).put(value, key); |
| request.on.success.add(expectAsync1(step2)); |
| request.on.error.add(fail); |
| @@ -107,11 +121,14 @@ testReadWriteTyped(key, value, check, |
| initDb(e) { |
| db = e.target.result; |
| if (version != db.version) { |
| - IDBRequest request = db.setVersion(version); |
| + // Legacy 'setVersion' upgrade protocol. |
| + IDBRequest request = db.setVersion('$version'); |
| request.on.success.add( |
| expectAsync1((e) { |
| - createObjectStore(); |
| - step1(); |
| + createObjectStore(db); |
| + IDBTransaction transaction = e.target.result; |
| + transaction.on.complete.add(expectAsync1((e) => step1())); |
| + transaction.on.error.add(fail); |
| }) |
| ); |
| request.on.error.add(fail); |
| @@ -120,10 +137,26 @@ testReadWriteTyped(key, value, check, |
| } |
| } |
| - IDBRequest request = window.indexedDB.open(dbName); |
| - Expect.isNotNull(request); |
| - request.on.success.add(expectAsync1(initDb)); |
| - request.on.error.add(fail); |
| + openDb(e) { |
| + IDBRequest request = window.indexedDB.open(dbName, version); |
| + expect(request, isNotNull); |
| + request.on.success.add(expectAsync1(initDb)); |
| + request.on.error.add(fail); |
| + if (request is IDBOpenDBRequest) { |
| + // New upgrade protocol. Old API has no 'upgradeNeeded' and uses |
| + // setVersion instead. |
| + request.on.upgradeNeeded.add((e) { |
| + guardAsync(() { |
| + createObjectStore(e.target.result); |
| + }); |
| + }); |
| + } |
| + } |
| + |
| + // Delete any existing DB. |
| + IDBRequest deleteRequest = window.indexedDB.deleteDatabase(dbName); |
| + deleteRequest.on.success.add(expectAsync1(openDb)); |
| + deleteRequest.on.error.add(fail); |
| }; |
| tests_dynamic() { |