1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/indexedDB/test/unit/test_setVersion_events.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,178 @@ 1.4 +/** 1.5 + * Any copyright is dedicated to the Public Domain. 1.6 + * http://creativecommons.org/publicdomain/zero/1.0/ 1.7 + */ 1.8 + 1.9 +var testGenerator = testSteps(); 1.10 + 1.11 +function testSteps() 1.12 +{ 1.13 + const name = this.window ? window.location.pathname : "Splendid Test"; 1.14 + 1.15 + // Open a datbase for the first time. 1.16 + let request = indexedDB.open(name, 1); 1.17 + 1.18 + // Sanity checks 1.19 + ok(request instanceof IDBRequest, "Request should be an IDBRequest"); 1.20 + ok(request instanceof IDBOpenDBRequest, "Request should be an IDBOpenDBRequest"); 1.21 + //ok(request instanceof EventTarget, "Request should be an EventTarget"); 1.22 + is(request.source, null, "Request should have no source"); 1.23 + try { 1.24 + request.result; 1.25 + ok(false, "Getter should have thrown!"); 1.26 + } catch (e if e.result == 0x80660006 /* NS_ERROR_DOM_INDEXEDDB_NOTALLOWED_ERR */) { 1.27 + ok(true, "Getter threw the right exception"); 1.28 + } 1.29 + 1.30 + request.onerror = errorHandler; 1.31 + request.onsuccess = grabEventAndContinueHandler; 1.32 + let event = yield undefined; 1.33 + 1.34 + let versionChangeEventCount = 0; 1.35 + let db1, db2, db3; 1.36 + 1.37 + db1 = event.target.result; 1.38 + db1.addEventListener("versionchange", function(event) { 1.39 + ok(true, "Got version change event"); 1.40 + ok(event instanceof IDBVersionChangeEvent, "Event is of the right type"); 1.41 + is(event.target.source, null, "Correct source"); 1.42 + is(event.target, db1, "Correct target"); 1.43 + is(event.target.version, 1, "Correct db version"); 1.44 + is(event.oldVersion, 1, "Correct event oldVersion"); 1.45 + is(event.newVersion, 2, "Correct event newVersion"); 1.46 + is(versionChangeEventCount++, 0, "Correct count"); 1.47 + db1.close(); 1.48 + }, false); 1.49 + 1.50 + // Open the database again and trigger an upgrade that should succeed 1.51 + request = indexedDB.open(name, 2); 1.52 + request.onerror = errorHandler; 1.53 + request.onsuccess = errorHandler; 1.54 + request.onupgradeneeded = grabEventAndContinueHandler; 1.55 + if (SpecialPowers.isMainProcess()) { 1.56 + request.onblocked = errorHandler; 1.57 + } 1.58 + else { 1.59 + todo(false, "Need to fix blocked events in child processes!"); 1.60 + } 1.61 + event = yield undefined; 1.62 + 1.63 + // Test the upgradeneeded event. 1.64 + ok(event instanceof IDBVersionChangeEvent, "Event is of the right type"); 1.65 + ok(event.target.result instanceof IDBDatabase, "Good result"); 1.66 + db2 = event.target.result; 1.67 + is(event.target.transaction.mode, "versionchange", 1.68 + "Correct mode"); 1.69 + is(db2.version, 2, "Correct db version"); 1.70 + is(event.oldVersion, 1, "Correct event oldVersion"); 1.71 + is(event.newVersion, 2, "Correct event newVersion"); 1.72 + 1.73 + request.onupgradeneeded = errorHandler; 1.74 + request.onsuccess = grabEventAndContinueHandler; 1.75 + event = yield undefined; 1.76 + 1.77 + db2.addEventListener("versionchange", function(event) { 1.78 + ok(true, "Got version change event"); 1.79 + ok(event instanceof IDBVersionChangeEvent, "Event is of the right type"); 1.80 + is(event.target.source, null, "Correct source"); 1.81 + is(event.target, db2, "Correct target"); 1.82 + is(event.target.version, 2, "Correct db version"); 1.83 + is(event.oldVersion, 2, "Correct event oldVersion"); 1.84 + is(event.newVersion, 3, "Correct event newVersion"); 1.85 + is(versionChangeEventCount++, 1, "Correct count"); 1.86 + }, false); 1.87 + 1.88 + // Test opening the existing version again 1.89 + request = indexedDB.open(name, 2); 1.90 + request.onerror = errorHandler; 1.91 + request.onsuccess = grabEventAndContinueHandler; 1.92 + if (SpecialPowers.isMainProcess()) { 1.93 + request.onblocked = errorHandler; 1.94 + } 1.95 + else { 1.96 + todo(false, "Need to fix blocked events in child processes!"); 1.97 + } 1.98 + event = yield undefined; 1.99 + 1.100 + db3 = event.target.result; 1.101 + 1.102 + // Test an upgrade that should fail 1.103 + request = indexedDB.open(name, 3); 1.104 + request.onerror = errorHandler; 1.105 + request.onsuccess = errorHandler; 1.106 + request.onupgradeneeded = errorHandler; 1.107 + request.onblocked = grabEventAndContinueHandler; 1.108 + 1.109 + event = yield undefined; 1.110 + ok(true, "Got version change blocked event"); 1.111 + ok(event instanceof IDBVersionChangeEvent, "Event is of the right type"); 1.112 + is(event.target.source, null, "Correct source"); 1.113 + is(event.target.transaction, null, "Correct transaction"); 1.114 + is(event.target, request, "Correct target"); 1.115 + is(db3.version, 2, "Correct db version"); 1.116 + is(event.oldVersion, 2, "Correct event oldVersion"); 1.117 + is(event.newVersion, 3, "Correct event newVersion"); 1.118 + versionChangeEventCount++; 1.119 + db2.close(); 1.120 + db3.close(); 1.121 + 1.122 + request.onupgradeneeded = grabEventAndContinueHandler; 1.123 + request.onsuccess = grabEventAndContinueHandler; 1.124 + 1.125 + event = yield undefined; 1.126 + event = yield undefined; 1.127 + 1.128 + db3 = event.target.result; 1.129 + db3.close(); 1.130 + 1.131 + // Test another upgrade that should succeed. 1.132 + request = indexedDB.open(name, 4); 1.133 + request.onerror = errorHandler; 1.134 + request.onsuccess = errorHandler; 1.135 + request.onupgradeneeded = grabEventAndContinueHandler; 1.136 + if (SpecialPowers.isMainProcess()) { 1.137 + request.onblocked = errorHandler; 1.138 + } 1.139 + else { 1.140 + todo(false, "Need to fix blocked events in child processes!"); 1.141 + } 1.142 + 1.143 + event = yield undefined; 1.144 + 1.145 + ok(event instanceof IDBVersionChangeEvent, "Event is of the right type"); 1.146 + ok(event.target.result instanceof IDBDatabase, "Good result"); 1.147 + is(event.target.transaction.mode, "versionchange", 1.148 + "Correct mode"); 1.149 + is(event.oldVersion, 3, "Correct event oldVersion"); 1.150 + is(event.newVersion, 4, "Correct event newVersion"); 1.151 + 1.152 + request.onsuccess = grabEventAndContinueHandler; 1.153 + 1.154 + event = yield undefined; 1.155 + ok(event.target.result instanceof IDBDatabase, "Expect a database here"); 1.156 + is(event.target.result.version, 4, "Right version"); 1.157 + is(db3.version, 3, "After closing the version should not change!"); 1.158 + is(db2.version, 2, "After closing the version should not change!"); 1.159 + is(db1.version, 1, "After closing the version should not change!"); 1.160 + 1.161 + is(versionChangeEventCount, 3, "Saw all expected events"); 1.162 + 1.163 + event = new IDBVersionChangeEvent("versionchange"); 1.164 + ok(event, "Should be able to create an event with just passing in the type"); 1.165 + event = new IDBVersionChangeEvent("versionchange", {oldVersion: 1}); 1.166 + ok(event, "Should be able to create an event with just the old version"); 1.167 + is(event.oldVersion, 1, "Correct old version"); 1.168 + is(event.newVersion, null, "Correct new version"); 1.169 + event = new IDBVersionChangeEvent("versionchange", {newVersion: 1}); 1.170 + ok(event, "Should be able to create an event with just the new version"); 1.171 + is(event.oldVersion, 0, "Correct old version"); 1.172 + is(event.newVersion, 1, "Correct new version"); 1.173 + event = new IDBVersionChangeEvent("versionchange", {oldVersion: 1, newVersion: 2}); 1.174 + ok(event, "Should be able to create an event with both versions"); 1.175 + is(event.oldVersion, 1, "Correct old version"); 1.176 + is(event.newVersion, 2, "Correct new version"); 1.177 + 1.178 + finishTest(); 1.179 + yield undefined; 1.180 +} 1.181 +