idbdatabase_deleteObjectStore.any.js (3674B)
1 // META: global=window,worker 2 // META: title=IDBDatabase.deleteObjectStore() 3 // META: script=resources/support.js 4 // @author Microsoft <https://www.microsoft.com> 5 // @author Odin Hørthe Omdal <mailto:odinho@opera.com> 6 'use strict'; 7 8 9 async_test(t => { 10 let db; 11 let add_success = false; 12 13 const open_rq = createdb(t); 14 open_rq.onupgradeneeded = function(e) { 15 db = e.target.result; 16 17 const objStore = db.createObjectStore("store", { autoIncrement: true }); 18 assert_equals(db.objectStoreNames[0], "store", "objectStoreNames"); 19 20 const rq_add = objStore.add(1); 21 rq_add.onsuccess = function() { add_success = true; }; 22 rq_add.onerror = fail(t, 'rq_add.error'); 23 24 objStore.createIndex("idx", "a"); 25 db.deleteObjectStore("store"); 26 assert_equals(db.objectStoreNames.length, 0, "objectStoreNames.length after delete"); 27 assert_false(db.objectStoreNames.contains("store")); 28 29 const exc = "InvalidStateError"; 30 assert_throws_dom(exc, function() { objStore.add(2); }); 31 assert_throws_dom(exc, function() { objStore.put(3); }); 32 assert_throws_dom(exc, function() { objStore.get(1); }); 33 assert_throws_dom(exc, function() { objStore.clear(); }); 34 assert_throws_dom(exc, function() { objStore.count(); }); 35 assert_throws_dom(exc, function() { objStore.delete(1); }); 36 assert_throws_dom(exc, function() { objStore.openCursor(); }); 37 assert_throws_dom(exc, function() { objStore.index("idx"); }); 38 assert_throws_dom(exc, function() { objStore.deleteIndex("idx"); }); 39 assert_throws_dom(exc, function() { objStore.createIndex("idx2", "a"); 40 }); 41 }; 42 43 open_rq.onsuccess = function() { 44 assert_true(add_success, "First add was successful"); 45 t.done(); 46 } 47 }, 'Deleted object store\'s name should be removed from database\'s list. Attempting to use a \ 48 deleted IDBObjectStore should throw an InvalidStateError'); 49 50 async_test(t => { 51 const open_rq = createdb(t); 52 53 open_rq.onupgradeneeded = function(e) { 54 const db = e.target.result; 55 assert_throws_dom('NotFoundError', function() { db.deleteObjectStore('whatever'); }); 56 t.done(); 57 }; 58 }, 'Attempting to remove an object store that does not exist should throw a NotFoundError'); 59 60 async_test(t => { 61 const keys = []; 62 const open_rq = createdb(t); 63 64 open_rq.onupgradeneeded = function(e) { 65 const db = e.target.result; 66 67 const objStore = db.createObjectStore("resurrected", { autoIncrement: true, keyPath: "k" }); 68 objStore.add({ k: 5 }).onsuccess = function(e) { keys.push(e.target.result); }; 69 objStore.add({}).onsuccess = function(e) { keys.push(e.target.result); }; 70 objStore.createIndex("idx", "i"); 71 assert_true(objStore.indexNames.contains("idx")); 72 assert_equals(objStore.keyPath, "k", "keyPath"); 73 74 db.deleteObjectStore("resurrected"); 75 76 const objStore2 = db.createObjectStore("resurrected", { autoIncrement: true }); 77 objStore2.add("Unicorns'R'us").onsuccess = function(e) { keys.push(e.target.result); }; 78 assert_false(objStore2.indexNames.contains("idx"), "index exist on new objstore"); 79 assert_equals(objStore2.keyPath, null, "keyPath"); 80 81 assert_throws_dom("NotFoundError", function() { objStore2.index("idx"); }); 82 }; 83 84 open_rq.onsuccess = function(e) { 85 assert_array_equals(keys, [5, 6, 1], "keys"); 86 t.done(); 87 }; 88 }, 'Attempting to access an index that was deleted as part of object store deletion and then \ 89 recreated using the same object store name should throw a NotFoundError');