test_objectCursors.js (2215B)
1 /** 2 * Any copyright is dedicated to the Public Domain. 3 * http://creativecommons.org/publicdomain/zero/1.0/ 4 */ 5 6 var testGenerator = testSteps(); 7 8 function* testSteps() { 9 const name = this.window ? window.location.pathname : "Splendid Test"; 10 11 const objectStores = [ 12 { name: "a", autoIncrement: false }, 13 { name: "b", autoIncrement: true }, 14 ]; 15 16 const indexes = [ 17 { name: "a", options: {} }, 18 { name: "b", options: { unique: true } }, 19 ]; 20 21 var j = 0; 22 for (let i in objectStores) { 23 let request = indexedDB.open(name, ++j); 24 request.onerror = errorHandler; 25 request.onupgradeneeded = grabEventAndContinueHandler; 26 let event = yield undefined; 27 28 let db = event.target.result; 29 db.onversionchange = function (event) { 30 event.target.close(); 31 }; 32 33 let objectStore = db.createObjectStore(objectStores[i].name, { 34 keyPath: "id", 35 autoIncrement: objectStores[i].autoIncrement, 36 }); 37 38 for (let j in indexes) { 39 objectStore.createIndex(indexes[j].name, "name", indexes[j].options); 40 } 41 42 let data = { name: "Ben" }; 43 if (!objectStores[i].autoIncrement) { 44 data.id = 1; 45 } 46 47 request = objectStore.add(data); 48 request.onerror = errorHandler; 49 request.onsuccess = grabEventAndContinueHandler; 50 event = yield undefined; 51 52 ok(event.target.result == 1 || event.target.result == 2, "Good id"); 53 } 54 55 executeSoon(function () { 56 testGenerator.next(); 57 }); 58 yield undefined; 59 60 let request = indexedDB.open(name, j); 61 request.onerror = errorHandler; 62 request.onsuccess = grabEventAndContinueHandler; 63 let event = yield undefined; 64 65 let db = event.target.result; 66 67 for (let i in objectStores) { 68 for (let j in indexes) { 69 let objectStore = db 70 .transaction(objectStores[i].name) 71 .objectStore(objectStores[i].name); 72 let index = objectStore.index(indexes[j].name); 73 74 request = index.openCursor(); 75 request.onerror = errorHandler; 76 request.onsuccess = function (event) { 77 is(event.target.result.value.name, "Ben", "Good object"); 78 executeSoon(function () { 79 testGenerator.next(); 80 }); 81 }; 82 yield undefined; 83 } 84 } 85 86 finishTest(); 87 }