1
0
mirror of synced 2024-11-30 08:36:03 +03:00
select2/tests/utils/decorator-tests.js
Kevin Brown 217cd4cfd0 Added inline searching for multiple selects
This adds a search box to the main container for multiple select
boxes, similar to the what the old version had. This can still be
swapped out such that the search box displays above the results
like it previously did.

The placeholder for multiple selects will also now use the input
attribute of the search box instead of generating a custom element.

This also changes the selector for the search container to
`.select2-search`, which is consistent with the old class and
reduces the complexity of the selectors.

This fixes an issue with how decorators worked, where the constructor
from the parent class would clobber the custom constructor that is
generated for the new decorated class. This has been fixed by
excluding the constructor from the list of fields which are
transferred when decorating classes.
2014-11-22 19:21:46 -05:00

190 lines
4.0 KiB
JavaScript

module('Decorators');
var Utils = require('select2/utils');
test('overridden - method', 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 - method', 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 - method', function (assert) {
function BaseClass () {}
BaseClass.prototype.hello = function () {
return 'A';
};
function DecoratorClass (decorated) {}
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);
});
test('inherited - three levels', function (assert) {
function BaseClass (testArgument) {
this.baseCalled = true;
this.baseTestArgument = testArgument;
}
BaseClass.prototype.test = function (a) {
return a + 'c';
};
function MiddleClass (decorated, testArgument) {
this.middleCalled = true;
this.middleTestArgument = testArgument;
decorated.call(this, testArgument);
}
MiddleClass.prototype.test = function (decorated, a) {
return decorated.call(this, a + 'b');
};
function DecoratorClass (decorated, testArgument) {
this.decoratorCalled = true;
this.decoratorTestArgument = testArgument;
decorated.call(this, testArgument);
}
DecoratorClass.prototype.test = function (decorated, a) {
return decorated.call(this, a + 'a');
};
var DecoratedClass = Utils.Decorate(
Utils.Decorate(BaseClass, MiddleClass),
DecoratorClass
);
var inst = new DecoratedClass('test');
assert.ok(inst.baseCalled, 'The base class contructor was called');
assert.ok(inst.middleCalled, 'The middle class constructor was called');
assert.ok(inst.decoratorCalled, 'The decorator constructor was called');
assert.strictEqual(inst.baseTestArgument, 'test');
assert.strictEqual(inst.middleTestArgument, 'test');
assert.strictEqual(inst.decoratorTestArgument, 'test');
var out = inst.test('test');
assert.strictEqual(out, 'testabc');
});