diff options
Diffstat (limited to 'LayoutTests/storage/indexeddb/cursor-continue.html')
-rw-r--r-- | LayoutTests/storage/indexeddb/cursor-continue.html | 183 |
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> |