summaryrefslogtreecommitdiffstats
path: root/LayoutTests/storage/indexeddb/cursor-continue.html
diff options
context:
space:
mode:
Diffstat (limited to 'LayoutTests/storage/indexeddb/cursor-continue.html')
-rw-r--r--LayoutTests/storage/indexeddb/cursor-continue.html183
1 files changed, 183 insertions, 0 deletions
diff --git a/LayoutTests/storage/indexeddb/cursor-continue.html b/LayoutTests/storage/indexeddb/cursor-continue.html
new file mode 100644
index 0000000..ce4d436
--- /dev/null
+++ b/LayoutTests/storage/indexeddb/cursor-continue.html
@@ -0,0 +1,183 @@
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+<script src="../../fast/js/resources/js-test-post-function.js"></script>
+<script src="resources/shared.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script>
+
+description("Test IndexedDB's IDBCursor.continue() with a key parameter.");
+if (window.layoutTestController)
+ layoutTestController.waitUntilDone();
+
+var date = new Date();
+
+// In order of how it should be sorted by IndexedDB.
+window.testData = [
+ 0,
+ 1,
+ 1,
+ 3.14159,
+ 3.14159,
+ 10,
+ 11,
+ 12,
+ 13,
+ date,
+ date,
+ new Date(date.valueOf() + 1000),
+ "A big string",
+ "A big string",
+ "A bit1",
+ "A bit2",
+ "A bit3",
+ "the BIGGEST string"
+];
+
+function openDatabase()
+{
+ result = evalAndLog("webkitIndexedDB.open('cursor-continue')");
+ result.onsuccess = setVersion;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function setVersion()
+{
+ window.db = evalAndLog("db = event.target.result");
+
+ result = evalAndLog("db.setVersion('new version')");
+ result.onsuccess = deleteExisting;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function deleteExisting()
+{
+ window.trans = evalAndLog("trans = event.target.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = unexpectedAbortCallback;
+
+ deleteAllObjectStores(db);
+
+ window.objectStore = evalAndLog("db.createObjectStore('someObjectStore')");
+ window.indexObject = evalAndLog("objectStore.createIndex('someIndex', 'x')");
+ window.nextToAdd = 0;
+ addData();
+}
+
+function addData()
+{
+ result = evalAndLog("objectStore.add({'x': testData[nextToAdd]}, nextToAdd)");
+ result.onsuccess = ++window.nextToAdd < testData.length ? addData : ascendingTest;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function ascendingTest()
+{
+ debug("");
+ var request = evalAndLog("indexObject.openKeyCursor(null, webkitIDBCursor.NEXT)");
+ request.onsuccess = ascendingCallback;
+ request.onerror = unexpectedErrorCallback;
+ window.stage = 0;
+}
+
+function ascendingCallback()
+
+{
+ if (window.stage == 0) {
+ shouldBe("event.target.result.primaryKey", "0");
+ evalAndLog("event.target.result.continue(3.14159)");
+ } else if (window.stage == 1) {
+ shouldBe("event.target.result.primaryKey", "3");
+ evalAndLog("event.target.result.continue(3.14159)");
+ } else if (window.stage == 2) {
+ shouldBe("event.target.result.primaryKey", "4");
+ evalAndLog("event.target.result.continue(3.14159)");
+ } else if (window.stage == 3) {
+ shouldBe("event.target.result.primaryKey", "5");
+ evalAndLog("event.target.result.continue(12)");
+ } else if (window.stage == 4) {
+ shouldBe("event.target.result.primaryKey", "7");
+ evalAndLog("event.target.result.continue(date)");
+ } else if (window.stage == 5) {
+ shouldBe("event.target.result.primaryKey", "9");
+ evalAndLog("event.target.result.continue(date)");
+ } else if (window.stage == 6) {
+ shouldBe("event.target.result.primaryKey", "10");
+ evalAndLog("event.target.result.continue(date)");
+ } else if (window.stage == 7) {
+ shouldBe("event.target.result.primaryKey", "11");
+ evalAndLog("event.target.result.continue('A bit1')");
+ } else if (window.stage == 8) {
+ shouldBe("event.target.result.primaryKey", "14");
+ evalAndLog("event.target.result.continue('A bit3')");
+ } else if (window.stage == 9) {
+ shouldBe("event.target.result.primaryKey", "16");
+ evalAndLog("event.target.result.continue('the BIGGEST string')");
+ } else if (window.stage == 10) {
+ shouldBe("event.target.result.primaryKey", "17");
+ evalAndLog("event.target.result.continue('the BIGGEST string')");
+ } else if (window.stage == 11) {
+ shouldBeNull("event.target.result");
+ descendingTest();
+ return;
+ } else {
+ testFailed("Illegal stage.");
+ }
+ window.stage++;
+}
+
+function descendingTest()
+{
+ debug("");
+ var request = evalAndLog("indexObject.openKeyCursor(null, webkitIDBCursor.PREV)");
+ request.onsuccess = descendingCallback;
+ request.onerror = unexpectedErrorCallback;
+ window.stage = 0;
+}
+
+function descendingCallback()
+{
+ if (window.stage == 0) {
+ shouldBe("event.target.result.primaryKey", "17");
+ evalAndLog("event.target.result.continue('A bit2')");
+ } else if (window.stage == 1) {
+ shouldBe("event.target.result.primaryKey", "15");
+ evalAndLog("event.target.result.continue('A bit2')");
+ } else if (window.stage == 2) {
+ shouldBe("event.target.result.primaryKey", "14");
+ evalAndLog("event.target.result.continue(date)");
+ } else if (window.stage == 3) {
+ shouldBe("event.target.result.primaryKey", "10");
+ evalAndLog("event.target.result.continue(date)");
+ } else if (window.stage == 4) {
+ shouldBe("event.target.result.primaryKey", "9");
+ evalAndLog("event.target.result.continue(1)");
+ } else if (window.stage == 5) {
+ shouldBe("event.target.result.primaryKey", "2");
+ evalAndLog("event.target.result.continue(1)");
+ } else if (window.stage == 6) {
+ shouldBe("event.target.result.primaryKey", "1");
+ evalAndLog("event.target.result.continue(1)");
+ } else if (window.stage == 7) {
+ shouldBe("event.target.result.primaryKey", "0");
+ evalAndLog("event.target.result.continue(1)");
+ } else if (window.stage == 8) {
+ shouldBeNull("event.target.result");
+ done();
+ return;
+ } else {
+ testFailed("Illegal stage.");
+ }
+ window.stage++;
+}
+
+openDatabase(); // The first step.
+var successfullyParsed = true;
+
+</script>
+</body>
+</html>