Test features of IndexedDB's multiEntry indices. On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB; indexedDB.deleteDatabase(dbname) indexedDB.open(dbname) store = db.createObjectStore('store') store.createIndex('index', 'x', {multiEntry: true}) store2 = db.createObjectStore('store-unique') store2.createIndex('index-unique', 'x', {multiEntry: true, unique: true}) Populating stores (and indexes) transaction = db.transaction(['store'], 'readwrite') First try some keys that aren't what we're expecting transaction.objectStore('store').put({x: [7, 8, 9], y: 'a'}, 'foo') Now overwrite them with what we're expecting transaction.objectStore('store').put({x: [1, 2, 3], y: 'a'}, 'foo') transaction.objectStore('store').put({x: [4, 5, 6], y: 'b'}, 'bar') transaction.objectStore('store').put({x: [7, 7, 8, 7], y: 'c'}, 'baz') transaction.objectStore('store').put({x: [null, 9, 9], y: 'd'}, 'bloop') transaction.objectStore('store').put({x: [1, [2, null]], y:'e'}, 'oh') Verifying index: index transaction = db.transaction(['store'], 'readonly') transaction.objectStore('store').index('index').openCursor() cursor = event.target.result PASS ex is non-null. PASS cursor.key is 1 PASS cursor.primaryKey is "foo" PASS cursor.value.y is "a" cursor.continue() cursor = event.target.result PASS ex is non-null. PASS cursor.key is 1 PASS cursor.primaryKey is "oh" PASS cursor.value.y is "e" cursor.continue() cursor = event.target.result PASS ex is non-null. PASS cursor.key is 2 PASS cursor.primaryKey is "foo" PASS cursor.value.y is "a" cursor.continue() cursor = event.target.result PASS ex is non-null. PASS cursor.key is 3 PASS cursor.primaryKey is "foo" PASS cursor.value.y is "a" cursor.continue() cursor = event.target.result PASS ex is non-null. PASS cursor.key is 4 PASS cursor.primaryKey is "bar" PASS cursor.value.y is "b" cursor.continue() cursor = event.target.result PASS ex is non-null. PASS cursor.key is 5 PASS cursor.primaryKey is "bar" PASS cursor.value.y is "b" cursor.continue() cursor = event.target.result PASS ex is non-null. PASS cursor.key is 6 PASS cursor.primaryKey is "bar" PASS cursor.value.y is "b" cursor.continue() cursor = event.target.result PASS ex is non-null. PASS cursor.key is 7 PASS cursor.primaryKey is "baz" PASS cursor.value.y is "c" cursor.continue() cursor = event.target.result PASS ex is non-null. PASS cursor.key is 8 PASS cursor.primaryKey is "baz" PASS cursor.value.y is "c" cursor.continue() cursor = event.target.result PASS ex is non-null. PASS cursor.key is 9 PASS cursor.primaryKey is "bloop" PASS cursor.value.y is "d" cursor.continue() cursor = event.target.result PASS expected.length is 0 transaction = db.transaction(['store']) transaction.objectStore('store').index('index') index.count() PASS event.target.result is 10 index.count(7) PASS event.target.result is 1 Verifying unique constraint on multiEntry index transaction = db.transaction(['store-unique'], 'readwrite') transaction.objectStore('store-unique').put({x: [1, 2, 3], y: 'a'}, 'foo') success! Replace an existing record - this should work transaction.objectStore('store-unique').put({x: [1, 2, 7], y: 'a'}, 'foo') success! This should fail the uniqueness constraint on the index, and fail: transaction.objectStore('store-unique').put({x: [5, 2], y: 'c'}, 'should fail') Request failed, as expected (ConstraintError) Transaction aborted as expected Create an index on a populated store db.close() indexedDB.open(dbname, 2) db = event.target.result trans = event.target.transaction store = trans.objectStore('store') store.createIndex('index-new', 'x', {multiEntry: true}) Verifying index: index-new transaction = db.transaction(['store'], 'readonly') transaction.objectStore('store').index('index-new').openCursor() cursor = event.target.result PASS ex is non-null. PASS cursor.key is 1 PASS cursor.primaryKey is "foo" PASS cursor.value.y is "a" cursor.continue() cursor = event.target.result PASS ex is non-null. PASS cursor.key is 1 PASS cursor.primaryKey is "oh" PASS cursor.value.y is "e" cursor.continue() cursor = event.target.result PASS ex is non-null. PASS cursor.key is 2 PASS cursor.primaryKey is "foo" PASS cursor.value.y is "a" cursor.continue() cursor = event.target.result PASS ex is non-null. PASS cursor.key is 3 PASS cursor.primaryKey is "foo" PASS cursor.value.y is "a" cursor.continue() cursor = event.target.result PASS ex is non-null. PASS cursor.key is 4 PASS cursor.primaryKey is "bar" PASS cursor.value.y is "b" cursor.continue() cursor = event.target.result PASS ex is non-null. PASS cursor.key is 5 PASS cursor.primaryKey is "bar" PASS cursor.value.y is "b" cursor.continue() cursor = event.target.result PASS ex is non-null. PASS cursor.key is 6 PASS cursor.primaryKey is "bar" PASS cursor.value.y is "b" cursor.continue() cursor = event.target.result PASS ex is non-null. PASS cursor.key is 7 PASS cursor.primaryKey is "baz" PASS cursor.value.y is "c" cursor.continue() cursor = event.target.result PASS ex is non-null. PASS cursor.key is 8 PASS cursor.primaryKey is "baz" PASS cursor.value.y is "c" cursor.continue() cursor = event.target.result PASS ex is non-null. PASS cursor.key is 9 PASS cursor.primaryKey is "bloop" PASS cursor.value.y is "d" cursor.continue() cursor = event.target.result PASS expected.length is 0 transaction = db.transaction(['store']) transaction.objectStore('store').index('index') index.count() PASS event.target.result is 10 index.count(7) PASS event.target.result is 1 PASS successfullyParsed is true TEST COMPLETE