addon-sdk/source/test/test-reference.js

branch
TOR_BUG_9701
changeset 10
ac0c01689b40
equal deleted inserted replaced
-1:000000000000 0:197c930f71ac
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 { isWeak, WeakReference } = require("sdk/core/reference");
7 const { Class } = require("sdk/core/heritage");
8
9 exports["test non WeakReferences"] = assert => {
10 assert.equal(isWeak({}), false,
11 "regular objects aren't weak");
12
13 assert.equal(isWeak([]), false,
14 "arrays aren't weak");
15 };
16
17 exports["test a WeakReference"] = assert => {
18 assert.equal(isWeak(new WeakReference()), true,
19 "instances of WeakReferences are weak");
20 };
21
22 exports["test a subclass"] = assert => {
23 const SubType = Class({
24 extends: WeakReference,
25 foo: function() {
26 }
27 });
28
29 const x = new SubType();
30 assert.equal(isWeak(x), true,
31 "subtypes of WeakReferences are weak");
32
33 const SubSubType = Class({
34 extends: SubType
35 });
36
37 const y = new SubSubType();
38 assert.equal(isWeak(y), true,
39 "sub subtypes of WeakReferences are weak");
40 };
41
42 exports["test a mixin"] = assert => {
43 const Mixer = Class({
44 implements: [WeakReference]
45 });
46
47 assert.equal(isWeak(new Mixer()), true,
48 "instances with mixed WeakReference are weak");
49
50 const Mux = Class({});
51 const MixMux = Class({
52 extends: Mux,
53 implements: [WeakReference]
54 });
55
56 assert.equal(isWeak(new MixMux()), true,
57 "instances with mixed WeakReference that " +
58 "inheret from other are weak");
59
60
61 const Base = Class({});
62 const ReMix = Class({
63 extends: Base,
64 implements: [MixMux]
65 });
66
67 assert.equal(isWeak(new ReMix()), true,
68 "subtime of mix is still weak");
69 };
70
71 exports["test an override"] = assert => {
72 const SubType = Class({ extends: WeakReference });
73 isWeak.define(SubType, x => false);
74
75 assert.equal(isWeak(new SubType()), false,
76 "behavior of isWeak can still be overrided on subtype");
77
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 };
84
85 exports["test an opt-in"] = assert => {
86 var BaseType = Class({});
87 var SubType = Class({ extends: BaseType });
88
89 isWeak.define(SubType, x => true);
90 assert.equal(isWeak(new SubType()), true,
91 "isWeak can be just implemented");
92
93 var x = {};
94 isWeak.implement(x, x => true);
95 assert.equal(isWeak(x), true,
96 "isWeak can be implemented per instance");
97 };
98
99 require("sdk/test").run(exports);

mercurial