summaryrefslogtreecommitdiffstats
path: root/dom/indexedDB/test/unit/test_remove_objectStore.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/indexedDB/test/unit/test_remove_objectStore.js')
-rw-r--r--dom/indexedDB/test/unit/test_remove_objectStore.js131
1 files changed, 131 insertions, 0 deletions
diff --git a/dom/indexedDB/test/unit/test_remove_objectStore.js b/dom/indexedDB/test/unit/test_remove_objectStore.js
new file mode 100644
index 0000000000..bdc16d9a6a
--- /dev/null
+++ b/dom/indexedDB/test/unit/test_remove_objectStore.js
@@ -0,0 +1,131 @@
+/**
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+var testGenerator = testSteps();
+
+function* testSteps() {
+ const name = this.window ? window.location.pathname : "Splendid Test";
+ const objectStoreName = "Objects";
+
+ let request = indexedDB.open(name, 1);
+ request.onerror = errorHandler;
+ request.onupgradeneeded = grabEventAndContinueHandler;
+ request.onsuccess = unexpectedSuccessHandler;
+ let event = yield undefined;
+
+ request.onupgradeneeded = unexpectedSuccessHandler;
+ request.onsuccess = grabEventAndContinueHandler;
+
+ let db = event.target.result;
+ is(db.objectStoreNames.length, 0, "Correct objectStoreNames list");
+
+ let objectStore = db.createObjectStore(objectStoreName, { keyPath: "foo" });
+
+ let addedCount = 0;
+
+ for (let i = 0; i < 100; i++) {
+ request = objectStore.add({ foo: i });
+ request.onerror = errorHandler;
+ request.onsuccess = function (event) {
+ if (++addedCount == 100) {
+ executeSoon(function () {
+ testGenerator.next();
+ });
+ }
+ };
+ }
+ yield undefined;
+
+ is(db.objectStoreNames.length, 1, "Correct objectStoreNames list");
+ is(db.objectStoreNames.item(0), objectStoreName, "Correct name");
+
+ event.target.transaction.oncomplete = grabEventAndContinueHandler;
+ event = yield undefined;
+
+ // Wait for success.
+ event = yield undefined;
+
+ db.close();
+
+ request = indexedDB.open(name, 2);
+ request.onerror = errorHandler;
+ request.onupgradeneeded = grabEventAndContinueHandler;
+ request.onsuccess = unexpectedSuccessHandler;
+ event = yield undefined;
+
+ request.onupgradeneeded = unexpectedSuccessHandler;
+ request.onsuccess = grabEventAndContinueHandler;
+
+ db = event.target.result;
+ let trans = event.target.transaction;
+
+ let oldObjectStore = trans.objectStore(objectStoreName);
+ isnot(oldObjectStore, null, "Correct object store prior to deleting");
+ db.deleteObjectStore(objectStoreName);
+ is(db.objectStoreNames.length, 0, "Correct objectStores list");
+ try {
+ trans.objectStore(objectStoreName);
+ ok(false, "should have thrown");
+ } catch (ex) {
+ ok(ex instanceof DOMException, "Got a DOMException");
+ is(ex.name, "NotFoundError", "expect a NotFoundError");
+ is(ex.code, DOMException.NOT_FOUND_ERR, "expect a NOT_FOUND_ERR");
+ }
+
+ objectStore = db.createObjectStore(objectStoreName, { keyPath: "foo" });
+ is(db.objectStoreNames.length, 1, "Correct objectStoreNames list");
+ is(db.objectStoreNames.item(0), objectStoreName, "Correct name");
+ is(
+ trans.objectStore(objectStoreName),
+ objectStore,
+ "Correct new objectStore"
+ );
+ isnot(oldObjectStore, objectStore, "Old objectStore is not new objectStore");
+
+ request = objectStore.openCursor();
+ request.onerror = errorHandler;
+ request.onsuccess = function (event) {
+ is(event.target.result, null, "ObjectStore shouldn't have any items");
+ testGenerator.next(event);
+ };
+ event = yield undefined;
+
+ db.deleteObjectStore(objectStore.name);
+ is(db.objectStoreNames.length, 0, "Correct objectStores list");
+
+ continueToNextStep();
+ yield undefined;
+
+ trans.oncomplete = grabEventAndContinueHandler;
+ event = yield undefined;
+
+ // Wait for success.
+ event = yield undefined;
+
+ db.close();
+
+ request = indexedDB.open(name, 3);
+ request.onerror = errorHandler;
+ request.onupgradeneeded = grabEventAndContinueHandler;
+ event = yield undefined;
+
+ db = event.target.result;
+ trans = event.target.transaction;
+
+ objectStore = db.createObjectStore(objectStoreName, { keyPath: "foo" });
+
+ request = objectStore.add({ foo: "bar" });
+ request.onerror = errorHandler;
+ request.onsuccess = grabEventAndContinueHandler;
+
+ db.deleteObjectStore(objectStoreName);
+
+ event = yield undefined;
+
+ trans.oncomplete = grabEventAndContinueHandler;
+ event = yield undefined;
+
+ finishTest();
+}