221 lines
4.8 KiB
JavaScript
221 lines
4.8 KiB
JavaScript
var inherit = require('..');
|
|
|
|
exports.testIsFunction = function(test) {
|
|
test.equal(typeof inherit, 'function');
|
|
test.done();
|
|
};
|
|
|
|
exports.testInstanceProperties = function(test) {
|
|
var A = inherit({
|
|
__constructor : function(val) {
|
|
this.prop = val;
|
|
}
|
|
});
|
|
|
|
test.equal(new A('test').prop, 'test');
|
|
test.equal(new A('other').prop, 'other');
|
|
test.done();
|
|
};
|
|
|
|
exports.testInstanceOf = function(test) {
|
|
var A = inherit({}),
|
|
B = inherit(A, {});
|
|
|
|
test.ok(new A() instanceof A);
|
|
test.ok(!(new A() instanceof B));
|
|
test.ok(new B() instanceof A);
|
|
test.ok(new B() instanceof B);
|
|
test.done();
|
|
};
|
|
|
|
exports.testInstanceOfConstructorResult = function(test) {
|
|
var A = inherit({}),
|
|
B = inherit({
|
|
__constructor : function(val) {
|
|
return new A();
|
|
}
|
|
});
|
|
|
|
test.ok(new B() instanceof A);
|
|
test.done();
|
|
};
|
|
|
|
exports.testSelf = function(test) {
|
|
var A = inherit({}),
|
|
B = inherit(A, {});
|
|
|
|
test.strictEqual(new A().__self, A);
|
|
test.strictEqual(new B().__self, B);
|
|
test.done();
|
|
};
|
|
|
|
exports.testInherit = function(test) {
|
|
var A = inherit({
|
|
method1 : function() {
|
|
return 'A';
|
|
}
|
|
}),
|
|
B = inherit(A, {
|
|
method2 : function() {
|
|
return 'B';
|
|
}
|
|
});
|
|
|
|
test.equal(typeof new A().method2, 'undefined');
|
|
test.equal(new B().method1(), 'A');
|
|
test.done();
|
|
};
|
|
|
|
exports.testInheritFromPlaneFunction = function(test) {
|
|
var A = function(val) {
|
|
this.prop = val;
|
|
},
|
|
B = inherit(A, {});
|
|
|
|
test.ok(new B() instanceof A);
|
|
test.equal(new B('val').prop, 'val');
|
|
test.done();
|
|
};
|
|
|
|
exports.testInheritAndBaseCallFromPlaneFunction = function(test) {
|
|
var A = function(val) {
|
|
this.prop = val;
|
|
},
|
|
B = inherit(A, {
|
|
__constructor : function() {
|
|
this.__base('fromB');
|
|
}
|
|
});
|
|
|
|
test.ok(new B() instanceof A);
|
|
test.equal(new B().prop, 'fromB');
|
|
test.done();
|
|
};
|
|
|
|
exports.testStaticInherit = function(test) {
|
|
var A = inherit({}, {
|
|
method1 : function() {
|
|
return 'A';
|
|
}
|
|
}),
|
|
B = inherit(A, {}, {
|
|
method2 : function() {
|
|
return 'B';
|
|
}
|
|
});
|
|
|
|
test.equal(typeof A.method2, 'undefined');
|
|
test.equal(B.method1(), 'A');
|
|
test.done();
|
|
};
|
|
|
|
exports.testOverride = function(test) {
|
|
var A = inherit({
|
|
method : function() {
|
|
return 'A';
|
|
}
|
|
}),
|
|
B = inherit(A, {
|
|
method : function() {
|
|
return 'B';
|
|
}
|
|
});
|
|
|
|
test.equal(new A().method(), 'A');
|
|
test.equal(new B().method(), 'B');
|
|
test.done();
|
|
};
|
|
|
|
exports.testStaticOverride = function(test) {
|
|
var A = inherit({}, {
|
|
method : function() {
|
|
return 'A';
|
|
}
|
|
}),
|
|
B = inherit(A, {}, {
|
|
method : function() {
|
|
return 'B';
|
|
}
|
|
});
|
|
|
|
test.equal(A.method(), 'A');
|
|
test.equal(B.method(), 'B');
|
|
test.done();
|
|
};
|
|
|
|
exports.testBase = function(test) {
|
|
var A = inherit({
|
|
method1 : function() {
|
|
return 'A';
|
|
}
|
|
}),
|
|
B = inherit(A, {
|
|
method1 : function() {
|
|
return this.__base() + 'B';
|
|
},
|
|
method2 : function() {
|
|
return this.__base() + 'B2';
|
|
}
|
|
});
|
|
|
|
test.equal(new B().method1(), 'AB');
|
|
test.equal(new B().method2(), 'undefinedB2');
|
|
test.done();
|
|
};
|
|
|
|
exports.testStaticBase = function(test) {
|
|
var A = inherit({}, {
|
|
staticMethod : function() {
|
|
return 'A';
|
|
}
|
|
}),
|
|
B = inherit(A, {}, {
|
|
staticMethod : function() {
|
|
return this.__base() + 'B';
|
|
}
|
|
});
|
|
|
|
test.equal(B.staticMethod(), 'AB');
|
|
test.done();
|
|
};
|
|
|
|
exports.testObjectMixin = function(test) {
|
|
var A = inherit(),
|
|
M = {
|
|
methodM : function() {
|
|
return 'M';
|
|
}
|
|
},
|
|
B = inherit([A, M]);
|
|
|
|
test.equal(new B().methodM(), 'M');
|
|
test.done();
|
|
};
|
|
|
|
exports.testFunctionMixin = function(test) {
|
|
var A = inherit(),
|
|
M = inherit({
|
|
methodM : function() {
|
|
return 'M';
|
|
}
|
|
}),
|
|
B = inherit([A, M]);
|
|
|
|
test.equal(new B().methodM(), 'M');
|
|
test.strictEqual(new B().__self, B);
|
|
test.done();
|
|
};
|
|
|
|
exports.testFunctionMixinStatic = function(test) {
|
|
var A = inherit(),
|
|
M = inherit({}, {
|
|
staticMethodM : function() {
|
|
return 'M';
|
|
}
|
|
}),
|
|
B = inherit([A, M]);
|
|
|
|
test.equal(B.staticMethodM(), 'M');
|
|
test.done();
|
|
};
|