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

Unified Diff: LayoutTests/storage/indexeddb/mozilla/resources/test_objectStore_openKeyCursor.js

Issue 1316203002: Import Mozilla's IDBObjectStore.openKeyCursor() test (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 4 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: LayoutTests/storage/indexeddb/mozilla/resources/test_objectStore_openKeyCursor.js
diff --git a/LayoutTests/storage/indexeddb/mozilla/resources/test_objectStore_openKeyCursor.js b/LayoutTests/storage/indexeddb/mozilla/resources/test_objectStore_openKeyCursor.js
new file mode 100644
index 0000000000000000000000000000000000000000..85d938c6ece1a751c4329cc4c5cd502cd3521a50
--- /dev/null
+++ b/LayoutTests/storage/indexeddb/mozilla/resources/test_objectStore_openKeyCursor.js
@@ -0,0 +1,411 @@
+// Imported from:
+// * http://mxr.mozilla.org/mozilla-central/source/dom/indexedDB/test/unit/test_objectStore_openKeyCursor.js
+// Changes:
+// * added 'use strict' since some ES6 features NYI w/o it
+// * function -> function*
+// * this.window -> window
+// * Added deleteDatabase() step to reset storage state
+
+'use strict';
+
+/**
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+let testGenerator = testSteps();
+
+function* testSteps() {
+ const dbName = window ?
+ window.location.pathname :
+ "test_objectStore_openKeyCursor";
+ indexedDB.deleteDatabase(dbName);
+ const dbVersion = 1;
+ const objectStoreName = "foo";
+ const keyCount = 100;
+
+ let request = indexedDB.open(dbName, dbVersion);
+ request.onerror = errorHandler;
+ request.onupgradeneeded = grabEventAndContinueHandler;
+ request.onsuccess = unexpectedSuccessHandler;
+
+ let event = yield undefined;
+
+ info("Creating database");
+
+ let db = event.target.result;
+ let objectStore = db.createObjectStore(objectStoreName);
+ for (let i = 0; i < keyCount; i++) {
+ objectStore.add(true, i);
+ }
+
+ request.onupgradeneeded = unexpectedSuccessHandler;
+ request.onsuccess = grabEventAndContinueHandler;
+
+ event = yield undefined;
+
+ db = event.target.result;
+ objectStore = db.transaction(objectStoreName, "readwrite")
+ .objectStore(objectStoreName);
+
+ info("Getting all keys");
+ objectStore.getAllKeys().onsuccess = grabEventAndContinueHandler;
+ event = yield undefined;
+
+ const allKeys = event.target.result;
+
+ ok(Array.isArray(allKeys), "Got an array result");
+ is(allKeys.length, keyCount, "Got correct array length");
+
+ info("Opening normal key cursor");
+
+ let seenKeys = [];
+ objectStore.openKeyCursor().onsuccess = event => {
+ let cursor = event.target.result;
+ if (!cursor) {
+ continueToNextStepSync();
+ return;
+ }
+
+ is(cursor.source, objectStore, "Correct source");
+ is(cursor.direction, "next", "Correct direction");
+
+ let exception = null;
+ try {
+ cursor.update(10);
+ } catch(e) {
+ exception = e;
+ }
+ ok(!!exception, "update() throws for key cursor");
+
+ exception = null;
+ try {
+ cursor.delete();
+ } catch(e) {
+ exception = e;
+ }
+ ok(!!exception, "delete() throws for key cursor");
+
+ is(cursor.key, cursor.primaryKey, "key and primaryKey match");
+ ok(!("value" in cursor), "No 'value' property on key cursor");
+
+ seenKeys.push(cursor.key);
+ cursor.continue();
+ };
+ yield undefined;
+
+ is(seenKeys.length, allKeys.length, "Saw the right number of keys");
+
+ let match = true;
+ for (let i = 0; i < seenKeys.length; i++) {
+ if (seenKeys[i] !== allKeys[i]) {
+ match = false;
+ break;
+ }
+ }
+ ok(match, "All keys matched");
+
+ info("Opening key cursor with keyRange");
+
+ let keyRange = IDBKeyRange.bound(10, 20, false, true);
+
+ seenKeys = [];
+ objectStore.openKeyCursor(keyRange).onsuccess = event => {
+ let cursor = event.target.result;
+ if (!cursor) {
+ continueToNextStepSync();
+ return;
+ }
+
+ is(cursor.source, objectStore, "Correct source");
+ is(cursor.direction, "next", "Correct direction");
+
+ let exception = null;
+ try {
+ cursor.update(10);
+ } catch(e) {
+ exception = e;
+ }
+ ok(!!exception, "update() throws for key cursor");
+
+ exception = null;
+ try {
+ cursor.delete();
+ } catch(e) {
+ exception = e;
+ }
+ ok(!!exception, "delete() throws for key cursor");
+
+ is(cursor.key, cursor.primaryKey, "key and primaryKey match");
+ ok(!("value" in cursor), "No 'value' property on key cursor");
+
+ seenKeys.push(cursor.key);
+ cursor.continue();
+ };
+ yield undefined;
+
+ is(seenKeys.length, 10, "Saw the right number of keys");
+
+ match = true;
+ for (let i = 0; i < seenKeys.length; i++) {
+ if (seenKeys[i] !== allKeys[i + 10]) {
+ match = false;
+ break;
+ }
+ }
+ ok(match, "All keys matched");
+
+ info("Opening key cursor with unmatched keyRange");
+
+ keyRange = IDBKeyRange.bound(10000, 200000);
+
+ seenKeys = [];
+ objectStore.openKeyCursor(keyRange).onsuccess = event => {
+ let cursor = event.target.result;
+ if (!cursor) {
+ continueToNextStepSync();
+ return;
+ }
+
+ ok(false, "Shouldn't have any keys here");
+ cursor.continue();
+ };
+ yield undefined;
+
+ is(seenKeys.length, 0, "Saw the right number of keys");
+
+ info("Opening reverse key cursor");
+
+ seenKeys = [];
+ objectStore.openKeyCursor(null, "prev").onsuccess = event => {
+ let cursor = event.target.result;
+ if (!cursor) {
+ continueToNextStepSync();
+ return;
+ }
+
+ is(cursor.source, objectStore, "Correct source");
+ is(cursor.direction, "prev", "Correct direction");
+
+ let exception = null;
+ try {
+ cursor.update(10);
+ } catch(e) {
+ exception = e;
+ }
+ ok(!!exception, "update() throws for key cursor");
+
+ exception = null;
+ try {
+ cursor.delete();
+ } catch(e) {
+ exception = e;
+ }
+ ok(!!exception, "delete() throws for key cursor");
+
+ is(cursor.key, cursor.primaryKey, "key and primaryKey match");
+ ok(!("value" in cursor), "No 'value' property on key cursor");
+
+ seenKeys.push(cursor.key);
+ cursor.continue();
+ };
+ yield undefined;
+
+ is(seenKeys.length, allKeys.length, "Saw the right number of keys");
+
+ seenKeys.reverse();
+
+ match = true;
+ for (let i = 0; i < seenKeys.length; i++) {
+ if (seenKeys[i] !== allKeys[i]) {
+ match = false;
+ break;
+ }
+ }
+ ok(match, "All keys matched");
+
+ info("Opening reverse key cursor with key range");
+
+ keyRange = IDBKeyRange.bound(10, 20, false, true);
+
+ seenKeys = [];
+ objectStore.openKeyCursor(keyRange, "prev").onsuccess = event => {
+ let cursor = event.target.result;
+ if (!cursor) {
+ continueToNextStepSync();
+ return;
+ }
+
+ is(cursor.source, objectStore, "Correct source");
+ is(cursor.direction, "prev", "Correct direction");
+
+ let exception = null;
+ try {
+ cursor.update(10);
+ } catch(e) {
+ exception = e;
+ }
+ ok(!!exception, "update() throws for key cursor");
+
+ exception = null;
+ try {
+ cursor.delete();
+ } catch(e) {
+ exception = e;
+ }
+ ok(!!exception, "delete() throws for key cursor");
+
+ is(cursor.key, cursor.primaryKey, "key and primaryKey match");
+ ok(!("value" in cursor), "No 'value' property on key cursor");
+
+ seenKeys.push(cursor.key);
+ cursor.continue();
+ };
+ yield undefined;
+
+ is(seenKeys.length, 10, "Saw the right number of keys");
+
+ seenKeys.reverse();
+
+ match = true;
+ for (let i = 0; i < 10; i++) {
+ if (seenKeys[i] !== allKeys[i + 10]) {
+ match = false;
+ break;
+ }
+ }
+ ok(match, "All keys matched");
+
+ info("Opening reverse key cursor with unmatched key range");
+
+ keyRange = IDBKeyRange.bound(10000, 200000);
+
+ seenKeys = [];
+ objectStore.openKeyCursor(keyRange, "prev").onsuccess = event => {
+ let cursor = event.target.result;
+ if (!cursor) {
+ continueToNextStepSync();
+ return;
+ }
+
+ ok(false, "Shouldn't have any keys here");
+ cursor.continue();
+ };
+ yield undefined;
+
+ is(seenKeys.length, 0, "Saw the right number of keys");
+
+ info("Opening key cursor with advance");
+
+ seenKeys = [];
+ objectStore.openKeyCursor().onsuccess = event => {
+ let cursor = event.target.result;
+ if (!cursor) {
+ continueToNextStepSync();
+ return;
+ }
+
+ is(cursor.source, objectStore, "Correct source");
+ is(cursor.direction, "next", "Correct direction");
+
+ let exception = null;
+ try {
+ cursor.update(10);
+ } catch(e) {
+ exception = e;
+ }
+ ok(!!exception, "update() throws for key cursor");
+
+ exception = null;
+ try {
+ cursor.delete();
+ } catch(e) {
+ exception = e;
+ }
+ ok(!!exception, "delete() throws for key cursor");
+
+ is(cursor.key, cursor.primaryKey, "key and primaryKey match");
+ ok(!("value" in cursor), "No 'value' property on key cursor");
+
+ seenKeys.push(cursor.key);
+ if (seenKeys.length == 1) {
+ cursor.advance(10);
+ } else {
+ cursor.continue();
+ }
+ };
+ yield undefined;
+
+ is(seenKeys.length, allKeys.length - 9, "Saw the right number of keys");
+
+ match = true;
+ for (let i = 0, j = 0; i < seenKeys.length; i++) {
+ if (seenKeys[i] !== allKeys[i + j]) {
+ match = false;
+ break;
+ }
+ if (i == 0) {
+ j = 9;
+ }
+ }
+ ok(match, "All keys matched");
+
+ info("Opening key cursor with continue-to-key");
+
+ seenKeys = [];
+ objectStore.openKeyCursor().onsuccess = event => {
+ let cursor = event.target.result;
+ if (!cursor) {
+ continueToNextStepSync();
+ return;
+ }
+
+ is(cursor.source, objectStore, "Correct source");
+ is(cursor.direction, "next", "Correct direction");
+
+ let exception = null;
+ try {
+ cursor.update(10);
+ } catch(e) {
+ exception = e;
+ }
+ ok(!!exception, "update() throws for key cursor");
+
+ exception = null;
+ try {
+ cursor.delete();
+ } catch(e) {
+ exception = e;
+ }
+ ok(!!exception, "delete() throws for key cursor");
+
+ is(cursor.key, cursor.primaryKey, "key and primaryKey match");
+ ok(!("value" in cursor), "No 'value' property on key cursor");
+
+ seenKeys.push(cursor.key);
+
+ if (seenKeys.length == 1) {
+ cursor.continue(10);
+ } else {
+ cursor.continue();
+ }
+ };
+ yield undefined;
+
+ is(seenKeys.length, allKeys.length - 9, "Saw the right number of keys");
+
+ match = true;
+ for (let i = 0, j = 0; i < seenKeys.length; i++) {
+ if (seenKeys[i] !== allKeys[i + j]) {
+ match = false;
+ break;
+ }
+ if (i == 0) {
+ j = 9;
+ }
+ }
+ ok(match, "All keys matched");
+
+ finishTest();
+ yield undefined;
+}

Powered by Google App Engine
This is Rietveld 408576698