1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/settings/tests/test_settings_onsettingchange.html Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,305 @@ 1.4 +<!DOCTYPE html> 1.5 +<html> 1.6 +<!-- 1.7 +https://bugzilla.mozilla.org/show_bug.cgi?id=678695 1.8 +--> 1.9 +<head> 1.10 + <title>Test for Bug 678695 Settings API</title> 1.11 + <script type="text/javascript" src="/MochiKit/MochiKit.js"></script> 1.12 + <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> 1.13 + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> 1.14 +</head> 1.15 +<body> 1.16 + 1.17 +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=678695">Mozilla Bug 678695</a> 1.18 +<p id="display"></p> 1.19 +<div id="content" style="display: none"> 1.20 + 1.21 +</div> 1.22 +<pre id="test"> 1.23 +<script class="testbody" type="text/javascript"> 1.24 + 1.25 +"use strict"; 1.26 + 1.27 +if (SpecialPowers.isMainProcess()) { 1.28 + SpecialPowers.Cu.import("resource://gre/modules/SettingsChangeNotifier.jsm"); 1.29 +} 1.30 + 1.31 +SpecialPowers.addPermission("settings-write", true, document); 1.32 +SpecialPowers.addPermission("settings-read", true, document); 1.33 + 1.34 +var screenBright = {"screen.brightness": 0.7}; 1.35 + 1.36 +function onFailure() { 1.37 + ok(false, "in on Failure!"); 1.38 +} 1.39 + 1.40 +function observer1(setting) { 1.41 + dump("observer 1 called!\n"); 1.42 + is(setting.settingName, "screen.brightness", "Same settingName"); 1.43 + is(setting.settingValue, "0.7", "Same settingvalue"); 1.44 +}; 1.45 + 1.46 +function observer2(setting) { 1.47 + dump("observer 2 called!\n"); 1.48 + is(setting.settingName, "screen.brightness", "Same settingName"); 1.49 + is(setting.settingValue, "0.7", "Same settingvalue"); 1.50 +}; 1.51 + 1.52 +var calls = 0; 1.53 +function observerOnlyCalledOnce(setting) { 1.54 + is(++calls, 1, "Observer only called once!"); 1.55 +}; 1.56 + 1.57 + 1.58 +function observerWithNext(setting) { 1.59 + dump("observer with next called!\n"); 1.60 + is(setting.settingName, "screen.brightness", "Same settingName"); 1.61 + is(setting.settingValue, "0.7", "Same settingvalue"); 1.62 + next(); 1.63 +}; 1.64 + 1.65 +function onsettingschangeWithNext(event) { 1.66 + dump("onsettingschangewithnext called!\n"); 1.67 + is(event.settingName, "screen.brightness", "Same settingName"); 1.68 + is(event.settingValue, "0.7", "Same settingvalue"); 1.69 + next(); 1.70 +}; 1.71 + 1.72 +var cset = {'a':'b','c':[{'d':'e'}]}; 1.73 + 1.74 +function onComplexSettingschangeWithNext(event) { 1.75 + is(event.settingName, "test.key", "Same settingName"); 1.76 + is(event.settingValue['a'], "b", "Same settingvalue"); 1.77 + var c = event.settingValue['c']; 1.78 + ok(Array.isArray(c), "c is array!"); 1.79 + is(c[0]['d'], 'e', "Right settingValue!"); 1.80 + next(); 1.81 +}; 1.82 + 1.83 +var req, req2; 1.84 +var index = 0; 1.85 + 1.86 +var mozSettings = window.navigator.mozSettings; 1.87 + 1.88 +var steps = [ 1.89 + function () { 1.90 + ok(true, "Deleting database"); 1.91 + var lock = mozSettings.createLock(); 1.92 + req = lock.clear(); 1.93 + req.onsuccess = function () { 1.94 + ok(true, "Deleted the database"); 1.95 + }; 1.96 + req.onerror = onFailure; 1.97 + req2 = lock.set(screenBright); 1.98 + req2.onsuccess = function () { 1.99 + ok(true, "set done"); 1.100 + navigator.mozSettings.onsettingchange = onsettingschangeWithNext; 1.101 + next(); 1.102 + } 1.103 + req2.onerror = onFailure; 1.104 + }, 1.105 + function() { 1.106 + ok(true, "testing"); 1.107 + var lock = mozSettings.createLock(); 1.108 + req2 = lock.set(screenBright); 1.109 + req2.onsuccess = function() { 1.110 + ok(true, "end adding onsettingchange"); 1.111 + }; 1.112 + req2.onerror = onFailure; 1.113 + }, 1.114 + function() { 1.115 + ok(true, "test observers"); 1.116 + var lock = mozSettings.createLock(); 1.117 + req = lock.get("screen.brightness"); 1.118 + req.onsuccess = function () { 1.119 + ok(true, "get done"); 1.120 + next(); 1.121 + } 1.122 + req.onerror = onFailure; 1.123 + }, 1.124 + function() { 1.125 + ok(true, "adding Observers 1"); 1.126 + navigator.mozSettings.addObserver("screen.brightness", observer1); 1.127 + navigator.mozSettings.addObserver("screen.brightness", observer1); 1.128 + navigator.mozSettings.addObserver("screen.brightness", observer2); 1.129 + navigator.mozSettings.addObserver("screen.brightness", observerOnlyCalledOnce); 1.130 + var lock = mozSettings.createLock(); 1.131 + req2 = lock.get("screen.brightness"); 1.132 + req2.onsuccess = function() { 1.133 + ok(true, "set observeSetting done!"); 1.134 + next(); 1.135 + }; 1.136 + req2.onerror = onFailure; 1.137 + }, 1.138 + function() { 1.139 + ok(true, "test observers"); 1.140 + var lock = mozSettings.createLock(); 1.141 + req = lock.set(screenBright); 1.142 + req.onsuccess = function () { 1.143 + ok(true, "set1 done"); 1.144 + } 1.145 + req.onerror = onFailure; 1.146 + }, 1.147 + function() { 1.148 + ok(true, "test observers"); 1.149 + var lock = mozSettings.createLock(); 1.150 + req = lock.get("screen.brightness"); 1.151 + navigator.mozSettings.removeObserver("screen.brightness", observerOnlyCalledOnce); 1.152 + req.onsuccess = function () { 1.153 + ok(true, "set1 done"); 1.154 + } 1.155 + req.onerror = onFailure; 1.156 + }, 1.157 + function() { 1.158 + ok(true, "removing Event Listener"); 1.159 + var lock = mozSettings.createLock(); 1.160 + req = lock.set(screenBright); 1.161 + req.onsuccess = function () { 1.162 + ok(true, "set2 done"); 1.163 + navigator.mozSettings.removeObserver("screen.brightness", observer2); 1.164 + navigator.mozSettings.removeObserver("screen.brightness", observer1); 1.165 + navigator.mozSettings.removeObserver("screen.brightness", observer1); 1.166 + } 1.167 + req.onerror = onFailure; 1.168 + }, 1.169 + 1.170 + function() { 1.171 + ok(true, "delete onsettingschange"); 1.172 + var lock = mozSettings.createLock(); 1.173 + navigator.mozSettings.onsettingchange = null; 1.174 + req = lock.set(screenBright); 1.175 + req.onsuccess = function () { 1.176 + ok(true, "set0 done"); 1.177 + next(); 1.178 + } 1.179 + req.onerror = onFailure; 1.180 + }, 1.181 + function () { 1.182 + ok(true, "Waiting for all set callbacks"); 1.183 + var lock = mozSettings.createLock(); 1.184 + req = lock.get("screen.brightness"); 1.185 + req.onsuccess = function() { 1.186 + ok(true, "Done"); 1.187 + next(); 1.188 + } 1.189 + req.onerror = onFailure; 1.190 + }, 1.191 + function() { 1.192 + ok(true, "adding Observers 1"); 1.193 + navigator.mozSettings.addObserver("screen.brightness", observer1); 1.194 + navigator.mozSettings.addObserver("screen.brightness", observer1); 1.195 + navigator.mozSettings.addObserver("screen.brightness", observer2); 1.196 + navigator.mozSettings.addObserver("screen.brightness", observerWithNext); 1.197 + var lock = mozSettings.createLock(); 1.198 + req2 = lock.get("screen.brightness"); 1.199 + req2.onsuccess = function() { 1.200 + ok(true, "set observeSetting done!"); 1.201 + next(); 1.202 + }; 1.203 + req2.onerror = onFailure; 1.204 + }, 1.205 + function() { 1.206 + ok(true, "test observers"); 1.207 + var lock = mozSettings.createLock(); 1.208 + req = lock.set(screenBright); 1.209 + req.onsuccess = function () { 1.210 + ok(true, "set1 done"); 1.211 + } 1.212 + req.onerror = onFailure; 1.213 + }, 1.214 + function() { 1.215 + ok(true, "removing Event Listener"); 1.216 + var lock = mozSettings.createLock(); 1.217 + req = lock.set(screenBright); 1.218 + req.onsuccess = function () { 1.219 + ok(true, "set2 done"); 1.220 + navigator.mozSettings.removeObserver("screen.brightness", observer2); 1.221 + navigator.mozSettings.removeObserver("screen.brightness", observer1); 1.222 + } 1.223 + req.onerror = onFailure; 1.224 + }, 1.225 + function() { 1.226 + ok(true, "test Event Listener"); 1.227 + var lock = mozSettings.createLock(); 1.228 + req = lock.set(screenBright); 1.229 + req.onsuccess = function () { 1.230 + ok(true, "set3 done"); 1.231 + } 1.232 + req.onerror = onFailure; 1.233 + }, 1.234 + function() { 1.235 + ok(true, "removing Event Listener"); 1.236 + var lock = mozSettings.createLock(); 1.237 + navigator.mozSettings.removeObserver("screen.brightness", observerWithNext); 1.238 + req = lock.set(screenBright); 1.239 + req.onsuccess = function () { 1.240 + ok(true, "set4 done"); 1.241 + navigator.mozSettings.removeObserver("screen.brightness", observer2); 1.242 + navigator.mozSettings.removeObserver("screen.brightness", observer1); 1.243 + next(); 1.244 + } 1.245 + req.onerror = onFailure; 1.246 + }, 1.247 + function() { 1.248 + ok(true, "removing Event Listener"); 1.249 + var lock = mozSettings.createLock(); 1.250 + req = lock.get("screen.brightness"); 1.251 + req.onsuccess = function () { 1.252 + ok(true, "get5 done"); 1.253 + next(); 1.254 + } 1.255 + req.onerror = onFailure; 1.256 + }, 1.257 + function() { 1.258 + ok(true, "Clear DB"); 1.259 + var lock = mozSettings.createLock(); 1.260 + req = lock.clear(); 1.261 + req.onsuccess = function () { 1.262 + ok(true, "Deleted the database"); 1.263 + next(); 1.264 + }; 1.265 + req.onerror = onFailure; 1.266 + }, 1.267 + function () { 1.268 + ok(true, "Deleting database"); 1.269 + var lock = mozSettings.createLock(); 1.270 + req = lock.clear(); 1.271 + req.onsuccess = function () { 1.272 + ok(true, "Deleted the database"); 1.273 + navigator.mozSettings.onsettingchange = onComplexSettingschangeWithNext; 1.274 + }; 1.275 + req.onerror = onFailure; 1.276 + req2 = navigator.mozSettings.createLock().set({'test.key': cset}); 1.277 + req2.onsuccess = function () { 1.278 + ok(true, "set done"); 1.279 + } 1.280 + req2.onerror = onFailure; 1.281 + }, 1.282 + 1.283 + function () { 1.284 + ok(true, "all done!\n"); 1.285 + SimpleTest.finish(); 1.286 + } 1.287 +]; 1.288 + 1.289 +function next() { 1.290 + ok(true, "Begin!"); 1.291 + if (index >= steps.length) { 1.292 + ok(false, "Shouldn't get here!"); 1.293 + return; 1.294 + } 1.295 + try { 1.296 + steps[index](); 1.297 + } catch(ex) { 1.298 + ok(false, "Caught exception", ex); 1.299 + } 1.300 + index += 1; 1.301 +} 1.302 + 1.303 +SimpleTest.waitForExplicitFinish(); 1.304 +addLoadEvent(next); 1.305 +</script> 1.306 +</pre> 1.307 +</body> 1.308 +</html>