mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
162 lines
5.1 KiB
HTML
162 lines
5.1 KiB
HTML
|
<!--
|
||
|
Any copyright is dedicated to the Public Domain.
|
||
|
http://creativecommons.org/publicdomain/zero/1.0/
|
||
|
-->
|
||
|
<html>
|
||
|
<head>
|
||
|
<title>Indexed Database Property Test</title>
|
||
|
|
||
|
<script type="text/javascript" src="/MochiKit/packed.js"></script>
|
||
|
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||
|
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
||
|
|
||
|
<script type="text/javascript;version=1.7">
|
||
|
function testSteps()
|
||
|
{
|
||
|
const objectStoreData = [
|
||
|
{ name: "3", keyPath: "id", autoIncrement: true },
|
||
|
{ name: "1", keyPath: "ss", autoIncrement: false },
|
||
|
{ name: "2", keyPath: "", autoIncrement: false },
|
||
|
{ name: "4", keyPath: "", autoIncrement: true },
|
||
|
];
|
||
|
|
||
|
const indexData = [
|
||
|
{ name: "name", keyPath: "name", unique: true },
|
||
|
{ name: "height", keyPath: "height", unique: false }
|
||
|
];
|
||
|
|
||
|
const data = [
|
||
|
{ ss: "237-23-7732", name: "Ann", height: 60 },
|
||
|
{ ss: "237-23-7733", name: "Bob", height: 65 }
|
||
|
];
|
||
|
|
||
|
let request = moz_indexedDB.open(window.location.pathname);
|
||
|
request.onerror = errorHandler;
|
||
|
request.onsuccess = grabEventAndContinueHandler;
|
||
|
let event = yield;
|
||
|
|
||
|
let db = event.result;
|
||
|
db.onerror = errorHandler;
|
||
|
|
||
|
db.setVersion("1").onsuccess = grabEventAndContinueHandler;
|
||
|
event = yield;
|
||
|
|
||
|
event.result.oncomplete = continueToNextStep;
|
||
|
|
||
|
for (let objectStoreIndex in objectStoreData) {
|
||
|
const objectStoreInfo = objectStoreData[objectStoreIndex];
|
||
|
let objectStore = db.createObjectStore(objectStoreInfo.name,
|
||
|
objectStoreInfo.keyPath,
|
||
|
objectStoreInfo.autoIncrement);
|
||
|
for (let indexIndex in indexData) {
|
||
|
const indexInfo = indexData[indexIndex];
|
||
|
let index = objectStore.createIndex(indexInfo.name,
|
||
|
indexInfo.keyPath,
|
||
|
indexInfo.unique);
|
||
|
}
|
||
|
}
|
||
|
yield;
|
||
|
|
||
|
ok(true, "Initial setup");
|
||
|
|
||
|
for (let objectStoreIndex in objectStoreData) {
|
||
|
const info = objectStoreData[objectStoreIndex];
|
||
|
|
||
|
for (let indexIndex in indexData) {
|
||
|
const objectStoreName = objectStoreData[objectStoreIndex].name;
|
||
|
const indexName = indexData[indexIndex].name;
|
||
|
|
||
|
let objectStore =
|
||
|
db.transaction(objectStoreName, IDBTransaction.READ_WRITE)
|
||
|
.objectStore(objectStoreName);
|
||
|
ok(true, "Got objectStore " + objectStoreName);
|
||
|
|
||
|
for (let dataIndex in data) {
|
||
|
const obj = data[dataIndex];
|
||
|
let key;
|
||
|
if (!info.keyPath && !info.autoIncrement) {
|
||
|
key = obj.ss;
|
||
|
}
|
||
|
objectStore.add(obj, key);
|
||
|
}
|
||
|
|
||
|
let index = objectStore.index(indexName);
|
||
|
ok(true, "Got index " + indexName);
|
||
|
|
||
|
let keyIndex = 0;
|
||
|
|
||
|
index.openCursor().onsuccess = function(event) {
|
||
|
let cursor = event.result;
|
||
|
if (!cursor) {
|
||
|
continueToNextStep();
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
is(cursor.key, data[keyIndex][indexName], "Good key");
|
||
|
is(cursor.value.ss, data[keyIndex].ss, "Correct ss");
|
||
|
is(cursor.value.name, data[keyIndex].name, "Correct name");
|
||
|
is(cursor.value.height, data[keyIndex].height, "Correct height");
|
||
|
|
||
|
if (!keyIndex) {
|
||
|
let obj = cursor.value;
|
||
|
obj.updated = true;
|
||
|
|
||
|
cursor.update(obj).onsuccess = function(event) {
|
||
|
ok(true, "Object updated");
|
||
|
cursor.continue();
|
||
|
keyIndex++
|
||
|
}
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
cursor.delete().onsuccess = function(event) {
|
||
|
ok(true, "Object deleted");
|
||
|
cursor.continue();
|
||
|
keyIndex++
|
||
|
}
|
||
|
};
|
||
|
yield;
|
||
|
|
||
|
is(keyIndex, 2, "Saw all the items");
|
||
|
|
||
|
keyIndex = 0;
|
||
|
|
||
|
db.transaction(objectStoreName).objectStore(objectStoreName)
|
||
|
.openCursor()
|
||
|
.onsuccess = function(event) {
|
||
|
let cursor = event.result;
|
||
|
if (!cursor) {
|
||
|
continueToNextStep();
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
is(cursor.value.ss, data[keyIndex].ss, "Correct ss");
|
||
|
is(cursor.value.name, data[keyIndex].name, "Correct name");
|
||
|
is(cursor.value.height, data[keyIndex].height, "Correct height");
|
||
|
is(cursor.value.updated, true, "Correct updated flag");
|
||
|
|
||
|
cursor.continue();
|
||
|
keyIndex++;
|
||
|
};
|
||
|
yield;
|
||
|
|
||
|
is(keyIndex, 1, "Saw all the items");
|
||
|
|
||
|
db.transaction(objectStoreName, IDBTransaction.READ_WRITE)
|
||
|
.objectStore(objectStoreName).clear()
|
||
|
.onsuccess = continueToNextStep();
|
||
|
yield;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
finishTest();
|
||
|
yield;
|
||
|
}
|
||
|
</script>
|
||
|
<script type="text/javascript;version=1.7" src="helpers.js"></script>
|
||
|
</head>
|
||
|
|
||
|
<body onload="runTest();"></body>
|
||
|
|
||
|
</html>
|