summaryrefslogtreecommitdiffstats
path: root/addon-sdk/source/test/test-reference.js
diff options
context:
space:
mode:
Diffstat (limited to 'addon-sdk/source/test/test-reference.js')
-rw-r--r--addon-sdk/source/test/test-reference.js99
1 files changed, 99 insertions, 0 deletions
diff --git a/addon-sdk/source/test/test-reference.js b/addon-sdk/source/test/test-reference.js
new file mode 100644
index 000000000..1fe08004c
--- /dev/null
+++ b/addon-sdk/source/test/test-reference.js
@@ -0,0 +1,99 @@
+/* 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 { isWeak, WeakReference } = require("sdk/core/reference");
+const { Class } = require("sdk/core/heritage");
+
+exports["test non WeakReferences"] = assert => {
+ assert.equal(isWeak({}), false,
+ "regular objects aren't weak");
+
+ assert.equal(isWeak([]), false,
+ "arrays aren't weak");
+};
+
+exports["test a WeakReference"] = assert => {
+ assert.equal(isWeak(new WeakReference()), true,
+ "instances of WeakReferences are weak");
+};
+
+exports["test a subclass"] = assert => {
+ const SubType = Class({
+ extends: WeakReference,
+ foo: function() {
+ }
+ });
+
+ const x = new SubType();
+ assert.equal(isWeak(x), true,
+ "subtypes of WeakReferences are weak");
+
+ const SubSubType = Class({
+ extends: SubType
+ });
+
+ const y = new SubSubType();
+ assert.equal(isWeak(y), true,
+ "sub subtypes of WeakReferences are weak");
+};
+
+exports["test a mixin"] = assert => {
+ const Mixer = Class({
+ implements: [WeakReference]
+ });
+
+ assert.equal(isWeak(new Mixer()), true,
+ "instances with mixed WeakReference are weak");
+
+ const Mux = Class({});
+ const MixMux = Class({
+ extends: Mux,
+ implements: [WeakReference]
+ });
+
+ assert.equal(isWeak(new MixMux()), true,
+ "instances with mixed WeakReference that " +
+ "inheret from other are weak");
+
+
+ const Base = Class({});
+ const ReMix = Class({
+ extends: Base,
+ implements: [MixMux]
+ });
+
+ assert.equal(isWeak(new ReMix()), true,
+ "subtime of mix is still weak");
+};
+
+exports["test an override"] = assert => {
+ const SubType = Class({ extends: WeakReference });
+ isWeak.define(SubType, x => false);
+
+ assert.equal(isWeak(new SubType()), false,
+ "behavior of isWeak can still be overrided on subtype");
+
+ const Mixer = Class({ implements: [WeakReference] });
+ const SubMixer = Class({ extends: Mixer });
+ isWeak.define(SubMixer, x => false);
+ assert.equal(isWeak(new SubMixer()), false,
+ "behavior of isWeak can still be overrided on mixed type");
+};
+
+exports["test an opt-in"] = assert => {
+ var BaseType = Class({});
+ var SubType = Class({ extends: BaseType });
+
+ isWeak.define(SubType, x => true);
+ assert.equal(isWeak(new SubType()), true,
+ "isWeak can be just implemented");
+
+ var x = {};
+ isWeak.implement(x, x => true);
+ assert.equal(isWeak(x), true,
+ "isWeak can be implemented per instance");
+};
+
+require("sdk/test").run(exports);