1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
|
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
const { Cc, Ci, Cu } = require("chrome");
const prefs = require("sdk/preferences/service");
const Branch = prefs.Branch;
const BundleService = Cc["@mozilla.org/intl/stringbundle;1"].getService(Ci.nsIStringBundleService);
const specialChars = "!@#$%^&*()_-=+[]{}~`\'\"<>,./?;:";
exports.testReset = function(assert) {
prefs.reset("test_reset_pref");
assert.equal(prefs.has("test_reset_pref"), false);
assert.equal(prefs.isSet("test_reset_pref"), false);
prefs.set("test_reset_pref", 5);
assert.equal(prefs.has("test_reset_pref"), true);
assert.equal(prefs.isSet("test_reset_pref"), true);
assert.equal(prefs.keys("test_reset_pref").toString(), "test_reset_pref");
};
exports.testGetAndSet = function(assert) {
let svc = Cc["@mozilla.org/preferences-service;1"].
getService(Ci.nsIPrefService).
getBranch(null);
svc.setCharPref("test_set_get_pref", "a normal string");
assert.equal(prefs.get("test_set_get_pref"), "a normal string",
"preferences-service should read from " +
"application-wide preferences service");
// test getting a pref that does not exist,
// and where we provide no default
assert.equal(
prefs.get("test_dne_get_pref", "default"),
"default",
"default was used for a pref that does not exist");
assert.equal(
prefs.get("test_dne_get_pref"),
undefined,
"undefined was returned for a pref that does not exist with no default");
prefs.set("test_set_get_pref.integer", 1);
assert.equal(prefs.get("test_set_get_pref.integer"), 1,
"set/get integer preference should work");
assert.equal(
prefs.keys("test_set_get_pref").sort().toString(),
["test_set_get_pref.integer","test_set_get_pref"].sort().toString(),
"the key list is correct");
prefs.set("test_set_get_number_pref", 42);
assert.throws(
() => prefs.set("test_set_get_number_pref", 3.14159),
/cannot store non-integer number: 3.14159/,
"setting a float preference should raise an error"
);
assert.equal(prefs.get("test_set_get_number_pref"),
42,
"bad-type write attempt should not overwrite");
// 0x80000000 (bad), 0x7fffffff (ok), -0x80000000 (ok), -0x80000001 (bad)
assert.throws(
() => prefs.set("test_set_get_number_pref", 0x80000000),
/32\-bit/,
"setting an int pref above 2^31-1 shouldn't work"
);
assert.equal(prefs.get("test_set_get_number_pref"), 42,
"out-of-range write attempt should not overwrite 1");
prefs.set("test_set_get_number_pref", 0x7fffffff);
assert.equal(prefs.get("test_set_get_number_pref"),
0x7fffffff,
"in-range write attempt should work 1");
prefs.set("test_set_get_number_pref", -0x80000000);
assert.equal(prefs.get("test_set_get_number_pref"),
-0x80000000,
"in-range write attempt should work 2");
assert.throws(
() => prefs.set("test_set_get_number_pref", -0x80000001),
/32\-bit/,
"setting an int pref below -(2^31) shouldn't work"
);
assert.equal(prefs.get("test_set_get_number_pref"), -0x80000000,
"out-of-range write attempt should not overwrite 2");
prefs.set("test_set_get_pref.string", "foo");
assert.equal(prefs.get("test_set_get_pref.string"), "foo",
"set/get string preference should work");
prefs.set("test_set_get_pref.boolean", true);
assert.equal(prefs.get("test_set_get_pref.boolean"), true,
"set/get boolean preference should work");
prefs.set("test_set_get_unicode_pref", String.fromCharCode(960));
assert.equal(prefs.get("test_set_get_unicode_pref"),
String.fromCharCode(960),
"set/get unicode preference should work");
[ null, [], undefined ].forEach((value) => {
assert.throws(
() => prefs.set("test_set_pref", value),
new RegExp("can't set pref test_set_pref to value '" + value + "'; " +
"it isn't a string, number, or boolean", "i"),
"Setting a pref to " + uneval(value) + " should raise error"
);
});
};
exports.testPrefClass = function(assert) {
var branch = Branch("test_foo");
assert.equal(branch.test, undefined, "test_foo.test is undefined");
branch.test = true;
assert.equal(branch.test, true, "test_foo.test is true");
delete branch.test;
assert.equal(branch.test, undefined, "test_foo.test is undefined");
};
exports.testGetSetLocalized = function(assert) {
let prefName = "general.useragent.locale";
// Ensure that "general.useragent.locale" is a 'localized' pref
let bundleURL = "chrome://global/locale/intl.properties";
prefs.setLocalized(prefName, bundleURL);
// Fetch the expected value directly from the property file
let expectedValue = BundleService.createBundle(bundleURL).
GetStringFromName(prefName).
toLowerCase();
assert.equal(prefs.getLocalized(prefName).toLowerCase(),
expectedValue,
"get localized preference");
// Undo our modification
prefs.reset(prefName);
}
// TEST: setting and getting preferences with special characters work
exports.testSpecialChars = function(assert) {
let chars = specialChars.split('');
const ROOT = "test.";
chars.forEach((char) => {
let rand = Math.random() + "";
prefs.set(ROOT + char, rand);
assert.equal(prefs.get(ROOT+char), rand, "setting pref with a name that is a special char, " + char + ", worked!");
});
};
require("sdk/test").run(exports);
|