792133ce5c
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.
144 lines
2.9 KiB
JavaScript
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);
|
|
});
|