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

Thu, 15 Jan 2015 15:59:08 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 15 Jan 2015 15:59:08 +0100
branch
TOR_BUG_9701
changeset 10
ac0c01689b40
permissions
-rw-r--r--

Implement a real Private Browsing Mode condition by changing the API/ABI;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.

     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";
     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;
    13 const specialChars = "!@#$%^&*()_-=+[]{}~`\'\"<>,./?;:";
    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");
    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 }
    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 };
    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;
    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!");
    55       // end test
    56       if (++count == len)
    57         done();
    58     })
    59     sp[char] = rand;
    60   });
    61 };
    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 };
    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 };
    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 };
    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 };
    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   };
    99   simplePrefs.on("test-listen", listener);
   101   sp["test-listen"] = true;
   103   // Wildcard listen
   104   let toSet = ['wildcard1','wildcard.pref2','wildcard.even.longer.test'];
   105   let observed = [];
   107   let wildlistener = function(prefName) {
   108     if (toSet.indexOf(prefName) > -1) observed.push(prefName);
   109   };
   111   simplePrefs.on('',wildlistener);
   113   toSet.forEach(function(pref) {
   114     sp[pref] = true;
   115   });
   117   assert.ok((observed.length == 3 && toSet.length == 3),
   118       "Wildcard lengths inconsistent" + JSON.stringify([observed.length, toSet.length]));
   120   toSet.forEach(function(pref,ii) {
   121     assert.equal(observed[ii], pref, "Wildcard observed " + pref);
   122   });
   124   simplePrefs.removeListener('',wildlistener);
   126 };
   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 };
   138 exports.testPrefRemoveListener = function(assert, done) {
   139   let counter = 0;
   141   let listener = function() {
   142     assert.pass("The prefs listener was not removed yet");
   144     if (++counter > 1)
   145       assert.fail("The prefs listener was not removed");
   147     simplePrefs.removeListener("test-listen2", listener);
   149     sp["test-listen2"] = false;
   151     setTimeout(function() {
   152       assert.pass("The prefs listener was removed");
   153       done();
   154     }, 250);
   155   };
   157   simplePrefs.on("test-listen2", listener);
   159   // emit change
   160   sp["test-listen2"] = true;
   161 };
   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;
   169   let listener = function() {
   170     assert.equal(++counter, 1, "This listener should only be called once");
   172     loader.unload();
   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;
   179     done();
   180   };
   182   sp.on("test-listen3", listener);
   184   // emit change
   185   sp.prefs["test-listen3"] = true;
   186 };
   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;
   196   let listener = function() {
   197     assert.equal(++counter, 1, "This listener should only be called once");
   199     loader.unload();
   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;
   206     done();
   207   };
   209   sp.on("", listener);
   210   // emit change
   211   sp.prefs[testpref] = true;
   212 };
   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 };
   224 require('sdk/test').run(exports);

mercurial