test_count.js (13467B)
1 /** 2 * Any copyright is dedicated to the Public Domain. 3 * http://creativecommons.org/publicdomain/zero/1.0/ 4 */ 5 6 /* exported testGenerator */ 7 var testGenerator = testSteps(); 8 9 function* testSteps() { 10 const name = this.window ? window.location.pathname : "Splendid Test"; 11 const objectStoreName = "People"; 12 13 const objectStoreData = [ 14 { key: "237-23-7732", value: { name: "Bob", height: 60, weight: 120 } }, 15 { key: "237-23-7733", value: { name: "Ann", height: 52, weight: 110 } }, 16 { key: "237-23-7734", value: { name: "Ron", height: 73, weight: 180 } }, 17 { key: "237-23-7735", value: { name: "Sue", height: 58, weight: 130 } }, 18 { key: "237-23-7736", value: { name: "Joe", height: 65, weight: 150 } }, 19 { key: "237-23-7737", value: { name: "Pat", height: 65 } }, 20 { key: "237-23-7738", value: { name: "Mel", height: 66, weight: {} } }, 21 { key: "237-23-7739", value: { name: "Tom", height: 62, weight: 130 } }, 22 ]; 23 24 const indexData = { 25 name: "weight", 26 keyPath: "weight", 27 options: { unique: false }, 28 }; 29 30 const weightSort = [1, 0, 3, 7, 4, 2]; 31 32 let request = indexedDB.open(name, 1); 33 request.onerror = errorHandler; 34 request.onupgradeneeded = grabEventAndContinueHandler; 35 request.onsuccess = grabEventAndContinueHandler; 36 let event = yield undefined; 37 38 is(event.type, "upgradeneeded", "Got correct event type"); 39 40 let db = event.target.result; 41 db.onerror = errorHandler; 42 43 let objectStore = db.createObjectStore(objectStoreName, {}); 44 objectStore.createIndex(indexData.name, indexData.keyPath, indexData.options); 45 46 for (let data of objectStoreData) { 47 objectStore.add(data.value, data.key); 48 } 49 50 event = yield undefined; 51 52 is(event.type, "success", "Got correct event type"); 53 54 objectStore = db 55 .transaction(db.objectStoreNames) 56 .objectStore(objectStoreName); 57 58 objectStore.count().onsuccess = grabEventAndContinueHandler; 59 event = yield undefined; 60 61 is( 62 event.target.result, 63 objectStoreData.length, 64 "Correct number of object store entries for all keys" 65 ); 66 67 objectStore.count(null).onsuccess = grabEventAndContinueHandler; 68 event = yield undefined; 69 70 is( 71 event.target.result, 72 objectStoreData.length, 73 "Correct number of object store entries for null key" 74 ); 75 76 objectStore.count(objectStoreData[2].key).onsuccess = 77 grabEventAndContinueHandler; 78 event = yield undefined; 79 80 is( 81 event.target.result, 82 1, 83 "Correct number of object store entries for single existing key" 84 ); 85 86 objectStore.count("foo").onsuccess = grabEventAndContinueHandler; 87 event = yield undefined; 88 89 is( 90 event.target.result, 91 0, 92 "Correct number of object store entries for single non-existing key" 93 ); 94 95 let keyRange = IDBKeyRange.only(objectStoreData[2].key); 96 objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler; 97 event = yield undefined; 98 99 is( 100 event.target.result, 101 1, 102 "Correct number of object store entries for existing only keyRange" 103 ); 104 105 keyRange = IDBKeyRange.only("foo"); 106 objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler; 107 event = yield undefined; 108 109 is( 110 event.target.result, 111 0, 112 "Correct number of object store entries for non-existing only keyRange" 113 ); 114 115 keyRange = IDBKeyRange.lowerBound(objectStoreData[2].key); 116 objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler; 117 event = yield undefined; 118 119 is( 120 event.target.result, 121 objectStoreData.length - 2, 122 "Correct number of object store entries for lowerBound keyRange" 123 ); 124 125 keyRange = IDBKeyRange.lowerBound(objectStoreData[2].key, true); 126 objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler; 127 event = yield undefined; 128 129 is( 130 event.target.result, 131 objectStoreData.length - 3, 132 "Correct number of object store entries for lowerBound keyRange" 133 ); 134 135 keyRange = IDBKeyRange.lowerBound("foo"); 136 objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler; 137 event = yield undefined; 138 139 is( 140 event.target.result, 141 0, 142 "Correct number of object store entries for lowerBound keyRange" 143 ); 144 145 keyRange = IDBKeyRange.upperBound(objectStoreData[2].key, false); 146 objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler; 147 event = yield undefined; 148 149 is( 150 event.target.result, 151 3, 152 "Correct number of object store entries for upperBound keyRange" 153 ); 154 155 keyRange = IDBKeyRange.upperBound(objectStoreData[2].key, true); 156 objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler; 157 event = yield undefined; 158 159 is( 160 event.target.result, 161 2, 162 "Correct number of object store entries for upperBound keyRange" 163 ); 164 165 keyRange = IDBKeyRange.upperBound("foo", true); 166 objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler; 167 event = yield undefined; 168 169 is( 170 event.target.result, 171 objectStoreData.length, 172 "Correct number of object store entries for upperBound keyRange" 173 ); 174 175 keyRange = IDBKeyRange.bound( 176 objectStoreData[0].key, 177 objectStoreData[objectStoreData.length - 1].key 178 ); 179 objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler; 180 event = yield undefined; 181 182 is( 183 event.target.result, 184 objectStoreData.length, 185 "Correct number of object store entries for bound keyRange" 186 ); 187 188 keyRange = IDBKeyRange.bound( 189 objectStoreData[0].key, 190 objectStoreData[objectStoreData.length - 1].key, 191 true 192 ); 193 objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler; 194 event = yield undefined; 195 196 is( 197 event.target.result, 198 objectStoreData.length - 1, 199 "Correct number of object store entries for bound keyRange" 200 ); 201 202 keyRange = IDBKeyRange.bound( 203 objectStoreData[0].key, 204 objectStoreData[objectStoreData.length - 1].key, 205 true, 206 true 207 ); 208 objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler; 209 event = yield undefined; 210 211 is( 212 event.target.result, 213 objectStoreData.length - 2, 214 "Correct number of object store entries for bound keyRange" 215 ); 216 217 keyRange = IDBKeyRange.bound("foo", "foopy", true, true); 218 objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler; 219 event = yield undefined; 220 221 is( 222 event.target.result, 223 0, 224 "Correct number of object store entries for bound keyRange" 225 ); 226 227 keyRange = IDBKeyRange.bound(objectStoreData[0].key, "foo", true, true); 228 objectStore.count(keyRange).onsuccess = grabEventAndContinueHandler; 229 event = yield undefined; 230 231 is( 232 event.target.result, 233 objectStoreData.length - 1, 234 "Correct number of object store entries for bound keyRange" 235 ); 236 237 let index = objectStore.index(indexData.name); 238 239 index.count().onsuccess = grabEventAndContinueHandler; 240 event = yield undefined; 241 242 is( 243 event.target.result, 244 weightSort.length, 245 "Correct number of index entries for no key" 246 ); 247 248 index.count(objectStoreData[7].value.weight).onsuccess = 249 grabEventAndContinueHandler; 250 event = yield undefined; 251 252 is( 253 event.target.result, 254 2, 255 "Correct number of index entries for duplicate key" 256 ); 257 258 index.count(objectStoreData[0].value.weight).onsuccess = 259 grabEventAndContinueHandler; 260 event = yield undefined; 261 262 is(event.target.result, 1, "Correct number of index entries for single key"); 263 264 keyRange = IDBKeyRange.only(objectStoreData[0].value.weight); 265 index.count(keyRange).onsuccess = grabEventAndContinueHandler; 266 event = yield undefined; 267 268 is( 269 event.target.result, 270 1, 271 "Correct number of index entries for only existing keyRange" 272 ); 273 274 keyRange = IDBKeyRange.only("foo"); 275 index.count(keyRange).onsuccess = grabEventAndContinueHandler; 276 event = yield undefined; 277 278 is( 279 event.target.result, 280 0, 281 "Correct number of index entries for only non-existing keyRange" 282 ); 283 284 keyRange = IDBKeyRange.only(objectStoreData[7].value.weight); 285 index.count(keyRange).onsuccess = grabEventAndContinueHandler; 286 event = yield undefined; 287 288 is( 289 event.target.result, 290 2, 291 "Correct number of index entries for only duplicate keyRange" 292 ); 293 294 keyRange = IDBKeyRange.lowerBound( 295 objectStoreData[weightSort[0]].value.weight 296 ); 297 index.count(keyRange).onsuccess = grabEventAndContinueHandler; 298 event = yield undefined; 299 300 is( 301 event.target.result, 302 weightSort.length, 303 "Correct number of index entries for lowerBound keyRange" 304 ); 305 306 keyRange = IDBKeyRange.lowerBound( 307 objectStoreData[weightSort[1]].value.weight 308 ); 309 index.count(keyRange).onsuccess = grabEventAndContinueHandler; 310 event = yield undefined; 311 312 is( 313 event.target.result, 314 weightSort.length - 1, 315 "Correct number of index entries for lowerBound keyRange" 316 ); 317 318 keyRange = IDBKeyRange.lowerBound( 319 objectStoreData[weightSort[0]].value.weight - 1 320 ); 321 index.count(keyRange).onsuccess = grabEventAndContinueHandler; 322 event = yield undefined; 323 324 is( 325 event.target.result, 326 weightSort.length, 327 "Correct number of index entries for lowerBound keyRange" 328 ); 329 330 keyRange = IDBKeyRange.lowerBound( 331 objectStoreData[weightSort[0]].value.weight, 332 true 333 ); 334 index.count(keyRange).onsuccess = grabEventAndContinueHandler; 335 event = yield undefined; 336 337 is( 338 event.target.result, 339 weightSort.length - 1, 340 "Correct number of index entries for lowerBound keyRange" 341 ); 342 343 keyRange = IDBKeyRange.lowerBound( 344 objectStoreData[weightSort[weightSort.length - 1]].value.weight 345 ); 346 index.count(keyRange).onsuccess = grabEventAndContinueHandler; 347 event = yield undefined; 348 349 is( 350 event.target.result, 351 1, 352 "Correct number of index entries for lowerBound keyRange" 353 ); 354 355 keyRange = IDBKeyRange.lowerBound( 356 objectStoreData[weightSort[weightSort.length - 1]].value.weight, 357 true 358 ); 359 index.count(keyRange).onsuccess = grabEventAndContinueHandler; 360 event = yield undefined; 361 362 is( 363 event.target.result, 364 0, 365 "Correct number of index entries for lowerBound keyRange" 366 ); 367 368 keyRange = IDBKeyRange.lowerBound( 369 objectStoreData[weightSort[weightSort.length - 1]].value.weight + 1, 370 true 371 ); 372 index.count(keyRange).onsuccess = grabEventAndContinueHandler; 373 event = yield undefined; 374 375 is( 376 event.target.result, 377 0, 378 "Correct number of index entries for lowerBound keyRange" 379 ); 380 381 keyRange = IDBKeyRange.upperBound( 382 objectStoreData[weightSort[0]].value.weight 383 ); 384 index.count(keyRange).onsuccess = grabEventAndContinueHandler; 385 event = yield undefined; 386 387 is( 388 event.target.result, 389 1, 390 "Correct number of index entries for upperBound keyRange" 391 ); 392 393 keyRange = IDBKeyRange.upperBound( 394 objectStoreData[weightSort[0]].value.weight, 395 true 396 ); 397 index.count(keyRange).onsuccess = grabEventAndContinueHandler; 398 event = yield undefined; 399 400 is( 401 event.target.result, 402 0, 403 "Correct number of index entries for upperBound keyRange" 404 ); 405 406 keyRange = IDBKeyRange.upperBound( 407 objectStoreData[weightSort[weightSort.length - 1]].value.weight 408 ); 409 index.count(keyRange).onsuccess = grabEventAndContinueHandler; 410 event = yield undefined; 411 412 is( 413 event.target.result, 414 weightSort.length, 415 "Correct number of index entries for upperBound keyRange" 416 ); 417 418 keyRange = IDBKeyRange.upperBound( 419 objectStoreData[weightSort[weightSort.length - 1]].value.weight, 420 true 421 ); 422 index.count(keyRange).onsuccess = grabEventAndContinueHandler; 423 event = yield undefined; 424 425 is( 426 event.target.result, 427 weightSort.length - 1, 428 "Correct number of index entries for upperBound keyRange" 429 ); 430 431 keyRange = IDBKeyRange.upperBound( 432 objectStoreData[weightSort[weightSort.length - 1]].value.weight, 433 true 434 ); 435 index.count(keyRange).onsuccess = grabEventAndContinueHandler; 436 event = yield undefined; 437 438 is( 439 event.target.result, 440 weightSort.length - 1, 441 "Correct number of index entries for upperBound keyRange" 442 ); 443 444 keyRange = IDBKeyRange.upperBound("foo"); 445 index.count(keyRange).onsuccess = grabEventAndContinueHandler; 446 event = yield undefined; 447 448 is( 449 event.target.result, 450 weightSort.length, 451 "Correct number of index entries for upperBound keyRange" 452 ); 453 454 keyRange = IDBKeyRange.bound("foo", "foopy"); 455 index.count(keyRange).onsuccess = grabEventAndContinueHandler; 456 event = yield undefined; 457 458 is( 459 event.target.result, 460 0, 461 "Correct number of index entries for bound keyRange" 462 ); 463 464 keyRange = IDBKeyRange.bound( 465 objectStoreData[weightSort[0]].value.weight, 466 objectStoreData[weightSort[weightSort.length - 1]].value.weight 467 ); 468 index.count(keyRange).onsuccess = grabEventAndContinueHandler; 469 event = yield undefined; 470 471 is( 472 event.target.result, 473 weightSort.length, 474 "Correct number of index entries for bound keyRange" 475 ); 476 477 keyRange = IDBKeyRange.bound( 478 objectStoreData[weightSort[0]].value.weight, 479 objectStoreData[weightSort[weightSort.length - 1]].value.weight, 480 true 481 ); 482 index.count(keyRange).onsuccess = grabEventAndContinueHandler; 483 event = yield undefined; 484 485 is( 486 event.target.result, 487 weightSort.length - 1, 488 "Correct number of index entries for bound keyRange" 489 ); 490 491 keyRange = IDBKeyRange.bound( 492 objectStoreData[weightSort[0]].value.weight, 493 objectStoreData[weightSort[weightSort.length - 1]].value.weight, 494 true, 495 true 496 ); 497 index.count(keyRange).onsuccess = grabEventAndContinueHandler; 498 event = yield undefined; 499 500 is( 501 event.target.result, 502 weightSort.length - 2, 503 "Correct number of index entries for bound keyRange" 504 ); 505 506 finishTest(); 507 }