| // META: global=window,worker |
| // META: title=Valid key |
| // META: script=resources/support.js |
| |
| // Spec: https://w3c.github.io/IndexedDB/#key-construct |
| |
| 'use strict'; |
| |
| const valid_key = (desc, key) => { |
| async_test(t => { |
| let db; |
| const open_rq = createdb(t); |
| open_rq.onupgradeneeded = t.step_func(e => { |
| db = e.target.result; |
| const store = db.createObjectStore('store'); |
| assert_true(store.add('value', key) instanceof IDBRequest); |
| |
| const store2 = db.createObjectStore('store2', { |
| keyPath: ['x', 'keypath'], |
| }); |
| assert_true(store2.add({x: 'v', keypath: key}) instanceof IDBRequest); |
| }); |
| |
| open_rq.onsuccess = t.step_func(e => { |
| const rq = |
| db.transaction('store', 'readonly').objectStore('store').get(key); |
| rq.onsuccess = t.step_func(e => { |
| assert_equals(e.target.result, 'value'); |
| const rq2 = |
| db.transaction('store2', 'readonly').objectStore('store2').get([ |
| 'v', key |
| ]); |
| rq2.onsuccess = t.step_func(e => { |
| assert_equals(e.target.result.x, 'v'); |
| assert_key_equals(e.target.result.keypath, key); |
| t.done(); |
| }); |
| }); |
| }); |
| }, 'Valid key - ' + desc); |
| }; |
| |
| // Date |
| valid_key('new Date()', new Date()); |
| valid_key('new Date(0)', new Date(0)); |
| |
| // Array |
| valid_key('[]', []); |
| valid_key('new Array()', new Array()); |
| |
| valid_key('["undefined"]', ['undefined']); |
| |
| // Float |
| valid_key('Infinity', Infinity); |
| valid_key('-Infinity', -Infinity); |
| valid_key('0', 0); |
| valid_key('1.5', 1.5); |
| valid_key('3e38', 3e38); |
| valid_key('3e-38', 3e38); |
| |
| // String |
| valid_key('"foo"', 'foo'); |
| valid_key('"\\n"', '\n'); |
| valid_key('""', ''); |
| valid_key('"\\""', '"'); |
| valid_key('"\\u1234"', '\u1234'); |
| valid_key('"\\u0000"', '\u0000'); |
| valid_key('"NaN"', 'NaN'); |