1
0
mirror of synced 2024-11-26 14:56:07 +03:00
select2/tests/utils/decorator-tests.js
Kevin Brown 792133ce5c Added Utils.Decorate and tests
This adds decorator support in a very basic way, but enough that
it doesn't take a lot of effort to get it implemented.

This also starts work on splitting things out for theming.
2014-10-21 21:43:56 -04:00

144 lines
2.9 KiB
JavaScript

module("Decorators")
var Utils = require("select2/utils");
test("overridden", function (assert) {
function BaseClass () {};
BaseClass.prototype.hello = function () {
return "A";
}
function DecoratorClass () {};
DecoratorClass.prototype.hello = function () {
return "B";
}
var DecoratedClass = Utils.Decorate(BaseClass, DecoratorClass);
var inst = new DecoratedClass();
assert.strictEqual(inst.hello(), "B");
});
test("overridden - constructor", function (assert) {
function BaseClass () {
this.inherited = true;
};
BaseClass.prototype.hello = function () {
return "A";
}
function DecoratorClass (decorated) {
this.called = true;
};
DecoratorClass.prototype.other = function () {
return "B";
}
var DecoratedClass = Utils.Decorate(BaseClass, DecoratorClass);
var inst = new DecoratedClass();
assert.ok(inst.called);
assert.ok(!inst.inherited);
});
test("not overridden", function (assert) {
function BaseClass () {};
BaseClass.prototype.hello = function () {
return "A";
}
function DecoratorClass () {};
DecoratorClass.prototype.other = function () {
return "B";
}
var DecoratedClass = Utils.Decorate(BaseClass, DecoratorClass);
var inst = new DecoratedClass();
assert.strictEqual(inst.hello(), "A");
});
test("not overridden - constructor", function (assert) {
function BaseClass () {
this.called = true;
};
BaseClass.prototype.hello = function () {
return "A";
}
function DecoratorClass () {};
DecoratorClass.prototype.other = function () {
return "B";
}
var DecoratedClass = Utils.Decorate(BaseClass, DecoratorClass);
var inst = new DecoratedClass();
assert.ok(inst.called);
});
test("inherited", function (assert) {
function BaseClass () {
this.inherited = true;
};
BaseClass.prototype.hello = function () {
return "A";
}
function DecoratorClass (decorated) {
this.called = true;
decorated.call(this);
};
DecoratorClass.prototype.hello = function (decorated) {
return "B" + decorated.call(this) + "C";
}
var DecoratedClass = Utils.Decorate(BaseClass, DecoratorClass);
var inst = new DecoratedClass();
assert.strictEqual(inst.hello(), "BAC");
});
test("inherited - constructor", function (assert) {
function BaseClass () {
this.inherited = true;
};
BaseClass.prototype.hello = function () {
return "A";
}
function DecoratorClass (decorated) {
this.called = true;
decorated.call(this);
};
DecoratorClass.prototype.other = function () {
return "B";
}
var DecoratedClass = Utils.Decorate(BaseClass, DecoratorClass);
var inst = new DecoratedClass();
assert.ok(inst.called);
assert.ok(inst.inherited);
});