test_abort_deleted_index.js (2694B)
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 = "test store"; 12 const indexName_ToBeDeleted = "test index to be deleted"; 13 14 info("Create index in v1."); 15 let request = indexedDB.open(name, 1); 16 request.onerror = errorHandler; 17 request.onupgradeneeded = grabEventAndContinueHandler; 18 request.onsuccess = unexpectedSuccessHandler; 19 let event = yield undefined; 20 21 let db = event.target.result; 22 let txn = event.target.transaction; 23 24 is(db.objectStoreNames.length, 0, "Correct objectStoreNames list"); 25 26 let objectStore = db.createObjectStore(storeName, { keyPath: "foo" }); 27 is(db.objectStoreNames.length, 1, "Correct objectStoreNames list"); 28 is( 29 db.objectStoreNames.item(0), 30 objectStore.name, 31 "Correct object store name" 32 ); 33 34 // create index to be deleted later in v2. 35 objectStore.createIndex(indexName_ToBeDeleted, "foo"); 36 ok(objectStore.index(indexName_ToBeDeleted), "Index created."); 37 38 txn.oncomplete = continueToNextStepSync; 39 yield undefined; 40 request.onsuccess = continueToNextStep; 41 yield undefined; 42 db.close(); 43 44 info("Delete index in v2."); 45 request = indexedDB.open(name, 2); 46 request.onerror = errorHandler; 47 request.onupgradeneeded = grabEventAndContinueHandler; 48 request.onsuccess = unexpectedSuccessHandler; 49 event = yield undefined; 50 51 db = event.target.result; 52 txn = event.target.transaction; 53 54 objectStore = txn.objectStore(storeName); 55 let index = objectStore.index(indexName_ToBeDeleted); 56 ok(index, "index is valid."); 57 objectStore.deleteIndex(indexName_ToBeDeleted); 58 59 // Aborting the transaction. 60 request.onerror = expectedErrorHandler("AbortError"); 61 txn.abort(); 62 try { 63 index.get("foo"); 64 ok( 65 false, 66 "TransactionInactiveError shall be thrown right after a deletion of an index is aborted." 67 ); 68 } catch (e) { 69 ok(e instanceof DOMException, "got a database exception"); 70 is( 71 e.name, 72 "TransactionInactiveError", 73 "TransactionInactiveError shall be thrown right after a deletion of an index is aborted." 74 ); 75 } 76 77 yield undefined; 78 79 try { 80 index.get("foo"); 81 ok( 82 false, 83 "TransactionInactiveError shall be thrown after the transaction is inactive." 84 ); 85 } catch (e) { 86 ok(e instanceof DOMException, "got a database exception"); 87 is( 88 e.name, 89 "TransactionInactiveError", 90 "TransactionInactiveError shall be thrown after the transaction is inactive." 91 ); 92 } 93 94 finishTest(); 95 }