Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/**
* Any copyright is dedicated to the Public Domain.
*/
/* exported testSteps */
async function testSteps() {
const dbName = this.window ? window.location.pathname : "test_getAllRecords";
let request = indexedDB.open(dbName, 1);
let event = await expectingUpgrade(request);
let db = event.target.result;
let objectStore = db.createObjectStore("store");
objectStore.createIndex("idx", "x");
objectStore.add({ x: 10 }, "keyA");
objectStore.add({ x: 20 }, "keyB");
event = await expectingSuccess(request);
db = event.target.result;
let tx = db.transaction("store", "readonly");
event = await requestSucceeded(tx.objectStore("store").getAllRecords());
let storeRecords = event.target.result;
event = await requestSucceeded(
tx.objectStore("store").index("idx").getAllRecords()
);
let indexRecords = event.target.result;
is(storeRecords.length, 2, "Got 2 store records");
is(indexRecords.length, 2, "Got 2 index records");
// Object store records: key and primaryKey share the same underlying raw key
// in the C++ implementation (mPrimaryKeyAndKeyEqual = true). Test that both
// attributes return correct values regardless of access order and on repeated
// access.
info("Object store: key first, then primaryKey");
is(storeRecords[0].key, "keyA", "record[0].key correct (first access)");
is(
storeRecords[0].primaryKey,
"keyA",
"record[0].primaryKey correct after key"
);
is(storeRecords[0].key, "keyA", "record[0].key correct (second access)");
is(
storeRecords[0].primaryKey,
"keyA",
"record[0].primaryKey correct (second access)"
);
info("Object store: primaryKey first, then key");
is(
storeRecords[1].primaryKey,
"keyB",
"record[1].primaryKey correct (first access)"
);
is(storeRecords[1].key, "keyB", "record[1].key correct after primaryKey");
is(
storeRecords[1].primaryKey,
"keyB",
"record[1].primaryKey correct (second access)"
);
is(storeRecords[1].key, "keyB", "record[1].key correct (second access)");
info("Object store: value accessible multiple times");
is(storeRecords[0].value.x, 10, "record[0].value correct (first access)");
is(storeRecords[0].value.x, 10, "record[0].value correct (second access)");
// Index records: key (index key) and primaryKey (object store key) use
// distinct underlying raw keys in the C++ implementation
// (mPrimaryKeyAndKeyEqual = false). Test both access orders.
info("Index: key first, then primaryKey");
is(indexRecords[0].key, 10, "index record[0].key correct (first access)");
is(
indexRecords[0].primaryKey,
"keyA",
"index record[0].primaryKey correct after key"
);
is(indexRecords[0].key, 10, "index record[0].key correct (second access)");
is(
indexRecords[0].primaryKey,
"keyA",
"index record[0].primaryKey correct (second access)"
);
info("Index: primaryKey first, then key");
is(
indexRecords[1].primaryKey,
"keyB",
"index record[1].primaryKey correct (first access)"
);
is(indexRecords[1].key, 20, "index record[1].key correct after primaryKey");
is(
indexRecords[1].primaryKey,
"keyB",
"index record[1].primaryKey correct (second access)"
);
is(indexRecords[1].key, 20, "index record[1].key correct (second access)");
db.close();
}