test_rename_objectStore_errors.js (4099B)
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 storeName1 = "test store 1"; 12 const storeName2 = "test store 2"; 13 14 info("Setup test object stores."); 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 objectStore1 = db.createObjectStore(storeName1, { keyPath: "foo" }); 27 is(db.objectStoreNames.length, 1, "Correct objectStoreNames list"); 28 is(db.objectStoreNames.item(0), objectStore1.name, "Correct name"); 29 is(objectStore1.name, storeName1, "Correct name"); 30 31 let objectStore2 = db.createObjectStore(storeName2, { keyPath: "bar" }); 32 is(db.objectStoreNames.length, 2, "Correct objectStoreNames list"); 33 is(db.objectStoreNames.item(1), objectStore2.name, "Correct name"); 34 is(objectStore2.name, storeName2, "Correct name"); 35 36 txn.oncomplete = continueToNextStepSync; 37 yield undefined; 38 request.onsuccess = continueToNextStep; 39 yield undefined; 40 db.close(); 41 42 info("Verify IDB Errors in version 2."); 43 request = indexedDB.open(name, 2); 44 request.onerror = errorHandler; 45 request.onupgradeneeded = grabEventAndContinueHandler; 46 request.onsuccess = continueToNextStep; 47 event = yield undefined; 48 49 db = event.target.result; 50 txn = event.target.transaction; 51 52 is(db.objectStoreNames.length, 2, "Correct objectStoreNames list"); 53 54 objectStore1 = txn.objectStore(storeName1); 55 objectStore2 = txn.objectStore(storeName2); 56 is(objectStore1.name, storeName1, "Correct name"); 57 is(objectStore2.name, storeName2, "Correct name"); 58 59 // Rename with the name already adopted by the other object store. 60 try { 61 objectStore1.name = storeName2; 62 ok( 63 false, 64 "ConstraintError shall be thrown if the store name already exists." 65 ); 66 } catch (e) { 67 ok(e instanceof DOMException, "got a database exception"); 68 is(e.name, "ConstraintError", "correct error"); 69 } 70 71 // Rename with the identical name. 72 try { 73 objectStore1.name = storeName1; 74 ok(true, "It shall be fine to set the same name."); 75 } catch (e) { 76 ok(false, "Got a database exception: " + e.name); 77 } 78 79 db.deleteObjectStore(storeName2); 80 81 // Rename after deleted. 82 try { 83 objectStore2.name = storeName2; 84 ok(false, "InvalidStateError shall be thrown if deleted."); 85 } catch (e) { 86 ok(e instanceof DOMException, "got a database exception"); 87 is(e.name, "InvalidStateError", "correct error"); 88 } 89 90 txn.oncomplete = continueToNextStepSync; 91 yield undefined; 92 request.onsuccess = continueToNextStep; 93 yield undefined; 94 db.close(); 95 96 info("Rename when the transaction is inactive."); 97 try { 98 objectStore1.name = storeName1; 99 ok( 100 false, 101 "TransactionInactiveError shall be thrown if the transaction is inactive." 102 ); 103 } catch (e) { 104 ok(e instanceof DOMException, "got a database exception"); 105 is(e.name, "TransactionInactiveError", "correct error"); 106 } 107 108 info("Rename when the transaction is not an upgrade one."); 109 request = indexedDB.open(name, 2); 110 request.onerror = errorHandler; 111 request.onupgradeneeded = errorHandler; 112 request.onsuccess = grabEventAndContinueHandler; 113 event = yield undefined; 114 115 db = event.target.result; 116 txn = db.transaction(storeName1); 117 objectStore1 = txn.objectStore(storeName1); 118 119 try { 120 objectStore1.name = storeName1; 121 ok( 122 false, 123 "InvalidStateError shall be thrown if it's not an upgrade transaction." 124 ); 125 } catch (e) { 126 ok(e instanceof DOMException, "got a database exception"); 127 is(e.name, "InvalidStateError", "correct error"); 128 } 129 130 txn.oncomplete = continueToNextStepSync; 131 yield undefined; 132 db.close(); 133 134 finishTest(); 135 }