| <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> |