test_setVersion_abort.js (3292B)
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.onsuccess = unexpectedSuccessHandler; 15 request.onupgradeneeded = grabEventAndContinueHandler; 16 let event = yield undefined; 17 18 let db = event.target.result; 19 20 let objectStore = db.createObjectStore("foo"); 21 objectStore.createIndex("bar", "baz"); 22 23 is(db.version, 1, "Correct version"); 24 is(db.objectStoreNames.length, 1, "Correct objectStoreNames length"); 25 is(objectStore.indexNames.length, 1, "Correct indexNames length"); 26 27 let transaction = event.target.transaction; 28 is(transaction.mode, "versionchange", "Correct transaction mode"); 29 transaction.oncomplete = unexpectedSuccessHandler; 30 transaction.onabort = grabEventAndContinueHandler; 31 transaction.abort(); 32 33 is(db.version, 0, "Correct version"); 34 is(db.objectStoreNames.length, 0, "Correct objectStoreNames length"); 35 is(objectStore.indexNames.length, 0, "Correct indexNames length"); 36 37 // Test that the db is actually closed. 38 try { 39 db.transaction(""); 40 ok(false, "Expect an exception"); 41 } catch (e) { 42 ok(true, "Expect an exception"); 43 is(e.name, "InvalidStateError", "Expect an InvalidStateError"); 44 } 45 46 event = yield undefined; 47 is(event.type, "abort", "Got transaction abort event"); 48 is(event.target, transaction, "Right target"); 49 50 is(db.version, 0, "Correct version"); 51 is(db.objectStoreNames.length, 0, "Correct objectStoreNames length"); 52 is(objectStore.indexNames.length, 0, "Correct indexNames length"); 53 54 request.onerror = grabEventAndContinueHandler; 55 request.onupgradeneeded = unexpectedSuccessHandler; 56 57 event = yield undefined; 58 59 is(event.type, "error", "Got request error event"); 60 is(event.target, request, "Right target"); 61 is(event.target.transaction, null, "No transaction"); 62 63 event.preventDefault(); 64 65 request = indexedDB.open(name, 1); 66 request.onerror = errorHandler; 67 request.onsuccess = unexpectedSuccessHandler; 68 request.onupgradeneeded = grabEventAndContinueHandler; 69 event = yield undefined; 70 71 is(event.type, "upgradeneeded", "Got upgradeneeded event"); 72 73 let db2 = event.target.result; 74 75 isnot(db, db2, "Should give a different db instance"); 76 is(db2.version, 1, "Correct version"); 77 is(db2.objectStoreNames.length, 0, "Correct objectStoreNames length"); 78 79 let objectStore2 = db2.createObjectStore("foo"); 80 objectStore2.createIndex("bar", "baz"); 81 82 request.onsuccess = grabEventAndContinueHandler; 83 request.onupgradeneeded = unexpectedSuccessHandler; 84 event = yield undefined; 85 86 is(event.target.result, db2, "Correct target"); 87 is(event.type, "success", "Got success event"); 88 is(db2.version, 1, "Correct version"); 89 is(db2.objectStoreNames.length, 1, "Correct objectStoreNames length"); 90 is(objectStore2.indexNames.length, 1, "Correct indexNames length"); 91 is(db.version, 0, "Correct version still"); 92 is(db.objectStoreNames.length, 0, "Correct objectStoreNames length still"); 93 is(objectStore.indexNames.length, 0, "Correct indexNames length still"); 94 95 finishTest(); 96 }