1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/addon-sdk/source/test/test-simple-prefs.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,224 @@ 1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.7 +"use strict"; 1.8 + 1.9 +const { Loader } = require("sdk/test/loader"); 1.10 +const { setTimeout } = require("sdk/timers"); 1.11 +const { emit } = require("sdk/system/events"); 1.12 +const { id } = require("sdk/self"); 1.13 +const simplePrefs = require("sdk/simple-prefs"); 1.14 +const { prefs: sp } = simplePrefs; 1.15 + 1.16 +const specialChars = "!@#$%^&*()_-=+[]{}~`\'\"<>,./?;:"; 1.17 + 1.18 +exports.testIterations = function(assert) { 1.19 + sp["test"] = true; 1.20 + sp["test.test"] = true; 1.21 + let prefAry = []; 1.22 + for (var name in sp ) { 1.23 + prefAry.push(name); 1.24 + } 1.25 + assert.ok("test" in sp); 1.26 + assert.ok(!sp.getPropertyDescriptor); 1.27 + assert.ok(Object.prototype.hasOwnProperty.call(sp, "test")); 1.28 + assert.equal(["test", "test.test"].toString(), prefAry.sort().toString(), "for (x in y) part 1/2 works"); 1.29 + assert.equal(["test", "test.test"].toString(), Object.keys(sp).sort().toString(), "Object.keys works"); 1.30 + 1.31 + delete sp["test"]; 1.32 + delete sp["test.test"]; 1.33 + let prefAry = []; 1.34 + for (var name in sp ) { 1.35 + prefAry.push(name); 1.36 + } 1.37 + assert.equal([].toString(), prefAry.toString(), "for (x in y) part 2/2 works"); 1.38 +} 1.39 + 1.40 +exports.testSetGetBool = function(assert) { 1.41 + assert.equal(sp.test, undefined, "Value should not exist"); 1.42 + sp.test = true; 1.43 + assert.ok(sp.test, "Value read should be the value previously set"); 1.44 +}; 1.45 + 1.46 +// TEST: setting and getting preferences with special characters work 1.47 +exports.testSpecialChars = function(assert, done) { 1.48 + let chars = specialChars.split(""); 1.49 + let len = chars.length; 1.50 + 1.51 + let count = 0; 1.52 + chars.forEach(function(char) { 1.53 + let rand = Math.random() + ""; 1.54 + simplePrefs.on(char, function onPrefChanged() { 1.55 + simplePrefs.removeListener(char, onPrefChanged); 1.56 + assert.equal(sp[char], rand, "setting pref with a name that is a special char, " + char + ", worked!"); 1.57 + 1.58 + // end test 1.59 + if (++count == len) 1.60 + done(); 1.61 + }) 1.62 + sp[char] = rand; 1.63 + }); 1.64 +}; 1.65 + 1.66 +exports.testSetGetInt = function(assert) { 1.67 + assert.equal(sp["test-int"], undefined, "Value should not exist"); 1.68 + sp["test-int"] = 1; 1.69 + assert.equal(sp["test-int"], 1, "Value read should be the value previously set"); 1.70 +}; 1.71 + 1.72 +exports.testSetComplex = function(assert) { 1.73 + try { 1.74 + sp["test-complex"] = {test: true}; 1.75 + assert.fail("Complex values are not allowed"); 1.76 + } 1.77 + catch (e) { 1.78 + assert.pass("Complex values are not allowed"); 1.79 + } 1.80 +}; 1.81 + 1.82 +exports.testSetGetString = function(assert) { 1.83 + assert.equal(sp["test-string"], undefined, "Value should not exist"); 1.84 + sp["test-string"] = "test"; 1.85 + assert.equal(sp["test-string"], "test", "Value read should be the value previously set"); 1.86 +}; 1.87 + 1.88 +exports.testHasAndRemove = function(assert) { 1.89 + sp.test = true; 1.90 + assert.ok(("test" in sp), "Value exists"); 1.91 + delete sp.test; 1.92 + assert.equal(sp.test, undefined, "Value should be undefined"); 1.93 +}; 1.94 + 1.95 +exports.testPrefListener = function(assert, done) { 1.96 + let listener = function(prefName) { 1.97 + simplePrefs.removeListener('test-listener', listener); 1.98 + assert.equal(prefName, "test-listen", "The prefs listener heard the right event"); 1.99 + done(); 1.100 + }; 1.101 + 1.102 + simplePrefs.on("test-listen", listener); 1.103 + 1.104 + sp["test-listen"] = true; 1.105 + 1.106 + // Wildcard listen 1.107 + let toSet = ['wildcard1','wildcard.pref2','wildcard.even.longer.test']; 1.108 + let observed = []; 1.109 + 1.110 + let wildlistener = function(prefName) { 1.111 + if (toSet.indexOf(prefName) > -1) observed.push(prefName); 1.112 + }; 1.113 + 1.114 + simplePrefs.on('',wildlistener); 1.115 + 1.116 + toSet.forEach(function(pref) { 1.117 + sp[pref] = true; 1.118 + }); 1.119 + 1.120 + assert.ok((observed.length == 3 && toSet.length == 3), 1.121 + "Wildcard lengths inconsistent" + JSON.stringify([observed.length, toSet.length])); 1.122 + 1.123 + toSet.forEach(function(pref,ii) { 1.124 + assert.equal(observed[ii], pref, "Wildcard observed " + pref); 1.125 + }); 1.126 + 1.127 + simplePrefs.removeListener('',wildlistener); 1.128 + 1.129 +}; 1.130 + 1.131 +exports.testBtnListener = function(assert, done) { 1.132 + let name = "test-btn-listen"; 1.133 + simplePrefs.on(name, function listener() { 1.134 + simplePrefs.removeListener(name, listener); 1.135 + assert.pass("Button press event was heard"); 1.136 + done(); 1.137 + }); 1.138 + emit((id + "-cmdPressed"), { subject: "", data: name }); 1.139 +}; 1.140 + 1.141 +exports.testPrefRemoveListener = function(assert, done) { 1.142 + let counter = 0; 1.143 + 1.144 + let listener = function() { 1.145 + assert.pass("The prefs listener was not removed yet"); 1.146 + 1.147 + if (++counter > 1) 1.148 + assert.fail("The prefs listener was not removed"); 1.149 + 1.150 + simplePrefs.removeListener("test-listen2", listener); 1.151 + 1.152 + sp["test-listen2"] = false; 1.153 + 1.154 + setTimeout(function() { 1.155 + assert.pass("The prefs listener was removed"); 1.156 + done(); 1.157 + }, 250); 1.158 + }; 1.159 + 1.160 + simplePrefs.on("test-listen2", listener); 1.161 + 1.162 + // emit change 1.163 + sp["test-listen2"] = true; 1.164 +}; 1.165 + 1.166 +// Bug 710117: Test that simple-pref listeners are removed on unload 1.167 +exports.testPrefUnloadListener = function(assert, done) { 1.168 + let loader = Loader(module); 1.169 + let sp = loader.require("sdk/simple-prefs"); 1.170 + let counter = 0; 1.171 + 1.172 + let listener = function() { 1.173 + assert.equal(++counter, 1, "This listener should only be called once"); 1.174 + 1.175 + loader.unload(); 1.176 + 1.177 + // this may not execute after unload, but definitely shouldn't fire listener 1.178 + sp.prefs["test-listen3"] = false; 1.179 + // this should execute, but also definitely shouldn't fire listener 1.180 + require("sdk/simple-prefs").prefs["test-listen3"] = false; 1.181 + 1.182 + done(); 1.183 + }; 1.184 + 1.185 + sp.on("test-listen3", listener); 1.186 + 1.187 + // emit change 1.188 + sp.prefs["test-listen3"] = true; 1.189 +}; 1.190 + 1.191 + 1.192 +// Bug 710117: Test that simple-pref listeners are removed on unload 1.193 +exports.testPrefUnloadWildcardListener = function(assert, done) { 1.194 + let testpref = "test-wildcard-unload-listener"; 1.195 + let loader = Loader(module); 1.196 + let sp = loader.require("sdk/simple-prefs"); 1.197 + let counter = 0; 1.198 + 1.199 + let listener = function() { 1.200 + assert.equal(++counter, 1, "This listener should only be called once"); 1.201 + 1.202 + loader.unload(); 1.203 + 1.204 + // this may not execute after unload, but definitely shouldn't fire listener 1.205 + sp.prefs[testpref] = false; 1.206 + // this should execute, but also definitely shouldn't fire listener 1.207 + require("sdk/simple-prefs").prefs[testpref] = false; 1.208 + 1.209 + done(); 1.210 + }; 1.211 + 1.212 + sp.on("", listener); 1.213 + // emit change 1.214 + sp.prefs[testpref] = true; 1.215 +}; 1.216 + 1.217 + 1.218 +// Bug 732919 - JSON.stringify() fails on simple-prefs.prefs 1.219 +exports.testPrefJSONStringification = function(assert) { 1.220 + var sp = require("sdk/simple-prefs").prefs; 1.221 + assert.equal( 1.222 + Object.keys(sp).join(), 1.223 + Object.keys(JSON.parse(JSON.stringify(sp))).join(), 1.224 + "JSON stringification should work."); 1.225 +}; 1.226 + 1.227 +require('sdk/test').run(exports);