can-observe
Version:
Like can.Map, but without the .attr method.
91 lines (74 loc) • 2.49 kB
JavaScript
var ObserveObject = require("../object/object");
var classSupport = (function() {
try {
eval('"use strict"; class A{};');
return true;
} catch (e) {
return false;
}
})();
function testDecoratorGetter(decoratorName, decorator, propName, getter, tester) {
if(classSupport) {
QUnit.test(decoratorName + " getter decorator with class Object prototype", function(assert) {
var ran = false;
class TesterType extends ObserveObject {
get [propName]() {
ran = true;
return getter.apply(this, arguments);
}
}
decorator(TesterType.prototype, propName, Object.getOwnPropertyDescriptor(TesterType.prototype, propName));
tester.call(assert, TesterType);
assert.equal(ran, true, "getter ran");
});
}
QUnit.test(decoratorName + " getter decorator with Object.extend prototype", function(assert) {
var ran = false;
var TesterType = ObserveObject.extend("TesterType", {}, {
get [propName]() {
ran = true;
return getter.apply(this, arguments);
}
});
decorator(TesterType.prototype, propName, Object.getOwnPropertyDescriptor(TesterType.prototype, propName));
tester.call(assert, TesterType);
assert.equal(ran, true, "getter ran");
});
}
function testDecoratorMethod(decoratorName, decorator, propName, method, tester) {
if(classSupport) {
QUnit.test(decoratorName + " method decorator with class Object prototype", function(assert) {
var ran = false;
class TesterType extends ObserveObject {
[propName](resolve) {
ran = true;
return method.apply(this, arguments);
}
}
decorator(TesterType.prototype, propName, Object.getOwnPropertyDescriptor(TesterType.prototype, propName));
tester.call(assert, TesterType);
assert.equal(ran, true, "method ran");
});
}
QUnit.test(decoratorName + " method decorator with Object.extend prototype", function(assert) {
var ran = false;
var TesterType = ObserveObject.extend("TesterType", {}, {
[propName](resolve) {
ran = true;
return method.apply(this, arguments);
},
});
decorator(TesterType.prototype, propName, Object.getOwnPropertyDescriptor(TesterType.prototype, propName));
tester.call(assert, TesterType);
assert.equal(ran, true, "method ran");
});
}
function testDecorator(decoratorName, decorator, propName, method, tester) {
testDecoratorGetter.apply(null, arguments);
testDecoratorMethod.apply(null, arguments);
}
module.exports = {
testDecoratorGetter,
testDecoratorMethod,
testDecorator,
};