{
  "results": [
    {
      "test": "/IndexedDB/idbdatabase_createObjectStore6.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBDatabase.createObjectStore() - attempt to create an object store with an invalid key path ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_put13.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.put() - Attempt to put a record where the out of line key provided does not meet the constraints of a valid key ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex-objectStore-SameObject.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBIndex.objectStore [SameObject]",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex-multientry-big.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Adding one item with 1000 multiEntry keys",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Getting the one item by 1000 indeced keys ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbtransaction-oncomplete.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBTransaction - complete event",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_update_objectstore7.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.update() - object store - no argument",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/cursor-overloads.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Validate the overloads of IDBObjectStore.openCursor(), IDBIndex.openCursor() and IDBIndex.openKeyCursor()",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_get3.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.get() - key is a Date ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor-update-exception-order.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.update exception order: TransactionInactiveError vs. ReadOnlyError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "IDBCursor.update exception order: ReadOnlyError vs. InvalidStateError #1",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor.update exception order: ReadOnlyError vs. InvalidStateError #2",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor.update exception order: InvalidStateError vs. DataError",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex_get6.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBIndex.get() - throw InvalidStateError when the index is deleted",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_put5.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.put() - object store's key path is an object attribute ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/nested-cloning-large.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "large typed array",
          "status": "PASS",
          "message": null
        },
        {
          "name": "blob with large typed array",
          "status": "PASS",
          "message": null
        },
        {
          "name": "blob with large typed array with key generator",
          "status": "PASS",
          "message": null
        },
        {
          "name": "array of blobs and large typed arrays",
          "status": "PASS",
          "message": null
        },
        {
          "name": "array of blobs and large typed arrays with key generator",
          "status": "PASS",
          "message": null
        },
        {
          "name": "object with blobs and large typed arrays",
          "status": "PASS",
          "message": null
        },
        {
          "name": "object with blobs and large typed arrays with key generator",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbfactory_open11.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBFactory.open() - second open's transaction is available to get objectStores",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_advance_objectstore2.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.advance() - object store - throw TypeError",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_delete_index5.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.delete() - index - throw InvalidStateError when the cursor is being iterated",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_get2.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.get() - key is a string ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/bigint_value.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IndexedDB: BigInt keys and values",
          "status": "FAIL",
          "message": "SyntaxError: No identifiers allowed directly after numeric literal"
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_add3.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.add() - record with same key already exists ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbfactory_open6.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBFactory.open() - open database with a lower version than current",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_createIndex15-autoincrement.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Explicit Primary Key",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Auto-Increment Primary Key",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/transaction-abort-multiple-metadata-revert.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Deleted indexes in newly created stores are still marked as deleted after the transaction aborts",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Deleted indexes in deleted stores are still marked as not-deleted after the transaction aborts",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Deleted indexes in created+deleted stores are still marked as deleted after their transaction aborts",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbfactory-databases-opaque-origin.html",
      "status": "TIMEOUT",
      "message": null,
      "subtests": [
        {
          "name": "IDBFactory.databases() in non-sandboxed iframe should not reject",
          "status": "TIMEOUT",
          "message": "Test timed out"
        },
        {
          "name": "IDBFactory.databases() in sandboxed iframe should reject",
          "status": "NOTRUN",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_openCursor_invalid.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.openCursor() - invalid - pass something other than number",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore-getAll-enforcerange.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.getAll() uses [EnforceRange]",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/keyorder.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Database readback sort - String < Array",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKey.cmp sorted - String < Array",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Database readback sort - float < String",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKey.cmp sorted - float < String",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Database readback sort - float < Date",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKey.cmp sorted - float < Date",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Database readback sort - float < Date < String < Array",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKey.cmp sorted - float < Date < String < Array",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Database readback sort - Date(1 sec ago) < Date(now) < Date(1 minute in future)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKey.cmp sorted - Date(1 sec ago) < Date(now) < Date(1 minute in future)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Database readback sort - -1.1 < 1 < 1.01337 < 1.013373 < 2",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKey.cmp sorted - -1.1 < 1 < 1.01337 < 1.013373 < 2",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Database readback sort - -Infinity < -0.01 < 0 < Infinity",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKey.cmp sorted - -Infinity < -0.01 < 0 < Infinity",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Database readback sort - \"\" < \"a\" < \"ab\" < \"b\" < \"ba\"",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKey.cmp sorted - \"\" < \"a\" < \"ab\" < \"b\" < \"ba\"",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Database readback sort - Arrays",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKey.cmp sorted - Arrays",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Database readback sort - Array.length: 10,000 < Array.length: 10,001",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKey.cmp sorted - Array.length: 10,000 < Array.length: 10,001",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Database readback sort - Infinity inside arrays",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKey.cmp sorted - Infinity inside arrays",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Database readback sort - Test different stuff at once",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKey.cmp sorted - Test different stuff at once",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbdatabase_transaction3.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBDatabase.transaction() - attempt to open a transaction from closed database connection ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_put11.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.put() - Attempt to put a record where the record's key does not meet the constraints of a valid key ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbdatabase_transaction.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBDatabase.transaction() - attempt to open a transaction with invalid scope",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_put9.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.put() - Attempt to put a record that does not meet the constraints of an object store's inline key requirements ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbfactory_deleteDatabase.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBFactory.deleteDatabase() - request has no source ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_advance_objectstore5.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.advance() - object store - throw InvalidStateError caused by object store been deleted",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/upgrade-transaction-lifecycle-committed.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "in the complete event handler for a committed transaction",
          "status": "PASS",
          "message": null
        },
        {
          "name": "in a setTimeout(0) callback after the complete event is fired for a committed transaction",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbfactory-open-request-error.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Properties of IDBOpenDBRequest during failed IDBFactory open()",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex_get.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBIndex.get() - returns the record ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_iterating_objectstore2.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.continue() - objectstore - add next element, and iterate to it",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/abort-in-initial-upgradeneeded.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Test that an abort in the initial upgradeneeded sets version back to 0",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_advance_index8.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.advance() - index - throw InvalidStateError",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/keygenerator-inject.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Key is injected into value - single segment path",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Key is injected into value - multi-segment path",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Key is injected into value - multi-segment path, partially populated",
          "status": "PASS",
          "message": null
        },
        {
          "name": "put() throws if key cannot be injected - single segment path",
          "status": "PASS",
          "message": null
        },
        {
          "name": "put() throws if key cannot be injected - multi-segment path",
          "status": "FAIL",
          "message": "assert_throws: Key path should be checked against value function \"() => {\n      store.put({a: {b: 123} });\n    }\" did not throw"
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_put14.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.put() - Put a record where a value being indexed does not meet the constraints of a valid key ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor-request-source.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "The source of the request from cursor => cursor.update(0) is the cursor itself",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "The source of the request from cursor => cursor.delete() is the cursor itself",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        }
      ]
    },
    {
      "test": "/IndexedDB/idbdatabase_createObjectStore7.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBDatabase.createObjectStore() - create an object store with an unknown optional parameter ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_createIndex9-emptyname.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.createIndex() - empty name",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/objectstore_keyorder.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Verify key sort order in an object store is 'number < Date < DOMString' ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/transaction-create_in_versionchange.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Attempt to create new transactions inside a versionchange transaction",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore-add-put-exception-order.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.put exception order: InvalidStateError vs. TransactionInactiveError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "IDBObjectStore.put exception order: TransactionInactiveError vs. ReadOnlyError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "IDBObjectStore.put exception order: ReadOnlyError vs. DataError",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore.add exception order: InvalidStateError vs. TransactionInactiveError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "IDBObjectStore.add exception order: TransactionInactiveError vs. ReadOnlyError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "IDBObjectStore.add exception order: ReadOnlyError vs. DataError",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/interleaved-cursors-small.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "1 cursors",
          "status": "PASS",
          "message": null
        },
        {
          "name": "10 cursors",
          "status": "PASS",
          "message": null
        },
        {
          "name": "100 cursors",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_put.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.put() - put with an inline key ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbdatabase-createObjectStore-exception-order.htm",
      "status": "TIMEOUT",
      "message": null,
      "subtests": [
        {
          "name": "IDBDatabase.createObjectStore exception order: InvalidStateError vs. TransactionInactiveError",
          "status": "TIMEOUT",
          "message": "Test timed out"
        },
        {
          "name": "IDBDatabase.createObjectStore exception order: TransactionInactiveError vs. SyntaxError",
          "status": "TIMEOUT",
          "message": "Test timed out"
        },
        {
          "name": "IDBDatabase.createObjectStore exception order: SyntaxError vs. ConstraintError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "IDBDatabase.createObjectStore exception order: ConstraintError vs. InvalidAccessError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        }
      ]
    },
    {
      "test": "/IndexedDB/transaction-abort-request-error.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Properties of error events fired at requests when aborting a transaction",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore-query-exception-order.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.get exception order: InvalidStateError vs. TransactionInactiveError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "IDBObjectStore.get exception order: TransactionInactiveError vs. DataError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "IDBObjectStore.getAll exception order: InvalidStateError vs. TransactionInactiveError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "IDBObjectStore.getAll exception order: TransactionInactiveError vs. DataError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "IDBObjectStore.getAllKeys exception order: InvalidStateError vs. TransactionInactiveError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "IDBObjectStore.getAllKeys exception order: TransactionInactiveError vs. DataError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "IDBObjectStore.count exception order: InvalidStateError vs. TransactionInactiveError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "IDBObjectStore.count exception order: TransactionInactiveError vs. DataError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "IDBObjectStore.openCursor exception order: InvalidStateError vs. TransactionInactiveError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "IDBObjectStore.openCursor exception order: TransactionInactiveError vs. DataError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "IDBObjectStore.openKeyCursor exception order: InvalidStateError vs. TransactionInactiveError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "IDBObjectStore.openKeyCursor exception order: TransactionInactiveError vs. DataError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_advance_index7.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.advance() - index - throw TransactionInactiveError",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_update_objectstore.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.update() - objectstore - modify a record in the object store ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/key-generators/reading-autoincrement-store-cursors.any.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.openCursor() iterates over an autoincrement store",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore.openKeyCursor() iterates over an autoincrement store",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/close-in-upgradeneeded.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "When db.close is called in upgradeneeded, the db is cleaned up on refresh",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/keygenerator-explicit.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Key generator vs. explicit key 53 bits",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Key generator vs. explicit key greater than 53 bits, less than 64 bits",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Key generator vs. explicit key greater than 53 bits, less than 64 bits (negative)",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "Key generator vs. explicit key 63 bits",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Key generator vs. explicit key 63 bits (negative)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Key generator vs. explicit key 64 bits",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Key generator vs. explicit key 64 bits (negative)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Key generator vs. explicit key greater than 64 bits, but still finite",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Key generator vs. explicit key greater than 64 bits, but still finite (negative)",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "Key generator vs. explicit key equal to Infinity",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Key generator vs. explicit key equal to -Infinity",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbtransaction_abort.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBTransaction - abort",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_advance_objectstore.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": " IDBCursor.advance() - object store - iterate cursor number of times specified by count ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/open-request-queue.html",
      "status": "TIMEOUT",
      "message": null,
      "subtests": [
        {
          "name": "Opens and deletes are processed in order",
          "status": "TIMEOUT",
          "message": "Test timed out"
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_advance_index.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.advance() - index - iterate cursor number of times specified by count ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex_getAll.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Single item get",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Empty object store",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Get all keys",
          "status": "PASS",
          "message": null
        },
        {
          "name": "maxCount=10",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Get bound range",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Get bound range with maxCount",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Get upper excluded",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Get lower excluded",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Get bound range (generated) with maxCount",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Non existent key",
          "status": "PASS",
          "message": null
        },
        {
          "name": "maxCount=0",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Retrieve multiEntry key",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Retrieve one key multiple values",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore-rename-store.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IndexedDB object store rename in new transaction",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IndexedDB object store rename in the transaction where it is created",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IndexedDB object store rename covers index",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IndexedDB object store rename covers key generator",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IndexedDB object store rename to the same name succeeds",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IndexedDB object store rename to the name of a deleted store succeeds",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IndexedDB object store swapping via renames succeeds",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IndexedDB object store rename stringifies non-string names",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IndexedDB object store can be renamed to \"\"",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IndexedDB object store can be renamed to \"\\u0000\"",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IndexedDB object store can be renamed to \"\\uDC00\\uD800\"",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex_openKeyCursor4.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBIndex.openKeyCursor() - throw InvalidStateError on index deleted by aborted upgrade",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbdatabase_transaction2.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBDatabase.transaction() - opening a transaction defaults to a read-only mode ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_clear4.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.clear() - If the object store has been deleted, the implementation must throw a DOMException of type InvalidStateError ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbdatabase_createObjectStore4.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBDatabase.createObjectStore() - attempt to create an object store that already exists ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_add2.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.add() - add with an out-of-line key ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex_getKey.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBIndex.getKey() - returns the record's primary key ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/string-list-ordering.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Test string list ordering in IndexedDB",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex_get3.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBIndex.get() - attempt to retrieve a record that doesn't exist ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_update_objectstore6.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.update() - object store - throw DataCloneError",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_delete5.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.delete() - removes all of the records in the range",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbtransaction-objectStore-exception-order.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBTransaction.objectStore exception order: InvalidStateError vs. NotFoundError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        }
      ]
    },
    {
      "test": "/IndexedDB/transaction-requestqueue.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Transactions have a request queue",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_createIndex4-deleteIndex-event_order.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.createIndex() - Event ordering for a later deleted index",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbtransaction-db-SameObject.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBTransaction.db [SameObject]",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/transaction-lifetime-blocked.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Blocked event",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/keygenerator-constrainterror.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Keygenerator ConstraintError when using same id as already generated",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_update_index6.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.update() - index - no argument",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex_get7.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBIndex.get() - throw TransactionInactiveError on aborted transaction",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_put16.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.put() - If the object store has been deleted, the implementation must throw a DOMException of type InvalidStateError",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_put10.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.put() - Attempt to call 'put' without an key parameter when the object store uses out-of-line keys ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore-rename-abort.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IndexedDB object store rename in aborted transaction",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IndexedDB object store creation and rename in an aborted transaction",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex_count3.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBIndex.count() - returns the number of records that have keys with the key",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_put12.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.put() - Attempt to put a record where the record's in-line key is not defined ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_advance_index9.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.advance() - index - throw InvalidStateError caused by object store been deleted",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_delete_index4.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.delete() - index - throw InvalidStateError caused by object store been deleted",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_continue_index3.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.continue() - index - attempt to iterate to the previous record when the direction is set for the next record ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbfactory_open3.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBFactory.open() - no version opens current database",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/keygenerator.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Keygenerator - starts at one, and increments by one",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Keygenerator - increments by one from last set key",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Keygenerator - don't increment when new key is not bigger than current",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbfactory-open-request-success.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Properties of IDBOpenDBRequest during successful IDBFactory open()",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor-advance-continue-async.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor asyncness - advance",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor asyncness - continue",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor asyncness - fresh advance still async",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor asyncness - fresh continue still async",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_update_objectstore5.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.update() - object store - attempt to  modify a record when object store been deleted",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_get.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.get() - key is a number ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex_openKeyCursor2.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBIndex.openKeyCursor() - throw InvalidStateError when the index is deleted",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_add5.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.add() - object store's key path is an object attribute ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_update_objectstore4.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.update() - index - modify a record in the object store ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbdatabase_createObjectStore10-emptyname.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBDatabase.createObjectStore() - empty name",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbtransaction_objectStoreNames.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBTransaction.objectStoreNames - during upgrade transaction",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBTransaction.objectStoreNames - value after close",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBTransaction.objectStoreNames - transaction scope",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBTransaction.objectStoreNames - value after commit",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBTransaction.objectStoreNames - value after abort",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBTransaction.objectStoreNames - sorting",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBTransaction.objectStoreNames - no duplicates",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBTransaction.objectStoreNames - unusual names",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idb-binary-key-detached.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Detached ArrayBuffer",
          "status": "FAIL",
          "message": "assert_throws: function \"() => { store.put('', buffer); }\" did not throw"
        },
        {
          "name": "Detached TypedArray",
          "status": "FAIL",
          "message": "assert_throws: function \"() => { store.put('', array); }\" did not throw"
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_add12.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.add() - Attempt to add a record where the record's in-line key is not defined ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor-primarykey.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.primaryKey - 1",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor.primaryKey - key",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor.primaryKey - my,key",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_update_index8.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.update() - index - throw InvalidStateError when the cursor is being iterated",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/transaction-lifetime-empty.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Transactions without requests complete in the expected order",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Multiple transactions without requests complete in the expected order",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore-index-finished.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore index() behavior when transaction is finished",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbkeyrange-includes.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBKeyRange.includes() with invalid input",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange.includes() with a closed range",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange.includes() with an open range",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange.includes() with a lower-open upper-closed range",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange.includes() with a lower-closed upper-open range",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange.includes() with an only range",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange.includes() with an closed lower-bounded range",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange.includes() with an open lower-bounded range",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange.includes() with an closed upper-bounded range",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange.includes() with an open upper-bounded range",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange.includes() with non-numeric keys",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbdatabase-transaction-exception-order.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBDatabase.transaction exception order: InvalidStateError vs. NotFoundError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "IDBDatabase.transaction exception order: InvalidStateError vs. InvalidAccessError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "IDBDatabase.transaction exception order: NotFoundError vs. TypeError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_iterating_objectstore.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.continue() - objectstore - delete next element, and iterate to it",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/upgrade-transaction-deactivation-timing.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Upgrade transactions are active in upgradeneeded callback",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Upgrade transactions are active in upgradeneeded callback and microtasks",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "Upgrade transactions are deactivated before next task",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbfactory_cmp2.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBFactory.cmp() - no argument",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBFactory.cmp() - null",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBFactory.cmp() - NaN",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_createIndex5-emptykeypath.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.createIndex() - empty keyPath",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_advance_index3.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.advance() - index - attempt to advance backwards",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_createIndex11.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBDatabase.createIndex() - If keyPath is not a valid key path, the implementation must throw a DOMException of type SyntaxError ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbfactory-deleteDatabase-request-success.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Properties of IDBOpenDBRequest during IDBFactory deleteDatabase()",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbfactory_open5.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBFactory.open() - new database is empty",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbkeyrange.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBKeyRange.only() - returns an IDBKeyRange and the properties are set correctly",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange.only() - throws on invalid keys",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange.lowerBound() - returns an IDBKeyRange and the properties are set correctly",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange.lowerBound() - 'open' parameter has correct default set",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange.lowerBound() - throws on invalid keys",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange.upperBound() - returns an IDBKeyRange and the properties are set correctly",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange.upperBound() - 'open' parameter has correct default set",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange.upperBound() - throws on invalid keys",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange.bound() - returns an IDBKeyRange and the properties are set correctly",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange.bound() - 'lowerOpen' and 'upperOpen' parameters have correct defaults set",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_put8.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.put() - object store has autoIncrement:true and the key path is an object attribute ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor-continuePrimaryKey-exception-order.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "TransactionInactiveError v.s. InvalidStateError(deleted index)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "InvalidStateError(deleted source) v.s. InvalidAccessError(incorrect source)",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "InvalidStateError(deleted source) v.s. InvalidAccessError(incorrect direction)",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "InvalidAccessError(incorrect direction) v.s. InvalidStateError(iteration complete)",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "InvalidAccessError(incorrect direction) v.s. InvalidStateError(iteration ongoing)",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "InvalidAccessError(incorrect source) v.s. InvalidStateError(iteration ongoing)",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "InvalidAccessError(incorrect source) v.s. InvalidStateError(iteration complete)",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "InvalidStateError(iteration ongoing) v.s. DataError(unset key)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "InvalidStateError(iteration complete) v.s. DataError(unset key)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "DataError(unset key)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "DataError(unset primary key)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "DataError(keys are lower then current one) in 'next' direction",
          "status": "PASS",
          "message": null
        },
        {
          "name": "DataError(keys are larger then current one) in 'prev' direction",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_createIndex6-event_order.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.createIndex() - event order when unique constraint is triggered",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_delete_objectstore4.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.delete() - object store - throw InvalidStateError caused by object store been deleted",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbfactory_deleteDatabase3.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBFactory.deleteDatabase() - success event",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_update_objectstore3.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.update() - object store - attempt to modify a record in an inactive transaction",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbfactory-deleteDatabase-opaque-origin.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBFactory.deleteDatabase() in non-sandboxed iframe should not throw",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBFactory.deleteDatabase() in sandboxed iframe should throw SecurityError",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex-getAll-enforcerange.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBIndex.getAll() uses [EnforceRange]",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore-deleteIndex-exception-order.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.deleteIndex exception order: InvalidStateError #1 vs. TransactionInactiveError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "IDBObjectStore.deleteIndex exception order: InvalidStateError #2 vs. TransactionInactiveError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "IDBObjectStore.deleteIndex exception order: TransactionInactiveError vs. NotFoundError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        }
      ]
    },
    {
      "test": "/IndexedDB/idbfactory_cmp4.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Compare in unsigned octet values (in the range [0, 255])",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Compare values in then same length",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Compare values in different lengths",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Compare when the values in the range of their minimal length are the same",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/key_invalid.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Invalid key - true",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid key - false",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid key - null",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid key - NaN",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid key - undefined",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid key - undefined2",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid key - function() {}",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid key - {}",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid key - { obj: 1 }",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid key - Math",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid key - window",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid key - {length:0,constructor:Array}",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid key - Array cloneâ€™s instance",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid key - Array (object)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid key - String (object)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid key - new String()",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid key - new Number()",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid key - new Boolean()",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid key - [{}]",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid key - [[], [], [], [[ Date ]]]",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid key - [undefined]",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid key - [,1]",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid key - document.getElementsByTagName(\"script\")",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid key - new Date(NaN)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid key - new Date(Infinity)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid key - /foo/",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid key - new RegExp()",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid key - sparse array",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid key - sparse array 2",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid key - [[1], [3], [7], [[ sparse array ]]]",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid key - [1,2,3,,]",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid key - array directly contains self",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid key - array indirectly contains self",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid key - array member contains self",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex-query-exception-order.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBIndex.get exception order: InvalidStateError vs. TransactionInactiveError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "IDBIndex.get exception order: TransactionInactiveError vs. DataError",
          "status": "FAIL",
          "message": "assert_throws: \"not active\" check (TransactionInactiveError) should precede query check (DataError) function \"() => { index[method]({}); }\" threw object \"DataError: Failed to execute 'get' on 'IDBIndex': The parameter is not a valid key.\" that is not a DOMException TransactionInactiveError: property \"name\" is equal to \"DataError\", expected \"TransactionInactiveError\""
        },
        {
          "name": "IDBIndex.getAll exception order: InvalidStateError vs. TransactionInactiveError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "IDBIndex.getAll exception order: TransactionInactiveError vs. DataError",
          "status": "FAIL",
          "message": "assert_throws: \"not active\" check (TransactionInactiveError) should precede query check (DataError) function \"() => { index[method]({}); }\" threw object \"DataError: Failed to execute 'getAll' on 'IDBIndex': The parameter is not a valid key.\" that is not a DOMException TransactionInactiveError: property \"name\" is equal to \"DataError\", expected \"TransactionInactiveError\""
        },
        {
          "name": "IDBIndex.getAllKeys exception order: InvalidStateError vs. TransactionInactiveError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "IDBIndex.getAllKeys exception order: TransactionInactiveError vs. DataError",
          "status": "FAIL",
          "message": "assert_throws: \"not active\" check (TransactionInactiveError) should precede query check (DataError) function \"() => { index[method]({}); }\" threw object \"DataError: Failed to execute 'getAllKeys' on 'IDBIndex': The parameter is not a valid key.\" that is not a DOMException TransactionInactiveError: property \"name\" is equal to \"DataError\", expected \"TransactionInactiveError\""
        },
        {
          "name": "IDBIndex.count exception order: InvalidStateError vs. TransactionInactiveError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "IDBIndex.count exception order: TransactionInactiveError vs. DataError",
          "status": "FAIL",
          "message": "assert_throws: \"not active\" check (TransactionInactiveError) should precede query check (DataError) function \"() => { index[method]({}); }\" threw object \"DataError: Failed to execute 'count' on 'IDBIndex': The parameter is not a valid key.\" that is not a DOMException TransactionInactiveError: property \"name\" is equal to \"DataError\", expected \"TransactionInactiveError\""
        },
        {
          "name": "IDBIndex.openCursor exception order: InvalidStateError vs. TransactionInactiveError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "IDBIndex.openCursor exception order: TransactionInactiveError vs. DataError",
          "status": "FAIL",
          "message": "assert_throws: \"not active\" check (TransactionInactiveError) should precede query check (DataError) function \"() => { index[method]({}); }\" threw object \"DataError: Failed to execute 'openCursor' on 'IDBIndex': The parameter is not a valid key.\" that is not a DOMException TransactionInactiveError: property \"name\" is equal to \"DataError\", expected \"TransactionInactiveError\""
        },
        {
          "name": "IDBIndex.openKeyCursor exception order: InvalidStateError vs. TransactionInactiveError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "IDBIndex.openKeyCursor exception order: TransactionInactiveError vs. DataError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex-rename.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IndexedDB index rename in new transaction",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IndexedDB index rename in the transaction where it is created",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IndexedDB index rename to the same name succeeds",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IndexedDB index rename to the name of a deleted index succeeds",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IndexedDB index swapping via renames succeeds",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IndexedDB index rename stringifies non-string names",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IndexedDB index can be renamed to \"\"",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IndexedDB index can be renamed to \"\\u0000\"",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IndexedDB index can be renamed to \"\\uDC00\\uD800\"",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/key-generators/reading-autoincrement-store.any.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.getAll() for an autoincrement store",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore.getAllKeys() for an autoincrement store",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore.get() for an autoincrement store",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/index_sort_order.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Verify key sort order in an index is 'number < Date < DOMString' ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/clone-before-keypath-eval.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Key generator and key path validity check operates on a clone",
          "status": "FAIL",
          "message": "assert_equals: put() operation should access primary key property once expected 1 but got 2"
        },
        {
          "name": "Failing key path validity check operates on a clone",
          "status": "FAIL",
          "message": "assert_equals: put() operation should access primary key property once expected 1 but got 2"
        },
        {
          "name": "Index key path evaluations operate on a clone",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Store and index key path evaluations operate on the same clone",
          "status": "FAIL",
          "message": "assert_equals: put() should access primary key property once expected 1 but got 2"
        },
        {
          "name": "Cursor update checks and keypath evaluations operate on a clone",
          "status": "FAIL",
          "message": "Failed to execute 'update' on 'IDBCursor': The effective object store of this cursor uses in-line keys and evaluating the key path of the value parameter results in a different value than the cursor's effective key."
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_update_objectstore2.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.update() - object store - attempt to modify a record in a read-only transaction",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore-clear-exception-order.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.clear exception order: InvalidStateError vs. TransactionInactiveError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "IDBObjectStore.clear exception order: TransactionInactiveError vs. ReadOnlyError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        }
      ]
    },
    {
      "test": "/IndexedDB/idbrequest_result.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBRequest.result throws if ready state is pending",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/key-conversion-exceptions.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBFactory cmp() static with throwing/invalid keys",
          "status": "FAIL",
          "message": "assert_throws: first key conversion with invalid key should throw DataError function \"() => {\n            receiver[method](invalid_key, throwing_key('getter 2'));\n        }\" threw object \"getter 2: throwing from getter\" that is not a DOMException DataError: property \"code\" is equal to undefined, expected 0"
        },
        {
          "name": "IDBCursor continue() method with throwing/invalid keys",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IndexedDB: Exceptions thrown during key conversion",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor update() method with throwing/invalid keys",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange only() static with throwing/invalid keys",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange lowerBound() static with throwing/invalid keys",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange upperBound() static with throwing/invalid keys",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange bound() static with throwing/invalid keys",
          "status": "FAIL",
          "message": "assert_throws: first key conversion with invalid key should throw DataError function \"() => {\n            receiver[method](invalid_key, throwing_key('getter 2'));\n        }\" threw object \"getter 2: throwing from getter\" that is not a DOMException DataError: property \"code\" is equal to undefined, expected 0"
        },
        {
          "name": "IDBObjectStore add() method with throwing/invalid keys",
          "status": "FAIL",
          "message": "assert_throws: key conversion with throwing getter should rethrow function \"() => {\n            out_of_line[method]('value', throwing_key('getter'));\n        }\" threw object \"DataCloneError: Failed to store record in an IDBObjectStore: An object could not be cloned.\" (\"DataCloneError\") expected object \"[object Object]\" (\"getter\")"
        },
        {
          "name": "IDBObjectStore put() method with throwing/invalid keys",
          "status": "FAIL",
          "message": "assert_throws: key conversion with throwing getter should rethrow function \"() => {\n            out_of_line[method]('value', throwing_key('getter'));\n        }\" threw object \"DataCloneError: Failed to store record in an IDBObjectStore: An object could not be cloned.\" (\"DataCloneError\") expected object \"[object Object]\" (\"getter\")"
        },
        {
          "name": "IDBObjectStore delete() method with throwing/invalid keys",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore get() method with throwing/invalid keys",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore getKey() method with throwing/invalid keys",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore getAll() method with throwing/invalid keys",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore getAllKeys() method with throwing/invalid keys",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore count() method with throwing/invalid keys",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore openCursor() method with throwing/invalid keys",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore openKeyCursor() method with throwing/invalid keys",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBIndex get() method with throwing/invalid keys",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBIndex getKey() method with throwing/invalid keys",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBIndex getAll() method with throwing/invalid keys",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBIndex getAllKeys() method with throwing/invalid keys",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBIndex count() method with throwing/invalid keys",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBIndex openCursor() method with throwing/invalid keys",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBIndex openKeyCursor() method with throwing/invalid keys",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_createIndex10.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBDatabase.createIndex() - If an index with the name name already exists in this object store, the implementation must throw a DOMException of type ConstraintError ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor-advance-invalid.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.advance() - invalid - attempt to call advance twice",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor.advance() - invalid - pass something other than number",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor.advance() - invalid - pass null/undefined",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor.advance() - invalid - missing argument",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor.advance() - invalid - pass negative numbers",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor.advance() - invalid - got value not set on exception",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_count2.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.count() - returns the number of records that have keys within the range ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/bindings-inject-key.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Returning keys to script should bypass prototype setters",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Returning values to script should bypass prototype setters",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Returning values to script should bypass prototype chain",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/keypath-exceptions.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "The last element of keypath is validated",
          "status": "FAIL",
          "message": "assert_throws: Put should throw if key can not be inserted at key path location. function \"() => {\n      tx.objectStore('store').put({a: {b: \"foo\"}});\n    }\" did not throw"
        },
        {
          "name": "Key path evaluation: Exceptions from non-enumerable getters",
          "status": "FAIL",
          "message": "assert_throws: Key path failing to resolve should throw function \"() => {\n      s1.put(o);\n    }\" threw object \"getter\" that is not a DOMException DataError: property \"code\" is equal to undefined, expected 0"
        },
        {
          "name": "Key path evaluation: Exceptions from enumerable getters",
          "status": "FAIL",
          "message": "assert_throws: Key path resolving to throwing getter rethrows function \"() => {\n      s1.put(o);\n    }\" threw object \"DataCloneError: Failed to store record in an IDBObjectStore: An object could not be cloned.\" (\"DataCloneError\") expected object \"[object Object]\" (\"getter\")"
        },
        {
          "name": "Key path evaluation: Exceptions from non-enumerable getters on prototype",
          "status": "FAIL",
          "message": "assert_throws: Key path resolving to no own property throws DataError function \"function () {\n        Object.defineProperty(Object.prototype, 'throws', {\n          get: throws('getter'),\n          enumerable: false, configurable: true\n        });\n        try {\n          f();\n        } finally {\n          delete Object.prototype['throws'];\n        }\n      }\" threw object \"getter\" that is not a DOMException DataError: property \"code\" is equal to undefined, expected 0"
        },
        {
          "name": "Key path evaluation: Exceptions from enumerable getters on prototype",
          "status": "FAIL",
          "message": "assert_throws: Key path resolving to no own property throws DataError function \"() => {\n        Object.defineProperty(Object.prototype, 'throws', {\n          get: throws('getter'),\n          enumerable: true, configurable: true\n        });\n        try {\n          f();\n        } finally {\n          delete Object.prototype['throws'];\n        }\n      }\" threw object \"getter\" that is not a DOMException DataError: property \"code\" is equal to undefined, expected 0"
        },
        {
          "name": "Array key conversion should not invoke prototype getters",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_continue_index5.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.continue() - index - iterate using 'prevunique'",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idb-binary-key-roundtrip.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Binary keys can be supplied using the view type Uint8Array",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Binary keys can be supplied using the view type Uint8ClampedArray",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Binary keys can be supplied using the view type Int8Array",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Binary keys can be supplied using the view type Uint16Array",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Binary keys can be supplied using the view type Int16Array",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Binary keys can be supplied using the view type Uint32Array",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Binary keys can be supplied using the view type Int32Array",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Binary keys can be supplied using the view type Float32Array",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Binary keys can be supplied using the view type Float64Array",
          "status": "PASS",
          "message": null
        },
        {
          "name": "ArrayBuffer can be used to supply a binary key",
          "status": "PASS",
          "message": null
        },
        {
          "name": "DataView can be used to supply a binary key",
          "status": "PASS",
          "message": null
        },
        {
          "name": "DataView with explicit offset can be used to supply a binary key",
          "status": "PASS",
          "message": null
        },
        {
          "name": "DataView with explicit offset and length can be used to supply a binary key",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "Uint8Array with explicit offset can be used to supply a binary key",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Uint8Array with explicit offset and length can be used to supply a binary key",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_getKey.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.getKey() - invalid parameters",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore.getKey() - basic - key",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore.getKey() - basic - range",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore.getKey() - basic - key - no match",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore.getKey() - basic - range - no match",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore.getKey() - key path - key",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore.getKey() - key path - range",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore.getKey() - key path - key - no match",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore.getKey() - key path - range - no match",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore.getKey() - key generator - key",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore.getKey() - key generator - range",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore.getKey() - key generator - key - no match",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore.getKey() - key generator - range - no match",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore.getKey() - key generator and key path - key",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore.getKey() - key generator and key path - range",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore.getKey() - key generator and key path - key - no match",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore.getKey() - key generator and key path - range - no match",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idb_binary_key_conversion.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Empty ArrayBuffer",
          "status": "PASS",
          "message": null
        },
        {
          "name": "ArrayBuffer",
          "status": "PASS",
          "message": null
        },
        {
          "name": "DataView",
          "status": "PASS",
          "message": null
        },
        {
          "name": "TypedArray(Int8Array)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Array of TypedArray(Int8Array)",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex_getKey6.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBIndex.getKey() - throw InvalidStateError when the index is deleted",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_advance_objectstore4.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.advance() - object store - throw InvalidStateError",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idlharness.any.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "idl_test setup",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Partial interface mixin WindowOrWorkerGlobalScope: original interface mixin defined",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBRequest interface: existence and properties of interface object",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBRequest interface object length",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBRequest interface object name",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBRequest interface: existence and properties of interface prototype object",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBRequest interface: existence and properties of interface prototype object's \"constructor\" property",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBRequest interface: existence and properties of interface prototype object's @@unscopables property",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBRequest interface: attribute result",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBRequest interface: attribute error",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBRequest interface: attribute source",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBRequest interface: attribute transaction",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBRequest interface: attribute readyState",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBRequest interface: attribute onsuccess",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBRequest interface: attribute onerror",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBOpenDBRequest interface: existence and properties of interface object",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBOpenDBRequest interface object length",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBOpenDBRequest interface object name",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBOpenDBRequest interface: existence and properties of interface prototype object",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBOpenDBRequest interface: existence and properties of interface prototype object's \"constructor\" property",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBOpenDBRequest interface: existence and properties of interface prototype object's @@unscopables property",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBOpenDBRequest interface: attribute onblocked",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBOpenDBRequest interface: attribute onupgradeneeded",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBVersionChangeEvent interface: existence and properties of interface object",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBVersionChangeEvent interface object length",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBVersionChangeEvent interface object name",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBVersionChangeEvent interface: existence and properties of interface prototype object",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBVersionChangeEvent interface: existence and properties of interface prototype object's \"constructor\" property",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBVersionChangeEvent interface: existence and properties of interface prototype object's @@unscopables property",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBVersionChangeEvent interface: attribute oldVersion",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBVersionChangeEvent interface: attribute newVersion",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBVersionChangeEvent must be primary interface of new IDBVersionChangeEvent(\"type\")",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Stringification of new IDBVersionChangeEvent(\"type\")",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBVersionChangeEvent interface: new IDBVersionChangeEvent(\"type\") must inherit property \"oldVersion\" with the proper type",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBVersionChangeEvent interface: new IDBVersionChangeEvent(\"type\") must inherit property \"newVersion\" with the proper type",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBFactory interface: existence and properties of interface object",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBFactory interface object length",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBFactory interface object name",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBFactory interface: existence and properties of interface prototype object",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBFactory interface: existence and properties of interface prototype object's \"constructor\" property",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBFactory interface: existence and properties of interface prototype object's @@unscopables property",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBFactory interface: operation open(DOMString, unsigned long long)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBFactory interface: operation deleteDatabase(DOMString)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBFactory interface: operation databases()",
          "status": "FAIL",
          "message": "assert_own_property: interface prototype object missing non-static operation expected property \"databases\" missing"
        },
        {
          "name": "IDBFactory interface: operation cmp(any, any)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBFactory must be primary interface of [object IDBFactory]",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Stringification of [object IDBFactory]",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBFactory interface: [object IDBFactory] must inherit property \"open(DOMString, unsigned long long)\" with the proper type",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBFactory interface: calling open(DOMString, unsigned long long) on [object IDBFactory] with too few arguments must throw TypeError",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBFactory interface: [object IDBFactory] must inherit property \"deleteDatabase(DOMString)\" with the proper type",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBFactory interface: calling deleteDatabase(DOMString) on [object IDBFactory] with too few arguments must throw TypeError",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBFactory interface: [object IDBFactory] must inherit property \"databases()\" with the proper type",
          "status": "FAIL",
          "message": "assert_inherits: property \"databases\" not found in prototype chain"
        },
        {
          "name": "IDBFactory interface: [object IDBFactory] must inherit property \"cmp(any, any)\" with the proper type",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBFactory interface: calling cmp(any, any) on [object IDBFactory] with too few arguments must throw TypeError",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBDatabase interface: existence and properties of interface object",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBDatabase interface object length",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBDatabase interface object name",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBDatabase interface: existence and properties of interface prototype object",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBDatabase interface: existence and properties of interface prototype object's \"constructor\" property",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBDatabase interface: existence and properties of interface prototype object's @@unscopables property",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBDatabase interface: attribute name",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBDatabase interface: attribute version",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBDatabase interface: attribute objectStoreNames",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBDatabase interface: operation transaction([object Object],[object Object], IDBTransactionMode)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBDatabase interface: operation close()",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBDatabase interface: operation createObjectStore(DOMString, IDBObjectStoreParameters)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBDatabase interface: operation deleteObjectStore(DOMString)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBDatabase interface: attribute onabort",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBDatabase interface: attribute onclose",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBDatabase interface: attribute onerror",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBDatabase interface: attribute onversionchange",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore interface: existence and properties of interface object",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore interface object length",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore interface object name",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore interface: existence and properties of interface prototype object",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore interface: existence and properties of interface prototype object's \"constructor\" property",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore interface: existence and properties of interface prototype object's @@unscopables property",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore interface: attribute name",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore interface: attribute keyPath",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore interface: attribute indexNames",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore interface: attribute transaction",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore interface: attribute autoIncrement",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore interface: operation put(any, any)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore interface: operation add(any, any)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore interface: operation delete(any)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore interface: operation clear()",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore interface: operation get(any)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore interface: operation getKey(any)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore interface: operation getAll(any, unsigned long)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore interface: operation getAllKeys(any, unsigned long)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore interface: operation count(any)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore interface: operation openCursor(any, IDBCursorDirection)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore interface: operation openKeyCursor(any, IDBCursorDirection)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore interface: operation index(DOMString)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore interface: operation createIndex(DOMString, [object Object],[object Object], IDBIndexParameters)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore interface: operation deleteIndex(DOMString)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBIndex interface: existence and properties of interface object",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBIndex interface object length",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBIndex interface object name",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBIndex interface: existence and properties of interface prototype object",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBIndex interface: existence and properties of interface prototype object's \"constructor\" property",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBIndex interface: existence and properties of interface prototype object's @@unscopables property",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBIndex interface: attribute name",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBIndex interface: attribute objectStore",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBIndex interface: attribute keyPath",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBIndex interface: attribute multiEntry",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBIndex interface: attribute unique",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBIndex interface: operation get(any)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBIndex interface: operation getKey(any)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBIndex interface: operation getAll(any, unsigned long)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBIndex interface: operation getAllKeys(any, unsigned long)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBIndex interface: operation count(any)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBIndex interface: operation openCursor(any, IDBCursorDirection)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBIndex interface: operation openKeyCursor(any, IDBCursorDirection)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange interface: existence and properties of interface object",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange interface object length",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange interface object name",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange interface: existence and properties of interface prototype object",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange interface: existence and properties of interface prototype object's \"constructor\" property",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange interface: existence and properties of interface prototype object's @@unscopables property",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange interface: attribute lower",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange interface: attribute upper",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange interface: attribute lowerOpen",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange interface: attribute upperOpen",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange interface: operation only(any)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange interface: operation lowerBound(any, boolean)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange interface: operation upperBound(any, boolean)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange interface: operation bound(any, any, boolean, boolean)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange interface: operation includes(any)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange must be primary interface of [object IDBKeyRange]",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Stringification of [object IDBKeyRange]",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange interface: [object IDBKeyRange] must inherit property \"lower\" with the proper type",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange interface: [object IDBKeyRange] must inherit property \"upper\" with the proper type",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange interface: [object IDBKeyRange] must inherit property \"lowerOpen\" with the proper type",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange interface: [object IDBKeyRange] must inherit property \"upperOpen\" with the proper type",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange interface: [object IDBKeyRange] must inherit property \"only(any)\" with the proper type",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange interface: calling only(any) on [object IDBKeyRange] with too few arguments must throw TypeError",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange interface: [object IDBKeyRange] must inherit property \"lowerBound(any, boolean)\" with the proper type",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange interface: calling lowerBound(any, boolean) on [object IDBKeyRange] with too few arguments must throw TypeError",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange interface: [object IDBKeyRange] must inherit property \"upperBound(any, boolean)\" with the proper type",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange interface: calling upperBound(any, boolean) on [object IDBKeyRange] with too few arguments must throw TypeError",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange interface: [object IDBKeyRange] must inherit property \"bound(any, any, boolean, boolean)\" with the proper type",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange interface: calling bound(any, any, boolean, boolean) on [object IDBKeyRange] with too few arguments must throw TypeError",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange interface: [object IDBKeyRange] must inherit property \"includes(any)\" with the proper type",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange interface: calling includes(any) on [object IDBKeyRange] with too few arguments must throw TypeError",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor interface: existence and properties of interface object",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor interface object length",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor interface object name",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor interface: existence and properties of interface prototype object",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor interface: existence and properties of interface prototype object's \"constructor\" property",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor interface: existence and properties of interface prototype object's @@unscopables property",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor interface: attribute source",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor interface: attribute direction",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor interface: attribute key",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor interface: attribute primaryKey",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor interface: operation advance(unsigned long)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor interface: operation continue(any)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor interface: operation continuePrimaryKey(any, any)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor interface: operation update(any)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor interface: operation delete()",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursorWithValue interface: existence and properties of interface object",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursorWithValue interface object length",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursorWithValue interface object name",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursorWithValue interface: existence and properties of interface prototype object",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursorWithValue interface: existence and properties of interface prototype object's \"constructor\" property",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursorWithValue interface: existence and properties of interface prototype object's @@unscopables property",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursorWithValue interface: attribute value",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBTransaction interface: existence and properties of interface object",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBTransaction interface object length",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBTransaction interface object name",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBTransaction interface: existence and properties of interface prototype object",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBTransaction interface: existence and properties of interface prototype object's \"constructor\" property",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBTransaction interface: existence and properties of interface prototype object's @@unscopables property",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBTransaction interface: attribute objectStoreNames",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBTransaction interface: attribute mode",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBTransaction interface: attribute db",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBTransaction interface: attribute error",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBTransaction interface: operation objectStore(DOMString)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBTransaction interface: operation abort()",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBTransaction interface: attribute onabort",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBTransaction interface: attribute oncomplete",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBTransaction interface: attribute onerror",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Window interface: attribute indexedDB",
          "status": "PASS",
          "message": null
        },
        {
          "name": "WorkerGlobalScope interface: existence and properties of interface object",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_update_objectstore8.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.update() - object store - throw DataError",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_put15.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.put() - If the transaction this IDBObjectStore belongs to has its mode set to readonly, throw ReadOnlyError",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_getAllKeys.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Single item get",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Single item get (generated key)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "getAllKeys on empty object store",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Get all values",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Test maxCount",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Get bound range",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Get bound range with maxCount",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Get upper excluded",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Get lower excluded",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Get bound range (generated) with maxCount",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Non existent key",
          "status": "PASS",
          "message": null
        },
        {
          "name": "zero maxCount",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_index.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.index() - returns an index ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_continue_index8.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.continue() - index - throw InvalidStateError caused by object store been deleted",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbdatabase_close2.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBDatabase.close() - unblock the delete database request",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_delete4.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.delete() - delete removes record (out-of-line keys) ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_put2.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.put() - put with an out-of-line key ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/error-attributes.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBRequest and IDBTransaction error properties should be DOMExceptions",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbfactory_deleteDatabase4.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Delete an existing database",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Delete a nonexistent database",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor-advance.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.advance() - advances",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor.advance() - advances backwards",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor.advance() - skip far forward",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor.advance() - within range",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor.advance() - within single key range",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor.advance() - within single key range, with several results",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_openKeyCursor.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.openKeyCursor() - forward iteration",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore.openKeyCursor() - reverse iteration",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore.openKeyCursor() - forward iteration with range",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore.openKeyCursor() - reverse iteration with range",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStore.openKeyCursor() - invalid inputs",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idb-explicit-commit-throw.any.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Any errors in callbacks that run after an explicit commit will not stop the commit from being processed.",
          "status": "FAIL",
          "message": "promise_test: Unhandled rejection with value: object \"TypeError: txn.commit is not a function. (In 'txn.commit()', 'txn.commit' is undefined)\""
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_delete_objectstore3.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.delete() - index - attempt to remove a record in an inactive transaction",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_delete_index2.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.delete() - index - attempt to remove a record in a read-only transaction",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_advance_index6.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.advance() - index - throw TypeError",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor-direction-index.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor direction - index - next",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor direction - index - prev",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor direction - index - nextunique",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor direction - index - prevunique",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_update_index3.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.update() - index - attempt to modify a record in an inactive transaction",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_get7.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.get() - throw DataError when using invalid key ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_get6.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.get() - throw TransactionInactiveError on aborted transaction ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_count.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.count() - returns the number of records in the object store ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbtransaction-objectStore-finished.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBTransaction objectStore() behavior when transaction is finished",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_update_objectstore9.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.update() - object store - throw InvalidStateError when the cursor is being iterated",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_delete_objectstore.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.delete() - object store - remove a record from the object store ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbdatabase_createObjectStore.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBDatabase.createObjectStore() - returns an instance of IDBObjectStore",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_add8.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.add() - object store has autoIncrement:true and the key path is an object attribute ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_continue_objectstore5.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.continue() - object store - throw TransactionInactiveError",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbdatabase_deleteObjectStore2.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBDatabase.deleteObjectStore() - attempt to remove an object store outside of a version change transaction ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_continue_objectstore.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.continue() - object store - iterate to the next record",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_iterating.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.continue() - objectstore - delete next element, and iterate to it",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_continue_objectstore4.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.continue() - object store - attempt to iterate to the next record when the direction is set for the previous record ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_deleted.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Attempting to use deleted IDBObjectStore",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor-direction.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.direction - undefined",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor.direction - next",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor.direction - prev",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor.direction - nextunique",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor.direction - prevunique",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbfactory_cmp3.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Array v.s. Binary",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Binary v.s. String",
          "status": "PASS",
          "message": null
        },
        {
          "name": "String v.s. Date",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Date v.s. Number",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_advance_index2.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.advance() - attempt to pass a count parameter that is not a number",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbdatabase_createObjectStore8-parameters.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStoreParameters - autoInc true",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStoreParameters - autoInc true, keyPath null",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStoreParameters - autoInc true, keyPath undefined",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStoreParameters - autoInc true, keyPath string",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStoreParameters - autoInc false, keyPath empty",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStoreParameters - autoInc false, keyPath array",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStoreParameters - autoInc false, keyPath string",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStoreParameters - keyPath empty",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStoreParameters - keyPath array",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStoreParameters - keyPath string",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStoreParameters - keyPath null",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBObjectStoreParameters - keyPath undefined",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_delete_objectstore5.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.delete() - object store - throw InvalidStateError when the cursor is being iterated",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/request-event-ordering.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "small values",
          "status": "PASS",
          "message": null
        },
        {
          "name": "large values",
          "status": "PASS",
          "message": null
        },
        {
          "name": "large value followed by small values",
          "status": "PASS",
          "message": null
        },
        {
          "name": "large values mixed with small values",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/globalscope-indexedDB-SameObject.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "indexedDB is [SameObject]",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_put4.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.put() - put where an index has unique:true specified ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor-key.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.key - 1",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor.key - key",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor.key - my,key",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_update_index7.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.update() - index - throw DataError",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/keypath_maxsize.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Keypath - ~260 chars",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Keypath - ~530 chars",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Keypath - ~1050 chars",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_createIndex8-valid_keys.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.createIndex() - index can be valid keys",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbdatabase_transaction5.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBDatabase.transaction() - If storeNames is an empty list, the implementation must throw a DOMException of type InvalidAccessError",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_delete_index3.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.delete() - index - attempt to remove a record in an inactive transaction",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor-continue-exception-order.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.continue exception order: TransactionInactiveError vs. DataError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "IDBCursor.continue exception order: TransactionInactiveError vs. InvalidStateError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "IDBCursor.continue exception order: InvalidStateError vs. DataError",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore-request-source.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "The source of the request from store => store.put(0) is the object store itself",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "The source of the request from store => store.add(0) is the object store itself",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "The source of the request from store => store.delete(0) is the object store itself",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "The source of the request from store => store.clear() is the object store itself",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "The source of the request from store => store.get(0) is the object store itself",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "The source of the request from store => store.getKey(0) is the object store itself",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "The source of the request from store => store.getAll() is the object store itself",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "The source of the request from store => store.getAllKeys() is the object store itself",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "The source of the request from store => store.count() is the object store itself",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "The source of the request from store => store.openCursor() is the object store itself",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "The source of the request from store => store.openKeyCursor() is the object store itself",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        }
      ]
    },
    {
      "test": "/IndexedDB/idbdatabase_deleteObjectStore.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBDatabase.deleteObjectStore() - object store's name is removed from database's list ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex-multientry.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBIndex.multiEntry - adding keys",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbdatabase_createObjectStore11.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBDatabase.createObjectStore() - attempting to create an existing object store with a different keyPath throw ConstraintError ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_add6.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.add() - autoIncrement and inline keys ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/name-scopes.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Non-unique index keys",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Unique index keys",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbfactory_open7.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBFactory.open() - open database with a higher version than current",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_delete_objectstore2.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.delete() - object store - attempt to remove a record in a read-only transaction",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex_getKey7.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBIndex.getKey() - throw TransactionInactiveError on aborted transaction",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idb-explicit-commit.any.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Explicitly committed data can be read back out.",
          "status": "FAIL",
          "message": "promise_test: Unhandled rejection with value: object \"TypeError: txn.commit is not a function. (In 'txn.commit()', 'txn.commit' is undefined)\""
        },
        {
          "name": "commit() on a version change transaction does not cause errors.",
          "status": "FAIL",
          "message": "promise_test: Unhandled rejection with value: object \"TypeError: txn.commit is not a function. (In 'txn.commit()', 'txn.commit' is undefined)\""
        },
        {
          "name": "A committed transaction becomes inactive immediately.",
          "status": "FAIL",
          "message": "promise_test: Unhandled rejection with value: object \"TypeError: txn.commit is not a function. (In 'txn.commit()', 'txn.commit' is undefined)\""
        },
        {
          "name": "A committed transaction is inactive in future request callbacks.",
          "status": "FAIL",
          "message": "promise_test: Unhandled rejection with value: object \"TypeError: txn.commit is not a function. (In 'txn.commit()', 'txn.commit' is undefined)\""
        },
        {
          "name": "Puts issued after commit are not fulfilled.",
          "status": "FAIL",
          "message": "promise_test: Unhandled rejection with value: object \"TypeError: txn.commit is not a function. (In 'txn.commit()', 'txn.commit' is undefined)\""
        },
        {
          "name": "Calling commit on an aborted transaction throws.",
          "status": "FAIL",
          "message": "assert_throws: The transaction should have been aborted. function \"() => { txn.commit(); }\" threw object \"TypeError: txn.commit is not a function. (In 'txn.commit()', 'txn.commit' is undefined)\" that is not a DOMException InvalidStateError: property \"code\" is equal to undefined, expected 11"
        },
        {
          "name": "Calling commit on a committed transaction throws.",
          "status": "FAIL",
          "message": "promise_test: Unhandled rejection with value: object \"TypeError: txn.commit is not a function. (In 'txn.commit()', 'txn.commit' is undefined)\""
        },
        {
          "name": "Calling abort on a committed transaction throws and does not prevent persisting the data.",
          "status": "FAIL",
          "message": "promise_test: Unhandled rejection with value: object \"TypeError: txn.commit is not a function. (In 'txn.commit()', 'txn.commit' is undefined)\""
        },
        {
          "name": "Calling txn.commit() when txn is inactive should throw.",
          "status": "FAIL",
          "message": "assert_throws: The transaction should be inactive so calling commit should throw. function \"() => { txn.commit(); }\" threw object \"TypeError: txn.commit is not a function. (In 'txn.commit()', 'txn.commit' is undefined)\" that is not a DOMException InvalidStateError: property \"code\" is equal to undefined, expected 11"
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_createIndex2.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.createIndex() - attempt to create an index that requires unique values on an object store already contains duplicates ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_put3.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.put() - record with same key already exists ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex_openCursor.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBIndex.openCursor() - throw InvalidStateError when the index is deleted",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbdatabase_close.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBDatabase.close() - unblock the version change transaction created by an open database request",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/nested-cloning-large-multiple.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "multiple requests of objects with blobs and large typed arrays",
          "status": "PASS",
          "message": null
        },
        {
          "name": "multiple requests of objects with blobs and large typed arrays with key generator",
          "status": "FAIL",
          "message": "promise_test: Unhandled rejection with value: object \"[object FileError]\""
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex_indexNames.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBIndex.getKey() - returns the record's primary key",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_iterating_index2.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.continue() - index - add next element, and iterate to it",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_continue_invalid.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.continue() - attempt to call continue two times",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex_get8.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBIndex.get() - throw InvalidStateError on index deleted by aborted upgrade",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_createIndex12.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBDatabase.createIndex() - If the object store has been deleted, the implementation must throw a DOMException of type InvalidStateError ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_add11.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.add() - Attempt to add a record where the record's key does not meet the constraints of a valid key ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore-rename-errors.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IndexedDB deleted object store rename throws",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IndexedDB object store rename throws in a readonly transaction",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IndexedDB object store rename throws in a readwrite transaction",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IndexedDB object store rename throws in an inactive transaction",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IndexedDB object store rename to the name of another store throws",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IndexedDB object store rename handles exceptions when stringifying names",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/parallel-cursors-upgrade.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "2 cursors",
          "status": "PASS",
          "message": null
        },
        {
          "name": "10 cursors",
          "status": "PASS",
          "message": null
        },
        {
          "name": "100 cursors",
          "status": "PASS",
          "message": null
        },
        {
          "name": "1000 cursors",
          "status": "PASS",
          "message": null
        },
        {
          "name": "10000 cursors",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_clear3.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.clear() - If the transaction this IDBObjectStore belongs to has its mode set to readonly, throw ReadOnlyError ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbfactory_open9.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Calling open() with version argument -1 should throw TypeError.",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Calling open() with version argument -0.5 should throw TypeError.",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Calling open() with version argument 0 should throw TypeError.",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Calling open() with version argument 0.5 should throw TypeError.",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Calling open() with version argument 0.8 should throw TypeError.",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Calling open() with version argument 9007199254740992 should throw TypeError.",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Calling open() with version argument NaN should throw TypeError.",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Calling open() with version argument Infinity should throw TypeError.",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Calling open() with version argument -Infinity should throw TypeError.",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Calling open() with version argument \"foo\" should throw TypeError.",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Calling open() with version argument null should throw TypeError.",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Calling open() with version argument false should throw TypeError.",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Calling open() with version argument object should throw TypeError.",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Calling open() with version argument object (second) should throw TypeError.",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Calling open() with version argument object (third) should throw TypeError.",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Calling open() with version argument 1.5 should not throw.",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Calling open() with version argument 9007199254740991 should not throw.",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Calling open() with version argument undefined should not throw.",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_add.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.add() - add with an inline key ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/interleaved-cursors-large.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "250 cursors",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex_count4.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBIndex.count() - throw DataError when using invalid key",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_add4.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.add() - add where an index has unique:true specified ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex_getKey2.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBIndex.getKey() - returns the record's primary key where the index contains duplicate values ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/event-dispatch-active-flag.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Transactions are active during success handlers",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Transactions are active during success listeners",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Transactions are active during error handlers",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Transactions are active during error listeners",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_createIndex7-event_order.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.createIndex() - Event ordering for ConstraintError on request",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_update_index5.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.update() - index - throw DataCloneError",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor-iterating-update.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Calling cursor => cursor.update({}) doesn't affect index iteration",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Calling cursor => cursor.delete() doesn't affect index iteration",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_createIndex14-exception_order.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "InvalidStateError(Incorrect mode) vs. TransactionInactiveError",
          "status": "PASS",
          "message": null
        },
        {
          "name": "InvalidStateError(Deleted ObjectStore) vs. TransactionInactiveError",
          "status": "PASS",
          "message": null
        },
        {
          "name": "TransactionInactiveError vs. ConstraintError",
          "status": "PASS",
          "message": null
        },
        {
          "name": "ConstraintError vs. SyntaxError",
          "status": "PASS",
          "message": null
        },
        {
          "name": "SyntaxError vs. InvalidAccessError",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor-delete-exception-order.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.delete exception order: TransactionInactiveError vs. ReadOnlyError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "IDBCursor.delete exception order: ReadOnlyError vs. InvalidStateError #1",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor.delete exception order: ReadOnlyError vs. InvalidStateError #2",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_add9.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.add() - Attempt to add a record that does not meet the constraints of an object store's inline key requirements ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_add10.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.add() - Attempt to call 'add' without an key parameter when the object store uses out-of-line keys ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_continue_index.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.continue() - index - iterate to the next record",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/request-abort-ordering.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IndexedDB: request abort events are delivered in order",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_add7.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.add() - autoIncrement and out-of-line keys ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_add14.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.add() - Add a record where a value being indexed does not meet the constraints of a valid key ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_add13.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.add() - Attempt to add a record where the out of line key provided does not meet the constraints of a valid key ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_continue_index7.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.continue() - index - throw TransactionInactiveError",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/get-databases.any.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Ensure that databases() returns a promise.",
          "status": "FAIL",
          "message": "promise_test: Unhandled rejection with value: object \"TypeError: indexedDB.databases is not a function. (In 'indexedDB.databases()', 'indexedDB.databases' is undefined)\""
        },
        {
          "name": "Enumerate one database.",
          "status": "FAIL",
          "message": "promise_test: Unhandled rejection with value: object \"TypeError: indexedDB.databases is not a function. (In 'indexedDB.databases()', 'indexedDB.databases' is undefined)\""
        },
        {
          "name": "Enumerate multiple databases.",
          "status": "FAIL",
          "message": "promise_test: Unhandled rejection with value: object \"TypeError: indexedDB.databases is not a function. (In 'indexedDB.databases()', 'indexedDB.databases' is undefined)\""
        },
        {
          "name": "Make sure an empty list is returned for the case of no databases.",
          "status": "FAIL",
          "message": "promise_test: Unhandled rejection with value: object \"TypeError: indexedDB.databases is not a function. (In 'indexedDB.databases()', 'indexedDB.databases' is undefined)\""
        },
        {
          "name": "Ensure that databases() doesn't pick up changes that haven't commited.",
          "status": "FAIL",
          "message": "promise_test: Unhandled rejection with value: object \"TypeError: indexedDB.databases is not a function. (In 'indexedDB.databases()', 'indexedDB.databases' is undefined)\""
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex_getKey4.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBIndex.getKey() - returns the key of the first record within the range ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbdatabase_createObjectStore9-invalidparameters.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "createObjectStore: Invalid optionalParameters - autoInc and empty keyPath",
          "status": "PASS",
          "message": null
        },
        {
          "name": "createObjectStore: Invalid optionalParameters - autoInc and keyPath array",
          "status": "PASS",
          "message": null
        },
        {
          "name": "createObjectStore: Invalid optionalParameters - autoInc and keyPath array 2",
          "status": "PASS",
          "message": null
        },
        {
          "name": "createObjectStore: Invalid optionalParameters - autoInc and keyPath object",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/writer-starvation.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Writer starvation",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/keypath.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Keypath - my.key",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Keypath - my.køi",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Keypath - my.key_ya",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Keypath - public.key$ya",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Keypath - true.$",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Keypath - my._",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Keypath - delete.a7",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Keypath - p.p.p.p.p.p.p.p.p.p.p.p.p.p",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Keypath - str.length",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Keypath - arr.length",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Keypath - length",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Keypath - '' uses value as key",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Keypath - [''] uses value as [key]",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Keypath - ['x', 'y']",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Keypath - [['x'], 'y'] (stringifies)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Keypath - ['x', {toString->'y'}] (stringifies)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Keypath - name,type",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Keypath - name,type.name",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Keypath - array loop -> stringify becomes ['']",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/fire-success-event-exception.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Exception in success event handler on request",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Exception in success event listener on request",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Exception in second success event listener on request",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Exception in first success event listener, tx active in second",
          "status": "FAIL",
          "message": "assert_equals: Active check should either not throw anything, or throw TransactionInactiveError expected \"TransactionInactiveError\" but got \"InvalidStateError\""
        }
      ]
    },
    {
      "test": "/IndexedDB/keygenerator-overflow.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Keygenerator overflow",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idb_webworkers.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IndexedDB inside of a WebWorker ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/transaction-abort-generator-revert.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "The current number of a key generator is reverted when a versionchange transaction aborts",
          "status": "PASS",
          "message": null
        },
        {
          "name": "The current number of a key generator is reverted when a readwrite transaction aborts",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbfactory_open.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBFactory.open() - request has no source",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex-rename-errors.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IndexedDB deleted index rename throws",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IndexedDB index rename throws in a readonly transaction",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IndexedDB index rename throws in a readwrite transaction",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IndexedDB index rename throws in an inactive transaction",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IndexedDB index rename to the name of another index throws",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IndexedDB index rename handles exceptions when stringifying names",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor-direction-objectstore.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor direction - object store - next",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor direction - object store - prev",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor direction - object store - nextunique",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor direction - object store - prevunique",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/transaction_bubble-and-capture.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Capture and bubble",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbdatabase-deleteObjectStore-exception-order.htm",
      "status": "TIMEOUT",
      "message": null,
      "subtests": [
        {
          "name": "IDBDatabase.deleteObjectStore exception order: InvalidStateError vs. TransactionInactiveError",
          "status": "TIMEOUT",
          "message": "Test timed out"
        },
        {
          "name": "IDBDatabase.deleteObjectStore exception order: TransactionInactiveError vs. NotFoundError",
          "status": "TIMEOUT",
          "message": "Test timed out"
        }
      ]
    },
    {
      "test": "/IndexedDB/idbfactory_deleteDatabase2.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBFactory.deleteDatabase() - result of the request is set to undefined",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/key-generators/reading-autoincrement-indexes.any.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBIndex.getAll() for an index on the autoincrement key",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBIndex.getAllKeys() for an index on the autoincrement key",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBIndex.get() for an index on the autoincrement key",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBIndex.getAll() for an index not covering the autoincrement key",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBIndex.getAllKeys() returns correct result for an index not covering the autoincrement key",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBIndex.get() for an index not covering the autoincrement key",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_delete_index.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.delete() - index - remove a record from the object store",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex_get4.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBIndex.get() - returns the record with the first key in the range ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_delete2.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.delete() - key doesn't match any records ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_delete7.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.delete() - If the object store has been deleted, the implementation must throw a DOMException of type InvalidStateError",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor-continue.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.continue() - continues",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor.continue() - with given key",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor.continue() - skip far forward",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor.continue() - within range",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor.continue() - within single key range",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor.continue() - within single key range, with several results",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbfactory_open4.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBFactory.open() - new database has default version",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_createIndex13.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBDatabase.createIndex() - Operate out versionchange throw InvalidStateError ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex_getKey5.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBIndex.getKey() - throw DataError when using invalid key ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/fire-upgradeneeded-event-exception.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Exception in upgradeneeded handler",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Exception in upgradeneeded listener",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Exception in second upgradeneeded listener",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Exception in first upgradeneeded listener, tx active in second",
          "status": "FAIL",
          "message": "assert_equals: Active check should either not throw anything, or throw TransactionInactiveError expected \"TransactionInactiveError\" but got \"InvalidStateError\""
        }
      ]
    },
    {
      "test": "/IndexedDB/keypath_invalid.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Invalid keyPath - \"j a\"",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid keyPath - \".yo\"",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid keyPath - \"yo,lo\"",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid keyPath - []",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid keyPath - [\"array with space\"]",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid keyPath - multidimensional array (invalid toString)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid keyPath - \"3m\"",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid keyPath - {toString->3m}",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid keyPath - \"my.1337\"",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid keyPath - \"..yo\"",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid keyPath - \"y..o\"",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid keyPath - \"y.o.\"",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid keyPath - \"y.o..\"",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid keyPath - \"m.*\"",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid keyPath - \"\\\"m\\\"\"",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid keyPath - \"m%\"",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid keyPath - \"m/\"",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid keyPath - \"m/a\"",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid keyPath - \"m&\"",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid keyPath - \"m!\"",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid keyPath - \"*\"",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid keyPath - \"*.*\"",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid keyPath - \"^m\"",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Invalid keyPath - \"/m/\"",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_delete6.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.delete() - If the transaction this IDBObjectStore belongs to has its mode set to readonly, throw ReadOnlyError",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_update_index4.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.update() - index - attempt to modify a record when object store been deleted",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_getAll.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Single item get",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Single item get (generated key)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "getAll on empty object store",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Get all values",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Test maxCount",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Get bound range",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Get bound range with maxCount",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Get upper excluded",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Get lower excluded",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Get bound range (generated) with maxCount",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Non existent key",
          "status": "PASS",
          "message": null
        },
        {
          "name": "zero maxCount",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/upgrade-transaction-lifecycle-backend-aborted.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "in the abort event handler for a transaction aborted due to an unhandled request error",
          "status": "PASS",
          "message": null
        },
        {
          "name": "in a setTimeout(0) callback after the abort event is fired for a transaction aborted due to an unhandled request failure",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbdatabase_createObjectStore3.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBDatabase.createObjectStore() - attempt to create an object store outside of a version change transaction ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_deleteIndex.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.deleteIndex() - removes the index ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbfactory-open-opaque-origin.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBFactory.open() in non-sandboxed iframe should not throw",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBFactory.open() in sandboxed iframe should throw SecurityError",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor-direction-index-keyrange.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor direction - index with keyrange - next",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor direction - index with keyrange - prev",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor direction - index with keyrange - nextunique",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor direction - index with keyrange - prevunique",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_update_index.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.update() - index - modify a record in the object store ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex-multientry-arraykeypath.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBIndex.multiEntry: array keyPath with multiEntry",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex_openKeyCursor.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBIndex.openKeyCursor() - throw DataError when using a invalid key",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/key-generators/reading-autoincrement-indexes-cursors.any.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBIndex.openCursor() iterates over an index on the autoincrement key",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBIndex.openKeyCursor() iterates over an index on the autoincrement key",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBIndex.openCursor() iterates over an index not covering the autoincrement key",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBIndex.openKeyCursor() iterates over an index not covering the autoincrement key",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex_count.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBIndex.count() - returns the number of records in the index ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/upgrade-transaction-lifecycle-user-aborted.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "synchronously after abort() is called",
          "status": "PASS",
          "message": null
        },
        {
          "name": "in a promise microtask after abort() is called, before the transaction abort event is fired",
          "status": "PASS",
          "message": null
        },
        {
          "name": "in the abort event handler for a transaction aborted due to an abort() call",
          "status": "PASS",
          "message": null
        },
        {
          "name": "in a setTimeout(0) callback after the abort event is fired for a transaction aborted due to an abort() call",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor-source.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.source - IDBObjectStore",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor.source - IDBIndex",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/transaction-lifetime.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Test events opening a second database when one connection is open already",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_advance_objectstore3.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.advance() - object store - throw TransactionInactiveError",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_clear.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.clear() - Verify clear removes all records ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore-transaction-SameObject.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.transaction [SameObject]",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex_openCursor2.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBIndex.openCursor() - throw TransactionInactiveError on aborted transaction",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_add15.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.add() - If the transaction this IDBObjectStore belongs to has its mode set to readonly, throw ReadOnlyError ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbdatabase_transaction4.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBDatabase.transaction() - attempt to open a transaction with invalid mode ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_continue_index4.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.continue() - index - attempt to iterate to the next record when the direction is set for the previous record",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/fire-error-event-exception.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Exception in error event handler on request",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Exception in error event handler on request, with preventDefault",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Exception in error event listener on request",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Exception in second error event listener on request",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Exception in first error event listener on request, transaction active in second",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "Exception in error event handler on transaction",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Exception in error event handler on transaction, with preventDefault",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Exception in error event listener on transaction",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Exception in second error event listener on transaction",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Exception in first error event listener on transaction, transaction active in second",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "Exception in error event handler on connection",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Exception in error event handler on connection, with preventDefault",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Exception in error event listener on connection",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Exception in second error event listener on connection",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Exception in first error event listener on connection, transaction active in second",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        }
      ]
    },
    {
      "test": "/IndexedDB/idbfactory_open2.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBFactory.open() - database 'name' and 'version' are correctly set",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbfactory-open-error-properties.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Properties of error event from failed open()",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_add16.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.add() - If the object store has been deleted, the implementation must throw a DOMException of type InvalidStateError ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex_get5.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBIndex.get() - throw DataError when using invalid key ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbtransaction.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBTransaction - request gotten by the handler",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBTransaction - request returned by open()",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbdatabase_deleteObjectStore4-not_reused.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBDatabase.deleteObjectStore() - the object store is not reused",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore-getAllKeys-enforcerange.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.getAllKeys() uses [EnforceRange]",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_continue_objectstore6.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.continue() - object store - throw InvalidStateError caused by object store been deleted",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbfactory_open10.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBFactory.open() - error in upgradeneeded resets db",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/large-requests-abort.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "small values",
          "status": "PASS",
          "message": null
        },
        {
          "name": "large values",
          "status": "PASS",
          "message": null
        },
        {
          "name": "large value followed by small values",
          "status": "PASS",
          "message": null
        },
        {
          "name": "large values mixed with small values",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/delete-request-queue.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Deletes are processed in order",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_createIndex.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.createIndex() - returns an IDBIndex and the properties are set correctly",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_update_index2.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.update() - index - attempt to modify a record in a read-only transaction",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/value_recursive.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Recursive value - array directly contains self",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Recursive value - array indirectly contains self",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Recursive value - array member contains self",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbkeyrange_incorrect.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBKeyRange.bound() - bound requires more than 0 arguments.",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange.bound(null, null) - null parameters are incorrect.",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange.bound(1, null / null, 1) - null parameter is incorrect.",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange.bound(lower, upper / lower > upper) -  'lower' is greater than 'upper'.",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange.bound(DOMString/Date/Array, 1) - A DOMString, Date and Array are greater than a float.",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange.bound(noExistingVariable, 1 / goodVariable, noExistingVariable) - noExistingVariable is not defined.",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBKeyRange.bound(true, 1) - boolean is not a valid key type.",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/nested-cloning-small.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "small typed array",
          "status": "PASS",
          "message": null
        },
        {
          "name": "blob",
          "status": "PASS",
          "message": null
        },
        {
          "name": "blob with small typed array",
          "status": "PASS",
          "message": null
        },
        {
          "name": "blob with small typed array with key generator",
          "status": "PASS",
          "message": null
        },
        {
          "name": "blob array",
          "status": "PASS",
          "message": null
        },
        {
          "name": "blob array with key generator",
          "status": "PASS",
          "message": null
        },
        {
          "name": "array of blobs and small typed arrays",
          "status": "PASS",
          "message": null
        },
        {
          "name": "array of blobs and small typed arrays with key generator",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor-continuePrimaryKey-exceptions.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor continuePrimaryKey() on object store cursor",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor continuePrimaryKey() on \"nextunique\" cursor",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor continuePrimaryKey() on \"prevunique\" cursor",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_count4.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.count() - If the object store has been deleted, the implementation must throw a DOMException of type InvalidStateError ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/transaction-abort-index-metadata-revert.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Created stores get their indexes marked as deleted after the transaction that created them aborts",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Deleted stores get their indexes marked as not-deleted after the transaction that deleted them aborts",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Created+deleted stores still have their indexes marked as deleted after the transaction aborts",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Created indexes get marked as deleted after their transaction aborts",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Deleted indexes get marked as not-deleted after the transaction aborts",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Created+deleted indexes are still marked as deleted after their transaction aborts",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_delete.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.delete() - delete removes record (inline keys)",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex_count2.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBIndex.count() - returns the number of records that have keys within the range ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor-continuePrimaryKey.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IndexedDB: IDBCursor method continuePrimaryKey()",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_put7.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.put() - autoIncrement and out-of-line keys ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_advance_index5.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.advance() - index - iterate to the next record",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_get4.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.get() - attempt to retrieve a record that doesn't exist ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbversionchangeevent.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBVersionChangeEvent fired in upgradeneeded, versionchange and deleteDatabase",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_iterating_index.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.continue() - index - delete next element, and iterate to it",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/value.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Values - Date",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Values - Array",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_clear2.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.clear() - clear removes all records from an index ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/request_bubble-and-capture.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Bubbling and capturing of request events",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_delete3.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.delete() - object store's key path is an object attribute ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_continue_index6.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.continue() - index - iterate using nextunique",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex-request-source.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "The source of the request from index => index.get(0) is the index itself",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "The source of the request from index => index.getKey(0) is the index itself",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "The source of the request from index => index.getAll() is the index itself",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "The source of the request from index => index.getAllKeys() is the index itself",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "The source of the request from index => index.count() is the index itself",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "The source of the request from index => index.openCursor() is the index itself",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "The source of the request from index => index.openKeyCursor() is the index itself",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        }
      ]
    },
    {
      "test": "/IndexedDB/transaction-deactivation-timing.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "New transactions are deactivated before next task",
          "status": "PASS",
          "message": null
        },
        {
          "name": "New transactions are not deactivated until after the microtask checkpoint",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "New transactions from microtask are deactivated before next task",
          "status": "PASS",
          "message": null
        },
        {
          "name": "New transactions from microtask are still active through the microtask checkpoint",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "Deactivation of new transactions happens at end of invocation",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbfactory_cmp.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBFactory.cmp()",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/keypath-special-identifiers.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Type: String, identifier: length",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Type: Array, identifier: length",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Type: Blob, identifier: size",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Type: Blob, identifier: type",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Type: File, identifier: name",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Type: File, identifier: lastModified",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor-reused.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor is reused",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/historical.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "\"errorCode\" should not be supported on IDBRequest.",
          "status": "PASS",
          "message": null
        },
        {
          "name": "\"LOADING\" should not be supported on IDBRequest.",
          "status": "PASS",
          "message": null
        },
        {
          "name": "\"DONE\" should not be supported on IDBRequest.",
          "status": "PASS",
          "message": null
        },
        {
          "name": "\"version\" should not be supported on IDBVersionChangeEvent.",
          "status": "PASS",
          "message": null
        },
        {
          "name": "\"setVersion\" should not be supported on IDBDatabase.",
          "status": "PASS",
          "message": null
        },
        {
          "name": "\"NEXT\" should not be supported on IDBCursor.",
          "status": "PASS",
          "message": null
        },
        {
          "name": "\"NEXT_NO_DUPLICATE\" should not be supported on IDBCursor.",
          "status": "PASS",
          "message": null
        },
        {
          "name": "\"PREV\" should not be supported on IDBCursor.",
          "status": "PASS",
          "message": null
        },
        {
          "name": "\"PREV_NO_DUPLICATE\" should not be supported on IDBCursor.",
          "status": "PASS",
          "message": null
        },
        {
          "name": "\"READ_ONLY\" should not be supported on IDBTransaction.",
          "status": "PASS",
          "message": null
        },
        {
          "name": "\"READ_WRITE\" should not be supported on IDBTransaction.",
          "status": "PASS",
          "message": null
        },
        {
          "name": "\"VERSION_CHANGE\" should not be supported on IDBTransaction.",
          "status": "PASS",
          "message": null
        },
        {
          "name": "\"IDBFileHandle\" should not be supported",
          "status": "PASS",
          "message": null
        },
        {
          "name": "\"IDBFileRequest\" should not be supported",
          "status": "PASS",
          "message": null
        },
        {
          "name": "\"IDBMutableFile\" should not be supported",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbrequest_error.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBRequest.error throws if ready state is pending",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex_getAllKeys.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Single item get",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Empty object store",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Get all keys",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Get all generated keys",
          "status": "PASS",
          "message": null
        },
        {
          "name": "maxCount=10",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Get bound range",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Get bound range with maxCount",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Get upper excluded",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Get lower excluded",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Get bound range (generated) with maxCount",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Non existent key",
          "status": "PASS",
          "message": null
        },
        {
          "name": "maxCount=0",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Retrieve multiEntry keys",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/transaction-abort-object-store-metadata-revert.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Created stores get marked as deleted after their transaction aborts",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Deleted stores get marked as not-deleted after the transaction aborts",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Created+deleted stores are still marked as deleted after their transaction aborts",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Un-instantiated deleted stores get marked as not-deleted after the transaction aborts",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex_getKey3.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBIndex.getKey() - attempt to retrieve the primary key of a record that doesn't exist",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbdatabase_createObjectStore5.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBDatabase.createObjectStore() - object store's name appears in database's list ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex_openCursor3.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBIndex.openCursor() - throw InvalidStateError on index deleted by aborted upgrade",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/list_ordering.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "objectStoreNames and indexNames order - numbers",
          "status": "PASS",
          "message": null
        },
        {
          "name": "objectStoreNames and indexNames order - numbers 'overflow'",
          "status": "PASS",
          "message": null
        },
        {
          "name": "objectStoreNames and indexNames order - lexigraphical string sort",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_count3.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.count() - returns the number of records that have keys with the key",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex-getAllKeys-enforcerange.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBIndex.getAllKeys() uses [EnforceRange]",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex-rename-abort.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IndexedDB index rename in aborted transaction",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IndexedDB index creation and rename in an aborted transaction",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_get5.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.get() - returns the record with the first key in the range ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbfactory_open12.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBFactory.open() - upgradeneeded gets VersionChangeEvent",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBFactory.open() - upgradeneeded gets VersionChangeEvent - second upgrade",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex_openKeyCursor3.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBIndex.openKeyCursor() - throw TransactionInactiveError on aborted transaction",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_createIndex3-usable-right-away.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.createIndex() - the index is usable right after being made",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor-advance-exception-order.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.advance exception order: TypeError vs. TransactionInactiveError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "IDBCursor.advance exception order: TransactionInactiveError vs. InvalidStateError #1",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "IDBCursor.advance exception order: TransactionInactiveError vs. InvalidStateError #2",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        }
      ]
    },
    {
      "test": "/IndexedDB/idbdatabase_createObjectStore2.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBDatabase.createObjectStore() - object store 'name' and 'keyPath' properties are correctly set ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex_get2.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBIndex.get() - returns the record where the index contains duplicate values ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbdatabase_createObjectStore10-1000ends.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBDatabase.createObjectStore() - create 1000 object stores, add one item and delete",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbdatabase_deleteObjectStore3.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBDatabase.deleteObjectStore() - attempt to remove an object store that does not exist ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbindex_getKey8.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBIndex.getKey() - throw InvalidStateError on index deleted by aborted upgrade",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_continue_objectstore2.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.continue() - object store - attempt to pass a key parameter is not a valid key ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_continue_index2.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.continue() - index - attempt to pass a key parameter that is not a valid key",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbfactory_open8.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBFactory.open() - error in version change transaction aborts open",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbrequest-onupgradeneeded.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "indexedDB.delete called from upgradeneeded handler",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Abort transaction before deleting database in upgradeneeded handler",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Abort transaction after deleting database in upgradeneeded event handler",
          "status": "PASS",
          "message": null
        },
        {
          "name": "transaction oncomplete ordering relative to open request onsuccess",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbdatabase_createObjectStore-createIndex-emptyname.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBDatabase.createObjectStore() and IDBObjectStore.createIndex() - both with empty name",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore-delete-exception-order.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.delete exception order: InvalidStateError vs. TransactionInactiveError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "IDBObjectStore.delete exception order: TransactionInactiveError vs. ReadOnlyError",
          "status": "FAIL",
          "message": "assert_unreached: open should succeed Reached unreachable code"
        },
        {
          "name": "IDBObjectStore.delete exception order: ReadOnlyError vs. DataError",
          "status": "FAIL",
          "message": "assert_throws: \"read only\" check (ReadOnlyError) should precede key/data check (DataError) function \"() => { store.delete({}); }\" threw object \"DataError: Failed to execute 'delete' on 'IDBObjectStore': The parameter is not a valid key.\" that is not a DOMException ReadOnlyError: property \"name\" is equal to \"DataError\", expected \"ReadOnlyError\""
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_put6.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.put() - autoIncrement and inline keys ",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/key_valid.html",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "Valid key - new Date()",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Valid key - new Date(0)",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Valid key - []",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Valid key - new Array()",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Valid key - [\"undefined\"]",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Valid key - Infinity",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Valid key - -Infinity",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Valid key - 0",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Valid key - 1.5",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Valid key - 3e38",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Valid key - 3e-38",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Valid key - \"foo\"",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Valid key - \"\\n\"",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Valid key - \"\"",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Valid key - \"\\\"\"",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Valid key - \"\\u1234\"",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Valid key - \"\\u0000\"",
          "status": "PASS",
          "message": null
        },
        {
          "name": "Valid key - \"NaN\"",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbobjectstore_openCursor.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBObjectStore.openCursor() - iterate through 100 objects",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor-direction-objectstore-keyrange.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor direction - object store with keyrange - next",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor direction - object store with keyrange - prev",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor direction - object store with keyrange - nextunique",
          "status": "PASS",
          "message": null
        },
        {
          "name": "IDBCursor direction - object store with keyrange - prevunique",
          "status": "PASS",
          "message": null
        }
      ]
    },
    {
      "test": "/IndexedDB/idbcursor_continue_objectstore3.htm",
      "status": "OK",
      "message": null,
      "subtests": [
        {
          "name": "IDBCursor.continue() - object store - attempt to iterate to the previous record when the direction is set for the next record",
          "status": "PASS",
          "message": null
        }
      ]
    }
  ]
}