123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- 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');
- });
|