Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(821)

Unified Diff: third_party/WebKit/LayoutTests/storage/indexeddb/idbcursor-advance-exception-order.html

Issue 2415203002: Indexed DB: More exception precedence tests (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/LayoutTests/storage/indexeddb/idbcursor-advance-exception-order.html
diff --git a/third_party/WebKit/LayoutTests/storage/indexeddb/idbcursor-advance-exception-order.html b/third_party/WebKit/LayoutTests/storage/indexeddb/idbcursor-advance-exception-order.html
new file mode 100644
index 0000000000000000000000000000000000000000..c40f3649b826c14e246606c41c10034f5c8f48a6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/storage/indexeddb/idbcursor-advance-exception-order.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html>
+<title>IndexedDB: IDBCursor advance() Exception Ordering</title>
+<meta charset=utf-8>
+<link rel="help" href="https://w3c.github.io/IndexedDB/#dom-idbcursor-advance">
+<script src="../../resources/testharness.js"></script>
pwnall 2016/10/14 07:57:04 I think it'd be nice to add author information, to
jsbell 2016/10/17 19:42:03 Not something we'd normally do for blink and not a
+<script src="../../resources/testharnessreport.js"></script>
+<script src="resources/testharness-helpers.js"></script>
+<script>
+
+indexeddb_test(
+ (t, db) => {
+ const store = db.createObjectStore('s');
+ store.put('value', 'key');
+ },
+ (t, db) => {
+ const tx = db.transaction('s');
+ const store = tx.objectStore('s');
+ const finish = pin_transaction(store);
pwnall 2016/10/14 07:57:04 I don't understand the necessity of the pin_transa
jsbell 2016/10/17 19:42:03 You're right - it doesn't matter for this test. Wi
+
+ const r = store.openKeyCursor();
+ r.onsuccess = t.step_func(() => {
+ r.onsuccess = null;
+
+ const cursor = r.result;
+
+ setTimeout(t.step_func(() => {
+ assert_throws(new TypeError, () => { cursor.advance(0); },
+ '"zero" check (TypeError) should precede ' +
+ '"not active" check (TransactionInactiveError)');
+ finish();
+ t.done();
+ }), 0);
+ });
+ },
+ 'IDBCursor.advance exception order: TypeError vs. TransactionInactiveError'
+);
+
+indexeddb_test(
+ (t, db) => {
+ const store = db.createObjectStore('s');
+ const finish = pin_transaction(store);
pwnall 2016/10/14 07:57:04 Same as above, except I commented out setTimeout t
jsbell 2016/10/17 19:42:03 Done.
+
+ const s = db.createObjectStore('s2');
+ s.put('value', 'key');
+
+ const r = s.openKeyCursor();
+ r.onsuccess = t.step_func(() => {
+ r.onsuccess = null;
+
+ const cursor = r.result;
+ db.deleteObjectStore('s2');
+
+ setTimeout(t.step_func(() => {
+ assert_throws('TransactionInactiveError', () => { cursor.advance(1); },
+ '"not active" check (TransactionInactiveError) ' +
+ 'should precede "deleted" check (InvalidStateError)');
+ finish();
+ t.done();
+ }), 0);
+ });
+ },
+ (t, db) => {},
+ 'IDBCursor.advance exception order: ' +
+ 'TransactionInactiveError vs. InvalidStateError #1'
+);
+
+indexeddb_test(
+ (t, db) => {
+ const store = db.createObjectStore('s');
+ store.put('value', 'key');
+ },
+ (t, db) => {
+ const tx = db.transaction('s');
+ const store = tx.objectStore('s');
+ const finish = pin_transaction(store);
pwnall 2016/10/14 07:57:04 Same as above.
jsbell 2016/10/17 19:42:03 Done.
+
+ const r = store.openKeyCursor();
+ r.onsuccess = t.step_func(() => {
+ r.onsuccess = null;
+
+ const cursor = r.result;
+ cursor.continue();
pwnall 2016/10/14 07:57:04 Is there any value in using advance() instead of c
jsbell 2016/10/17 19:42:03 Sure, switched. (I was considering `continue()` to
+
+ setTimeout(t.step_func(() => {
+ assert_throws('TransactionInactiveError', () => { cursor.advance(1); },
+ '"not active" check (TransactionInactiveError) ' +
+ 'should precede "got value" check (InvalidStateError)');
+ finish();
+ t.done();
+ }), 0);
+ });
+ },
+ 'IDBCursor.advance exception order: ' +
+ 'TransactionInactiveError vs. InvalidStateError #2'
+);
+
+</script>

Powered by Google App Engine
This is Rietveld 408576698