3 <link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
4 <script src="../../fast/js/resources/js-test-pre.js"></script>
5 <script src="resources/shared.js"></script>
8 <p id="description"></p>
9 <div id="console"></div>
12 description("Test IndexedDB primary key ordering and readback from cursors.");
13 if (window.layoutTestController)
14 layoutTestController.waitUntilDone();
18 evalAndLog("indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB;");
19 shouldBeFalse("indexedDB == null");
20 evalAndLog("IDBCursor = window.IDBCursor || window.webkitIDBCursor;");
21 shouldBeFalse("IDBCursor == null");
22 evalAndLog("IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction");
23 shouldBeFalse("IDBTransaction == null");
28 function prepareDatabase()
31 evalAndLog("openRequest = indexedDB.open('cursor-primary-key-order')");
32 openRequest.onerror = unexpectedErrorCallback;
33 openRequest.onsuccess = function() {
34 evalAndLog("db = openRequest.result");
35 evalAndLog("versionChangeRequest = db.setVersion('1')");
36 versionChangeRequest.onerror = unexpectedErrorCallback;
37 versionChangeRequest.onsuccess = function() {
38 evalAndLog("store = db.createObjectStore('store')");
39 evalAndLog("index = store.createIndex('index', 'indexKey')");
41 versionChangeRequest.result.oncomplete = populateStore;
67 function populateStore()
70 debug("populating store...");
71 evalAndLog("trans = db.transaction('store', IDBTransaction.READ_WRITE)");
72 evalAndLog("store = trans.objectStore('store');");
73 trans.onerror = unexpectedErrorCallback;
74 trans.onabort = unexpectedAbortCallback;
77 var keys = window.keys.slice();
79 keys.forEach(function(key) {
80 var value = { indexKey: indexKey, count: count++ };
81 evalAndLog("store.put(" + JSON.stringify(value) + ", " + key + ")");
83 trans.oncomplete = checkStore;
89 debug("iterating cursor...");
90 evalAndLog("trans = db.transaction('store', IDBTransaction.READ_ONLY)");
91 evalAndLog("store = trans.objectStore('store');");
92 evalAndLog("index = store.index('index');");
93 trans.onerror = unexpectedErrorCallback;
94 trans.onabort = unexpectedAbortCallback;
95 cursorRequest = evalAndLog("cursorRequest = index.openCursor()");
96 evalAndLog("count = 0");
98 cursorRequest.onerror = unexpectedErrorCallback;
99 cursorRequest.onsuccess = function() {
100 if (cursorRequest.result) {
101 evalAndLog("cursor = cursorRequest.result");
102 shouldBe("cursor.key", String(indexKey));
103 shouldBe("cursor.primaryKey", window.keys[count++]);
106 shouldBeTrue("count === keys.length");