| // 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'); |