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: var testGenerator = testSteps(); michael@0: michael@0: function testSteps() michael@0: { michael@0: const name = this.window ? window.location.pathname : "Splendid Test"; michael@0: michael@0: const values = [ "a", "1", 1, "foo", 300, true, false, 4.5, null ]; michael@0: michael@0: let request = indexedDB.open(name, 1); michael@0: request.onerror = errorHandler; michael@0: request.onupgradeneeded = grabEventAndContinueHandler; michael@0: let event = yield undefined; michael@0: michael@0: let db = event.target.result; michael@0: michael@0: let objectStore = db.createObjectStore("foo", { autoIncrement: true }); michael@0: michael@0: request.onsuccess = grabEventAndContinueHandler; michael@0: request = objectStore.mozGetAll(); michael@0: request.onerror = errorHandler; michael@0: request.onsuccess = grabEventAndContinueHandler; michael@0: event = yield undefined; michael@0: michael@0: is(event.target.result instanceof Array, true, "Got an array object"); michael@0: is(event.target.result.length, 0, "No elements"); michael@0: michael@0: let addedCount = 0; michael@0: michael@0: for (let i in values) { michael@0: request = objectStore.add(values[i]); michael@0: request.onerror = errorHandler; michael@0: request.onsuccess = function(event) { michael@0: if (++addedCount == values.length) { michael@0: executeSoon(function() { testGenerator.next(); }); michael@0: } michael@0: } michael@0: } michael@0: yield undefined; michael@0: yield undefined; michael@0: michael@0: request = db.transaction("foo").objectStore("foo").mozGetAll(); michael@0: request.onerror = errorHandler; michael@0: request.onsuccess = grabEventAndContinueHandler; michael@0: event = yield undefined; michael@0: michael@0: is(event.target.result instanceof Array, true, "Got an array object"); michael@0: is(event.target.result.length, values.length, "Same length"); michael@0: michael@0: for (let i in event.target.result) { michael@0: is(event.target.result[i], values[i], "Same value"); michael@0: } michael@0: michael@0: request = db.transaction("foo").objectStore("foo").mozGetAll(null, 5); michael@0: request.onerror = errorHandler; michael@0: request.onsuccess = grabEventAndContinueHandler; michael@0: event = yield undefined; michael@0: michael@0: is(event.target.result instanceof Array, true, "Got an array object"); michael@0: is(event.target.result.length, 5, "Correct length"); michael@0: michael@0: for (let i in event.target.result) { michael@0: is(event.target.result[i], values[i], "Same value"); michael@0: } michael@0: michael@0: let keyRange = IDBKeyRange.bound(1, 9); michael@0: michael@0: request = db.transaction("foo").objectStore("foo").mozGetAll(keyRange); michael@0: request.onerror = errorHandler; michael@0: request.onsuccess = grabEventAndContinueHandler; michael@0: event = yield undefined; michael@0: michael@0: is(event.target.result instanceof Array, true, "Got an array object"); michael@0: is(event.target.result.length, values.length, "Correct length"); michael@0: michael@0: for (let i in event.target.result) { michael@0: is(event.target.result[i], values[i], "Same value"); michael@0: } michael@0: michael@0: request = db.transaction("foo").objectStore("foo").mozGetAll(keyRange, 0); michael@0: request.onerror = errorHandler; michael@0: request.onsuccess = grabEventAndContinueHandler; michael@0: event = yield undefined; michael@0: michael@0: is(event.target.result instanceof Array, true, "Got an array object"); michael@0: is(event.target.result.length, values.length, "Correct length"); michael@0: michael@0: for (let i in event.target.result) { michael@0: is(event.target.result[i], values[i], "Same value"); michael@0: } michael@0: michael@0: request = db.transaction("foo").objectStore("foo").mozGetAll(keyRange, null); michael@0: request.onerror = errorHandler; michael@0: request.onsuccess = grabEventAndContinueHandler; michael@0: event = yield undefined; michael@0: michael@0: is(event.target.result instanceof Array, true, "Got an array object"); michael@0: is(event.target.result.length, values.length, "Correct length"); michael@0: michael@0: for (let i in event.target.result) { michael@0: is(event.target.result[i], values[i], "Same value"); michael@0: } michael@0: michael@0: request = db.transaction("foo").objectStore("foo").mozGetAll(keyRange, undefined); michael@0: request.onerror = errorHandler; michael@0: request.onsuccess = grabEventAndContinueHandler; michael@0: event = yield undefined; michael@0: michael@0: is(event.target.result instanceof Array, true, "Got an array object"); michael@0: is(event.target.result.length, values.length, "Correct length"); michael@0: michael@0: for (let i in event.target.result) { michael@0: is(event.target.result[i], values[i], "Same value"); michael@0: } michael@0: michael@0: keyRange = IDBKeyRange.bound(4, 7); michael@0: michael@0: request = db.transaction("foo").objectStore("foo").mozGetAll(keyRange); michael@0: request.onerror = errorHandler; michael@0: request.onsuccess = grabEventAndContinueHandler; michael@0: event = yield undefined; michael@0: michael@0: is(event.target.result instanceof Array, true, "Got an array object"); michael@0: is(event.target.result.length, 4, "Correct length"); michael@0: michael@0: for (let i in event.target.result) { michael@0: is(event.target.result[i], values[parseInt(i) + 3], "Same value"); michael@0: } michael@0: michael@0: // Get should take a key range also but it doesn't return an array. michael@0: request = db.transaction("foo").objectStore("foo").get(keyRange); michael@0: request.onerror = errorHandler; michael@0: request.onsuccess = grabEventAndContinueHandler; michael@0: event = yield undefined; michael@0: michael@0: is(event.target.result instanceof Array, false, "Not an array object"); michael@0: is(event.target.result, values[3], "Correct value"); michael@0: michael@0: request = db.transaction("foo").objectStore("foo").mozGetAll(keyRange, 2); michael@0: request.onerror = errorHandler; michael@0: request.onsuccess = grabEventAndContinueHandler; michael@0: event = yield undefined; michael@0: michael@0: is(event.target.result instanceof Array, true, "Got an array object"); michael@0: is(event.target.result.length, 2, "Correct length"); michael@0: michael@0: for (let i in event.target.result) { michael@0: is(event.target.result[i], values[parseInt(i) + 3], "Same value"); michael@0: } michael@0: michael@0: keyRange = IDBKeyRange.bound(4, 7); michael@0: michael@0: request = db.transaction("foo").objectStore("foo").mozGetAll(keyRange, 50); michael@0: request.onerror = errorHandler; michael@0: request.onsuccess = grabEventAndContinueHandler; michael@0: event = yield undefined; michael@0: michael@0: is(event.target.result instanceof Array, true, "Got an array object"); michael@0: is(event.target.result.length, 4, "Correct length"); michael@0: michael@0: for (let i in event.target.result) { michael@0: is(event.target.result[i], values[parseInt(i) + 3], "Same value"); michael@0: } michael@0: michael@0: keyRange = IDBKeyRange.bound(4, 7); michael@0: michael@0: request = db.transaction("foo").objectStore("foo").mozGetAll(keyRange, 0); michael@0: request.onerror = errorHandler; michael@0: request.onsuccess = grabEventAndContinueHandler; michael@0: event = yield undefined; michael@0: michael@0: is(event.target.result instanceof Array, true, "Got an array object"); michael@0: is(event.target.result.length, 4, "Correct length"); michael@0: michael@0: keyRange = IDBKeyRange.bound(4, 7, true, true); michael@0: michael@0: request = db.transaction("foo").objectStore("foo").mozGetAll(keyRange); michael@0: request.onerror = errorHandler; michael@0: request.onsuccess = grabEventAndContinueHandler; michael@0: event = yield undefined; michael@0: michael@0: is(event.target.result instanceof Array, true, "Got an array object"); michael@0: is(event.target.result.length, 2, "Correct length"); michael@0: michael@0: for (let i in event.target.result) { michael@0: is(event.target.result[i], values[parseInt(i) + 4], "Same value"); michael@0: } michael@0: michael@0: finishTest(); michael@0: yield undefined; michael@0: }