idbindex-multientry.any.js (2876B)
1 // META: global=window,worker 2 // META: script=resources/support.js 3 // META: title=IDBIndex.multiEntry 4 5 'use strict'; 6 7 async_test(t => { 8 createdb(t).onupgradeneeded = function(e) { 9 let store = e.target.result.createObjectStore('store'); 10 assert_throws_dom('InvalidAccessError', function() { 11 store.createIndex('actors', ['name'], {multiEntry: true}) 12 }); 13 t.done(); 14 }; 15 }, 'Array keyPath with multiEntry'); 16 17 async_test(t => { 18 let db; 19 let open_rq = createdb(t); 20 let obj = {test: 'yo', idxkeys: []}; 21 for (let i = 0; i < 1000; i++) 22 obj.idxkeys.push('index_no_' + i); 23 open_rq.onupgradeneeded = function(e) { 24 db = e.target.result; 25 db.createObjectStore('store').createIndex( 26 'index', 'idxkeys', {multiEntry: true}); 27 }; 28 open_rq.onsuccess = function(e) { 29 let tx = db.transaction('store', 'readwrite'); 30 tx.objectStore('store').put(obj, 1).onsuccess = t.step_func(function(e) { 31 assert_equals(e.target.result, 1, 'put\'d key'); 32 }); 33 tx.oncomplete = t.step_func(function() { 34 let idx = db.transaction('store', 'readonly') 35 .objectStore('store') 36 .index('index'); 37 for (let i = 0; i < 1000; i++) { 38 idx.get('index_no_' + i).onsuccess = t.step_func(function(e) { 39 assert_equals(e.target.result.test, 'yo'); 40 }); 41 } 42 43 idx.get('index_no_999').onsuccess = t.step_func(function(e) { 44 assert_equals(e.target.result.test, 'yo'); 45 assert_equals(e.target.result.idxkeys.length, 1000); 46 t.done(); 47 }); 48 }); 49 }; 50 }, 'A 1000 entry multiEntry array'); 51 52 async_test(t => { 53 let db; 54 let expected_keys = [1, 2, 2, 3, 3]; 55 let open_rq = createdb(t) 56 open_rq.onupgradeneeded = function(e) { 57 db = e.target.result; 58 let store = db.createObjectStore('store') 59 store.createIndex('actors', 'name', {multiEntry: true}) 60 store.add({name: 'Odin'}, 1); 61 store.add({name: ['Rita', 'Scheeta', {Bobby: 'Bobby'}]}, 2); 62 store.add({name: [{s: 'Robert'}, 'Neil', 'Bobby']}, 3); 63 }; 64 open_rq.onsuccess = function(e) { 65 let gotten_keys = []; 66 let idx = db.transaction('store', 'readonly') 67 .objectStore('store') 68 .index('actors'); 69 idx.getKey('Odin').onsuccess = t.step_func(function(e) { 70 gotten_keys.push(e.target.result) 71 }); 72 idx.getKey('Rita').onsuccess = t.step_func(function(e) { 73 gotten_keys.push(e.target.result) 74 }); 75 idx.getKey('Scheeta').onsuccess = t.step_func(function(e) { 76 gotten_keys.push(e.target.result) 77 }); 78 idx.getKey('Neil').onsuccess = t.step_func(function(e) { 79 gotten_keys.push(e.target.result) 80 }); 81 idx.getKey('Bobby').onsuccess = t.step_func(function(e) { 82 gotten_keys.push(e.target.result) 83 assert_array_equals(gotten_keys, expected_keys); 84 t.done(); 85 }); 86 } 87 }, 'Adding keys');