michael@0: /** michael@0: * Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/publicdomain/zero/1.0/ michael@0: */ michael@0: michael@0: let testGenerator = testSteps(); michael@0: michael@0: function testSteps() { michael@0: const dbName = this.window ? michael@0: window.location.pathname : michael@0: "test_objectStore_getAllKeys"; michael@0: const dbVersion = 1; michael@0: const objectStoreName = "foo"; michael@0: const keyCount = 200; michael@0: michael@0: let request = indexedDB.open(dbName, dbVersion); michael@0: request.onerror = errorHandler; michael@0: request.onupgradeneeded = grabEventAndContinueHandler; michael@0: request.onsuccess = unexpectedSuccessHandler; michael@0: michael@0: let event = yield undefined; michael@0: michael@0: info("Creating database"); michael@0: michael@0: let db = event.target.result; michael@0: let objectStore = db.createObjectStore(objectStoreName); michael@0: for (let i = 0; i < keyCount; i++) { michael@0: objectStore.add(true, i); michael@0: } michael@0: michael@0: request.onupgradeneeded = unexpectedSuccessHandler; michael@0: request.onsuccess = grabEventAndContinueHandler; michael@0: michael@0: event = yield undefined; michael@0: michael@0: db = event.target.result; michael@0: objectStore = db.transaction(objectStoreName).objectStore(objectStoreName); michael@0: michael@0: info("Getting all keys"); michael@0: objectStore.getAllKeys().onsuccess = grabEventAndContinueHandler; michael@0: event = yield undefined; michael@0: michael@0: ok(Array.isArray(event.target.result), "Got an array result"); michael@0: is(event.target.result.length, keyCount, "Got correct array length"); michael@0: michael@0: let match = true; michael@0: for (let i = 0; i < keyCount; i++) { michael@0: if (event.target.result[i] != i) { michael@0: match = false; michael@0: break; michael@0: } michael@0: } michael@0: ok(match, "Got correct keys"); michael@0: michael@0: info("Getting all keys with key range"); michael@0: let keyRange = IDBKeyRange.bound(10, 20, false, true); michael@0: objectStore.getAllKeys(keyRange).onsuccess = grabEventAndContinueHandler; michael@0: event = yield undefined; michael@0: michael@0: ok(Array.isArray(event.target.result), "Got an array result"); michael@0: is(event.target.result.length, 10, "Got correct array length"); michael@0: michael@0: match = true; michael@0: for (let i = 10; i < 20; i++) { michael@0: if (event.target.result[i - 10] != i) { michael@0: match = false; michael@0: break; michael@0: } michael@0: } michael@0: ok(match, "Got correct keys"); michael@0: michael@0: info("Getting all keys with unmatched key range"); michael@0: keyRange = IDBKeyRange.bound(10000, 200000); michael@0: objectStore.getAllKeys(keyRange).onsuccess = grabEventAndContinueHandler; michael@0: event = yield undefined; michael@0: michael@0: ok(Array.isArray(event.target.result), "Got an array result"); michael@0: is(event.target.result.length, 0, "Got correct array length"); michael@0: michael@0: info("Getting all keys with limit"); michael@0: objectStore.getAllKeys(null, 5).onsuccess = grabEventAndContinueHandler; michael@0: event = yield undefined; michael@0: michael@0: ok(Array.isArray(event.target.result), "Got an array result"); michael@0: is(event.target.result.length, 5, "Got correct array length"); michael@0: michael@0: match = true; michael@0: for (let i = 0; i < 5; i++) { michael@0: if (event.target.result[i] != i) { michael@0: match = false; michael@0: break; michael@0: } michael@0: } michael@0: ok(match, "Got correct keys"); michael@0: michael@0: info("Getting all keys with key range and limit"); michael@0: keyRange = IDBKeyRange.bound(10, 20, false, true); michael@0: objectStore.getAllKeys(keyRange, 5).onsuccess = grabEventAndContinueHandler; michael@0: event = yield undefined; michael@0: michael@0: ok(Array.isArray(event.target.result), "Got an array result"); michael@0: is(event.target.result.length, 5, "Got correct array length"); michael@0: michael@0: match = true; michael@0: for (let i = 10; i < 15; i++) { michael@0: if (event.target.result[i - 10] != i) { michael@0: match = false; michael@0: break; michael@0: } michael@0: } michael@0: ok(match, "Got correct keys"); michael@0: michael@0: info("Getting all keys with unmatched key range and limit"); michael@0: keyRange = IDBKeyRange.bound(10000, 200000); michael@0: objectStore.getAllKeys(keyRange, 5).onsuccess = grabEventAndContinueHandler; michael@0: event = yield undefined; michael@0: michael@0: ok(Array.isArray(event.target.result), "Got an array result"); michael@0: is(event.target.result.length, 0, "Got correct array length"); michael@0: michael@0: finishTest(); michael@0: yield undefined; michael@0: }