Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(333)

Unified Diff: tests/html/indexeddb_1_test.dart

Issue 12159005: Dartifying some IndexedDB APIs. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tests/html/indexeddb_1_test.dart
diff --git a/tests/html/indexeddb_1_test.dart b/tests/html/indexeddb_1_test.dart
index 92eef204f428a613cb0a6985cb627a6cafdf4f06..77ccff6138f2098091696435c30d6699b69d5a41 100644
--- a/tests/html/indexeddb_1_test.dart
+++ b/tests/html/indexeddb_1_test.dart
@@ -3,177 +3,122 @@ import '../../pkg/unittest/lib/unittest.dart';
import '../../pkg/unittest/lib/html_individual_config.dart';
import 'dart:html' as html;
import 'dart:indexed_db' as idb;
+import 'utils.dart';
const String DB_NAME = 'Test';
const String STORE_NAME = 'TEST';
const int VERSION = 1;
-testReadWrite(key, value, matcher,
- [dbName = DB_NAME,
- storeName = STORE_NAME,
- version = VERSION]) => () {
- var db;
-
- fail(e) {
- guardAsync(() {
- throw new Exception('IndexedDB failure');
- });
- }
+void testUpgrade() {
+ var dbName = 'version_db';
+ var upgraded = false;
+
+ return chainSteps([
+ () {
+ // Delete any existing DBs.
+ return html.window.indexedDB.deleteDatabase(dbName);
+ },
+ (_) {
+ return html.window.indexedDB.open(dbName, version: 1);
+ },
+ (db) {
+ db.close();
+ },
+ (_) {
+ return html.window.indexedDB.open(dbName, version: 2,
+ onUpgradeNeeded: (e) {
+ // Bug 8265, we're getting the wrong type here.
+ //expect(e.oldVersion, 1);
+ //expect(e.newVersion, 2);
+ upgraded = true;
+ });
+ },
+ (_) {
+ expect(upgraded, isTrue);
+ }
+ ]);
+}
- createObjectStore(db) {
- var store = db.createObjectStore(storeName);
+testReadWrite(key, value, matcher,
+ [dbName = DB_NAME, storeName = STORE_NAME, version = VERSION]) => () {
+ createObjectStore(e) {
+ var store = e.target.result.createObjectStore(storeName);
expect(store, isNotNull);
}
- step2(e) {
- var transaction = db.transaction(storeName, 'readonly');
- var request = transaction.objectStore(storeName).getObject(key);
- request.onSuccess.listen(expectAsync1((e) {
- var object = e.target.result;
+ var db;
+ return chainSteps([
+ () {
+ // Delete any existing DBs.
+ return html.window.indexedDB.deleteDatabase(dbName);
+ },
+ (_) {
+ return html.window.indexedDB.open(dbName, version: version,
+ onUpgradeNeeded: createObjectStore);
+ },
+ (result) {
+ db = result;
+ var transaction = db.transaction([storeName], 'readwrite');
+ return transaction.objectStore(storeName).put(value, key);
+ },
+ (key) {
+ var transaction = db.transaction(storeName, 'readonly');
+ return transaction.objectStore(storeName).getObject(key);
+ },
+ (object) {
db.close();
expect(object, matcher);
- }));
- request.onError.listen(fail);
- }
-
- step1() {
- var transaction = db.transaction([storeName], 'readwrite');
- var request = transaction.objectStore(storeName).put(value, key);
- request.onSuccess.listen(expectAsync1(step2));
- request.onError.listen(fail);
- }
-
- initDb(e) {
- db = e.target.result;
- if (version != db.version) {
- // Legacy 'setVersion' upgrade protocol. Chrome 23 and earlier.
- var request = db.setVersion('$version');
- request.onSuccess.listen(
- expectAsync1((e) {
- createObjectStore(db);
- var transaction = e.target.result;
- transaction.onComplete.listen(expectAsync1((e) => step1()));
- transaction.onError.listen(fail);
- })
- );
- request.onError.listen(fail);
- } else {
- step1();
- }
- }
-
- openDb(e) {
- var request = html.window.indexedDB.open(dbName, version);
- expect(request, isNotNull);
- request.onSuccess.listen(expectAsync1(initDb));
- request.onError.listen(fail);
- if (request is idb.OpenDBRequest) {
- // New upgrade protocol. Old API has no 'upgradeNeeded' and uses
- // setVersion instead. This path take by FireFox 15, Chrome 24.
- request.onUpgradeNeeded.listen((e) {
- guardAsync(() {
- createObjectStore(e.target.result);
- });
- });
}
- }
-
- // Delete any existing DB.
- var deleteRequest = html.window.indexedDB.deleteDatabase(dbName);
- deleteRequest.onSuccess.listen(expectAsync1(openDb));
- deleteRequest.onError.listen(fail);
+ ]);
};
testReadWriteTyped(key, value, matcher,
- [dbName = DB_NAME,
- storeName = STORE_NAME,
- version = VERSION]) => () {
- idb.Database db;
-
- fail(e) {
- guardAsync(() {
- throw new Exception('IndexedDB failure');
- });
- }
-
- createObjectStore(db) {
- idb.ObjectStore store = db.createObjectStore(storeName);
+ [dbName = DB_NAME, storeName = STORE_NAME, version = VERSION]) => () {
+ void createObjectStore(e) {
+ var store = e.target.result.createObjectStore(storeName);
expect(store, isNotNull);
}
- step2(e) {
- idb.Transaction transaction = db.transaction(storeName, 'readonly');
- idb.Request request = transaction.objectStore(storeName).getObject(key);
- request.onSuccess.listen(expectAsync1((e) {
- var object = e.target.result;
+ Database db;
+ return chainSteps([
+ () {
+ // Delete any existing DBs.
+ return html.window.indexedDB.deleteDatabase(dbName);
+ },
+ (_) {
+ return html.window.indexedDB.open(dbName, version: version,
+ onUpgradeNeeded: createObjectStore);
+ },
+ (Database result) {
+ db = result;
+ Transaction transaction = db.transaction([storeName], 'readwrite');
+ return transaction.objectStore(storeName).put(value, key);
+ },
+ (key) {
+ Transaction transaction = db.transaction(storeName, 'readonly');
+ return transaction.objectStore(storeName).getObject(key);
+ },
+ (object) {
db.close();
expect(object, matcher);
- }));
- request.onError.listen(fail);
- }
-
- step1() {
- idb.Transaction transaction = db.transaction([storeName], 'readwrite');
- idb.Request request = transaction.objectStore(storeName).put(value, key);
- request.onSuccess.listen(expectAsync1(step2));
- request.onError.listen(fail);
- }
-
- initDb(e) {
- db = e.target.result;
- if (version != db.version) {
- // Legacy 'setVersion' upgrade protocol.
- idb.Request request = db.setVersion('$version');
- request.onSuccess.listen(
- expectAsync1((e) {
- createObjectStore(db);
- idb.Transaction transaction = e.target.result;
- transaction.onComplete.listen(expectAsync1((e) => step1()));
- transaction.onError.listen(fail);
- })
- );
- request.onError.listen(fail);
- } else {
- step1();
- }
- }
-
- openDb(e) {
- idb.Request request = html.window.indexedDB.open(dbName, version);
- expect(request, isNotNull);
- request.onSuccess.listen(expectAsync1(initDb));
- request.onError.listen(fail);
- if (request is idb.OpenDBRequest) {
- // New upgrade protocol. Old API has no 'upgradeNeeded' and uses
- // setVersion instead.
- request.onUpgradeNeeded.listen((e) {
- guardAsync(() {
- createObjectStore(e.target.result);
- });
- });
}
- }
-
- // Delete any existing DB.
- idb.Request deleteRequest = html.window.indexedDB.deleteDatabase(dbName);
- deleteRequest.onSuccess.listen(expectAsync1(openDb));
- deleteRequest.onError.listen(fail);
+ ]);
};
tests_dynamic() {
- test('test1', testReadWrite(123, 'Hoot!', equals('Hoot!')));
- test('test2', testReadWrite(123, 12345, equals(12345)));
- test('test3', testReadWrite(123, [1, 2, 3], equals([1, 2, 3])));
- test('test4', testReadWrite(123, [2, 3, 4], equals([2, 3, 4])));
- test('test4', testReadWrite(123, false, equals(false)));
+ futureTest('test1', testReadWrite(123, 'Hoot!', equals('Hoot!')));
+ futureTest('test2', testReadWrite(123, 12345, equals(12345)));
+ futureTest('test3', testReadWrite(123, [1, 2, 3], equals([1, 2, 3])));
+ futureTest('test4', testReadWrite(123, [2, 3, 4], equals([2, 3, 4])));
+ futureTest('test4', testReadWrite(123, false, equals(false)));
}
tests_typed() {
- test('test1', testReadWriteTyped(123, 'Hoot!', equals('Hoot!')));
- test('test2', testReadWriteTyped(123, 12345, equals(12345)));
- test('test3', testReadWriteTyped(123, [1, 2, 3], equals([1, 2, 3])));
- test('test4', testReadWriteTyped(123, [2, 3, 4], equals([2, 3, 4])));
- test('test4', testReadWriteTyped(123, false, equals(false)));
+ futureTest('test1', testReadWriteTyped(123, 'Hoot!', equals('Hoot!')));
+ futureTest('test2', testReadWriteTyped(123, 12345, equals(12345)));
+ futureTest('test3', testReadWriteTyped(123, [1, 2, 3], equals([1, 2, 3])));
+ futureTest('test4', testReadWriteTyped(123, [2, 3, 4], equals([2, 3, 4])));
+ futureTest('test4', testReadWriteTyped(123, false, equals(false)));
}
main() {
@@ -198,6 +143,7 @@ main() {
// Don't bother with these tests if it's unsupported.
if (idb.IdbFactory.supported) {
+ test('upgrade', testUpgrade);
tests_dynamic();
tests_typed();
}

Powered by Google App Engine
This is Rietveld 408576698