@rxx/testing
Version:
Testing module for rxx.
100 lines • 8.23 kB
JavaScript
;
/**
* The MIT License (MIT)
* Copyright (c) Taketoshi Aono
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
* @fileoverview
* @author Taketoshi Aono
*/
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 = /** @class */ (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 = /** @class */ (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;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vY2tlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHOzs7QUFFSCw2QkFBK0I7QUFDL0IsNENBQXVDO0FBRXZDLElBQU0sR0FBRyxHQUFHLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxPQUFPLE1BQU0sS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBSyxDQUFHLENBQUMsRUFBckQsQ0FBcUQsQ0FBQztBQUV2RSxJQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsMkJBQTJCLENBQUMsQ0FBQztBQUNuRCxJQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsNkJBQTZCLENBQUMsQ0FBQztBQUV2RCxJQUFNLFFBQVEsR0FBRyxDQUFDO0lBQ2hCLElBQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDMUQsSUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQy9DLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7S0FDeEI7SUFDRCxNQUFNLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztJQUUxQixPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsRUFBRSxDQUFDO0FBRUw7SUFDRSxnQkFBbUIsTUFBVyxFQUFFLEtBQVU7UUFBMUMsaUJBd0JDO1FBdkJDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFD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