Test structured clone permutations in IndexedDB.

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('storeName')
This index is not used, but evaluating key path on each put() call will exercise (de)serialization:
store.createIndex('indexName', 'dummyKeyPath')

Running tests...

Testing: undefined
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS is(test_data, result) is true

Testing: null
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS is(test_data, result) is true

Testing boolean primitives
Testing: true
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS is(test_data, result) is true
Testing: false
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS is(test_data, result) is true

Testing number primitives
Testing: NaN
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS is(test_data, result) is true
Testing: -Infinity
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS is(test_data, result) is true
Testing: -Number.MAX_VALUE
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS is(test_data, result) is true
Testing: -0xffffffff
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS is(test_data, result) is true
Testing: -0x80000000
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS is(test_data, result) is true
Testing: -0x7fffffff
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS is(test_data, result) is true
Testing: -1
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS is(test_data, result) is true
Testing: -Number.MIN_VALUE
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS is(test_data, result) is true
Testing: -0
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS is(test_data, result) is true
Testing: 0
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS is(test_data, result) is true
Testing: 1
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS is(test_data, result) is true
Testing: Number.MIN_VALUE
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS is(test_data, result) is true
Testing: 0x7fffffff
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS is(test_data, result) is true
Testing: 0x80000000
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS is(test_data, result) is true
Testing: 0xffffffff
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS is(test_data, result) is true
Testing: Number.MAX_VALUE
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS is(test_data, result) is true
Testing: Infinity
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS is(test_data, result) is true

Testing string primitives
Testing: ''
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS is(test_data, result) is true
Testing: 'this is a sample string'
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS is(test_data, result) is true
Testing: 'null(\0)'
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS is(test_data, result) is true

Testing BigInt primitives
Testing: -12345678901234567890n
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS is(test_data, result) is true
Testing: -1n
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS is(test_data, result) is true
Testing: 0n
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS is(test_data, result) is true
Testing: 1n
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS is(test_data, result) is true
Testing: 12345678901234567890n
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS is(test_data, result) is true

Testing Boolean objects
Testing: new Boolean(true)
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS typeof result is "object"
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data !== result is true
PASS result.toString() is test_data.toString()
PASS is(test_data.valueOf(), result.valueOf()) is true
Testing: new Boolean(false)
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS typeof result is "object"
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data !== result is true
PASS result.toString() is test_data.toString()
PASS is(test_data.valueOf(), result.valueOf()) is true

Testing Number objects
Testing: new Number(NaN)
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS typeof result is "object"
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data !== result is true
PASS result.toString() is test_data.toString()
PASS is(test_data.valueOf(), result.valueOf()) is true
Testing: new Number(-Infinity)
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS typeof result is "object"
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data !== result is true
PASS result.toString() is test_data.toString()
PASS is(test_data.valueOf(), result.valueOf()) is true
Testing: new Number(-Number.MAX_VALUE)
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS typeof result is "object"
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data !== result is true
PASS result.toString() is test_data.toString()
PASS is(test_data.valueOf(), result.valueOf()) is true
Testing: new Number(-Number.MIN_VALUE)
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS typeof result is "object"
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data !== result is true
PASS result.toString() is test_data.toString()
PASS is(test_data.valueOf(), result.valueOf()) is true
Testing: new Number(-0)
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS typeof result is "object"
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data !== result is true
PASS result.toString() is test_data.toString()
PASS is(test_data.valueOf(), result.valueOf()) is true
Testing: new Number(0)
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS typeof result is "object"
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data !== result is true
PASS result.toString() is test_data.toString()
PASS is(test_data.valueOf(), result.valueOf()) is true
Testing: new Number(Number.MIN_VALUE)
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS typeof result is "object"
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data !== result is true
PASS result.toString() is test_data.toString()
PASS is(test_data.valueOf(), result.valueOf()) is true
Testing: new Number(Number.MAX_VALUE)
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS typeof result is "object"
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data !== result is true
PASS result.toString() is test_data.toString()
PASS is(test_data.valueOf(), result.valueOf()) is true
Testing: new Number(Infinity)
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS typeof result is "object"
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data !== result is true
PASS result.toString() is test_data.toString()
PASS is(test_data.valueOf(), result.valueOf()) is true

Testing String objects
Testing: new String()
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS typeof result is "object"
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data !== result is true
PASS result.toString() is test_data.toString()
PASS is(test_data.valueOf(), result.valueOf()) is true
Testing: new String('this is a sample string')
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS typeof result is "object"
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data !== result is true
PASS result.toString() is test_data.toString()
PASS is(test_data.valueOf(), result.valueOf()) is true
Testing: new String('null(\0)')
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS typeof result is "object"
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data !== result is true
PASS result.toString() is test_data.toString()
PASS is(test_data.valueOf(), result.valueOf()) is true

Testing BigInt objects
Testing BigInt object: BigInt(-12345678901234567890)
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS typeof result is "bigint"
PASS test_data.toString() is result.toString()
Testing BigInt object: BigInt(-1)
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS typeof result is "bigint"
PASS test_data.toString() is result.toString()
Testing BigInt object: BigInt(0)
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS typeof result is "bigint"
PASS test_data.toString() is result.toString()
Testing BigInt object: BigInt(1)
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS typeof result is "bigint"
PASS test_data.toString() is result.toString()
Testing BigInt object: BigInt(-0)
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS typeof result is "bigint"
PASS test_data.toString() is result.toString()
Testing BigInt object: BigInt('0x1fffffffffffff')
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS typeof result is "bigint"
PASS test_data.toString() is result.toString()

Testing Date objects
Testing: new Date(-1e13)
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS typeof result is "object"
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data !== result is true
PASS result.toString() is test_data.toString()
PASS is(test_data.valueOf(), result.valueOf()) is true
Testing: new Date(-1e12)
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS typeof result is "object"
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data !== result is true
PASS result.toString() is test_data.toString()
PASS is(test_data.valueOf(), result.valueOf()) is true
Testing: new Date(-1e9)
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS typeof result is "object"
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data !== result is true
PASS result.toString() is test_data.toString()
PASS is(test_data.valueOf(), result.valueOf()) is true
Testing: new Date(-1e6)
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS typeof result is "object"
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data !== result is true
PASS result.toString() is test_data.toString()
PASS is(test_data.valueOf(), result.valueOf()) is true
Testing: new Date(-1e3)
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS typeof result is "object"
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data !== result is true
PASS result.toString() is test_data.toString()
PASS is(test_data.valueOf(), result.valueOf()) is true
Testing: new Date(0)
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS typeof result is "object"
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data !== result is true
PASS result.toString() is test_data.toString()
PASS is(test_data.valueOf(), result.valueOf()) is true
Testing: new Date(1e3)
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS typeof result is "object"
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data !== result is true
PASS result.toString() is test_data.toString()
PASS is(test_data.valueOf(), result.valueOf()) is true
Testing: new Date(1e6)
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS typeof result is "object"
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data !== result is true
PASS result.toString() is test_data.toString()
PASS is(test_data.valueOf(), result.valueOf()) is true
Testing: new Date(1e9)
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS typeof result is "object"
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data !== result is true
PASS result.toString() is test_data.toString()
PASS is(test_data.valueOf(), result.valueOf()) is true
Testing: new Date(1e12)
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS typeof result is "object"
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data !== result is true
PASS result.toString() is test_data.toString()
PASS is(test_data.valueOf(), result.valueOf()) is true
Testing: new Date(1e13)
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS typeof result is "object"
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data !== result is true
PASS result.toString() is test_data.toString()
PASS is(test_data.valueOf(), result.valueOf()) is true

Testing RegExp objects
Testing RegExp: new RegExp()
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS test_data !== result is true
PASS Object.prototype.toString.call(result) is "[object RegExp]"
PASS result.toString() is test_data.toString()

Testing RegExp: /abc/
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS test_data !== result is true
PASS Object.prototype.toString.call(result) is "[object RegExp]"
PASS result.toString() is test_data.toString()

Testing RegExp: /abc/g
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS test_data !== result is true
PASS Object.prototype.toString.call(result) is "[object RegExp]"
PASS result.toString() is test_data.toString()

Testing RegExp: /abc/i
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS test_data !== result is true
PASS Object.prototype.toString.call(result) is "[object RegExp]"
PASS result.toString() is test_data.toString()

Testing RegExp: /abc/gi
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS test_data !== result is true
PASS Object.prototype.toString.call(result) is "[object RegExp]"
PASS result.toString() is test_data.toString()

Testing RegExp: /abc/m
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS test_data !== result is true
PASS Object.prototype.toString.call(result) is "[object RegExp]"
PASS result.toString() is test_data.toString()

Testing RegExp: /abc/mg
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS test_data !== result is true
PASS Object.prototype.toString.call(result) is "[object RegExp]"
PASS result.toString() is test_data.toString()

Testing RegExp: /abc/mi
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS test_data !== result is true
PASS Object.prototype.toString.call(result) is "[object RegExp]"
PASS result.toString() is test_data.toString()

Testing RegExp: /abc/mgi
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS test_data !== result is true
PASS Object.prototype.toString.call(result) is "[object RegExp]"
PASS result.toString() is test_data.toString()


Testing ImageData
Testing ImageData: { colorSpace: "srgb" }
canvas = document.createElement('canvas')
canvas.width = 8
canvas.height = 8
test_data = canvas.getContext('2d').getImageData(0, 0, 8, 8, { colorSpace: "srgb" })
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS test_data !== result is true
PASS Object.prototype.toString.call(result) is "[object ImageData]"
PASS result.width is test_data.width
PASS result.height is test_data.height
PASS result.data.length is test_data.data.length
PASS result.colorSpace is test_data.colorSpace
PASS result data matches
Testing ImageData: { colorSpace: undefined }
canvas = document.createElement('canvas')
canvas.width = 8
canvas.height = 8
test_data = canvas.getContext('2d').getImageData(0, 0, 8, 8, { colorSpace: undefined })
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS test_data !== result is true
PASS Object.prototype.toString.call(result) is "[object ImageData]"
PASS result.width is test_data.width
PASS result.height is test_data.height
PASS result.data.length is test_data.data.length
PASS result.colorSpace is test_data.colorSpace
PASS result data matches

Testing Blob
PASS FileReader != null is true
test_content = 'This is a test. This is only a test.'
test_data = new Blob([test_content])
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS test_data !== result is true
PASS Object.prototype.toString.call(result) is "[object Blob]"
PASS result.size is test_data.size
PASS result.type is test_data.type
PASS text is "This is a test. This is only a test."

Testing File
test_content = 'This is a test. This is only a test.'
blob = new Blob([test_content])
test_data = new File([blob], 'fileName')
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS file1 !== file2 is true
PASS Object.prototype.toString.call(file1) is "[object File]"
PASS Object.prototype.toString.call(file2) is "[object File]"
PASS file1.name is file2.name
PASS String(file1.lastModifiedDate) is String(file2.lastModifiedDate)
PASS text2 is "This is a test. This is only a test."

Testing FileList
test_data = document.getElementById('fileInput').files;
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS test_data !== result is true
PASS Object.prototype.toString.call(result) is "[object FileList]"
PASS result.length is test_data.length

Testing Object
test_data = []
test_data[0] = 'foo'
test_data[1] = 'bar'
test_data['a'] = true
test_data['b'] = false
test_data['foo'] = 123
test_data['bar'] = 456
test_data[''] = null
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS test_data !== result is true
PASS arrayCompare(Object.keys(result).sort(), Object.keys(test_data).sort()) is true
PASS test_data["0"] is result["0"]
PASS test_data["1"] is result["1"]
PASS test_data["a"] is result["a"]
PASS test_data["b"] is result["b"]
PASS test_data["foo"] is result["foo"]
PASS test_data["bar"] is result["bar"]
PASS test_data[""] is result[""]

Testing Array
test_data = []
test_data[0] = 'foo'
test_data[1] = 'bar'
test_data[10] = true
test_data[11] = false
test_data[20] = 123
test_data[21] = 456
test_data[30] = null
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS test_data !== result is true
PASS test_data.length === result.length is true
PASS test_data[0] is result[0]
PASS test_data[1] is result[1]
PASS test_data[10] is result[10]
PASS test_data[11] is result[11]
PASS test_data[20] is result[20]
PASS test_data[21] is result[21]
PASS test_data[30] is result[30]

Testing TypedArray
value = new Uint8Array([])
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS test_data !== result is true
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data.length === result.length is true
value = new Uint8Array([0, 1, 254, 255])
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS test_data !== result is true
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data.length === result.length is true
PASS is(test_data[0], result[0]) is true
PASS is(test_data[1], result[1]) is true
PASS is(test_data[2], result[2]) is true
PASS is(test_data[3], result[3]) is true
value = new Uint16Array([0x0000, 0x0001, 0xFFFE, 0xFFFF])
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS test_data !== result is true
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data.length === result.length is true
PASS is(test_data[0], result[0]) is true
PASS is(test_data[1], result[1]) is true
PASS is(test_data[2], result[2]) is true
PASS is(test_data[3], result[3]) is true
value = new Uint32Array([0x00000000, 0x00000001, 0xFFFFFFFE, 0xFFFFFFFF])
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS test_data !== result is true
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data.length === result.length is true
PASS is(test_data[0], result[0]) is true
PASS is(test_data[1], result[1]) is true
PASS is(test_data[2], result[2]) is true
PASS is(test_data[3], result[3]) is true
value = new Int8Array([0, 1, 254, 255])
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS test_data !== result is true
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data.length === result.length is true
PASS is(test_data[0], result[0]) is true
PASS is(test_data[1], result[1]) is true
PASS is(test_data[2], result[2]) is true
PASS is(test_data[3], result[3]) is true
value = new Int16Array([0x0000, 0x0001, 0xFFFE, 0xFFFF])
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS test_data !== result is true
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data.length === result.length is true
PASS is(test_data[0], result[0]) is true
PASS is(test_data[1], result[1]) is true
PASS is(test_data[2], result[2]) is true
PASS is(test_data[3], result[3]) is true
value = new Int32Array([0x00000000, 0x00000001, 0xFFFFFFFE, 0xFFFFFFFF])
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS test_data !== result is true
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data.length === result.length is true
PASS is(test_data[0], result[0]) is true
PASS is(test_data[1], result[1]) is true
PASS is(test_data[2], result[2]) is true
PASS is(test_data[3], result[3]) is true
value = new Uint8ClampedArray([0, 1, 254, 255])
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS test_data !== result is true
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data.length === result.length is true
PASS is(test_data[0], result[0]) is true
PASS is(test_data[1], result[1]) is true
PASS is(test_data[2], result[2]) is true
PASS is(test_data[3], result[3]) is true
value = new Float32Array([-Infinity, -1.5, -1, -0.5, 0, 0.5, 1, 1.5, Infinity, NaN])
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS test_data !== result is true
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data.length === result.length is true
PASS is(test_data[0], result[0]) is true
PASS is(test_data[1], result[1]) is true
PASS is(test_data[2], result[2]) is true
PASS is(test_data[3], result[3]) is true
PASS is(test_data[4], result[4]) is true
PASS is(test_data[5], result[5]) is true
PASS is(test_data[6], result[6]) is true
PASS is(test_data[7], result[7]) is true
PASS is(test_data[8], result[8]) is true
PASS is(test_data[9], result[9]) is true
value = new Float64Array([-Infinity, -Number.MAX_VALUE, -Number.MIN_VALUE, 0, Number.MIN_VALUE, Number.MAX_VALUE, Infinity, NaN])
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS test_data !== result is true
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data.length === result.length is true
PASS is(test_data[0], result[0]) is true
PASS is(test_data[1], result[1]) is true
PASS is(test_data[2], result[2]) is true
PASS is(test_data[3], result[3]) is true
PASS is(test_data[4], result[4]) is true
PASS is(test_data[5], result[5]) is true
PASS is(test_data[6], result[6]) is true
PASS is(test_data[7], result[7]) is true
value = new BigInt64Array([0x7fffffffffffffffn, 1n, 0n, -1n, -0x8000000000000000n])
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS test_data !== result is true
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data.length === result.length is true
PASS is(test_data[0], result[0]) is true
PASS is(test_data[1], result[1]) is true
PASS is(test_data[2], result[2]) is true
PASS is(test_data[3], result[3]) is true
PASS is(test_data[4], result[4]) is true
value = new BigUint64Array([0n, 0xffffffffffffffffn])
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS test_data !== result is true
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data.length === result.length is true
PASS is(test_data[0], result[0]) is true
PASS is(test_data[1], result[1]) is true

Testing Arrays
test_data = []
test_data[0] = []
test_data[1] = [1, 2, 3]
test_data[10] = Object.assign(['foo', 'bar'], {10: true, 11: false, 20: 123, 21: 456, 30: null})
test_data[11] = Object.assign(['foo', 'bar'], {a: true, b: false, foo: 123, bar: 456, '': null})
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS test_data !== result is true
PASS typeof test_data is typeof result
PASS test_data.length === result.length is true
PASS arrayCompare(test_data[0], result[0]) is true
PASS arrayCompare(test_data[1], result[1]) is true
PASS arrayCompare(test_data[10], result[10]) is true
PASS arrayCompare(test_data[11], result[11]) is true

Testing Map
test_data = new Map([[1,2],[3,4]])
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS typeof test_data is typeof result
PASS test_data.size is result.size

Testing Set
test_data = new Set([1,2,3,4])
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS typeof test_data is typeof result
PASS test_data.size is result.size
PASS result.has(1) is true
PASS result.has(2) is true
PASS result.has(3) is true
PASS result.has(4) is true

Testing geometry types
Testing geometry type: new DOMMatrix()
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS test_data !== result is true
PASS typeof result is "object"
PASS Object.prototype.toString.call(test_data) is Object.prototype.toString.call(result)
PASS test_data.toString() is result.toString()
Testing geometry type: new DOMMatrixReadOnly()
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS test_data !== result is true
PASS typeof result is "object"
PASS Object.prototype.toString.call(test_data) is Object.prototype.toString.call(result)
PASS test_data.toString() is result.toString()
Testing geometry type: new DOMPoint()
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS test_data !== result is true
PASS typeof result is "object"
PASS Object.prototype.toString.call(test_data) is Object.prototype.toString.call(result)
PASS test_data.toString() is result.toString()
Testing geometry type: new DOMPointReadOnly()
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS test_data !== result is true
PASS typeof result is "object"
PASS Object.prototype.toString.call(test_data) is Object.prototype.toString.call(result)
PASS test_data.toString() is result.toString()
Testing geometry type: new DOMRect()
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS test_data !== result is true
PASS typeof result is "object"
PASS Object.prototype.toString.call(test_data) is Object.prototype.toString.call(result)
PASS test_data.toString() is result.toString()
Testing geometry type: new DOMRectReadOnly()
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS test_data !== result is true
PASS typeof result is "object"
PASS Object.prototype.toString.call(test_data) is Object.prototype.toString.call(result)
PASS test_data.toString() is result.toString()
Testing geometry type: new DOMQuad()
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS test_data !== result is true
PASS typeof result is "object"
PASS Object.prototype.toString.call(test_data) is Object.prototype.toString.call(result)
PASS test_data.toString() is result.toString()

Testing CryptoKey
promise = crypto.subtle.generateKey({ name: 'HMAC', hash: {name: 'SHA-512'}}, true, ['sign', 'verify']);
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS typeof test_data is typeof result
PASS test_data.type is result.type
PASS test_data.extractable is result.extractable
PASS test_data.algorithm.toString() is result.algorithm.toString()
PASS arrayCompare(test_data.usages, result.usages) is true

Testing DOMException objects
Testing: new DOMException()
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS typeof result is "object"
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data !== result is true
PASS result.toString() is test_data.toString()
Testing: new DOMException("message")
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS typeof result is "object"
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data !== result is true
PASS result.toString() is test_data.toString()
Testing: new DOMException("message", "name")
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS typeof result is "object"
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data !== result is true
PASS result.toString() is test_data.toString()
Testing: new DOMException("", "")
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(value, 'key')
store.get('key')
PASS typeof result is "object"
PASS Object.prototype.toString.call(result) is Object.prototype.toString.call(test_data)
PASS test_data !== result is true
PASS result.toString() is test_data.toString()

Test types that can't be cloned:
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
Testing Error
Expecting exception from store.put(new Error, 'key')
PASS Exception was thrown.
PASS code is DOMException.DATA_CLONE_ERR
Exception message: The object can not be cloned.
Testing Function
Expecting exception from store.put(new Function, 'key')
PASS Exception was thrown.
PASS code is DOMException.DATA_CLONE_ERR
Exception message: The object can not be cloned.
Testing other host object types
Expecting exception from store.put(self, 'key')
PASS Exception was thrown.
PASS code is DOMException.DATA_CLONE_ERR
Exception message: The object can not be cloned.
Expecting exception from store.put(document, 'key')
PASS Exception was thrown.
PASS code is DOMException.DATA_CLONE_ERR
Exception message: The object can not be cloned.
Expecting exception from store.put(document.body, 'key')
PASS Exception was thrown.
PASS code is DOMException.DATA_CLONE_ERR
Exception message: The object can not be cloned.
PASS successfullyParsed is true

TEST COMPLETE

