summaryrefslogtreecommitdiffstats
path: root/dom/indexedDB/test/unit/test_key_requirements.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/indexedDB/test/unit/test_key_requirements.js')
-rw-r--r--dom/indexedDB/test/unit/test_key_requirements.js285
1 files changed, 285 insertions, 0 deletions
diff --git a/dom/indexedDB/test/unit/test_key_requirements.js b/dom/indexedDB/test/unit/test_key_requirements.js
new file mode 100644
index 000000000..90f3ce864
--- /dev/null
+++ b/dom/indexedDB/test/unit/test_key_requirements.js
@@ -0,0 +1,285 @@
+/**
+ * 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";
+
+ let request = indexedDB.open(name, 1);
+ request.onerror = errorHandler;
+ request.onupgradeneeded = grabEventAndContinueHandler;
+ request.onsuccess = grabEventAndContinueHandler;
+ let event = yield undefined;
+
+ let db = event.target.result;
+ db.addEventListener("error", function(event) {
+ event.preventDefault();
+ }, false);
+
+ let objectStore = db.createObjectStore("foo", { autoIncrement: true });
+
+ request = objectStore.add({});
+ request.onerror = errorHandler;
+ request.onsuccess = grabEventAndContinueHandler;
+ event = yield undefined;
+
+ let key1 = event.target.result;
+
+ request = objectStore.put({}, key1);
+ request.onerror = errorHandler;
+ request.onsuccess = grabEventAndContinueHandler;
+ event = yield undefined;
+
+ is(event.target.result, key1, "put gave the same key back");
+
+ let key2 = 10;
+
+ request = objectStore.put({}, key2);
+ request.onerror = errorHandler;
+ request.onsuccess = grabEventAndContinueHandler;
+ event = yield undefined;
+
+ is(event.target.result, key2, "put gave the same key back");
+
+ key2 = 100;
+
+ request = objectStore.add({}, key2);
+ request.onerror = errorHandler;
+ request.onsuccess = grabEventAndContinueHandler;
+ event = yield undefined;
+
+ is(event.target.result, key2, "put gave the same key back");
+
+ try {
+ objectStore.put({});
+ ok(true, "put with no key should not throw with autoIncrement!");
+ }
+ catch (e) {
+ ok(false, "put with no key threw with autoIncrement");
+ }
+
+ try {
+ objectStore.put({});
+ ok(true, "put with no key should not throw with autoIncrement!");
+ }
+ catch (e) {
+ ok(false, "put with no key threw with autoIncrement");
+ }
+
+ try {
+ objectStore.delete();
+ ok(false, "remove with no key should throw!");
+ }
+ catch (e) {
+ ok(true, "remove with no key threw");
+ }
+
+ objectStore = db.createObjectStore("bar");
+
+ try {
+ objectStore.add({});
+ ok(false, "add with no key should throw!");
+ }
+ catch (e) {
+ ok(true, "add with no key threw");
+ }
+
+ try {
+ objectStore.put({});
+ ok(false, "put with no key should throw!");
+ }
+ catch (e) {
+ ok(true, "put with no key threw");
+ }
+
+ try {
+ objectStore.put({});
+ ok(false, "put with no key should throw!");
+ }
+ catch (e) {
+ ok(true, "put with no key threw");
+ }
+
+ try {
+ objectStore.delete();
+ ok(false, "remove with no key should throw!");
+ }
+ catch (e) {
+ ok(true, "remove with no key threw");
+ }
+
+ objectStore = db.createObjectStore("baz", { keyPath: "id" });
+
+ try {
+ objectStore.add({});
+ ok(false, "add with no key should throw!");
+ }
+ catch (e) {
+ ok(true, "add with no key threw");
+ }
+
+ try {
+ objectStore.add({id:5}, 5);
+ ok(false, "add with inline key and passed key should throw!");
+ }
+ catch (e) {
+ ok(true, "add with inline key and passed key threw");
+ }
+
+ try {
+ objectStore.put({});
+ ok(false, "put with no key should throw!");
+ }
+ catch (e) {
+ ok(true, "put with no key threw");
+ }
+
+ try {
+ objectStore.put({});
+ ok(false, "put with no key should throw!");
+ }
+ catch (e) {
+ ok(true, "put with no key threw");
+ }
+
+ try {
+ objectStore.delete();
+ ok(false, "remove with no key should throw!");
+ }
+ catch (e) {
+ ok(true, "remove with no key threw");
+ }
+
+ key1 = 10;
+
+ request = objectStore.add({id:key1});
+ request.onerror = errorHandler;
+ request.onsuccess = grabEventAndContinueHandler;
+ event = yield undefined;
+
+ is(event.target.result, key1, "add gave back the same key");
+
+ request = objectStore.put({id:10});
+ request.onerror = errorHandler;
+ request.onsuccess = grabEventAndContinueHandler;
+ event = yield undefined;
+
+ is(event.target.result, key1, "put gave back the same key");
+
+ request = objectStore.put({id:10});
+ request.onerror = errorHandler;
+ request.onsuccess = grabEventAndContinueHandler;
+ event = yield undefined;
+
+ is(event.target.result, key1, "put gave back the same key");
+
+ request = objectStore.add({id:10});
+ request.addEventListener("error", new ExpectError("ConstraintError", true));
+ request.onsuccess = unexpectedSuccessHandler;
+ event = yield undefined;
+
+ try {
+ objectStore.add({}, null);
+ ok(false, "add with null key should throw!");
+ }
+ catch (e) {
+ ok(true, "add with null key threw");
+ }
+
+ try {
+ objectStore.put({}, null);
+ ok(false, "put with null key should throw!");
+ }
+ catch (e) {
+ ok(true, "put with null key threw");
+ }
+
+ try {
+ objectStore.put({}, null);
+ ok(false, "put with null key should throw!");
+ }
+ catch (e) {
+ ok(true, "put with null key threw");
+ }
+
+ try {
+ objectStore.delete({}, null);
+ ok(false, "remove with null key should throw!");
+ }
+ catch (e) {
+ ok(true, "remove with null key threw");
+ }
+
+ objectStore = db.createObjectStore("bazing", { keyPath: "id",
+ autoIncrement: true });
+
+ request = objectStore.add({});
+ request.onerror = errorHandler;
+ request.onsuccess = grabEventAndContinueHandler;
+ event = yield undefined;
+
+ key1 = event.target.result;
+
+ request = objectStore.put({id:key1});
+ request.onerror = errorHandler;
+ request.onsuccess = grabEventAndContinueHandler;
+ event = yield undefined;
+
+ is(event.target.result, key1, "put gave the same key back");
+
+ key2 = 10;
+
+ request = objectStore.put({id:key2});
+ request.onerror = errorHandler;
+ request.onsuccess = grabEventAndContinueHandler;
+ event = yield undefined;
+
+ is(event.target.result, key2, "put gave the same key back");
+
+ try {
+ objectStore.put({});
+ ok(true, "put with no key should not throw with autoIncrement!");
+ }
+ catch (e) {
+ ok(false, "put with no key threw with autoIncrement");
+ }
+
+ try {
+ objectStore.put({});
+ ok(true, "put with no key should not throw with autoIncrement!");
+ }
+ catch (e) {
+ ok(false, "put with no key threw with autoIncrement");
+ }
+
+ try {
+ objectStore.delete();
+ ok(false, "remove with no key should throw!");
+ }
+ catch (e) {
+ ok(true, "remove with no key threw");
+ }
+
+ try {
+ objectStore.add({id:5}, 5);
+ ok(false, "add with inline key and passed key should throw!");
+ }
+ catch (e) {
+ ok(true, "add with inline key and passed key threw");
+ }
+
+ request = objectStore.delete(key2);
+ request.onerror = errorHandler;
+ request.onsuccess = grabEventAndContinueHandler;
+ event = yield undefined;
+
+ // Wait for success
+ yield undefined;
+
+ finishTest();
+ yield undefined;
+}