// META: global=window,worker // META: script=resources/support.js // META: title=IDBIndex.multiEntry 'use strict'; async_test(t => { createdb(t).onupgradeneeded = function(e) { let store = e.target.result.createObjectStore('store'); assert_throws_dom('InvalidAccessError', function() { store.createIndex('actors', ['name'], {multiEntry: true}) }); t.done(); }; }, 'Array keyPath with multiEntry'); async_test(t => { let db; let open_rq = createdb(t); let obj = {test: 'yo', idxkeys: []}; for (let i = 0; i < 1000; i++) obj.idxkeys.push('index_no_' + i); open_rq.onupgradeneeded = function(e) { db = e.target.result; db.createObjectStore('store').createIndex( 'index', 'idxkeys', {multiEntry: true}); }; open_rq.onsuccess = function(e) { let tx = db.transaction('store', 'readwrite'); tx.objectStore('store').put(obj, 1).onsuccess = t.step_func(function(e) { assert_equals(e.target.result, 1, 'put\'d key'); }); tx.oncomplete = t.step_func(function() { let idx = db.transaction('store', 'readonly') .objectStore('store') .index('index'); for (let i = 0; i < 1000; i++) { idx.get('index_no_' + i).onsuccess = t.step_func(function(e) { assert_equals(e.target.result.test, 'yo'); }); } idx.get('index_no_999').onsuccess = t.step_func(function(e) { assert_equals(e.target.result.test, 'yo'); assert_equals(e.target.result.idxkeys.length, 1000); t.done(); }); }); }; }, 'A 1000 entry multiEntry array'); async_test(t => { let db; let expected_keys = [1, 2, 2, 3, 3]; let open_rq = createdb(t) open_rq.onupgradeneeded = function(e) { db = e.target.result; let store = db.createObjectStore('store') store.createIndex('actors', 'name', {multiEntry: true}) store.add({name: 'Odin'}, 1); store.add({name: ['Rita', 'Scheeta', {Bobby: 'Bobby'}]}, 2); store.add({name: [{s: 'Robert'}, 'Neil', 'Bobby']}, 3); }; open_rq.onsuccess = function(e) { let gotten_keys = []; let idx = db.transaction('store', 'readonly') .objectStore('store') .index('actors'); idx.getKey('Odin').onsuccess = t.step_func(function(e) { gotten_keys.push(e.target.result) }); idx.getKey('Rita').onsuccess = t.step_func(function(e) { gotten_keys.push(e.target.result) }); idx.getKey('Scheeta').onsuccess = t.step_func(function(e) { gotten_keys.push(e.target.result) }); idx.getKey('Neil').onsuccess = t.step_func(function(e) { gotten_keys.push(e.target.result) }); idx.getKey('Bobby').onsuccess = t.step_func(function(e) { gotten_keys.push(e.target.result) assert_array_equals(gotten_keys, expected_keys); t.done(); }); } }, 'Adding keys');