dom/settings/tests/test_settings_onsettingchange.html

branch
TOR_BUG_9701
changeset 15
b8a032363ba2
equal deleted inserted replaced
-1:000000000000 0:828c864cb7de
1 <!DOCTYPE html>
2 <html>
3 <!--
4 https://bugzilla.mozilla.org/show_bug.cgi?id=678695
5 -->
6 <head>
7 <title>Test for Bug 678695 Settings API</title>
8 <script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
9 <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
10 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
11 </head>
12 <body>
13
14 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=678695">Mozilla Bug 678695</a>
15 <p id="display"></p>
16 <div id="content" style="display: none">
17
18 </div>
19 <pre id="test">
20 <script class="testbody" type="text/javascript">
21
22 "use strict";
23
24 if (SpecialPowers.isMainProcess()) {
25 SpecialPowers.Cu.import("resource://gre/modules/SettingsChangeNotifier.jsm");
26 }
27
28 SpecialPowers.addPermission("settings-write", true, document);
29 SpecialPowers.addPermission("settings-read", true, document);
30
31 var screenBright = {"screen.brightness": 0.7};
32
33 function onFailure() {
34 ok(false, "in on Failure!");
35 }
36
37 function observer1(setting) {
38 dump("observer 1 called!\n");
39 is(setting.settingName, "screen.brightness", "Same settingName");
40 is(setting.settingValue, "0.7", "Same settingvalue");
41 };
42
43 function observer2(setting) {
44 dump("observer 2 called!\n");
45 is(setting.settingName, "screen.brightness", "Same settingName");
46 is(setting.settingValue, "0.7", "Same settingvalue");
47 };
48
49 var calls = 0;
50 function observerOnlyCalledOnce(setting) {
51 is(++calls, 1, "Observer only called once!");
52 };
53
54
55 function observerWithNext(setting) {
56 dump("observer with next called!\n");
57 is(setting.settingName, "screen.brightness", "Same settingName");
58 is(setting.settingValue, "0.7", "Same settingvalue");
59 next();
60 };
61
62 function onsettingschangeWithNext(event) {
63 dump("onsettingschangewithnext called!\n");
64 is(event.settingName, "screen.brightness", "Same settingName");
65 is(event.settingValue, "0.7", "Same settingvalue");
66 next();
67 };
68
69 var cset = {'a':'b','c':[{'d':'e'}]};
70
71 function onComplexSettingschangeWithNext(event) {
72 is(event.settingName, "test.key", "Same settingName");
73 is(event.settingValue['a'], "b", "Same settingvalue");
74 var c = event.settingValue['c'];
75 ok(Array.isArray(c), "c is array!");
76 is(c[0]['d'], 'e', "Right settingValue!");
77 next();
78 };
79
80 var req, req2;
81 var index = 0;
82
83 var mozSettings = window.navigator.mozSettings;
84
85 var steps = [
86 function () {
87 ok(true, "Deleting database");
88 var lock = mozSettings.createLock();
89 req = lock.clear();
90 req.onsuccess = function () {
91 ok(true, "Deleted the database");
92 };
93 req.onerror = onFailure;
94 req2 = lock.set(screenBright);
95 req2.onsuccess = function () {
96 ok(true, "set done");
97 navigator.mozSettings.onsettingchange = onsettingschangeWithNext;
98 next();
99 }
100 req2.onerror = onFailure;
101 },
102 function() {
103 ok(true, "testing");
104 var lock = mozSettings.createLock();
105 req2 = lock.set(screenBright);
106 req2.onsuccess = function() {
107 ok(true, "end adding onsettingchange");
108 };
109 req2.onerror = onFailure;
110 },
111 function() {
112 ok(true, "test observers");
113 var lock = mozSettings.createLock();
114 req = lock.get("screen.brightness");
115 req.onsuccess = function () {
116 ok(true, "get done");
117 next();
118 }
119 req.onerror = onFailure;
120 },
121 function() {
122 ok(true, "adding Observers 1");
123 navigator.mozSettings.addObserver("screen.brightness", observer1);
124 navigator.mozSettings.addObserver("screen.brightness", observer1);
125 navigator.mozSettings.addObserver("screen.brightness", observer2);
126 navigator.mozSettings.addObserver("screen.brightness", observerOnlyCalledOnce);
127 var lock = mozSettings.createLock();
128 req2 = lock.get("screen.brightness");
129 req2.onsuccess = function() {
130 ok(true, "set observeSetting done!");
131 next();
132 };
133 req2.onerror = onFailure;
134 },
135 function() {
136 ok(true, "test observers");
137 var lock = mozSettings.createLock();
138 req = lock.set(screenBright);
139 req.onsuccess = function () {
140 ok(true, "set1 done");
141 }
142 req.onerror = onFailure;
143 },
144 function() {
145 ok(true, "test observers");
146 var lock = mozSettings.createLock();
147 req = lock.get("screen.brightness");
148 navigator.mozSettings.removeObserver("screen.brightness", observerOnlyCalledOnce);
149 req.onsuccess = function () {
150 ok(true, "set1 done");
151 }
152 req.onerror = onFailure;
153 },
154 function() {
155 ok(true, "removing Event Listener");
156 var lock = mozSettings.createLock();
157 req = lock.set(screenBright);
158 req.onsuccess = function () {
159 ok(true, "set2 done");
160 navigator.mozSettings.removeObserver("screen.brightness", observer2);
161 navigator.mozSettings.removeObserver("screen.brightness", observer1);
162 navigator.mozSettings.removeObserver("screen.brightness", observer1);
163 }
164 req.onerror = onFailure;
165 },
166
167 function() {
168 ok(true, "delete onsettingschange");
169 var lock = mozSettings.createLock();
170 navigator.mozSettings.onsettingchange = null;
171 req = lock.set(screenBright);
172 req.onsuccess = function () {
173 ok(true, "set0 done");
174 next();
175 }
176 req.onerror = onFailure;
177 },
178 function () {
179 ok(true, "Waiting for all set callbacks");
180 var lock = mozSettings.createLock();
181 req = lock.get("screen.brightness");
182 req.onsuccess = function() {
183 ok(true, "Done");
184 next();
185 }
186 req.onerror = onFailure;
187 },
188 function() {
189 ok(true, "adding Observers 1");
190 navigator.mozSettings.addObserver("screen.brightness", observer1);
191 navigator.mozSettings.addObserver("screen.brightness", observer1);
192 navigator.mozSettings.addObserver("screen.brightness", observer2);
193 navigator.mozSettings.addObserver("screen.brightness", observerWithNext);
194 var lock = mozSettings.createLock();
195 req2 = lock.get("screen.brightness");
196 req2.onsuccess = function() {
197 ok(true, "set observeSetting done!");
198 next();
199 };
200 req2.onerror = onFailure;
201 },
202 function() {
203 ok(true, "test observers");
204 var lock = mozSettings.createLock();
205 req = lock.set(screenBright);
206 req.onsuccess = function () {
207 ok(true, "set1 done");
208 }
209 req.onerror = onFailure;
210 },
211 function() {
212 ok(true, "removing Event Listener");
213 var lock = mozSettings.createLock();
214 req = lock.set(screenBright);
215 req.onsuccess = function () {
216 ok(true, "set2 done");
217 navigator.mozSettings.removeObserver("screen.brightness", observer2);
218 navigator.mozSettings.removeObserver("screen.brightness", observer1);
219 }
220 req.onerror = onFailure;
221 },
222 function() {
223 ok(true, "test Event Listener");
224 var lock = mozSettings.createLock();
225 req = lock.set(screenBright);
226 req.onsuccess = function () {
227 ok(true, "set3 done");
228 }
229 req.onerror = onFailure;
230 },
231 function() {
232 ok(true, "removing Event Listener");
233 var lock = mozSettings.createLock();
234 navigator.mozSettings.removeObserver("screen.brightness", observerWithNext);
235 req = lock.set(screenBright);
236 req.onsuccess = function () {
237 ok(true, "set4 done");
238 navigator.mozSettings.removeObserver("screen.brightness", observer2);
239 navigator.mozSettings.removeObserver("screen.brightness", observer1);
240 next();
241 }
242 req.onerror = onFailure;
243 },
244 function() {
245 ok(true, "removing Event Listener");
246 var lock = mozSettings.createLock();
247 req = lock.get("screen.brightness");
248 req.onsuccess = function () {
249 ok(true, "get5 done");
250 next();
251 }
252 req.onerror = onFailure;
253 },
254 function() {
255 ok(true, "Clear DB");
256 var lock = mozSettings.createLock();
257 req = lock.clear();
258 req.onsuccess = function () {
259 ok(true, "Deleted the database");
260 next();
261 };
262 req.onerror = onFailure;
263 },
264 function () {
265 ok(true, "Deleting database");
266 var lock = mozSettings.createLock();
267 req = lock.clear();
268 req.onsuccess = function () {
269 ok(true, "Deleted the database");
270 navigator.mozSettings.onsettingchange = onComplexSettingschangeWithNext;
271 };
272 req.onerror = onFailure;
273 req2 = navigator.mozSettings.createLock().set({'test.key': cset});
274 req2.onsuccess = function () {
275 ok(true, "set done");
276 }
277 req2.onerror = onFailure;
278 },
279
280 function () {
281 ok(true, "all done!\n");
282 SimpleTest.finish();
283 }
284 ];
285
286 function next() {
287 ok(true, "Begin!");
288 if (index >= steps.length) {
289 ok(false, "Shouldn't get here!");
290 return;
291 }
292 try {
293 steps[index]();
294 } catch(ex) {
295 ok(false, "Caught exception", ex);
296 }
297 index += 1;
298 }
299
300 SimpleTest.waitForExplicitFinish();
301 addLoadEvent(next);
302 </script>
303 </pre>
304 </body>
305 </html>

mercurial