217cd4cfd0
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.
190 lines
4.0 KiB
JavaScript
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');
|
|
});
|