addon-sdk/source/test/test-simple-prefs.js

branch
TOR_BUG_9701
changeset 10
ac0c01689b40
equal deleted inserted replaced
-1:000000000000 0:1c0d040d6a24
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4 "use strict";
5
6 const { Loader } = require("sdk/test/loader");
7 const { setTimeout } = require("sdk/timers");
8 const { emit } = require("sdk/system/events");
9 const { id } = require("sdk/self");
10 const simplePrefs = require("sdk/simple-prefs");
11 const { prefs: sp } = simplePrefs;
12
13 const specialChars = "!@#$%^&*()_-=+[]{}~`\'\"<>,./?;:";
14
15 exports.testIterations = function(assert) {
16 sp["test"] = true;
17 sp["test.test"] = true;
18 let prefAry = [];
19 for (var name in sp ) {
20 prefAry.push(name);
21 }
22 assert.ok("test" in sp);
23 assert.ok(!sp.getPropertyDescriptor);
24 assert.ok(Object.prototype.hasOwnProperty.call(sp, "test"));
25 assert.equal(["test", "test.test"].toString(), prefAry.sort().toString(), "for (x in y) part 1/2 works");
26 assert.equal(["test", "test.test"].toString(), Object.keys(sp).sort().toString(), "Object.keys works");
27
28 delete sp["test"];
29 delete sp["test.test"];
30 let prefAry = [];
31 for (var name in sp ) {
32 prefAry.push(name);
33 }
34 assert.equal([].toString(), prefAry.toString(), "for (x in y) part 2/2 works");
35 }
36
37 exports.testSetGetBool = function(assert) {
38 assert.equal(sp.test, undefined, "Value should not exist");
39 sp.test = true;
40 assert.ok(sp.test, "Value read should be the value previously set");
41 };
42
43 // TEST: setting and getting preferences with special characters work
44 exports.testSpecialChars = function(assert, done) {
45 let chars = specialChars.split("");
46 let len = chars.length;
47
48 let count = 0;
49 chars.forEach(function(char) {
50 let rand = Math.random() + "";
51 simplePrefs.on(char, function onPrefChanged() {
52 simplePrefs.removeListener(char, onPrefChanged);
53 assert.equal(sp[char], rand, "setting pref with a name that is a special char, " + char + ", worked!");
54
55 // end test
56 if (++count == len)
57 done();
58 })
59 sp[char] = rand;
60 });
61 };
62
63 exports.testSetGetInt = function(assert) {
64 assert.equal(sp["test-int"], undefined, "Value should not exist");
65 sp["test-int"] = 1;
66 assert.equal(sp["test-int"], 1, "Value read should be the value previously set");
67 };
68
69 exports.testSetComplex = function(assert) {
70 try {
71 sp["test-complex"] = {test: true};
72 assert.fail("Complex values are not allowed");
73 }
74 catch (e) {
75 assert.pass("Complex values are not allowed");
76 }
77 };
78
79 exports.testSetGetString = function(assert) {
80 assert.equal(sp["test-string"], undefined, "Value should not exist");
81 sp["test-string"] = "test";
82 assert.equal(sp["test-string"], "test", "Value read should be the value previously set");
83 };
84
85 exports.testHasAndRemove = function(assert) {
86 sp.test = true;
87 assert.ok(("test" in sp), "Value exists");
88 delete sp.test;
89 assert.equal(sp.test, undefined, "Value should be undefined");
90 };
91
92 exports.testPrefListener = function(assert, done) {
93 let listener = function(prefName) {
94 simplePrefs.removeListener('test-listener', listener);
95 assert.equal(prefName, "test-listen", "The prefs listener heard the right event");
96 done();
97 };
98
99 simplePrefs.on("test-listen", listener);
100
101 sp["test-listen"] = true;
102
103 // Wildcard listen
104 let toSet = ['wildcard1','wildcard.pref2','wildcard.even.longer.test'];
105 let observed = [];
106
107 let wildlistener = function(prefName) {
108 if (toSet.indexOf(prefName) > -1) observed.push(prefName);
109 };
110
111 simplePrefs.on('',wildlistener);
112
113 toSet.forEach(function(pref) {
114 sp[pref] = true;
115 });
116
117 assert.ok((observed.length == 3 && toSet.length == 3),
118 "Wildcard lengths inconsistent" + JSON.stringify([observed.length, toSet.length]));
119
120 toSet.forEach(function(pref,ii) {
121 assert.equal(observed[ii], pref, "Wildcard observed " + pref);
122 });
123
124 simplePrefs.removeListener('',wildlistener);
125
126 };
127
128 exports.testBtnListener = function(assert, done) {
129 let name = "test-btn-listen";
130 simplePrefs.on(name, function listener() {
131 simplePrefs.removeListener(name, listener);
132 assert.pass("Button press event was heard");
133 done();
134 });
135 emit((id + "-cmdPressed"), { subject: "", data: name });
136 };
137
138 exports.testPrefRemoveListener = function(assert, done) {
139 let counter = 0;
140
141 let listener = function() {
142 assert.pass("The prefs listener was not removed yet");
143
144 if (++counter > 1)
145 assert.fail("The prefs listener was not removed");
146
147 simplePrefs.removeListener("test-listen2", listener);
148
149 sp["test-listen2"] = false;
150
151 setTimeout(function() {
152 assert.pass("The prefs listener was removed");
153 done();
154 }, 250);
155 };
156
157 simplePrefs.on("test-listen2", listener);
158
159 // emit change
160 sp["test-listen2"] = true;
161 };
162
163 // Bug 710117: Test that simple-pref listeners are removed on unload
164 exports.testPrefUnloadListener = function(assert, done) {
165 let loader = Loader(module);
166 let sp = loader.require("sdk/simple-prefs");
167 let counter = 0;
168
169 let listener = function() {
170 assert.equal(++counter, 1, "This listener should only be called once");
171
172 loader.unload();
173
174 // this may not execute after unload, but definitely shouldn't fire listener
175 sp.prefs["test-listen3"] = false;
176 // this should execute, but also definitely shouldn't fire listener
177 require("sdk/simple-prefs").prefs["test-listen3"] = false;
178
179 done();
180 };
181
182 sp.on("test-listen3", listener);
183
184 // emit change
185 sp.prefs["test-listen3"] = true;
186 };
187
188
189 // Bug 710117: Test that simple-pref listeners are removed on unload
190 exports.testPrefUnloadWildcardListener = function(assert, done) {
191 let testpref = "test-wildcard-unload-listener";
192 let loader = Loader(module);
193 let sp = loader.require("sdk/simple-prefs");
194 let counter = 0;
195
196 let listener = function() {
197 assert.equal(++counter, 1, "This listener should only be called once");
198
199 loader.unload();
200
201 // this may not execute after unload, but definitely shouldn't fire listener
202 sp.prefs[testpref] = false;
203 // this should execute, but also definitely shouldn't fire listener
204 require("sdk/simple-prefs").prefs[testpref] = false;
205
206 done();
207 };
208
209 sp.on("", listener);
210 // emit change
211 sp.prefs[testpref] = true;
212 };
213
214
215 // Bug 732919 - JSON.stringify() fails on simple-prefs.prefs
216 exports.testPrefJSONStringification = function(assert) {
217 var sp = require("sdk/simple-prefs").prefs;
218 assert.equal(
219 Object.keys(sp).join(),
220 Object.keys(JSON.parse(JSON.stringify(sp))).join(),
221 "JSON stringification should work.");
222 };
223
224 require('sdk/test').run(exports);

mercurial