| // META: title=IDBDatabase.transaction() |
| // META: global=window,worker |
| // META: script=resources/support.js |
| |
| 'use strict'; |
| |
| async_test(t => { |
| let db; |
| const open_rq = createdb(t); |
| |
| open_rq.onupgradeneeded = function () { }; |
| open_rq.onsuccess = function (e) { |
| db = e.target.result; |
| |
| assert_throws_dom('NotFoundError', function () { db.transaction('non-existing'); }); |
| t.done(); |
| }; |
| }, "Attempt to open a transaction with invalid scope"); |
| |
| async_test(t => { |
| let db; |
| const open_rq = createdb(t); |
| |
| open_rq.onupgradeneeded = function (e) { |
| db = e.target.result; |
| db.createObjectStore('readonly'); |
| }; |
| open_rq.onsuccess = function (e) { |
| var txn = db.transaction('readonly', 'readonly'); |
| assert_equals(txn.mode, "readonly", 'txn.mode'); |
| |
| t.done(); |
| }; |
| }, "Opening a transaction defaults to a read-only mode"); |
| |
| async_test(t => { |
| let db; |
| const open_rq = createdb(t); |
| |
| open_rq.onupgradeneeded = function (e) { |
| db = e.target.result; |
| db.createObjectStore('test'); |
| }; |
| |
| open_rq.onsuccess = function (e) { |
| db.close(); |
| |
| assert_throws_dom('InvalidStateError', |
| function () { db.transaction('test', 'readonly'); }); |
| |
| t.done(); |
| }; |
| }, "Attempt to open a transaction from closed database connection"); |
| |
| async_test(t => { |
| let db; |
| const open_rq = createdb(t); |
| |
| open_rq.onupgradeneeded = function (e) { |
| db = e.target.result; |
| db.createObjectStore('test'); |
| }; |
| |
| open_rq.onsuccess = function (e) { |
| assert_throws_js(TypeError, |
| function () { db.transaction('test', 'whatever'); }); |
| |
| t.done(); |
| }; |
| }, "Attempt to open a transaction with invalid mode"); |
| |
| async_test(t => { |
| let db; |
| const open_rq = createdb(t); |
| |
| open_rq.onupgradeneeded = function () { }; |
| open_rq.onsuccess = function (e) { |
| db = e.target.result; |
| assert_throws_dom('InvalidAccessError', function () { db.transaction([]); }); |
| t.done(); |
| }; |
| }, "If storeNames is an empty list, the implementation must throw a DOMException of type InvalidAccessError"); |