test_abort_deleted_objectStore.js (2308B)
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 const storeName_ToBeDeleted = "test store to be deleted"; 12 13 info("Create objectStore in v1."); 14 let request = indexedDB.open(name, 1); 15 request.onerror = errorHandler; 16 request.onupgradeneeded = grabEventAndContinueHandler; 17 request.onsuccess = unexpectedSuccessHandler; 18 let event = yield undefined; 19 20 let db = event.target.result; 21 let txn = event.target.transaction; 22 23 is(db.objectStoreNames.length, 0, "Correct objectStoreNames list"); 24 25 // create objectstore to be deleted later in v2. 26 db.createObjectStore(storeName_ToBeDeleted, { keyPath: "foo" }); 27 is(db.objectStoreNames.length, 1, "Correct objectStoreNames list"); 28 ok(db.objectStoreNames.contains(storeName_ToBeDeleted), "Correct name"); 29 30 txn.oncomplete = continueToNextStepSync; 31 yield undefined; 32 request.onsuccess = continueToNextStep; 33 yield undefined; 34 db.close(); 35 36 info("Delete objectStore in v2."); 37 request = indexedDB.open(name, 2); 38 request.onerror = errorHandler; 39 request.onupgradeneeded = grabEventAndContinueHandler; 40 request.onsuccess = unexpectedSuccessHandler; 41 event = yield undefined; 42 43 db = event.target.result; 44 txn = event.target.transaction; 45 46 let objectStore = txn.objectStore(storeName_ToBeDeleted); 47 ok(objectStore, "objectStore is available"); 48 49 db.deleteObjectStore(storeName_ToBeDeleted); 50 51 // Aborting the transaction. 52 request.onerror = expectedErrorHandler("AbortError"); 53 txn.abort(); 54 try { 55 objectStore.get("foo"); 56 ok( 57 false, 58 "TransactionInactiveError shall be thrown if the transaction is inactive." 59 ); 60 } catch (e) { 61 ok(e instanceof DOMException, "got a database exception"); 62 is(e.name, "TransactionInactiveError", "correct error"); 63 } 64 65 yield undefined; 66 67 try { 68 objectStore.get("foo"); 69 ok( 70 false, 71 "TransactionInactiveError shall be thrown if the transaction is inactive." 72 ); 73 } catch (e) { 74 ok(e instanceof DOMException, "got a database exception"); 75 is(e.name, "TransactionInactiveError", "correct error"); 76 } 77 78 finishTest(); 79 }