test_rename_objectStore.js (5778B)
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 const storeName_v0 = "test store v0"; 13 const storeName_v1 = "test store v1"; 14 const storeName_v2 = "test store v2"; 15 const storeName_v3 = storeName_ToBeDeleted; 16 const storeName_v4 = "test store v4"; 17 18 info("Rename in v1."); 19 let request = indexedDB.open(name, 1); 20 request.onerror = errorHandler; 21 request.onupgradeneeded = grabEventAndContinueHandler; 22 request.onsuccess = unexpectedSuccessHandler; 23 let event = yield undefined; 24 25 let db = event.target.result; 26 let txn = event.target.transaction; 27 28 is(db.objectStoreNames.length, 0, "Correct objectStoreNames list"); 29 30 // create objectstore to be deleted later in v3. 31 db.createObjectStore(storeName_ToBeDeleted, { keyPath: "foo" }); 32 is(db.objectStoreNames.length, 1, "Correct objectStoreNames list"); 33 ok(db.objectStoreNames.contains(storeName_ToBeDeleted), "Correct name"); 34 35 // create target objectstore to be renamed. 36 let objectStore = db.createObjectStore(storeName_v0, { keyPath: "bar" }); 37 is(db.objectStoreNames.length, 2, "Correct objectStoreNames list"); 38 ok(db.objectStoreNames.contains(objectStore.name), "Correct name"); 39 40 objectStore.name = storeName_v1; 41 is(objectStore.name, storeName_v1, "Renamed successfully"); 42 43 txn.oncomplete = continueToNextStepSync; 44 yield undefined; 45 request.onsuccess = continueToNextStep; 46 yield undefined; 47 db.close(); 48 49 info("Verify renaming done in v1 and run renaming in v2."); 50 request = indexedDB.open(name, 2); 51 request.onerror = errorHandler; 52 request.onupgradeneeded = grabEventAndContinueHandler; 53 request.onsuccess = unexpectedSuccessHandler; 54 event = yield undefined; 55 56 db = event.target.result; 57 txn = event.target.transaction; 58 59 is(db.objectStoreNames.length, 2, "Correct objectStoreNames list"); 60 ok(db.objectStoreNames.contains(storeName_v1), "Correct name"); 61 ok(db.objectStoreNames.contains(storeName_ToBeDeleted), "Correct name"); 62 63 objectStore = txn.objectStore(storeName_v1); 64 objectStore.name = storeName_v2; 65 is(objectStore.name, storeName_v2, "Renamed successfully"); 66 67 txn.oncomplete = continueToNextStepSync; 68 yield undefined; 69 request.onsuccess = continueToNextStep; 70 yield undefined; 71 db.close(); 72 73 info("Verify renaming done in v2."); 74 request = indexedDB.open(name, 2); 75 request.onerror = errorHandler; 76 request.onupgradeneeded = errorHandler; 77 request.onsuccess = grabEventAndContinueHandler; 78 event = yield undefined; 79 80 db = event.target.result; 81 82 is(db.objectStoreNames.length, 2, "Correct objectStoreNames list"); 83 ok(db.objectStoreNames.contains(storeName_v2), "Correct name"); 84 ok(db.objectStoreNames.contains(storeName_ToBeDeleted), "Correct name"); 85 86 db.close(); 87 88 info("Rename in v3."); 89 request = indexedDB.open(name, 3); 90 request.onerror = errorHandler; 91 request.onupgradeneeded = grabEventAndContinueHandler; 92 request.onsuccess = unexpectedSuccessHandler; 93 event = yield undefined; 94 95 db = event.target.result; 96 txn = event.target.transaction; 97 98 is(db.objectStoreNames.length, 2, "Correct objectStoreNames list"); 99 ok(db.objectStoreNames.contains(storeName_v2), "Correct name"); 100 ok(db.objectStoreNames.contains(storeName_ToBeDeleted), "Correct name"); 101 db.deleteObjectStore(storeName_ToBeDeleted); 102 is(db.objectStoreNames.length, 1, "Correct objectStoreNames list"); 103 ok( 104 db.objectStoreNames.contains(storeName_v2) && 105 !db.objectStoreNames.contains(storeName_ToBeDeleted), 106 "Deleted correctly" 107 ); 108 109 objectStore = txn.objectStore(storeName_v2); 110 objectStore.name = storeName_v3; 111 is(objectStore.name, storeName_v3, "Renamed successfully"); 112 113 txn.oncomplete = continueToNextStepSync; 114 yield undefined; 115 request.onsuccess = continueToNextStep; 116 yield undefined; 117 db.close(); 118 119 info("Verify renaming done in v3."); 120 request = indexedDB.open(name, 3); 121 request.onerror = errorHandler; 122 request.onupgradeneeded = errorHandler; 123 request.onsuccess = grabEventAndContinueHandler; 124 event = yield undefined; 125 126 db = event.target.result; 127 128 is(db.objectStoreNames.length, 1, "Correct objectStoreNames list"); 129 ok(db.objectStoreNames.contains(storeName_v3), "Correct name"); 130 131 db.close(); 132 133 info("Abort the version change transaction while renaming objectstore."); 134 request = indexedDB.open(name, 4); 135 request.onerror = errorHandler; 136 request.onupgradeneeded = grabEventAndContinueHandler; 137 request.onsuccess = unexpectedSuccessHandler; 138 event = yield undefined; 139 140 db = event.target.result; 141 txn = event.target.transaction; 142 143 objectStore = txn.objectStore(storeName_v3); 144 objectStore.name = storeName_v4; 145 is(objectStore.name, storeName_v4, "Renamed successfully"); 146 let putRequest = objectStore.put({ bar: "barValue" }); 147 putRequest.onsuccess = continueToNextStepSync; 148 yield undefined; 149 150 // Aborting the transaction. 151 request.onerror = expectedErrorHandler("AbortError"); 152 txn.abort(); 153 yield undefined; 154 155 // Verify if the name of the objectStore handle is reverted. 156 is(objectStore.name, storeName_v3, "The name is reverted after aborted."); 157 158 info("Verify if the objectstore name is unchanged."); 159 request = indexedDB.open(name, 3); 160 request.onerror = errorHandler; 161 request.onupgradeneeded = errorHandler; 162 request.onsuccess = grabEventAndContinueHandler; 163 event = yield undefined; 164 165 db = event.target.result; 166 167 is(db.objectStoreNames.length, 1, "Correct objectStoreNames list"); 168 ok(db.objectStoreNames.contains(storeName_v3), "Correct name"); 169 170 db.close(); 171 172 finishTest(); 173 }