128 lines
3.4 KiB
JavaScript
128 lines
3.4 KiB
JavaScript
// META: global=window,worker
|
|
// META: title=IDBObjectStore.get()
|
|
// META: script=resources/support.js
|
|
|
|
"use strict";
|
|
|
|
function createDbRecordAndValidate(record, t) {
|
|
const openRequest = createdb(t);
|
|
|
|
openRequest.onupgradeneeded = t.step_func(event => {
|
|
const db = event.target.result;
|
|
const store = db.createObjectStore('store', {keyPath: 'key'});
|
|
store.add(record);
|
|
|
|
openRequest.onsuccess = t.step_func(event => {
|
|
const rq = db.transaction('store', 'readonly')
|
|
.objectStore('store')
|
|
.get(record.key);
|
|
|
|
rq.onsuccess = t.step_func(event => {
|
|
const result = event.target.result;
|
|
assert_equals(result.key.valueOf(), result.key.valueOf());
|
|
assert_equals(result.property, record.property);
|
|
t.done();
|
|
});
|
|
});
|
|
});
|
|
}
|
|
|
|
async_test(t => {
|
|
const record = {key: 3.14159265, property: 'data'};
|
|
createDbRecordAndValidate(record, t);
|
|
}, 'Key is a number');
|
|
|
|
async_test(t => {
|
|
const record = {key: 'this is a key that\'s a string', property: 'data'};
|
|
createDbRecordAndValidate(record, t);
|
|
}, 'Key is a string');
|
|
|
|
async_test(t => {
|
|
const record = {key: new Date(), property: 'data'};
|
|
createDbRecordAndValidate(record, t);
|
|
}, 'Key is a date');
|
|
|
|
async_test(t => {
|
|
const open_rq = createdb(t);
|
|
|
|
open_rq.onupgradeneeded = t.step_func(event => {
|
|
const db = event.target.result;
|
|
const rq = db.createObjectStore('store', {keyPath: 'key'}).get(1);
|
|
|
|
rq.onsuccess = t.step_func(event => {
|
|
assert_equals(event.target.result, undefined);
|
|
t.done();
|
|
});
|
|
});
|
|
}, 'Attempts to retrieve a record that doesn\'t exist');
|
|
|
|
async_test(t => {
|
|
let db;
|
|
const open_rq = createdb(t);
|
|
|
|
open_rq.onupgradeneeded = t.step_func(event => {
|
|
db = event.target.result;
|
|
const os = db.createObjectStore('store');
|
|
|
|
for (let i = 0; i < 10; i++) {
|
|
os.add(`data${i}`, i);
|
|
}
|
|
});
|
|
|
|
open_rq.onsuccess = t.step_func(event => {
|
|
const rq = db.transaction('store', 'readonly')
|
|
.objectStore('store')
|
|
.get(IDBKeyRange.bound(3, 6));
|
|
|
|
rq.onsuccess = t.step_func(event => {
|
|
assert_equals(event.target.result, 'data3', 'get(3-6)');
|
|
t.done();
|
|
});
|
|
});
|
|
}, 'Returns the record with the first key in the range');
|
|
|
|
async_test(t => {
|
|
let db;
|
|
const open_rq = createdb(t);
|
|
|
|
open_rq.onupgradeneeded = t.step_func(event => {
|
|
db = event.target.result;
|
|
db.createObjectStore('store', {keyPath: 'key'});
|
|
});
|
|
|
|
open_rq.onsuccess = t.step_func(event => {
|
|
const store = db.transaction('store', 'readonly').objectStore('store');
|
|
|
|
// Abort the transaction immediately.
|
|
store.transaction.abort();
|
|
|
|
// Accessing the store after the transaction aborts must throw
|
|
// TransactionInactiveError.
|
|
assert_throws_dom('TransactionInactiveError', () => {
|
|
store.get(1);
|
|
});
|
|
|
|
t.done();
|
|
});
|
|
}, 'When a transaction is aborted, throw TransactionInactiveError');
|
|
|
|
async_test(t => {
|
|
let db;
|
|
const open_rq = createdb(t);
|
|
|
|
open_rq.onupgradeneeded = t.step_func(event => {
|
|
db = event.target.result;
|
|
db.createObjectStore('store', {keyPath: 'key'});
|
|
});
|
|
|
|
open_rq.onsuccess = t.step_func(event => {
|
|
const store = db.transaction('store', 'readonly').objectStore('store');
|
|
|
|
// Attempt to use an invalid key (null)
|
|
assert_throws_dom('DataError', () => {
|
|
store.get(null);
|
|
});
|
|
|
|
t.done();
|
|
});
|
|
}, 'When an invalid key is used, throw DataError');
|