test_setVersion_exclusion.js (2889B)
1 /** 2 * Any copyright is dedicated to the Public Domain. 3 * http://creativecommons.org/publicdomain/zero/1.0/ 4 */ 5 6 /* exported testGenerator */ 7 var testGenerator = testSteps(); 8 9 function* testSteps() { 10 const name = this.window ? window.location.pathname : "Splendid Test"; 11 12 let request = indexedDB.open(name, 1); 13 request.onerror = errorHandler; 14 request.onupgradeneeded = grabEventAndContinueHandler; 15 request.onsuccess = unexpectedSuccessHandler; 16 17 let request2 = indexedDB.open(name, 2); 18 request2.onerror = errorHandler; 19 request2.onupgradeneeded = unexpectedSuccessHandler; 20 request2.onsuccess = unexpectedSuccessHandler; 21 22 let event = yield undefined; 23 is(event.type, "upgradeneeded", "Expect an upgradeneeded event"); 24 is(event.target, request, "Event should be fired on the request"); 25 ok(event.target.result instanceof IDBDatabase, "Expect a database here"); 26 27 let db = event.target.result; 28 is(db.version, 1, "Database has correct version"); 29 30 db.onupgradeneeded = function () { 31 ok( 32 false, 33 "our ongoing VERSION_CHANGE transaction should exclude any others!" 34 ); 35 }; 36 37 db.createObjectStore("foo"); 38 39 try { 40 db.transaction("foo"); 41 ok(false, "Transactions should be disallowed now!"); 42 } catch (e) { 43 ok(e instanceof DOMException, "Expect a DOMException"); 44 is(e.name, "InvalidStateError", "Expect an InvalidStateError"); 45 is(e.code, DOMException.INVALID_STATE_ERR, "Expect an INVALID_STATE_ERR"); 46 } 47 48 request.onupgradeneeded = unexpectedSuccessHandler; 49 request.transaction.oncomplete = grabEventAndContinueHandler; 50 51 event = yield undefined; 52 is(event.type, "complete", "Got complete event"); 53 54 try { 55 db.transaction("foo"); 56 ok(true, "Transactions should be allowed now!"); 57 } catch (e) { 58 ok(false, "Transactions should be allowed now!"); 59 } 60 61 request.onsuccess = grabEventAndContinueHandler; 62 63 event = yield undefined; 64 is(event.type, "success", "Expect a success event"); 65 is(event.target.result, db, "Same database"); 66 67 db.onversionchange = function () { 68 ok(true, "next setVersion was unblocked appropriately"); 69 db.close(); 70 }; 71 72 try { 73 db.transaction("foo"); 74 ok(true, "Transactions should be allowed now!"); 75 } catch (e) { 76 ok(false, "Transactions should be allowed now!"); 77 } 78 79 request.onsuccess = unexpectedSuccessHandler; 80 request2.onupgradeneeded = grabEventAndContinueHandler; 81 82 event = yield undefined; 83 is(event.type, "upgradeneeded", "Expect an upgradeneeded event"); 84 85 db = event.target.result; 86 is(db.version, 2, "Database has correct version"); 87 88 request2.onupgradeneeded = unexpectedSuccessHandler; 89 request2.onsuccess = grabEventAndContinueHandler; 90 91 event = yield undefined; 92 is(event.type, "success", "Expect a success event"); 93 is(event.target.result, db, "Same database"); 94 is(db.version, 2, "Database has correct version"); 95 96 finishTest(); 97 }