Test IndexedDB key types 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) db.createObjectStore('store'); trans = db.transaction('store', 'readwrite') store = trans.objectStore('store') long_array = []; for (i = 0; i < 10; ++i) { long_array.push('abc', 123, new Date(0), []); } array that contains non-numeric self-reference self_referrential_array = []; self_referrential_array.self = self_referrential_array; testing array key: [] store.put('value1', []); store.get([]); PASS getreq.result is "value1" store.delete([]); testing array key: [-Infinity] store.put('value2', [-Infinity]); store.get([-Infinity]); PASS getreq.result is "value2" store.delete([-Infinity]); testing array key: [-Number.MAX_VALUE] store.put('value3', [-Number.MAX_VALUE]); store.get([-Number.MAX_VALUE]); PASS getreq.result is "value3" store.delete([-Number.MAX_VALUE]); testing array key: [-1] store.put('value4', [-1]); store.get([-1]); PASS getreq.result is "value4" store.delete([-1]); testing array key: [-Number.MIN_VALUE] store.put('value5', [-Number.MIN_VALUE]); store.get([-Number.MIN_VALUE]); PASS getreq.result is "value5" store.delete([-Number.MIN_VALUE]); testing array key: [0] store.put('value6', [0]); store.get([0]); PASS getreq.result is "value6" store.delete([0]); testing array key: [Number.MIN_VALUE] store.put('value7', [Number.MIN_VALUE]); store.get([Number.MIN_VALUE]); PASS getreq.result is "value7" store.delete([Number.MIN_VALUE]); testing array key: [1] store.put('value8', [1]); store.get([1]); PASS getreq.result is "value8" store.delete([1]); testing array key: [Number.MAX_VALUE] store.put('value9', [Number.MAX_VALUE]); store.get([Number.MAX_VALUE]); PASS getreq.result is "value9" store.delete([Number.MAX_VALUE]); testing array key: [Infinity] store.put('value10', [Infinity]); store.get([Infinity]); PASS getreq.result is "value10" store.delete([Infinity]); testing array key: [1,2,3] store.put('value11', [1,2,3]); store.get([1,2,3]); PASS getreq.result is "value11" store.delete([1,2,3]); testing array key: [new Date(0)] store.put('value12', [new Date(0)]); store.get([new Date(0)]); PASS getreq.result is "value12" store.delete([new Date(0)]); testing array key: [new Date('2525-01-01T00:00:00Z')] store.put('value13', [new Date('2525-01-01T00:00:00Z')]); store.get([new Date('2525-01-01T00:00:00Z')]); PASS getreq.result is "value13" store.delete([new Date('2525-01-01T00:00:00Z')]); testing array key: [new Date(0), new Date('2525-01-01T00:00:00Z')] store.put('value14', [new Date(0), new Date('2525-01-01T00:00:00Z')]); store.get([new Date(0), new Date('2525-01-01T00:00:00Z')]); PASS getreq.result is "value14" store.delete([new Date(0), new Date('2525-01-01T00:00:00Z')]); testing array key: [''] store.put('value15', ['']); store.get(['']); PASS getreq.result is "value15" store.delete(['']); testing array key: [''] store.put('value16', ['']); store.get(['']); PASS getreq.result is "value16" store.delete(['']); testing array key: ['abc123'] store.put('value17', ['abc123']); store.get(['abc123']); PASS getreq.result is "value17" store.delete(['abc123']); testing array key: ['abc', 123] store.put('value18', ['abc', 123]); store.get(['abc', 123]); PASS getreq.result is "value18" store.delete(['abc', 123]); testing array key: [[]] store.put('value19', [[]]); store.get([[]]); PASS getreq.result is "value19" store.delete([[]]); testing array key: [[], []] store.put('value20', [[], []]); store.get([[], []]); PASS getreq.result is "value20" store.delete([[], []]); testing array key: [[], [], []] store.put('value21', [[], [], []]); store.get([[], [], []]); PASS getreq.result is "value21" store.delete([[], [], []]); testing array key: [[[]]] store.put('value22', [[[]]]); store.get([[[]]]); PASS getreq.result is "value22" store.delete([[[]]]); testing array key: [[[[]]]] store.put('value23', [[[[]]]]); store.get([[[[]]]]); PASS getreq.result is "value23" store.delete([[[[]]]]); testing array key: [123, 'abc', new Date(0), []] store.put('value24', [123, 'abc', new Date(0), []]); store.get([123, 'abc', new Date(0), []]); PASS getreq.result is "value24" store.delete([123, 'abc', new Date(0), []]); testing array key: [[123, 'abc', new Date(0), []], [456, 'def', new Date(999), [[]]]] store.put('value25', [[123, 'abc', new Date(0), []], [456, 'def', new Date(999), [[]]]]); store.get([[123, 'abc', new Date(0), []], [456, 'def', new Date(999), [[]]]]); PASS getreq.result is "value25" store.delete([[123, 'abc', new Date(0), []], [456, 'def', new Date(999), [[]]]]); testing array key: long_array store.put('value26', long_array); store.get(long_array); PASS getreq.result is "value26" store.delete(long_array); testing array key: self_referrential_array store.put('value27', self_referrential_array); store.get(self_referrential_array); PASS getreq.result is "value27" store.delete(self_referrential_array); trans = db.transaction('store', 'readwrite') store = trans.objectStore('store') array that contains itself: array = [ array ] cyclic_array = []; cyclic_array.push(cyclic_array) array that contains itself, one level down: array = [ [ array ] ] cyclic_array2 = []; cyclic_array2.push([cyclic_array2]) array that contains itself, not as first element: array = [1, 'b', [], array] cyclic_array3 = [1, 'b', []]; cyclic_array3.push(cyclic_array3) array that contains array that contains itself cyclic_array4 = [cyclic_array]; testing invalid array key: [ void 0 ] Expecting exception from store.put('value', [ void 0 ]); PASS Exception was thrown. PASS code is 0 PASS ename is 'DataError' Exception message: Failed to store record in an IDBObjectStore: The parameter is not a valid key. testing invalid array key: [ true ] Expecting exception from store.put('value', [ true ]); PASS Exception was thrown. PASS code is 0 PASS ename is 'DataError' Exception message: Failed to store record in an IDBObjectStore: The parameter is not a valid key. testing invalid array key: [ false ] Expecting exception from store.put('value', [ false ]); PASS Exception was thrown. PASS code is 0 PASS ename is 'DataError' Exception message: Failed to store record in an IDBObjectStore: The parameter is not a valid key. testing invalid array key: [ NaN ] Expecting exception from store.put('value', [ NaN ]); PASS Exception was thrown. PASS code is 0 PASS ename is 'DataError' Exception message: Failed to store record in an IDBObjectStore: The parameter is not a valid key. testing invalid array key: [ null ] Expecting exception from store.put('value', [ null ]); PASS Exception was thrown. PASS code is 0 PASS ename is 'DataError' Exception message: Failed to store record in an IDBObjectStore: The parameter is not a valid key. testing invalid array key: [ {} ] Expecting exception from store.put('value', [ {} ]); PASS Exception was thrown. PASS code is 0 PASS ename is 'DataError' Exception message: Failed to store record in an IDBObjectStore: The parameter is not a valid key. testing invalid array key: [ function () {} ] Expecting exception from store.put('value', [ function () {} ]); PASS Exception was thrown. PASS code is 0 PASS ename is 'DataError' Exception message: Failed to store record in an IDBObjectStore: The parameter is not a valid key. testing invalid array key: [ /regex/ ] Expecting exception from store.put('value', [ /regex/ ]); PASS Exception was thrown. PASS code is 0 PASS ename is 'DataError' Exception message: Failed to store record in an IDBObjectStore: The parameter is not a valid key. testing invalid array key: [ self ] Expecting exception from store.put('value', [ self ]); PASS Exception was thrown. PASS code is 0 PASS ename is 'DataError' Exception message: Failed to store record in an IDBObjectStore: The parameter is not a valid key. testing invalid array key: [ self.document ] Expecting exception from store.put('value', [ self.document ]); PASS Exception was thrown. PASS code is 0 PASS ename is 'DataError' Exception message: Failed to store record in an IDBObjectStore: The parameter is not a valid key. testing invalid array key: [ self.document.body ] Expecting exception from store.put('value', [ self.document.body ]); PASS Exception was thrown. PASS code is 0 PASS ename is 'DataError' Exception message: Failed to store record in an IDBObjectStore: The parameter is not a valid key. testing invalid array key: cyclic_array Expecting exception from store.put('value', cyclic_array); PASS Exception was thrown. PASS code is 0 PASS ename is 'DataError' Exception message: Failed to store record in an IDBObjectStore: The parameter is not a valid key. testing invalid array key: cyclic_array2 Expecting exception from store.put('value', cyclic_array2); PASS Exception was thrown. PASS code is 0 PASS ename is 'DataError' Exception message: Failed to store record in an IDBObjectStore: The parameter is not a valid key. testing invalid array key: cyclic_array3 Expecting exception from store.put('value', cyclic_array3); PASS Exception was thrown. PASS code is 0 PASS ename is 'DataError' Exception message: Failed to store record in an IDBObjectStore: The parameter is not a valid key. testing invalid array key: cyclic_array4 Expecting exception from store.put('value', cyclic_array4); PASS Exception was thrown. PASS code is 0 PASS ename is 'DataError' Exception message: Failed to store record in an IDBObjectStore: The parameter is not a valid key. testing invalid array key: Array(1000) Expecting exception from store.put('value', Array(1000)); PASS Exception was thrown. PASS code is 0 PASS ename is 'DataError' Exception message: Failed to store record in an IDBObjectStore: The parameter is not a valid key. PASS indexedDB.cmp(makeArrayOfDepth(25), 0) is 1 PASS indexedDB.cmp(makeArrayOfDepth(250), 0) is 1 Expecting exception from indexedDB.cmp(makeArrayOfDepth(2500), 0) PASS Exception was thrown. PASS code is 0 PASS ename is 'DataError' Exception message: Failed to execute 'cmp' on 'IDBFactory': The parameter is not a valid key. PASS successfullyParsed is true TEST COMPLETE