key_valid.any.js (1815B)
1 // META: global=window,worker 2 // META: title=Valid key 3 // META: script=resources/support.js 4 5 // Spec: https://w3c.github.io/IndexedDB/#key-construct 6 7 'use strict'; 8 9 const valid_key = (desc, key) => { 10 async_test(t => { 11 let db; 12 const open_rq = createdb(t); 13 open_rq.onupgradeneeded = t.step_func(e => { 14 db = e.target.result; 15 const store = db.createObjectStore('store'); 16 assert_true(store.add('value', key) instanceof IDBRequest); 17 18 const store2 = db.createObjectStore('store2', { 19 keyPath: ['x', 'keypath'], 20 }); 21 assert_true(store2.add({x: 'v', keypath: key}) instanceof IDBRequest); 22 }); 23 24 open_rq.onsuccess = t.step_func(e => { 25 const rq = 26 db.transaction('store', 'readonly').objectStore('store').get(key); 27 rq.onsuccess = t.step_func(e => { 28 assert_equals(e.target.result, 'value'); 29 const rq2 = 30 db.transaction('store2', 'readonly').objectStore('store2').get([ 31 'v', key 32 ]); 33 rq2.onsuccess = t.step_func(e => { 34 assert_equals(e.target.result.x, 'v'); 35 assert_key_equals(e.target.result.keypath, key); 36 t.done(); 37 }); 38 }); 39 }); 40 }, 'Valid key - ' + desc); 41 }; 42 43 // Date 44 valid_key('new Date()', new Date()); 45 valid_key('new Date(0)', new Date(0)); 46 47 // Array 48 valid_key('[]', []); 49 valid_key('new Array()', new Array()); 50 51 valid_key('["undefined"]', ['undefined']); 52 53 // Float 54 valid_key('Infinity', Infinity); 55 valid_key('-Infinity', -Infinity); 56 valid_key('0', 0); 57 valid_key('1.5', 1.5); 58 valid_key('3e38', 3e38); 59 valid_key('3e-38', 3e38); 60 61 // String 62 valid_key('"foo"', 'foo'); 63 valid_key('"\\n"', '\n'); 64 valid_key('""', ''); 65 valid_key('"\\""', '"'); 66 valid_key('"\\u1234"', '\u1234'); 67 valid_key('"\\u0000"', '\u0000'); 68 valid_key('"NaN"', 'NaN');