test_index_getAll.js (5962B)
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 const objectStoreName = "People"; 11 12 const objectStoreData = [ 13 { key: "237-23-7732", value: { name: "Bob", height: 60, weight: 120 } }, 14 { key: "237-23-7733", value: { name: "Ann", height: 52, weight: 110 } }, 15 { key: "237-23-7734", value: { name: "Ron", height: 73, weight: 180 } }, 16 { key: "237-23-7735", value: { name: "Sue", height: 58, weight: 130 } }, 17 { key: "237-23-7736", value: { name: "Joe", height: 65, weight: 150 } }, 18 { key: "237-23-7737", value: { name: "Pat", height: 65 } }, 19 ]; 20 21 const indexData = [ 22 { name: "name", keyPath: "name", options: { unique: true } }, 23 { name: "height", keyPath: "height", options: { unique: false } }, 24 { name: "weight", keyPath: "weight", options: { unique: false } }, 25 ]; 26 27 const objectStoreDataHeightSort = [ 28 { key: "237-23-7733", value: { name: "Ann", height: 52, weight: 110 } }, 29 { key: "237-23-7735", value: { name: "Sue", height: 58, weight: 130 } }, 30 { key: "237-23-7732", value: { name: "Bob", height: 60, weight: 120 } }, 31 { key: "237-23-7736", value: { name: "Joe", height: 65, weight: 150 } }, 32 { key: "237-23-7737", value: { name: "Pat", height: 65 } }, 33 { key: "237-23-7734", value: { name: "Ron", height: 73, weight: 180 } }, 34 ]; 35 36 let request = indexedDB.open(name, 1); 37 request.onerror = errorHandler; 38 request.onupgradeneeded = grabEventAndContinueHandler; 39 request.onsuccess = grabEventAndContinueHandler; 40 let event = yield undefined; 41 42 let db = event.target.result; 43 44 let objectStore = db.createObjectStore(objectStoreName); 45 46 // First, add all our data to the object store. 47 let addedData = 0; 48 for (let i in objectStoreData) { 49 request = objectStore.add(objectStoreData[i].value, objectStoreData[i].key); 50 request.onerror = errorHandler; 51 request.onsuccess = function (event) { 52 if (++addedData == objectStoreData.length) { 53 testGenerator.next(event); 54 } 55 }; 56 } 57 yield undefined; 58 ok(true, "1"); 59 60 // Now create the indexes. 61 for (let i in indexData) { 62 objectStore.createIndex( 63 indexData[i].name, 64 indexData[i].keyPath, 65 indexData[i].options 66 ); 67 } 68 69 is(objectStore.indexNames.length, indexData.length, "Good index count"); 70 yield undefined; 71 72 ok(true, "2"); 73 objectStore = db.transaction(objectStoreName).objectStore(objectStoreName); 74 75 request = objectStore.index("height").mozGetAllKeys(65); 76 request.onerror = errorHandler; 77 request.onsuccess = grabEventAndContinueHandler; 78 event = yield undefined; 79 ok(true, "3"); 80 81 is(event.target.result instanceof Array, true, "Got an array object"); 82 is(event.target.result.length, 2, "Correct length"); 83 84 for (let i in event.target.result) { 85 is( 86 event.target.result[i], 87 objectStoreDataHeightSort[parseInt(i) + 3].key, 88 "Correct key" 89 ); 90 } 91 92 request = objectStore.index("height").mozGetAllKeys(65, 0); 93 request.onerror = errorHandler; 94 request.onsuccess = grabEventAndContinueHandler; 95 event = yield undefined; 96 ok(true, "3"); 97 98 is(event.target.result instanceof Array, true, "Got an array object"); 99 is(event.target.result.length, 2, "Correct length"); 100 101 for (let i in event.target.result) { 102 is( 103 event.target.result[i], 104 objectStoreDataHeightSort[parseInt(i) + 3].key, 105 "Correct key" 106 ); 107 } 108 109 request = objectStore.index("height").mozGetAllKeys(65, null); 110 request.onerror = errorHandler; 111 request.onsuccess = grabEventAndContinueHandler; 112 event = yield undefined; 113 ok(true, "3"); 114 115 is(event.target.result instanceof Array, true, "Got an array object"); 116 is(event.target.result.length, 2, "Correct length"); 117 118 for (let i in event.target.result) { 119 is( 120 event.target.result[i], 121 objectStoreDataHeightSort[parseInt(i) + 3].key, 122 "Correct key" 123 ); 124 } 125 126 request = objectStore.index("height").mozGetAllKeys(65, undefined); 127 request.onerror = errorHandler; 128 request.onsuccess = grabEventAndContinueHandler; 129 event = yield undefined; 130 ok(true, "3"); 131 132 is(event.target.result instanceof Array, true, "Got an array object"); 133 is(event.target.result.length, 2, "Correct length"); 134 135 for (let i in event.target.result) { 136 is( 137 event.target.result[i], 138 objectStoreDataHeightSort[parseInt(i) + 3].key, 139 "Correct key" 140 ); 141 } 142 143 request = objectStore.index("height").mozGetAllKeys(); 144 request.onerror = errorHandler; 145 request.onsuccess = grabEventAndContinueHandler; 146 event = yield undefined; 147 ok(true, "4"); 148 149 is(event.target.result instanceof Array, true, "Got an array object"); 150 is( 151 event.target.result.length, 152 objectStoreDataHeightSort.length, 153 "Correct length" 154 ); 155 156 for (let i in event.target.result) { 157 is(event.target.result[i], objectStoreDataHeightSort[i].key, "Correct key"); 158 } 159 160 request = objectStore.index("height").mozGetAllKeys(null, 4); 161 request.onerror = errorHandler; 162 request.onsuccess = grabEventAndContinueHandler; 163 event = yield undefined; 164 165 ok(true, "5"); 166 is(event.target.result instanceof Array, true, "Got an array object"); 167 is(event.target.result.length, 4, "Correct length"); 168 169 for (let i in event.target.result) { 170 is(event.target.result[i], objectStoreDataHeightSort[i].key, "Correct key"); 171 } 172 173 request = objectStore.index("height").mozGetAllKeys(65, 1); 174 request.onerror = errorHandler; 175 request.onsuccess = grabEventAndContinueHandler; 176 event = yield undefined; 177 178 ok(true, "6"); 179 is(event.target.result instanceof Array, true, "Got an array object"); 180 is(event.target.result.length, 1, "Correct length"); 181 182 for (let i in event.target.result) { 183 is( 184 event.target.result[i], 185 objectStoreDataHeightSort[parseInt(i) + 3].key, 186 "Correct key" 187 ); 188 } 189 190 finishTest(); 191 }