dom/indexedDB/test/unit/test_count.js

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

michael@0 1 /**
michael@0 2 * Any copyright is dedicated to the Public Domain.
michael@0 3 * http://creativecommons.org/publicdomain/zero/1.0/
michael@0 4 */
michael@0 5
michael@0 6 var testGenerator = testSteps();
michael@0 7
michael@0 8 function testSteps()
michael@0 9 {
michael@0 10 const name = this.window ? window.location.pathname : "Splendid Test";
michael@0 11 const objectStoreName = "People";
michael@0 12
michael@0 13 const objectStoreData = [
michael@0 14 { key: "237-23-7732", value: { name: "Bob", height: 60, weight: 120 } },
michael@0 15 { key: "237-23-7733", value: { name: "Ann", height: 52, weight: 110 } },
michael@0 16 { key: "237-23-7734", value: { name: "Ron", height: 73, weight: 180 } },
michael@0 17 { key: "237-23-7735", value: { name: "Sue", height: 58, weight: 130 } },
michael@0 18 { key: "237-23-7736", value: { name: "Joe", height: 65, weight: 150 } },
michael@0 19 { key: "237-23-7737", value: { name: "Pat", height: 65 } },
michael@0 20 { key: "237-23-7738", value: { name: "Mel", height: 66, weight: {} } },
michael@0 21 { key: "237-23-7739", value: { name: "Tom", height: 62, weight: 130 } }
michael@0 22 ];
michael@0 23
michael@0 24 const indexData = {
michael@0 25 name: "weight",
michael@0 26 keyPath: "weight",
michael@0 27 options: { unique: false }
michael@0 28 };
michael@0 29
michael@0 30 const weightSort = [1, 0, 3, 7, 4, 2];
michael@0 31
michael@0 32 let request = indexedDB.open(name, 1);
michael@0 33 request.onerror = errorHandler;
michael@0 34 request.onupgradeneeded = grabEventAndContinueHandler;
michael@0 35 request.onsuccess = grabEventAndContinueHandler;
michael@0 36 let event = yield undefined;
michael@0 37
michael@0 38 is(event.type, "upgradeneeded", "Got correct event type");
michael@0 39
michael@0 40 let db = event.target.result;
michael@0 41 db.onerror = errorHandler;
michael@0 42
michael@0 43 let objectStore = db.createObjectStore(objectStoreName, { });
michael@0 44 objectStore.createIndex(indexData.name, indexData.keyPath,
michael@0 45 indexData.options);
michael@0 46
michael@0 47 for each (let data in objectStoreData) {
michael@0 48 objectStore.add(data.value, data.key);
michael@0 49 }
michael@0 50
michael@0 51 event = yield undefined;
michael@0 52
michael@0 53 is(event.type, "success", "Got correct event type");
michael@0 54
michael@0 55 objectStore = db.transaction(db.objectStoreNames)
michael@0 56 .objectStore(objectStoreName);
michael@0 57
michael@0 58 objectStore.count().onsuccess = grabEventAndContinueHandler;
michael@0 59 event = yield undefined;
michael@0 60
michael@0 61 is(event.target.result, objectStoreData.length,
michael@0 62 "Correct number of object store entries for all keys");
michael@0 63
michael@0 64 objectStore.count(null).onsuccess = grabEventAndContinueHandler;
michael@0 65 event = yield undefined;
michael@0 66
michael@0 67 is(event.target.result, objectStoreData.length,
michael@0 68 "Correct number of object store entries for null key");
michael@0 69
michael@0 70 objectStore.count(objectStoreData[2].key).onsuccess =
michael@0 71 grabEventAndContinueHandler;
michael@0 72 event = yield undefined;
michael@0 73
michael@0 74 is(event.target.result, 1,
michael@0 75 "Correct number of object store entries for single existing key");
michael@0 76
michael@0 77 objectStore.count("foo").onsuccess = grabEventAndContinueHandler;
michael@0 78 event = yield undefined;
michael@0 79
michael@0 80 is(event.target.result, 0,
michael@0 81 "Correct number of object store entries for single non-existing key");
michael@0 82
michael@0 83 let keyRange = IDBKeyRange.only(objectStoreData[2].key);
michael@0 84 objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler;
michael@0 85 event = yield undefined;
michael@0 86
michael@0 87 is(event.target.result, 1,
michael@0 88 "Correct number of object store entries for existing only keyRange");
michael@0 89
michael@0 90 keyRange = IDBKeyRange.only("foo");
michael@0 91 objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler;
michael@0 92 event = yield undefined;
michael@0 93
michael@0 94 is(event.target.result, 0,
michael@0 95 "Correct number of object store entries for non-existing only keyRange");
michael@0 96
michael@0 97 keyRange = IDBKeyRange.lowerBound(objectStoreData[2].key);
michael@0 98 objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler;
michael@0 99 event = yield undefined;
michael@0 100
michael@0 101 is(event.target.result, objectStoreData.length - 2,
michael@0 102 "Correct number of object store entries for lowerBound keyRange");
michael@0 103
michael@0 104 keyRange = IDBKeyRange.lowerBound(objectStoreData[2].key, true);
michael@0 105 objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler;
michael@0 106 event = yield undefined;
michael@0 107
michael@0 108 is(event.target.result, objectStoreData.length - 3,
michael@0 109 "Correct number of object store entries for lowerBound keyRange");
michael@0 110
michael@0 111 keyRange = IDBKeyRange.lowerBound("foo");
michael@0 112 objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler;
michael@0 113 event = yield undefined;
michael@0 114
michael@0 115 is(event.target.result, 0,
michael@0 116 "Correct number of object store entries for lowerBound keyRange");
michael@0 117
michael@0 118 keyRange = IDBKeyRange.upperBound(objectStoreData[2].key, false);
michael@0 119 objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler;
michael@0 120 event = yield undefined;
michael@0 121
michael@0 122 is(event.target.result, 3,
michael@0 123 "Correct number of object store entries for upperBound keyRange");
michael@0 124
michael@0 125 keyRange = IDBKeyRange.upperBound(objectStoreData[2].key, true);
michael@0 126 objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler;
michael@0 127 event = yield undefined;
michael@0 128
michael@0 129 is(event.target.result, 2,
michael@0 130 "Correct number of object store entries for upperBound keyRange");
michael@0 131
michael@0 132 keyRange = IDBKeyRange.upperBound("foo", true);
michael@0 133 objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler;
michael@0 134 event = yield undefined;
michael@0 135
michael@0 136 is(event.target.result, objectStoreData.length,
michael@0 137 "Correct number of object store entries for upperBound keyRange");
michael@0 138
michael@0 139 keyRange = IDBKeyRange.bound(objectStoreData[0].key,
michael@0 140 objectStoreData[objectStoreData.length - 1].key);
michael@0 141 objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler;
michael@0 142 event = yield undefined;
michael@0 143
michael@0 144 is(event.target.result, objectStoreData.length,
michael@0 145 "Correct number of object store entries for bound keyRange");
michael@0 146
michael@0 147 keyRange = IDBKeyRange.bound(objectStoreData[0].key,
michael@0 148 objectStoreData[objectStoreData.length - 1].key,
michael@0 149 true);
michael@0 150 objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler;
michael@0 151 event = yield undefined;
michael@0 152
michael@0 153 is(event.target.result, objectStoreData.length - 1,
michael@0 154 "Correct number of object store entries for bound keyRange");
michael@0 155
michael@0 156 keyRange = IDBKeyRange.bound(objectStoreData[0].key,
michael@0 157 objectStoreData[objectStoreData.length - 1].key,
michael@0 158 true, true);
michael@0 159 objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler;
michael@0 160 event = yield undefined;
michael@0 161
michael@0 162 is(event.target.result, objectStoreData.length - 2,
michael@0 163 "Correct number of object store entries for bound keyRange");
michael@0 164
michael@0 165 keyRange = IDBKeyRange.bound("foo", "foopy", true, true);
michael@0 166 objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler;
michael@0 167 event = yield undefined;
michael@0 168
michael@0 169 is(event.target.result, 0,
michael@0 170 "Correct number of object store entries for bound keyRange");
michael@0 171
michael@0 172 keyRange = IDBKeyRange.bound(objectStoreData[0].key, "foo", true, true);
michael@0 173 objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler;
michael@0 174 event = yield undefined;
michael@0 175
michael@0 176 is(event.target.result, objectStoreData.length - 1,
michael@0 177 "Correct number of object store entries for bound keyRange");
michael@0 178
michael@0 179 let index = objectStore.index(indexData.name);
michael@0 180
michael@0 181 index.count().onsuccess = grabEventAndContinueHandler;
michael@0 182 event = yield undefined;
michael@0 183
michael@0 184 is(event.target.result, weightSort.length,
michael@0 185 "Correct number of index entries for no key");
michael@0 186
michael@0 187 index.count(objectStoreData[7].value.weight).onsuccess =
michael@0 188 grabEventAndContinueHandler;
michael@0 189 event = yield undefined;
michael@0 190
michael@0 191 is(event.target.result, 2,
michael@0 192 "Correct number of index entries for duplicate key");
michael@0 193
michael@0 194 index.count(objectStoreData[0].value.weight).onsuccess =
michael@0 195 grabEventAndContinueHandler;
michael@0 196 event = yield undefined;
michael@0 197
michael@0 198 is(event.target.result, 1,
michael@0 199 "Correct number of index entries for single key");
michael@0 200
michael@0 201 keyRange = IDBKeyRange.only(objectStoreData[0].value.weight);
michael@0 202 index.count(keyRange).onsuccess = grabEventAndContinueHandler;
michael@0 203 event = yield undefined;
michael@0 204
michael@0 205 is(event.target.result, 1,
michael@0 206 "Correct number of index entries for only existing keyRange");
michael@0 207
michael@0 208 keyRange = IDBKeyRange.only("foo");
michael@0 209 index.count(keyRange).onsuccess = grabEventAndContinueHandler;
michael@0 210 event = yield undefined;
michael@0 211
michael@0 212 is(event.target.result, 0,
michael@0 213 "Correct number of index entries for only non-existing keyRange");
michael@0 214
michael@0 215 keyRange = IDBKeyRange.only(objectStoreData[7].value.weight);
michael@0 216 index.count(keyRange).onsuccess = grabEventAndContinueHandler;
michael@0 217 event = yield undefined;
michael@0 218
michael@0 219 is(event.target.result, 2,
michael@0 220 "Correct number of index entries for only duplicate keyRange");
michael@0 221
michael@0 222 keyRange = IDBKeyRange.lowerBound(objectStoreData[weightSort[0]].value.weight);
michael@0 223 index.count(keyRange).onsuccess = grabEventAndContinueHandler;
michael@0 224 event = yield undefined;
michael@0 225
michael@0 226 is(event.target.result, weightSort.length,
michael@0 227 "Correct number of index entries for lowerBound keyRange");
michael@0 228
michael@0 229 keyRange = IDBKeyRange.lowerBound(objectStoreData[weightSort[1]].value.weight);
michael@0 230 index.count(keyRange).onsuccess = grabEventAndContinueHandler;
michael@0 231 event = yield undefined;
michael@0 232
michael@0 233 is(event.target.result, weightSort.length - 1,
michael@0 234 "Correct number of index entries for lowerBound keyRange");
michael@0 235
michael@0 236 keyRange = IDBKeyRange.lowerBound(objectStoreData[weightSort[0]].value.weight - 1);
michael@0 237 index.count(keyRange).onsuccess = grabEventAndContinueHandler;
michael@0 238 event = yield undefined;
michael@0 239
michael@0 240 is(event.target.result, weightSort.length,
michael@0 241 "Correct number of index entries for lowerBound keyRange");
michael@0 242
michael@0 243 keyRange = IDBKeyRange.lowerBound(objectStoreData[weightSort[0]].value.weight,
michael@0 244 true);
michael@0 245 index.count(keyRange).onsuccess = grabEventAndContinueHandler;
michael@0 246 event = yield undefined;
michael@0 247
michael@0 248 is(event.target.result, weightSort.length - 1,
michael@0 249 "Correct number of index entries for lowerBound keyRange");
michael@0 250
michael@0 251 keyRange = IDBKeyRange.lowerBound(objectStoreData[weightSort[weightSort.length - 1]].value.weight);
michael@0 252 index.count(keyRange).onsuccess = grabEventAndContinueHandler;
michael@0 253 event = yield undefined;
michael@0 254
michael@0 255 is(event.target.result, 1,
michael@0 256 "Correct number of index entries for lowerBound keyRange");
michael@0 257
michael@0 258 keyRange = IDBKeyRange.lowerBound(objectStoreData[weightSort[weightSort.length - 1]].value.weight,
michael@0 259 true);
michael@0 260 index.count(keyRange).onsuccess = grabEventAndContinueHandler;
michael@0 261 event = yield undefined;
michael@0 262
michael@0 263 is(event.target.result, 0,
michael@0 264 "Correct number of index entries for lowerBound keyRange");
michael@0 265
michael@0 266 keyRange = IDBKeyRange.lowerBound(objectStoreData[weightSort[weightSort.length - 1]].value.weight + 1,
michael@0 267 true);
michael@0 268 index.count(keyRange).onsuccess = grabEventAndContinueHandler;
michael@0 269 event = yield undefined;
michael@0 270
michael@0 271 is(event.target.result, 0,
michael@0 272 "Correct number of index entries for lowerBound keyRange");
michael@0 273
michael@0 274 keyRange = IDBKeyRange.upperBound(objectStoreData[weightSort[0]].value.weight);
michael@0 275 index.count(keyRange).onsuccess = grabEventAndContinueHandler;
michael@0 276 event = yield undefined;
michael@0 277
michael@0 278 is(event.target.result, 1,
michael@0 279 "Correct number of index entries for upperBound keyRange");
michael@0 280
michael@0 281 keyRange = IDBKeyRange.upperBound(objectStoreData[weightSort[0]].value.weight,
michael@0 282 true);
michael@0 283 index.count(keyRange).onsuccess = grabEventAndContinueHandler;
michael@0 284 event = yield undefined;
michael@0 285
michael@0 286 is(event.target.result, 0,
michael@0 287 "Correct number of index entries for upperBound keyRange");
michael@0 288
michael@0 289 keyRange = IDBKeyRange.upperBound(objectStoreData[weightSort[weightSort.length - 1]].value.weight);
michael@0 290 index.count(keyRange).onsuccess = grabEventAndContinueHandler;
michael@0 291 event = yield undefined;
michael@0 292
michael@0 293 is(event.target.result, weightSort.length,
michael@0 294 "Correct number of index entries for upperBound keyRange");
michael@0 295
michael@0 296 keyRange = IDBKeyRange.upperBound(objectStoreData[weightSort[weightSort.length - 1]].value.weight,
michael@0 297 true);
michael@0 298 index.count(keyRange).onsuccess = grabEventAndContinueHandler;
michael@0 299 event = yield undefined;
michael@0 300
michael@0 301 is(event.target.result, weightSort.length - 1,
michael@0 302 "Correct number of index entries for upperBound keyRange");
michael@0 303
michael@0 304 keyRange = IDBKeyRange.upperBound(objectStoreData[weightSort[weightSort.length - 1]].value.weight,
michael@0 305 true);
michael@0 306 index.count(keyRange).onsuccess = grabEventAndContinueHandler;
michael@0 307 event = yield undefined;
michael@0 308
michael@0 309 is(event.target.result, weightSort.length - 1,
michael@0 310 "Correct number of index entries for upperBound keyRange");
michael@0 311
michael@0 312 keyRange = IDBKeyRange.upperBound("foo");
michael@0 313 index.count(keyRange).onsuccess = grabEventAndContinueHandler;
michael@0 314 event = yield undefined;
michael@0 315
michael@0 316 is(event.target.result, weightSort.length,
michael@0 317 "Correct number of index entries for upperBound keyRange");
michael@0 318
michael@0 319 keyRange = IDBKeyRange.bound("foo", "foopy");
michael@0 320 index.count(keyRange).onsuccess = grabEventAndContinueHandler;
michael@0 321 event = yield undefined;
michael@0 322
michael@0 323 is(event.target.result, 0,
michael@0 324 "Correct number of index entries for bound keyRange");
michael@0 325
michael@0 326 keyRange = IDBKeyRange.bound(objectStoreData[weightSort[0]].value.weight,
michael@0 327 objectStoreData[weightSort[weightSort.length - 1]].value.weight);
michael@0 328 index.count(keyRange).onsuccess = grabEventAndContinueHandler;
michael@0 329 event = yield undefined;
michael@0 330
michael@0 331 is(event.target.result, weightSort.length,
michael@0 332 "Correct number of index entries for bound keyRange");
michael@0 333
michael@0 334 keyRange = IDBKeyRange.bound(objectStoreData[weightSort[0]].value.weight,
michael@0 335 objectStoreData[weightSort[weightSort.length - 1]].value.weight,
michael@0 336 true);
michael@0 337 index.count(keyRange).onsuccess = grabEventAndContinueHandler;
michael@0 338 event = yield undefined;
michael@0 339
michael@0 340 is(event.target.result, weightSort.length - 1,
michael@0 341 "Correct number of index entries for bound keyRange");
michael@0 342
michael@0 343 keyRange = IDBKeyRange.bound(objectStoreData[weightSort[0]].value.weight,
michael@0 344 objectStoreData[weightSort[weightSort.length - 1]].value.weight,
michael@0 345 true, true);
michael@0 346 index.count(keyRange).onsuccess = grabEventAndContinueHandler;
michael@0 347 event = yield undefined;
michael@0 348
michael@0 349 is(event.target.result, weightSort.length - 2,
michael@0 350 "Correct number of index entries for bound keyRange");
michael@0 351
michael@0 352 finishTest();
michael@0 353 yield undefined;
michael@0 354 }

mercurial