dom/settings/tests/test_settings_service.js

branch
TOR_BUG_9701
changeset 15
b8a032363ba2
equal deleted inserted replaced
-1:000000000000 0:1c5e5623ea04
1 "use strict";
2
3 const Cu = Components.utils;
4 const Cc = Components.classes;
5 const Ci = Components.interfaces;
6
7 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
8 Cu.import("resource://gre/modules/Services.jsm");
9
10 SimpleTest.waitForExplicitFinish();
11
12 XPCOMUtils.defineLazyServiceGetter(this, "SettingsService",
13 "@mozilla.org/settingsService;1",
14 "nsISettingsService");
15
16 let tests = [
17 /* Callback tests */
18 function() {
19 let callbackCount = 10;
20
21 let callback = {
22 handle: function(name, result) {
23 switch (callbackCount) {
24 case 10:
25 case 9:
26 is(result, true, "result is true");
27 break;
28 case 8:
29 case 7:
30 is(result, false, "result is false");
31 break;
32 case 6:
33 case 5:
34 is(result, 9, "result is 9");
35 break;
36 case 4:
37 case 3:
38 is(result, 9.4, "result is 9.4");
39 break;
40 case 2:
41 is(result, false, "result is false");
42 break;
43 case 1:
44 is(result, null, "result is null");
45 break;
46 default:
47 ok(false, "Unexpected call: " + callbackCount);
48 }
49
50 --callbackCount;
51 if (callbackCount === 0) {
52 next();
53 }
54 },
55
56 handleError: function(name) {
57 ok(false, "error: " + name);
58 }
59 };
60
61 let lock = SettingsService.createLock();
62 let lock1 = SettingsService.createLock();
63
64 lock.set("asdf", true, callback, null);
65 lock1.get("asdf", callback);
66 lock.get("asdf", callback);
67 lock.set("asdf", false, callback, null);
68 lock.get("asdf", callback);
69 lock.set("int", 9, callback, null);
70 lock.get("int", callback);
71 lock.set("doub", 9.4, callback, null);
72 lock.get("doub", callback);
73 lock1.get("asdfxxx", callback);
74 },
75
76 /* Observer tests */
77 function() {
78 const XPCOM_SHUTDOWN = "xpcom-shutdown";
79 const MOZSETTINGS_CHANGED = "mozsettings-changed";
80
81 const TEST_OBSERVER_KEY = "test.observer.key";
82 const TEST_OBSERVER_VALUE = true;
83 const TEST_OBSERVER_MESSAGE = "test.observer.message";
84
85 let observerCount = 2;
86
87 function observer(subject, topic, data) {
88 if (topic === XPCOM_SHUTDOWN) {
89 Services.obs.removeObserver(this, XPCOM_SHUTDOWN);
90 Services.obs.removeObserver(this, MOZSETTINGS_CHANGED);
91 return;
92 }
93
94 if (topic !== MOZSETTINGS_CHANGED) {
95 ok(false, "Event is not mozsettings-changed.");
96 return;
97 }
98
99 data = JSON.parse(data);
100
101 function checkProp(name, type, value) {
102 ok(name in data, "data." + name + " is present");
103 is(typeof data[name], type, "data." + name + " is " + type);
104 is(data[name], value, "data." + name + " is " + value);
105 }
106
107 checkProp("key", "string", TEST_OBSERVER_KEY);
108 checkProp("value", "boolean", TEST_OBSERVER_VALUE);
109 if (observerCount === 2) {
110 checkProp("message", "object", null);
111 } else {
112 checkProp("message", "string", TEST_OBSERVER_MESSAGE);
113 }
114 --observerCount;
115
116 if (observerCount === 0) {
117 next();
118 }
119 }
120
121 Services.obs.addObserver(observer, XPCOM_SHUTDOWN, false);
122 Services.obs.addObserver(observer, MOZSETTINGS_CHANGED, false);
123
124 let lock = SettingsService.createLock();
125 lock.set(TEST_OBSERVER_KEY, TEST_OBSERVER_VALUE, null, null);
126 lock.set(TEST_OBSERVER_KEY, TEST_OBSERVER_VALUE, null, TEST_OBSERVER_MESSAGE);
127 }
128 ];
129
130 function next() {
131 let step = tests.shift();
132 if (step) {
133 try {
134 step();
135 } catch(e) {
136 ok(false, "Test threw: " + e);
137 }
138 } else {
139 SimpleTest.finish();
140 }
141 }
142
143 next();

mercurial