addon-sdk/source/test/test-reference.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 { isWeak, WeakReference } = require("sdk/core/reference");
     7 const { Class } = require("sdk/core/heritage");
     9 exports["test non WeakReferences"] = assert => {
    10   assert.equal(isWeak({}), false,
    11                "regular objects aren't weak");
    13   assert.equal(isWeak([]), false,
    14                "arrays aren't weak");
    15 };
    17 exports["test a WeakReference"] = assert => {
    18   assert.equal(isWeak(new WeakReference()), true,
    19                "instances of WeakReferences are weak");
    20 };
    22 exports["test a subclass"] = assert => {
    23   const SubType = Class({
    24     extends: WeakReference,
    25     foo: function() {
    26     }
    27   });
    29   const x = new SubType();
    30   assert.equal(isWeak(x), true,
    31                "subtypes of WeakReferences are weak");
    33   const SubSubType = Class({
    34     extends: SubType
    35   });
    37   const y = new SubSubType();
    38   assert.equal(isWeak(y), true,
    39                "sub subtypes of WeakReferences are weak");
    40 };
    42 exports["test a mixin"] = assert => {
    43   const Mixer = Class({
    44     implements: [WeakReference]
    45   });
    47   assert.equal(isWeak(new Mixer()), true,
    48                "instances with mixed WeakReference are weak");
    50   const Mux = Class({});
    51   const MixMux = Class({
    52     extends: Mux,
    53     implements: [WeakReference]
    54   });
    56   assert.equal(isWeak(new MixMux()), true,
    57                "instances with mixed WeakReference that " +
    58                "inheret from other are weak");
    61   const Base = Class({});
    62   const ReMix = Class({
    63     extends: Base,
    64     implements: [MixMux]
    65   });
    67   assert.equal(isWeak(new ReMix()), true,
    68                "subtime of mix is still weak");
    69 };
    71 exports["test an override"] = assert => {
    72   const SubType = Class({ extends: WeakReference });
    73   isWeak.define(SubType, x => false);
    75   assert.equal(isWeak(new SubType()), false,
    76                "behavior of isWeak can still be overrided on subtype");
    78   const Mixer = Class({ implements: [WeakReference] });
    79   const SubMixer = Class({ extends: Mixer });
    80   isWeak.define(SubMixer, x => false);
    81   assert.equal(isWeak(new SubMixer()), false,
    82                "behavior of isWeak can still be overrided on mixed type");
    83 };
    85 exports["test an opt-in"] = assert => {
    86   var BaseType = Class({});
    87   var SubType = Class({ extends: BaseType });
    89   isWeak.define(SubType, x => true);
    90   assert.equal(isWeak(new SubType()), true,
    91                "isWeak can be just implemented");
    93   var x = {};
    94   isWeak.implement(x, x => true);
    95   assert.equal(isWeak(x), true,
    96                "isWeak can be implemented per instance");
    97 };
    99 require("sdk/test").run(exports);

mercurial