UNPKG

@rxx/testing

Version:
82 lines (81 loc) 3.13 kB
"use strict"; 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;