mirror of
https://github.com/servo/servo.git
synced 2025-10-16 00:10:23 +01:00
106 lines
3.7 KiB
HTML
106 lines
3.7 KiB
HTML
<!DOCTYPE html>
|
|
<meta charset=utf-8>
|
|
<title>IDBObjectStore.createIndex() - AutoIncrement in Compound Index</title>
|
|
<meta name="timeout" content="long">
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<script src="support.js"></script>
|
|
<script>
|
|
indexeddb_test(
|
|
function(t, db, txn) {
|
|
// No auto-increment
|
|
var store = db.createObjectStore("Store1", {keyPath: "id"});
|
|
store.createIndex("CompoundKey", ["num", "id"]);
|
|
|
|
// Add data
|
|
store.put({id: 1, num: 100});
|
|
},
|
|
function(t, db) {
|
|
var store = db.transaction("Store1", "readwrite").objectStore("Store1");
|
|
|
|
store.openCursor().onsuccess = t.step_func(function(e) {
|
|
var item = e.target.result.value;
|
|
store.index("CompoundKey").get([item.num, item.id]).onsuccess = t.step_func(function(e) {
|
|
assert_equals(e.target.result ? e.target.result.num : null, 100, 'Expected 100.');
|
|
t.done();
|
|
});
|
|
});
|
|
},
|
|
"Explicit Primary Key"
|
|
);
|
|
|
|
indexeddb_test(
|
|
function(t, db, txn) {
|
|
// Auto-increment
|
|
var store = db.createObjectStore("Store2", {keyPath: "id", autoIncrement: true});
|
|
store.createIndex("CompoundKey", ["num", "id"]);
|
|
|
|
// Add data
|
|
store.put({num: 100});
|
|
},
|
|
function(t, db) {
|
|
var store = db.transaction("Store2", "readwrite").objectStore("Store2");
|
|
store.openCursor().onsuccess = t.step_func(function(e) {
|
|
var item = e.target.result.value;
|
|
store.index("CompoundKey").get([item.num, item.id]).onsuccess = t.step_func(function(e) {
|
|
assert_equals(e.target.result ? e.target.result.num : null, 100, 'Expected 100.');
|
|
t.done();
|
|
});
|
|
});
|
|
},
|
|
"Auto-Increment Primary Key"
|
|
);
|
|
|
|
indexeddb_test(
|
|
function(t, db, txn) {
|
|
// Auto-increment
|
|
var store = db.createObjectStore("Store3", {keyPath: "id", autoIncrement: true});
|
|
store.createIndex("CompoundKey", ["num", "id", "other"]);
|
|
|
|
var num = 100;
|
|
|
|
// Add data to Store3 - valid keys
|
|
// Objects will be stored in Store3 and keys will get added
|
|
// to the CompoundKeys index.
|
|
store.put({num: num++, other: 0});
|
|
store.put({num: num++, other: [0]});
|
|
|
|
// Add data - missing key
|
|
// Objects will be stored in Store3 but keys won't get added to
|
|
// the CompoundKeys index because the 'other' keypath doesn't
|
|
// resolve to a value.
|
|
store.put({num: num++});
|
|
|
|
// Add data to Store3 - invalid keys
|
|
// Objects will be stored in Store3 but keys won't get added to
|
|
// the CompoundKeys index because the 'other' property values
|
|
// aren't valid keys.
|
|
store.put({num: num++, other: null});
|
|
store.put({num: num++, other: {}});
|
|
store.put({num: num++, other: [null]});
|
|
store.put({num: num++, other: [{}]});
|
|
},
|
|
function(t, db) {
|
|
var store = db.transaction("Store3", "readwrite").objectStore("Store3");
|
|
const keys = [];
|
|
let count;
|
|
store.count().onsuccess = t.step_func(e => { count = e.target.result; });
|
|
store.index("CompoundKey").openCursor().onsuccess = t.step_func(function(e) {
|
|
const cursor = e.target.result;
|
|
if (cursor !== null) {
|
|
keys.push(cursor.key);
|
|
cursor.continue();
|
|
return;
|
|
}
|
|
|
|
// Done iteration, check results.
|
|
assert_equals(count, 7, 'Expected all 7 records to be stored.');
|
|
assert_equals(keys.length, 2, 'Expected exactly two index entries.');
|
|
assert_array_equals(keys[0], [100, 1, 0]);
|
|
assert_object_equals(keys[1], [101, 2, [0]]);
|
|
t.done();
|
|
});
|
|
},
|
|
"Auto-Increment Primary Key - invalid key values elsewhere"
|
|
);
|
|
</script>
|