@rxx/testing
Version:
Testing module for rxx.
82 lines (81 loc) • 3.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var rxjs_1 = require("rxjs");
var operators_1 = require("rxjs/operators");
var sym = function (s) { return (typeof Symbol === 'function' ? Symbol(s) : "@@" + s); };
var STATE_SYM = sym('ReactMVIMockedIntentState');
var SUBJECT_SYM = sym('ReactMVIMockedIntentSubject');
var BUILTINS = (function () {
var keys = Object.getOwnPropertyNames(Object.prototype);
var result = Object.create(null);
for (var i = 0, len = keys.length; i < len; i++) {
result[keys[i]] = true;
}
result.constructor = true;
return result;
})();
var Mocker = (function () {
function Mocker(intent, state) {
var _this = this;
this[SUBJECT_SYM] = {};
this[STATE_SYM] = state;
var proto = intent;
while (proto && proto !== Object.prototype) {
Object.getOwnPropertyNames(proto).forEach(function (key) {
if (_this[key] || BUILTINS[key]) {
return;
}
var descriptor = Object.getOwnPropertyDescriptor(proto, key);
if (descriptor) {
if (typeof descriptor.get === 'function') {
var clone = tslib_1.__assign({}, descriptor);
clone.get = Mocker.proxify(_this, key);
Object.defineProperty(_this, key, clone);
}
else if (typeof descriptor.value === 'function') {
_this[key] = Mocker.proxify(_this, key);
}
}
});
proto = proto.__proto__;
}
}
Mocker.proxify = function (mocker, methodName) {
mocker[SUBJECT_SYM][methodName] = new rxjs_1.Subject();
return function () {
return mocker[SUBJECT_SYM][methodName].pipe(operators_1.share());
};
};
return Mocker;
}());
exports.Mocker = Mocker;
var MockManipulator = (function () {
function MockManipulator(mocker) {
this.mocker = mocker;
}
MockManipulator.prototype.send = function (name, data) {
if (data === void 0) { data = {}; }
MockManipulator.send(this.mocker, name, data);
};
MockManipulator.prototype.sendWithoutState = function (name, data) {
if (data === void 0) { data = {}; }
MockManipulator.sendWithoutState(this.mocker, name, data);
};
MockManipulator.send = function (mock, name, data) {
if (data === void 0) { data = {}; }
if (!mock[SUBJECT_SYM][name]) {
throw new Error("$[name} is not valid property name.");
}
mock[SUBJECT_SYM][name].next({ data: data, state: mock[STATE_SYM] });
};
MockManipulator.sendWithoutState = function (mock, name, data) {
if (data === void 0) { data = {}; }
if (!mock[SUBJECT_SYM][name]) {
throw new Error("$[name} is not valid property name.");
}
mock[SUBJECT_SYM][name].next(data);
};
return MockManipulator;
}());
exports.MockManipulator = MockManipulator;