diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /testing/web-platform/tests/IndexedDB/idbindex-rename-errors.html | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'testing/web-platform/tests/IndexedDB/idbindex-rename-errors.html')
-rw-r--r-- | testing/web-platform/tests/IndexedDB/idbindex-rename-errors.html | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/testing/web-platform/tests/IndexedDB/idbindex-rename-errors.html b/testing/web-platform/tests/IndexedDB/idbindex-rename-errors.html new file mode 100644 index 000000000..1f50f36c6 --- /dev/null +++ b/testing/web-platform/tests/IndexedDB/idbindex-rename-errors.html @@ -0,0 +1,130 @@ +<!DOCTYPE html> +<title>IndexedDB: index renaming error handling</title> +<link rel="help" + href="https://w3c.github.io/IndexedDB/#dom-idbindex-name"> +<link rel="author" href="pwnall@chromium.org" title="Victor Costan"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="support-promises.js"></script> +<script> + +promise_test(testCase => { + return createDatabase(testCase, (database, transaction) => { + createBooksStore(testCase, database); + }).then(database => { + database.close(); + }).then(() => migrateDatabase(testCase, 2, (database, transaction) => { + const store = transaction.objectStore('books'); + const index = store.index('by_author'); + store.deleteIndex('by_author'); + assert_throws( + 'InvalidStateError', () => index.name = 'renamed_by_author'); + })).then(database => database.close()); +}, 'IndexedDB deleted index rename throws'); + +promise_test(testCase => { + return createDatabase(testCase, (database, transaction) => { + createBooksStore(testCase, database); + }).then(database => { + const transaction = database.transaction('books', 'readonly'); + const store = transaction.objectStore('books'); + const index = store.index('by_author'); + + assert_throws( + 'InvalidStateError', () => index.name = 'renamed_by_author'); + database.close(); + }); +}, 'IndexedDB index rename throws in a readonly transaction'); + +promise_test(testCase => { + return createDatabase(testCase, (database, transaction) => { + createBooksStore(testCase, database); + }).then(database => { + const transaction = database.transaction('books', 'readwrite'); + const store = transaction.objectStore('books'); + const index = store.index('by_author'); + + assert_throws( + 'InvalidStateError', () => index.name = 'renamed_by_author'); + database.close(); + }); +}, 'IndexedDB index rename throws in a readwrite transaction'); + +promise_test(testCase => { + let authorIndex = null; + return createDatabase(testCase, (database, transaction) => { + const store = createBooksStore(testCase, database); + authorIndex = store.index('by_author'); + }).then(database => { + assert_throws( + 'TransactionInactiveError', + () => authorIndex.name = 'renamed_by_author'); + database.close(); + }); +}, 'IndexedDB index rename throws in an inactive transaction'); + +promise_test(testCase => { + return createDatabase(testCase, (database, transaction) => { + createBooksStore(testCase, database); + }).then(database => { + database.close(); + }).then(() => migrateDatabase(testCase, 2, (database, transaction) => { + const store = transaction.objectStore('books'); + const index = store.index('by_author'); + + assert_throws('ConstraintError', () => index.name = 'by_title'); + assert_array_equals( + store.indexNames, ['by_author', 'by_title'], + 'An index rename that throws an exception should not change the ' + + "index's IDBObjectStore.indexNames"); + })).then(database => { + const transaction = database.transaction('books', 'readonly'); + const store = transaction.objectStore('books'); + assert_array_equals( + store.indexNames, ['by_author', 'by_title'], + 'Committing a transaction with a failed store rename attempt ' + + "should not change the index's IDBObjectStore.indexNames"); + const index = store.index('by_author'); + return checkAuthorIndexContents( + testCase, index, + 'Committing a transaction with a failed rename attempt should ' + + "not change the index's contents").then(() => database.close()); + }); +}, 'IndexedDB index rename to the name of another index throws'); + +promise_test(testCase => { + return createDatabase(testCase, (database, transaction) => { + createBooksStore(testCase, database); + }).then(database => { + database.close(); + }).then(() => migrateDatabase(testCase, 2, (database, transaction) => { + const store = transaction.objectStore('books'); + const index = store.index('by_author'); + + assert_throws( + { name: 'Custom stringifying error' }, + () => { + index.name = { + toString: () => { throw { name: 'Custom stringifying error'}; } + }; + }, 'IDBObjectStore rename should re-raise toString() exception'); + assert_array_equals( + store.indexNames, ['by_author', 'by_title'], + 'An index rename that throws an exception should not change the ' + + "index's IDBObjectStore.indexNames"); + })).then(database => { + const transaction = database.transaction('books', 'readonly'); + const store = transaction.objectStore('books'); + assert_array_equals( + store.indexNames, ['by_author', 'by_title'], + 'Committing a transaction with a failed store rename attempt ' + + "should not change the index's IDBObjectStore.indexNames"); + const index = store.index('by_author'); + return checkAuthorIndexContents( + testCase, index, + 'Committing a transaction with a failed rename attempt should ' + + "not change the index's contents").then(() => database.close()); + }); +}, 'IndexedDB index rename handles exceptions when stringifying names'); + +</script> |