/**
* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/
*/
var testGenerator = testSteps();
function* testSteps() {
const osName =
"people";
const indexName =
"weight";
const data = [
{ ssn:
"237-23-7732", name:
"Bob", height:
60, weight:
120 },
{ ssn:
"237-23-7733", name:
"Ann", height:
52, weight:
110 },
{ ssn:
"237-23-7734", name:
"Ron", height:
73, weight:
180 },
{ ssn:
"237-23-7735", name:
"Sue", height:
58, weight:
130 },
{ ssn:
"237-23-7736", name:
"Joe", height:
65, weight:
150 },
{ ssn:
"237-23-7737", name:
"Pat", height:
65 },
{ ssn:
"237-23-7738", name:
"Mel", height:
66, weight: {} },
{ ssn:
"237-23-7739", name:
"Tom", height:
62, weight:
130 },
];
const weightSort = [
1,
0,
3,
7,
4,
2];
let request = indexedDB.open(
this.window ? window.location.pathname :
"Splendid Test",
1
);
request.onerror = errorHandler;
request.onupgradeneeded = grabEventAndContinueHandler;
request.onsuccess = grabEventAndContinueHandler;
let event = yield undefined;
is(event.type,
"upgradeneeded",
"Got upgradeneeded event");
let db = event.target.result;
db.onerror = errorHandler;
let objectStore = db.createObjectStore(osName, { keyPath:
"ssn" });
objectStore.createIndex(indexName,
"weight", { unique:
false });
for (let i of data) {
objectStore.add(i);
}
event = yield undefined;
is(event.type,
"success",
"Got success event");
try {
IDBKeyRange.bound(
1, -
1);
ok(
false,
"Bound keyRange with backwards args should throw!");
}
catch (e) {
is(e.name,
"DataError",
"Threw correct exception");
is(e.code,
0,
"Threw with correct code");
}
try {
IDBKeyRange.bound(
1,
1);
ok(
true,
"Bound keyRange with same arg should be ok");
}
catch (e) {
ok(
false,
"Bound keyRange with same arg should have been ok");
}
try {
IDBKeyRange.bound(
1,
1,
true);
ok(
false,
"Bound keyRange with same arg and open should throw!");
}
catch (e) {
is(e.name,
"DataError",
"Threw correct exception");
is(e.code,
0,
"Threw with correct code");
}
try {
IDBKeyRange.bound(
1,
1,
true,
true);
ok(
false,
"Bound keyRange with same arg and open should throw!");
}
catch (e) {
is(e.name,
"DataError",
"Threw correct exception");
is(e.code,
0,
"Threw with correct code");
}
objectStore = db.transaction(osName).objectStore(osName);
try {
objectStore.get();
ok(
false,
"Get with unspecified arg should have thrown");
}
catch (e) {
ok(
true,
"Get with unspecified arg should have thrown");
}
try {
objectStore.get(undefined);
ok(
false,
"Get with undefined should have thrown");
}
catch (e) {
ok(
true,
"Get with undefined arg should have thrown");
}
try {
objectStore.get(
null);
ok(
false,
"Get with null should have thrown");
}
catch (e) {
is(e
instanceof DOMException,
true,
"Got right kind of exception");
is(e.name,
"DataError",
"Correct error.");
is(e.code,
0,
"Correct code.");
}
objectStore.get(data[
2].ssn).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result.name, data[
2].name,
"Correct data");
let keyRange = IDBKeyRange.only(data[
2].ssn);
objectStore.get(keyRange).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result.name, data[
2].name,
"Correct data");
keyRange = IDBKeyRange.lowerBound(data[
2].ssn);
objectStore.get(keyRange).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result.name, data[
2].name,
"Correct data");
keyRange = IDBKeyRange.lowerBound(data[
2].ssn,
true);
objectStore.get(keyRange).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result.name, data[
3].name,
"Correct data");
keyRange = IDBKeyRange.upperBound(data[
2].ssn);
objectStore.get(keyRange).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result.name, data[
0].name,
"Correct data");
keyRange = IDBKeyRange.bound(data[
2].ssn, data[
4].ssn);
objectStore.get(keyRange).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result.name, data[
2].name,
"Correct data");
keyRange = IDBKeyRange.bound(data[
2].ssn, data[
4].ssn,
true);
objectStore.get(keyRange).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result.name, data[
3].name,
"Correct data");
objectStore = db.transaction(osName,
"readwrite").objectStore(osName);
try {
objectStore.
delete();
ok(
false,
"Delete with unspecified arg should have thrown");
}
catch (e) {
ok(
true,
"Delete with unspecified arg should have thrown");
}
try {
objectStore.
delete(undefined);
ok(
false,
"Delete with undefined should have thrown");
}
catch (e) {
ok(
true,
"Delete with undefined arg should have thrown");
}
try {
objectStore.
delete(
null);
ok(
false,
"Delete with null should have thrown");
}
catch (e) {
is(e
instanceof DOMException,
true,
"Got right kind of exception");
is(e.name,
"DataError",
"Correct error.");
is(e.code,
0,
"Correct code.");
}
objectStore.count().onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result, data.length,
"Correct count");
objectStore.
delete(data[
2].ssn).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
ok(event.target.result === undefined,
"Correct result");
objectStore.count().onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result, data.length -
1,
"Correct count");
keyRange = IDBKeyRange.bound(data[
3].ssn, data[
5].ssn);
objectStore.
delete(keyRange).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
ok(event.target.result === undefined,
"Correct result");
objectStore.count().onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result, data.length -
4,
"Correct count");
keyRange = IDBKeyRange.lowerBound(
10);
objectStore.
delete(keyRange).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
ok(event.target.result === undefined,
"Correct result");
objectStore.count().onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result,
0,
"Correct count");
event.target.transaction.oncomplete = grabEventAndContinueHandler;
for (let i of data) {
objectStore.add(i);
}
yield undefined;
objectStore = db.transaction(osName).objectStore(osName);
objectStore.count().onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result, data.length,
"Correct count");
let count =
0;
objectStore.openCursor().onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(count, data.length,
"Correct count for no arg to openCursor");
count =
0;
objectStore.openCursor(
null).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(count, data.length,
"Correct count for null arg to openCursor");
count =
0;
objectStore.openCursor(undefined).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(count, data.length,
"Correct count for undefined arg to openCursor");
count =
0;
objectStore.openCursor(data[
2].ssn).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(count,
1,
"Correct count for single key arg to openCursor");
count =
0;
objectStore.openCursor(
"foo").onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(count,
0,
"Correct count for non-existent single key arg to openCursor");
count =
0;
keyRange = IDBKeyRange.only(data[
2].ssn);
objectStore.openCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(count,
1,
"Correct count for only keyRange arg to openCursor");
count =
0;
keyRange = IDBKeyRange.lowerBound(data[
2].ssn);
objectStore.openCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(count, data.length -
2,
"Correct count for lowerBound arg to openCursor");
count =
0;
keyRange = IDBKeyRange.lowerBound(data[
2].ssn,
true);
objectStore.openCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(count, data.length -
3,
"Correct count for lowerBound arg to openCursor");
count =
0;
keyRange = IDBKeyRange.lowerBound(
"foo");
objectStore.openCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(count,
0,
"Correct count for non-existent lowerBound arg to openCursor");
count =
0;
keyRange = IDBKeyRange.bound(data[
2].ssn, data[
3].ssn);
objectStore.openCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(count,
2,
"Correct count for bound arg to openCursor");
count =
0;
keyRange = IDBKeyRange.bound(data[
2].ssn, data[
3].ssn,
true);
objectStore.openCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(count,
1,
"Correct count for bound arg to openCursor");
count =
0;
keyRange = IDBKeyRange.bound(data[
2].ssn, data[
3].ssn,
true,
true);
objectStore.openCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(count,
0,
"Correct count for bound arg to openCursor");
let index = objectStore.index(indexName);
count =
0;
index.openKeyCursor().onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(
count,
weightSort.length,
"Correct count for unspecified arg to index.openKeyCursor"
);
count =
0;
index.openKeyCursor(
null).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(
count,
weightSort.length,
"Correct count for null arg to index.openKeyCursor"
);
count =
0;
index.openKeyCursor(undefined).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(
count,
weightSort.length,
"Correct count for undefined arg to index.openKeyCursor"
);
count =
0;
index.openKeyCursor(data[
0].weight).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(count,
1,
"Correct count for single key arg to index.openKeyCursor");
count =
0;
index.openKeyCursor(
"foo").onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(count,
0,
"Correct count for non-existent key arg to index.openKeyCursor");
count =
0;
keyRange = IDBKeyRange.only(
"foo");
index.openKeyCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(
count,
0,
"Correct count for non-existent keyRange arg to index.openKeyCursor"
);
count =
0;
keyRange = IDBKeyRange.only(data[
0].weight);
index.openKeyCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(count,
1,
"Correct count for only keyRange arg to index.openKeyCursor");
count =
0;
keyRange = IDBKeyRange.lowerBound(data[weightSort[
0]].weight);
index.openKeyCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(
count,
weightSort.length,
"Correct count for lowerBound keyRange arg to index.openKeyCursor"
);
count =
0;
keyRange = IDBKeyRange.lowerBound(data[weightSort[
0]].weight,
true);
index.openKeyCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(
count,
weightSort.length -
1,
"Correct count for lowerBound keyRange arg to index.openKeyCursor"
);
count =
0;
keyRange = IDBKeyRange.lowerBound(
"foo");
index.openKeyCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(
count,
0,
"Correct count for lowerBound keyRange arg to index.openKeyCursor"
);
count =
0;
keyRange = IDBKeyRange.upperBound(data[weightSort[
0]].weight);
index.openKeyCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(
count,
1,
"Correct count for upperBound keyRange arg to index.openKeyCursor"
);
count =
0;
keyRange = IDBKeyRange.upperBound(data[weightSort[
0]].weight,
true);
index.openKeyCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(
count,
0,
"Correct count for upperBound keyRange arg to index.openKeyCursor"
);
count =
0;
keyRange = IDBKeyRange.upperBound(
data[weightSort[weightSort.length -
1]].weight
);
index.openKeyCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(
count,
weightSort.length,
"Correct count for upperBound keyRange arg to index.openKeyCursor"
);
count =
0;
keyRange = IDBKeyRange.upperBound(
data[weightSort[weightSort.length -
1]].weight,
true
);
index.openKeyCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(
count,
weightSort.length -
1,
"Correct count for upperBound keyRange arg to index.openKeyCursor"
);
count =
0;
keyRange = IDBKeyRange.upperBound(
"foo");
index.openKeyCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(
count,
weightSort.length,
"Correct count for upperBound keyRange arg to index.openKeyCursor"
);
count =
0;
keyRange = IDBKeyRange.upperBound(
0);
index.openKeyCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(
count,
0,
"Correct count for upperBound keyRange arg to index.openKeyCursor"
);
count =
0;
keyRange = IDBKeyRange.bound(
data[weightSort[
0]].weight,
data[weightSort[weightSort.length -
1]].weight
);
index.openKeyCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(
count,
weightSort.length,
"Correct count for bound keyRange arg to index.openKeyCursor"
);
count =
0;
keyRange = IDBKeyRange.bound(
data[weightSort[
0]].weight,
data[weightSort[weightSort.length -
1]].weight,
true
);
index.openKeyCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(
count,
weightSort.length -
1,
"Correct count for bound keyRange arg to index.openKeyCursor"
);
count =
0;
keyRange = IDBKeyRange.bound(
data[weightSort[
0]].weight,
data[weightSort[weightSort.length -
1]].weight,
true,
true
);
index.openKeyCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(
count,
weightSort.length -
2,
"Correct count for bound keyRange arg to index.openKeyCursor"
);
count =
0;
keyRange = IDBKeyRange.bound(
data[weightSort[
0]].weight -
1,
data[weightSort[weightSort.length -
1]].weight +
1
);
index.openKeyCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(
count,
weightSort.length,
"Correct count for bound keyRange arg to index.openKeyCursor"
);
count =
0;
keyRange = IDBKeyRange.bound(
data[weightSort[
0]].weight -
2,
data[weightSort[
0]].weight -
1
);
index.openKeyCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(count,
0,
"Correct count for bound keyRange arg to index.openKeyCursor");
count =
0;
keyRange = IDBKeyRange.bound(
data[weightSort[
1]].weight,
data[weightSort[
2]].weight
);
index.openKeyCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(count,
3,
"Correct count for bound keyRange arg to index.openKeyCursor");
count =
0;
index.openCursor().onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(
count,
weightSort.length,
"Correct count for unspecified arg to index.openCursor"
);
count =
0;
index.openCursor(
null).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(
count,
weightSort.length,
"Correct count for null arg to index.openCursor"
);
count =
0;
index.openCursor(undefined).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(
count,
weightSort.length,
"Correct count for undefined arg to index.openCursor"
);
count =
0;
index.openCursor(data[
0].weight).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(count,
1,
"Correct count for single key arg to index.openCursor");
count =
0;
index.openCursor(
"foo").onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(count,
0,
"Correct count for non-existent key arg to index.openCursor");
count =
0;
keyRange = IDBKeyRange.only(
"foo");
index.openCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(
count,
0,
"Correct count for non-existent keyRange arg to index.openCursor"
);
count =
0;
keyRange = IDBKeyRange.only(data[
0].weight);
index.openCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(count,
1,
"Correct count for only keyRange arg to index.openCursor");
count =
0;
keyRange = IDBKeyRange.lowerBound(data[weightSort[
0]].weight);
index.openCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(
count,
weightSort.length,
"Correct count for lowerBound keyRange arg to index.openCursor"
);
count =
0;
keyRange = IDBKeyRange.lowerBound(data[weightSort[
0]].weight,
true);
index.openCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(
count,
weightSort.length -
1,
"Correct count for lowerBound keyRange arg to index.openCursor"
);
count =
0;
keyRange = IDBKeyRange.lowerBound(
"foo");
index.openCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(count,
0,
"Correct count for lowerBound keyRange arg to index.openCursor");
count =
0;
keyRange = IDBKeyRange.upperBound(data[weightSort[
0]].weight);
index.openCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(count,
1,
"Correct count for upperBound keyRange arg to index.openCursor");
count =
0;
keyRange = IDBKeyRange.upperBound(data[weightSort[
0]].weight,
true);
index.openCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(count,
0,
"Correct count for upperBound keyRange arg to index.openCursor");
count =
0;
keyRange = IDBKeyRange.upperBound(
data[weightSort[weightSort.length -
1]].weight
);
index.openCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(
count,
weightSort.length,
"Correct count for upperBound keyRange arg to index.openCursor"
);
count =
0;
keyRange = IDBKeyRange.upperBound(
data[weightSort[weightSort.length -
1]].weight,
true
);
index.openCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(
count,
weightSort.length -
1,
"Correct count for upperBound keyRange arg to index.openCursor"
);
count =
0;
keyRange = IDBKeyRange.upperBound(
"foo");
index.openCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(
count,
weightSort.length,
"Correct count for upperBound keyRange arg to index.openCursor"
);
count =
0;
keyRange = IDBKeyRange.upperBound(
0);
index.openCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(count,
0,
"Correct count for upperBound keyRange arg to index.openCursor");
count =
0;
keyRange = IDBKeyRange.bound(
data[weightSort[
0]].weight,
data[weightSort[weightSort.length -
1]].weight
);
index.openCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(
count,
weightSort.length,
"Correct count for bound keyRange arg to index.openCursor"
);
count =
0;
keyRange = IDBKeyRange.bound(
data[weightSort[
0]].weight,
data[weightSort[weightSort.length -
1]].weight,
true
);
index.openCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(
count,
weightSort.length -
1,
"Correct count for bound keyRange arg to index.openCursor"
);
count =
0;
keyRange = IDBKeyRange.bound(
data[weightSort[
0]].weight,
data[weightSort[weightSort.length -
1]].weight,
true,
true
);
index.openCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(
count,
weightSort.length -
2,
"Correct count for bound keyRange arg to index.openCursor"
);
count =
0;
keyRange = IDBKeyRange.bound(
data[weightSort[
0]].weight -
1,
data[weightSort[weightSort.length -
1]].weight +
1
);
index.openCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(
count,
weightSort.length,
"Correct count for bound keyRange arg to index.openCursor"
);
count =
0;
keyRange = IDBKeyRange.bound(
data[weightSort[
0]].weight -
2,
data[weightSort[
0]].weight -
1
);
index.openCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(count,
0,
"Correct count for bound keyRange arg to index.openCursor");
count =
0;
keyRange = IDBKeyRange.bound(
data[weightSort[
1]].weight,
data[weightSort[
2]].weight
);
index.openCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(count,
3,
"Correct count for bound keyRange arg to index.openCursor");
try {
index.get();
ok(
false,
"Get with unspecified arg should have thrown");
}
catch (e) {
ok(
true,
"Get with unspecified arg should have thrown");
}
try {
index.get(undefined);
ok(
false,
"Get with undefined should have thrown");
}
catch (e) {
ok(
true,
"Get with undefined arg should have thrown");
}
try {
index.get(
null);
ok(
false,
"Get with null should have thrown");
}
catch (e) {
is(e
instanceof DOMException,
true,
"Got right kind of exception");
is(e.name,
"DataError",
"Correct error.");
is(e.code,
0,
"Correct code.");
}
index.get(data[
0].weight).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result.weight, data[
0].weight,
"Got correct result");
keyRange = IDBKeyRange.only(data[
0].weight);
index.get(keyRange).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result.weight, data[
0].weight,
"Got correct result");
keyRange = IDBKeyRange.lowerBound(data[weightSort[
0]].weight);
index.get(keyRange).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(
event.target.result.weight,
data[weightSort[
0]].weight,
"Got correct result"
);
keyRange = IDBKeyRange.lowerBound(data[weightSort[
0]].weight -
1);
index.get(keyRange).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(
event.target.result.weight,
data[weightSort[
0]].weight,
"Got correct result"
);
keyRange = IDBKeyRange.lowerBound(data[weightSort[
0]].weight +
1);
index.get(keyRange).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(
event.target.result.weight,
data[weightSort[
1]].weight,
"Got correct result"
);
keyRange = IDBKeyRange.lowerBound(data[weightSort[
0]].weight,
true);
index.get(keyRange).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(
event.target.result.weight,
data[weightSort[
1]].weight,
"Got correct result"
);
keyRange = IDBKeyRange.bound(
data[weightSort[
0]].weight,
data[weightSort[
1]].weight
);
index.get(keyRange).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(
event.target.result.weight,
data[weightSort[
0]].weight,
"Got correct result"
);
keyRange = IDBKeyRange.bound(
data[weightSort[
0]].weight,
data[weightSort[
1]].weight,
true
);
index.get(keyRange).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(
event.target.result.weight,
data[weightSort[
1]].weight,
"Got correct result"
);
keyRange = IDBKeyRange.bound(
data[weightSort[
0]].weight,
data[weightSort[
1]].weight,
true,
true
);
index.get(keyRange).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result, undefined,
"Got correct result");
keyRange = IDBKeyRange.upperBound(data[weightSort[
5]].weight);
index.get(keyRange).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(
event.target.result.weight,
data[weightSort[
0]].weight,
"Got correct result"
);
keyRange = IDBKeyRange.upperBound(data[weightSort[
0]].weight,
true);
index.get(keyRange).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result, undefined,
"Got correct result");
try {
index.getKey();
ok(
false,
"Get with unspecified arg should have thrown");
}
catch (e) {
ok(
true,
"Get with unspecified arg should have thrown");
}
try {
index.getKey(undefined);
ok(
false,
"Get with undefined should have thrown");
}
catch (e) {
ok(
true,
"Get with undefined arg should have thrown");
}
try {
index.getKey(
null);
ok(
false,
"Get with null should have thrown");
}
catch (e) {
is(e
instanceof DOMException,
true,
"Got right kind of exception");
is(e.name,
"DataError",
"Correct error.");
is(e.code,
0,
"Correct code.");
}
index.getKey(data[
0].weight).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result, data[
0].ssn,
"Got correct result");
keyRange = IDBKeyRange.only(data[
0].weight);
index.getKey(keyRange).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result, data[
0].ssn,
"Got correct result");
keyRange = IDBKeyRange.lowerBound(data[weightSort[
0]].weight);
index.getKey(keyRange).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result, data[weightSort[
0]].ssn,
"Got correct result");
keyRange = IDBKeyRange.lowerBound(data[weightSort[
0]].weight -
1);
index.getKey(keyRange).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result, data[weightSort[
0]].ssn,
"Got correct result");
keyRange = IDBKeyRange.lowerBound(data[weightSort[
0]].weight +
1);
index.getKey(keyRange).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result, data[weightSort[
1]].ssn,
"Got correct result");
keyRange = IDBKeyRange.lowerBound(data[weightSort[
0]].weight,
true);
index.getKey(keyRange).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result, data[weightSort[
1]].ssn,
"Got correct result");
keyRange = IDBKeyRange.bound(
data[weightSort[
0]].weight,
data[weightSort[
1]].weight
);
index.getKey(keyRange).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result, data[weightSort[
0]].ssn,
"Got correct result");
keyRange = IDBKeyRange.bound(
data[weightSort[
0]].weight,
data[weightSort[
1]].weight,
true
);
index.getKey(keyRange).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result, data[weightSort[
1]].ssn,
"Got correct result");
keyRange = IDBKeyRange.bound(
data[weightSort[
0]].weight,
data[weightSort[
1]].weight,
true,
true
);
index.getKey(keyRange).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result, undefined,
"Got correct result");
keyRange = IDBKeyRange.upperBound(data[weightSort[
5]].weight);
index.getKey(keyRange).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result, data[weightSort[
0]].ssn,
"Got correct result");
keyRange = IDBKeyRange.upperBound(data[weightSort[
0]].weight,
true);
index.getKey(keyRange).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result, undefined,
"Got correct result");
count =
0;
index.openKeyCursor().onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(
count,
weightSort.length,
"Correct count for no arg to index.openKeyCursor"
);
count =
0;
index.openKeyCursor(
null).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(
count,
weightSort.length,
"Correct count for null arg to index.openKeyCursor"
);
count =
0;
index.openKeyCursor(undefined).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(
count,
weightSort.length,
"Correct count for undefined arg to index.openKeyCursor"
);
count =
0;
index.openKeyCursor(data[weightSort[
0]].weight).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(count,
1,
"Correct count for single key arg to index.openKeyCursor");
count =
0;
index.openKeyCursor(
"foo").onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(
count,
0,
"Correct count for non-existent single key arg to index.openKeyCursor"
);
count =
0;
keyRange = IDBKeyRange.only(data[weightSort[
0]].weight);
index.openKeyCursor(keyRange).onsuccess =
function (event) {
let cursor = event.target.result;
if (cursor) {
count++;
cursor.
continue();
}
else {
testGenerator.next();
}
};
yield undefined;
is(count,
1,
"Correct count for only keyRange arg to index.openKeyCursor");
objectStore.mozGetAll(data[
1].ssn).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result
instanceof Array,
true,
"Got an array");
is(event.target.result.length,
1,
"Got correct length");
is(event.target.result[
0].ssn, data[
1].ssn,
"Got correct result");
objectStore.mozGetAll(
null).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result
instanceof Array,
true,
"Got an array");
is(event.target.result.length, data.length,
"Got correct length");
for (let i in event.target.result) {
is(event.target.result[i].ssn, data[i].ssn,
"Got correct value");
}
objectStore.mozGetAll(undefined).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result
instanceof Array,
true,
"Got an array");
is(event.target.result.length, data.length,
"Got correct length");
for (let i in event.target.result) {
is(event.target.result[i].ssn, data[i].ssn,
"Got correct value");
}
objectStore.mozGetAll().onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result
instanceof Array,
true,
"Got an array");
is(event.target.result.length, data.length,
"Got correct length");
for (let i in event.target.result) {
is(event.target.result[i].ssn, data[i].ssn,
"Got correct value");
}
keyRange = IDBKeyRange.lowerBound(
0);
objectStore.mozGetAll(keyRange).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result
instanceof Array,
true,
"Got an array");
is(event.target.result.length, data.length,
"Got correct length");
for (let i in event.target.result) {
is(event.target.result[i].ssn, data[i].ssn,
"Got correct value");
}
index.mozGetAll().onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result
instanceof Array,
true,
"Got an array");
is(event.target.result.length, weightSort.length,
"Got correct length");
for (let i in event.target.result) {
is(
event.target.result[i].ssn,
data[weightSort[i]].ssn,
"Got correct value"
);
}
index.mozGetAll(undefined).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result
instanceof Array,
true,
"Got an array");
is(event.target.result.length, weightSort.length,
"Got correct length");
for (let i in event.target.result) {
is(
event.target.result[i].ssn,
data[weightSort[i]].ssn,
"Got correct value"
);
}
index.mozGetAll(
null).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result
instanceof Array,
true,
"Got an array");
is(event.target.result.length, weightSort.length,
"Got correct length");
for (let i in event.target.result) {
is(
event.target.result[i].ssn,
data[weightSort[i]].ssn,
"Got correct value"
);
}
index.mozGetAll(data[weightSort[
0]].weight).onsuccess =
grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result
instanceof Array,
true,
"Got an array");
is(event.target.result.length,
1,
"Got correct length");
is(event.target.result[
0].ssn, data[weightSort[
0]].ssn,
"Got correct result");
keyRange = IDBKeyRange.lowerBound(
0);
index.mozGetAll(keyRange).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result
instanceof Array,
true,
"Got an array");
is(event.target.result.length, weightSort.length,
"Got correct length");
for (let i in event.target.result) {
is(
event.target.result[i].ssn,
data[weightSort[i]].ssn,
"Got correct value"
);
}
index.mozGetAllKeys().onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result
instanceof Array,
true,
"Got an array");
is(event.target.result.length, weightSort.length,
"Got correct length");
for (let i in event.target.result) {
is(event.target.result[i], data[weightSort[i]].ssn,
"Got correct value");
}
index.mozGetAllKeys(undefined).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result
instanceof Array,
true,
"Got an array");
is(event.target.result.length, weightSort.length,
"Got correct length");
for (let i in event.target.result) {
is(event.target.result[i], data[weightSort[i]].ssn,
"Got correct value");
}
index.mozGetAllKeys(
null).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result
instanceof Array,
true,
"Got an array");
is(event.target.result.length, weightSort.length,
"Got correct length");
for (let i in event.target.result) {
is(event.target.result[i], data[weightSort[i]].ssn,
"Got correct value");
}
index.mozGetAllKeys(data[weightSort[
0]].weight).onsuccess =
grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result
instanceof Array,
true,
"Got an array");
is(event.target.result.length,
1,
"Got correct length");
is(event.target.result[
0], data[weightSort[
0]].ssn,
"Got correct result");
keyRange = IDBKeyRange.lowerBound(
0);
index.mozGetAllKeys(keyRange).onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result
instanceof Array,
true,
"Got an array");
is(event.target.result.length, weightSort.length,
"Got correct length");
for (let i in event.target.result) {
is(event.target.result[i], data[weightSort[i]].ssn,
"Got correct value");
}
finishTest();
}