169 lines
4.2 KiB
JavaScript
169 lines
4.2 KiB
JavaScript
flectra.define('web.class_tests', function (require) {
|
|
"use strict";
|
|
|
|
var Class = require('web.Class');
|
|
|
|
QUnit.module('core', {}, function () {
|
|
|
|
QUnit.module('Class');
|
|
|
|
|
|
QUnit.test('Basic class creation', function (assert) {
|
|
assert.expect(2);
|
|
|
|
var C = Class.extend({
|
|
foo: function () {
|
|
return this.somevar;
|
|
}
|
|
});
|
|
var i = new C();
|
|
i.somevar = 3;
|
|
|
|
assert.ok(i instanceof C);
|
|
assert.strictEqual(i.foo(), 3);
|
|
});
|
|
|
|
QUnit.test('Class initialization', function (assert) {
|
|
assert.expect(2);
|
|
|
|
var C1 = Class.extend({
|
|
init: function () {
|
|
this.foo = 3;
|
|
}
|
|
});
|
|
var C2 = Class.extend({
|
|
init: function (arg) {
|
|
this.foo = arg;
|
|
}
|
|
});
|
|
|
|
var i1 = new C1(),
|
|
i2 = new C2(42);
|
|
|
|
assert.strictEqual(i1.foo, 3);
|
|
assert.strictEqual(i2.foo, 42);
|
|
});
|
|
|
|
QUnit.test('Inheritance', function (assert) {
|
|
assert.expect(3);
|
|
|
|
var C0 = Class.extend({
|
|
foo: function () {
|
|
return 1;
|
|
}
|
|
});
|
|
var C1 = C0.extend({
|
|
foo: function () {
|
|
return 1 + this._super();
|
|
}
|
|
});
|
|
var C2 = C1.extend({
|
|
foo: function () {
|
|
return 1 + this._super();
|
|
}
|
|
});
|
|
|
|
assert.strictEqual(new C0().foo(), 1);
|
|
assert.strictEqual(new C1().foo(), 2);
|
|
assert.strictEqual(new C2().foo(), 3);
|
|
});
|
|
|
|
QUnit.test('In-place extension', function (assert) {
|
|
assert.expect(4);
|
|
|
|
var C0 = Class.extend({
|
|
foo: function () {
|
|
return 3;
|
|
},
|
|
qux: function () {
|
|
return 3;
|
|
},
|
|
bar: 3
|
|
});
|
|
|
|
C0.include({
|
|
foo: function () {
|
|
return 5;
|
|
},
|
|
qux: function () {
|
|
return 2 + this._super();
|
|
},
|
|
bar: 5,
|
|
baz: 5
|
|
});
|
|
|
|
assert.strictEqual(new C0().bar, 5);
|
|
assert.strictEqual(new C0().baz, 5);
|
|
assert.strictEqual(new C0().foo(), 5);
|
|
assert.strictEqual(new C0().qux(), 5);
|
|
});
|
|
|
|
QUnit.test('In-place extension and inheritance', function (assert) {
|
|
assert.expect(4);
|
|
|
|
var C0 = Class.extend({
|
|
foo: function () { return 1; },
|
|
bar: function () { return 1; }
|
|
});
|
|
var C1 = C0.extend({
|
|
foo: function () { return 1 + this._super(); }
|
|
});
|
|
assert.strictEqual(new C1().foo(), 2);
|
|
assert.strictEqual(new C1().bar(), 1);
|
|
|
|
C1.include({
|
|
foo: function () { return 2 + this._super(); },
|
|
bar: function () { return 1 + this._super(); }
|
|
});
|
|
assert.strictEqual(new C1().foo(), 4);
|
|
assert.strictEqual(new C1().bar(), 2);
|
|
});
|
|
|
|
QUnit.test('In-place extensions alter existing instances', function (assert) {
|
|
assert.expect(4);
|
|
|
|
var C0 = Class.extend({
|
|
foo: function () { return 1; },
|
|
bar: function () { return 1; }
|
|
});
|
|
var i = new C0();
|
|
assert.strictEqual(i.foo(), 1);
|
|
assert.strictEqual(i.bar(), 1);
|
|
|
|
C0.include({
|
|
foo: function () { return 2; },
|
|
bar: function () { return 2 + this._super(); }
|
|
});
|
|
assert.strictEqual(i.foo(), 2);
|
|
assert.strictEqual(i.bar(), 3);
|
|
});
|
|
|
|
QUnit.test('In-place extension of subclassed types', function (assert) {
|
|
assert.expect(3);
|
|
|
|
var C0 = Class.extend({
|
|
foo: function () { return 1; },
|
|
bar: function () { return 1; }
|
|
});
|
|
var C1 = C0.extend({
|
|
foo: function () { return 1 + this._super(); },
|
|
bar: function () { return 1 + this._super(); }
|
|
});
|
|
var i = new C1();
|
|
|
|
assert.strictEqual(i.foo(), 2);
|
|
|
|
C0.include({
|
|
foo: function () { return 2; },
|
|
bar: function () { return 2 + this._super(); }
|
|
});
|
|
|
|
assert.strictEqual(i.foo(), 3);
|
|
assert.strictEqual(i.bar(), 4);
|
|
});
|
|
|
|
|
|
});
|
|
|
|
});
|