1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/indexedDB/test/unit/test_count.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,354 @@ 1.4 +/** 1.5 + * Any copyright is dedicated to the Public Domain. 1.6 + * http://creativecommons.org/publicdomain/zero/1.0/ 1.7 + */ 1.8 + 1.9 +var testGenerator = testSteps(); 1.10 + 1.11 +function testSteps() 1.12 +{ 1.13 + const name = this.window ? window.location.pathname : "Splendid Test"; 1.14 + const objectStoreName = "People"; 1.15 + 1.16 + const objectStoreData = [ 1.17 + { key: "237-23-7732", value: { name: "Bob", height: 60, weight: 120 } }, 1.18 + { key: "237-23-7733", value: { name: "Ann", height: 52, weight: 110 } }, 1.19 + { key: "237-23-7734", value: { name: "Ron", height: 73, weight: 180 } }, 1.20 + { key: "237-23-7735", value: { name: "Sue", height: 58, weight: 130 } }, 1.21 + { key: "237-23-7736", value: { name: "Joe", height: 65, weight: 150 } }, 1.22 + { key: "237-23-7737", value: { name: "Pat", height: 65 } }, 1.23 + { key: "237-23-7738", value: { name: "Mel", height: 66, weight: {} } }, 1.24 + { key: "237-23-7739", value: { name: "Tom", height: 62, weight: 130 } } 1.25 + ]; 1.26 + 1.27 + const indexData = { 1.28 + name: "weight", 1.29 + keyPath: "weight", 1.30 + options: { unique: false } 1.31 + }; 1.32 + 1.33 + const weightSort = [1, 0, 3, 7, 4, 2]; 1.34 + 1.35 + let request = indexedDB.open(name, 1); 1.36 + request.onerror = errorHandler; 1.37 + request.onupgradeneeded = grabEventAndContinueHandler; 1.38 + request.onsuccess = grabEventAndContinueHandler; 1.39 + let event = yield undefined; 1.40 + 1.41 + is(event.type, "upgradeneeded", "Got correct event type"); 1.42 + 1.43 + let db = event.target.result; 1.44 + db.onerror = errorHandler; 1.45 + 1.46 + let objectStore = db.createObjectStore(objectStoreName, { }); 1.47 + objectStore.createIndex(indexData.name, indexData.keyPath, 1.48 + indexData.options); 1.49 + 1.50 + for each (let data in objectStoreData) { 1.51 + objectStore.add(data.value, data.key); 1.52 + } 1.53 + 1.54 + event = yield undefined; 1.55 + 1.56 + is(event.type, "success", "Got correct event type"); 1.57 + 1.58 + objectStore = db.transaction(db.objectStoreNames) 1.59 + .objectStore(objectStoreName); 1.60 + 1.61 + objectStore.count().onsuccess = grabEventAndContinueHandler; 1.62 + event = yield undefined; 1.63 + 1.64 + is(event.target.result, objectStoreData.length, 1.65 + "Correct number of object store entries for all keys"); 1.66 + 1.67 + objectStore.count(null).onsuccess = grabEventAndContinueHandler; 1.68 + event = yield undefined; 1.69 + 1.70 + is(event.target.result, objectStoreData.length, 1.71 + "Correct number of object store entries for null key"); 1.72 + 1.73 + objectStore.count(objectStoreData[2].key).onsuccess = 1.74 + grabEventAndContinueHandler; 1.75 + event = yield undefined; 1.76 + 1.77 + is(event.target.result, 1, 1.78 + "Correct number of object store entries for single existing key"); 1.79 + 1.80 + objectStore.count("foo").onsuccess = grabEventAndContinueHandler; 1.81 + event = yield undefined; 1.82 + 1.83 + is(event.target.result, 0, 1.84 + "Correct number of object store entries for single non-existing key"); 1.85 + 1.86 + let keyRange = IDBKeyRange.only(objectStoreData[2].key); 1.87 + objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler; 1.88 + event = yield undefined; 1.89 + 1.90 + is(event.target.result, 1, 1.91 + "Correct number of object store entries for existing only keyRange"); 1.92 + 1.93 + keyRange = IDBKeyRange.only("foo"); 1.94 + objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler; 1.95 + event = yield undefined; 1.96 + 1.97 + is(event.target.result, 0, 1.98 + "Correct number of object store entries for non-existing only keyRange"); 1.99 + 1.100 + keyRange = IDBKeyRange.lowerBound(objectStoreData[2].key); 1.101 + objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler; 1.102 + event = yield undefined; 1.103 + 1.104 + is(event.target.result, objectStoreData.length - 2, 1.105 + "Correct number of object store entries for lowerBound keyRange"); 1.106 + 1.107 + keyRange = IDBKeyRange.lowerBound(objectStoreData[2].key, true); 1.108 + objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler; 1.109 + event = yield undefined; 1.110 + 1.111 + is(event.target.result, objectStoreData.length - 3, 1.112 + "Correct number of object store entries for lowerBound keyRange"); 1.113 + 1.114 + keyRange = IDBKeyRange.lowerBound("foo"); 1.115 + objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler; 1.116 + event = yield undefined; 1.117 + 1.118 + is(event.target.result, 0, 1.119 + "Correct number of object store entries for lowerBound keyRange"); 1.120 + 1.121 + keyRange = IDBKeyRange.upperBound(objectStoreData[2].key, false); 1.122 + objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler; 1.123 + event = yield undefined; 1.124 + 1.125 + is(event.target.result, 3, 1.126 + "Correct number of object store entries for upperBound keyRange"); 1.127 + 1.128 + keyRange = IDBKeyRange.upperBound(objectStoreData[2].key, true); 1.129 + objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler; 1.130 + event = yield undefined; 1.131 + 1.132 + is(event.target.result, 2, 1.133 + "Correct number of object store entries for upperBound keyRange"); 1.134 + 1.135 + keyRange = IDBKeyRange.upperBound("foo", true); 1.136 + objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler; 1.137 + event = yield undefined; 1.138 + 1.139 + is(event.target.result, objectStoreData.length, 1.140 + "Correct number of object store entries for upperBound keyRange"); 1.141 + 1.142 + keyRange = IDBKeyRange.bound(objectStoreData[0].key, 1.143 + objectStoreData[objectStoreData.length - 1].key); 1.144 + objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler; 1.145 + event = yield undefined; 1.146 + 1.147 + is(event.target.result, objectStoreData.length, 1.148 + "Correct number of object store entries for bound keyRange"); 1.149 + 1.150 + keyRange = IDBKeyRange.bound(objectStoreData[0].key, 1.151 + objectStoreData[objectStoreData.length - 1].key, 1.152 + true); 1.153 + objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler; 1.154 + event = yield undefined; 1.155 + 1.156 + is(event.target.result, objectStoreData.length - 1, 1.157 + "Correct number of object store entries for bound keyRange"); 1.158 + 1.159 + keyRange = IDBKeyRange.bound(objectStoreData[0].key, 1.160 + objectStoreData[objectStoreData.length - 1].key, 1.161 + true, true); 1.162 + objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler; 1.163 + event = yield undefined; 1.164 + 1.165 + is(event.target.result, objectStoreData.length - 2, 1.166 + "Correct number of object store entries for bound keyRange"); 1.167 + 1.168 + keyRange = IDBKeyRange.bound("foo", "foopy", true, true); 1.169 + objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler; 1.170 + event = yield undefined; 1.171 + 1.172 + is(event.target.result, 0, 1.173 + "Correct number of object store entries for bound keyRange"); 1.174 + 1.175 + keyRange = IDBKeyRange.bound(objectStoreData[0].key, "foo", true, true); 1.176 + objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler; 1.177 + event = yield undefined; 1.178 + 1.179 + is(event.target.result, objectStoreData.length - 1, 1.180 + "Correct number of object store entries for bound keyRange"); 1.181 + 1.182 + let index = objectStore.index(indexData.name); 1.183 + 1.184 + index.count().onsuccess = grabEventAndContinueHandler; 1.185 + event = yield undefined; 1.186 + 1.187 + is(event.target.result, weightSort.length, 1.188 + "Correct number of index entries for no key"); 1.189 + 1.190 + index.count(objectStoreData[7].value.weight).onsuccess = 1.191 + grabEventAndContinueHandler; 1.192 + event = yield undefined; 1.193 + 1.194 + is(event.target.result, 2, 1.195 + "Correct number of index entries for duplicate key"); 1.196 + 1.197 + index.count(objectStoreData[0].value.weight).onsuccess = 1.198 + grabEventAndContinueHandler; 1.199 + event = yield undefined; 1.200 + 1.201 + is(event.target.result, 1, 1.202 + "Correct number of index entries for single key"); 1.203 + 1.204 + keyRange = IDBKeyRange.only(objectStoreData[0].value.weight); 1.205 + index.count(keyRange).onsuccess = grabEventAndContinueHandler; 1.206 + event = yield undefined; 1.207 + 1.208 + is(event.target.result, 1, 1.209 + "Correct number of index entries for only existing keyRange"); 1.210 + 1.211 + keyRange = IDBKeyRange.only("foo"); 1.212 + index.count(keyRange).onsuccess = grabEventAndContinueHandler; 1.213 + event = yield undefined; 1.214 + 1.215 + is(event.target.result, 0, 1.216 + "Correct number of index entries for only non-existing keyRange"); 1.217 + 1.218 + keyRange = IDBKeyRange.only(objectStoreData[7].value.weight); 1.219 + index.count(keyRange).onsuccess = grabEventAndContinueHandler; 1.220 + event = yield undefined; 1.221 + 1.222 + is(event.target.result, 2, 1.223 + "Correct number of index entries for only duplicate keyRange"); 1.224 + 1.225 + keyRange = IDBKeyRange.lowerBound(objectStoreData[weightSort[0]].value.weight); 1.226 + index.count(keyRange).onsuccess = grabEventAndContinueHandler; 1.227 + event = yield undefined; 1.228 + 1.229 + is(event.target.result, weightSort.length, 1.230 + "Correct number of index entries for lowerBound keyRange"); 1.231 + 1.232 + keyRange = IDBKeyRange.lowerBound(objectStoreData[weightSort[1]].value.weight); 1.233 + index.count(keyRange).onsuccess = grabEventAndContinueHandler; 1.234 + event = yield undefined; 1.235 + 1.236 + is(event.target.result, weightSort.length - 1, 1.237 + "Correct number of index entries for lowerBound keyRange"); 1.238 + 1.239 + keyRange = IDBKeyRange.lowerBound(objectStoreData[weightSort[0]].value.weight - 1); 1.240 + index.count(keyRange).onsuccess = grabEventAndContinueHandler; 1.241 + event = yield undefined; 1.242 + 1.243 + is(event.target.result, weightSort.length, 1.244 + "Correct number of index entries for lowerBound keyRange"); 1.245 + 1.246 + keyRange = IDBKeyRange.lowerBound(objectStoreData[weightSort[0]].value.weight, 1.247 + true); 1.248 + index.count(keyRange).onsuccess = grabEventAndContinueHandler; 1.249 + event = yield undefined; 1.250 + 1.251 + is(event.target.result, weightSort.length - 1, 1.252 + "Correct number of index entries for lowerBound keyRange"); 1.253 + 1.254 + keyRange = IDBKeyRange.lowerBound(objectStoreData[weightSort[weightSort.length - 1]].value.weight); 1.255 + index.count(keyRange).onsuccess = grabEventAndContinueHandler; 1.256 + event = yield undefined; 1.257 + 1.258 + is(event.target.result, 1, 1.259 + "Correct number of index entries for lowerBound keyRange"); 1.260 + 1.261 + keyRange = IDBKeyRange.lowerBound(objectStoreData[weightSort[weightSort.length - 1]].value.weight, 1.262 + true); 1.263 + index.count(keyRange).onsuccess = grabEventAndContinueHandler; 1.264 + event = yield undefined; 1.265 + 1.266 + is(event.target.result, 0, 1.267 + "Correct number of index entries for lowerBound keyRange"); 1.268 + 1.269 + keyRange = IDBKeyRange.lowerBound(objectStoreData[weightSort[weightSort.length - 1]].value.weight + 1, 1.270 + true); 1.271 + index.count(keyRange).onsuccess = grabEventAndContinueHandler; 1.272 + event = yield undefined; 1.273 + 1.274 + is(event.target.result, 0, 1.275 + "Correct number of index entries for lowerBound keyRange"); 1.276 + 1.277 + keyRange = IDBKeyRange.upperBound(objectStoreData[weightSort[0]].value.weight); 1.278 + index.count(keyRange).onsuccess = grabEventAndContinueHandler; 1.279 + event = yield undefined; 1.280 + 1.281 + is(event.target.result, 1, 1.282 + "Correct number of index entries for upperBound keyRange"); 1.283 + 1.284 + keyRange = IDBKeyRange.upperBound(objectStoreData[weightSort[0]].value.weight, 1.285 + true); 1.286 + index.count(keyRange).onsuccess = grabEventAndContinueHandler; 1.287 + event = yield undefined; 1.288 + 1.289 + is(event.target.result, 0, 1.290 + "Correct number of index entries for upperBound keyRange"); 1.291 + 1.292 + keyRange = IDBKeyRange.upperBound(objectStoreData[weightSort[weightSort.length - 1]].value.weight); 1.293 + index.count(keyRange).onsuccess = grabEventAndContinueHandler; 1.294 + event = yield undefined; 1.295 + 1.296 + is(event.target.result, weightSort.length, 1.297 + "Correct number of index entries for upperBound keyRange"); 1.298 + 1.299 + keyRange = IDBKeyRange.upperBound(objectStoreData[weightSort[weightSort.length - 1]].value.weight, 1.300 + true); 1.301 + index.count(keyRange).onsuccess = grabEventAndContinueHandler; 1.302 + event = yield undefined; 1.303 + 1.304 + is(event.target.result, weightSort.length - 1, 1.305 + "Correct number of index entries for upperBound keyRange"); 1.306 + 1.307 + keyRange = IDBKeyRange.upperBound(objectStoreData[weightSort[weightSort.length - 1]].value.weight, 1.308 + true); 1.309 + index.count(keyRange).onsuccess = grabEventAndContinueHandler; 1.310 + event = yield undefined; 1.311 + 1.312 + is(event.target.result, weightSort.length - 1, 1.313 + "Correct number of index entries for upperBound keyRange"); 1.314 + 1.315 + keyRange = IDBKeyRange.upperBound("foo"); 1.316 + index.count(keyRange).onsuccess = grabEventAndContinueHandler; 1.317 + event = yield undefined; 1.318 + 1.319 + is(event.target.result, weightSort.length, 1.320 + "Correct number of index entries for upperBound keyRange"); 1.321 + 1.322 + keyRange = IDBKeyRange.bound("foo", "foopy"); 1.323 + index.count(keyRange).onsuccess = grabEventAndContinueHandler; 1.324 + event = yield undefined; 1.325 + 1.326 + is(event.target.result, 0, 1.327 + "Correct number of index entries for bound keyRange"); 1.328 + 1.329 + keyRange = IDBKeyRange.bound(objectStoreData[weightSort[0]].value.weight, 1.330 + objectStoreData[weightSort[weightSort.length - 1]].value.weight); 1.331 + index.count(keyRange).onsuccess = grabEventAndContinueHandler; 1.332 + event = yield undefined; 1.333 + 1.334 + is(event.target.result, weightSort.length, 1.335 + "Correct number of index entries for bound keyRange"); 1.336 + 1.337 + keyRange = IDBKeyRange.bound(objectStoreData[weightSort[0]].value.weight, 1.338 + objectStoreData[weightSort[weightSort.length - 1]].value.weight, 1.339 + true); 1.340 + index.count(keyRange).onsuccess = grabEventAndContinueHandler; 1.341 + event = yield undefined; 1.342 + 1.343 + is(event.target.result, weightSort.length - 1, 1.344 + "Correct number of index entries for bound keyRange"); 1.345 + 1.346 + keyRange = IDBKeyRange.bound(objectStoreData[weightSort[0]].value.weight, 1.347 + objectStoreData[weightSort[weightSort.length - 1]].value.weight, 1.348 + true, true); 1.349 + index.count(keyRange).onsuccess = grabEventAndContinueHandler; 1.350 + event = yield undefined; 1.351 + 1.352 + is(event.target.result, weightSort.length - 2, 1.353 + "Correct number of index entries for bound keyRange"); 1.354 + 1.355 + finishTest(); 1.356 + yield undefined; 1.357 +}