@rxx/testing
Version:
Testing module for rxx.
85 lines • 6.87 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 core_1 = require("@rxx/core");
var rxjs_1 = require("rxjs");
var mocker_1 = require("./mocker");
var devtools_1 = require("@rxx/core/lib/development/devtools");
/**
* Prepare Intent and Store.
* @param IntentClass Intent constructor.
* @param StoreClass Store constructor or Array of Store constructor.
* @param opt Options if contains handlers, call registerHandlers with that,
* if contains state, set as parent state of intent arguments.
*/
function prepareTest(IntentClass, StoreClass, opt) {
if (opt === void 0) { opt = { state: {}, multiIntent: false }; }
if (opt && opt.handlers) {
core_1.registerHandlers(opt.handlers);
}
var context = {
state: opt.state,
mergedState: opt.state,
__intent: null,
__subject: null,
};
var provisioning = new core_1.Provisioning('', {}, core_1.isObject(IntentClass)
? IntentClass
: { intent: IntentClass }, Array.isArray(StoreClass) ? StoreClass : [StoreClass], undefined, opt.services || {}, {}, function (intent) { return new mocker_1.Mocker(intent, opt.state); });
provisioning.prepare();
return {
store: provisioning.getStores()[0],
stores: provisioning.getStores(),
mock: opt.multiIntent
? (function () {
var map = provisioning.getIntentInstance();
var ret = {};
for (var key in map) {
ret[key] = new mocker_1.MockManipulator(map[key]);
}
return ret;
})()
: new mocker_1.MockManipulator(provisioning.getIntentInstance().intent),
};
}
exports.prepareTest = prepareTest;
function initAppTester(app, initialState, opt) {
if (opt === void 0) { opt = { states: {} }; }
var input = new core_1.SubjectTree(devtools_1.connectDevTools({ name: '', instanceId: '' }));
var output = app(input.observable, initialState);
input.setState(opt.states);
return {
input: function (type, payload) {
if (payload === void 0) { payload = null; }
input.notify({ type: type, payload: payload });
},
output: output,
};
}
exports.initAppTester = initAppTester;
function safeSubscribe(observable, callback, done, subscription) {
if (subscription === void 0) { subscription = new rxjs_1.Subscription(); }
subscription.add(observable.subscribe(function (v) {
callback(v).then(function () { return done(); }, done);
}));
return subscription;
}
exports.safeSubscribe = safeSubscribe;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcGFyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcmVwYXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7O0FBRUgsa0NBZ0JtQjtBQUNuQiw2QkFBeUQ7QUFDekQsbUNBQW1EO0FBR25ELCtEQUFxRTtBQWlCckU7Ozs7OztHQU1HO0FBQ0gsU0FBZ0IsV0FBVyxDQUt6QixXQUFjLEVBQ2QsVUFBNkQsRUFDN0QsR0FBdUQ7SUFBdkQsb0JBQUEsRUFBQSxRQUF3QixLQUFLLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUU7SUFFdkQsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRTtRQUN2Qix1QkFBZ0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDaEM7SUFFRCxJQUFNLE9BQU8sR0FBRztRQUNkLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSztRQUNoQixXQUFXLEVBQUUsR0FBRyxDQUFDLEtBQUs7UUFDdEIsUUFBUSxFQUFFLElBQUk7UUFDZCxTQUFTLEVBQUUsSUFBSTtLQUNoQixDQUFDO0lBQ0YsSUFBTSxZQUFZLEdBQUcsSUFBSSxtQkFBWSxDQUNuQyxFQUFFLEVBQ0YsRUFBRSxFQUNGLGVBQVEsQ0FBdUMsV0FBVyxDQUFDO1FBQ3pELENBQUMsQ0FBRSxXQUFtQjtRQUN0QixDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEVBQzNCLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFDckQsU0FBUyxFQUNULEdBQUcsQ0FBQyxRQUFRLElBQUksRUFBRSxFQUNsQixFQUFFLEVBQ0YsVUFBQSxNQUFNLElBQUksT0FBQSxJQUFJLGVBQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUE3QixDQUE2QixDQUN4QyxDQUFDO0lBQ0YsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBRXZCLE9BQU87UUFDTCxLQUFLLEVBQUUsWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNsQyxNQUFNLEVBQUUsWUFBWSxDQUFDLFNBQVMsRUFBRTtRQUNoQyxJQUFJLEVBQUUsR0FBRyxDQUFDLFdBQVc7WUFDbkIsQ0FBQyxDQUFFLENBQUM7Z0JBQ0EsSUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQzdDLElBQU0sR0FBRyxHQUF3QyxFQUFTLENBQUM7Z0JBQzNELEtBQUssSUFBTSxHQUFHLElBQUksR0FBRyxFQUFFO29CQUNyQixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSx3QkFBZSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2lCQUMxQztnQkFFRCxPQUFPLEdBQUcsQ0FBQztZQUNiLENBQUMsQ0FBQyxFQUFVO1lBQ2QsQ0FBQyxDQUFFLElBQUksd0JBQWUsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxNQUFNLENBQVM7S0FDMUUsQ0FBQztBQUNKLENBQUM7QUFoREQsa0NBZ0RDO0FBS0QsU0FBZ0IsYUFBYSxDQUMzQixHQUF1QixFQUN2QixZQUFlLEVBQ2YsR0FBcUM7SUFBckMsb0JBQUEsRUFBQSxRQUF5QixNQUFNLEVBQUUsRUFBRSxFQUFFO0lBRXJDLElBQU0sS0FBSyxHQUFHLElBQUksa0JBQVcsQ0FBQywwQkFBZSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdFLElBQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ25ELEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNCLE9BQU87UUFDTCxLQUFLLFlBQUMsSUFBWSxFQUFFLE9BQW1CO1lBQW5CLHdCQUFBLEVBQUEsY0FBbUI7WUFDckMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksTUFBQSxFQUFFLE9BQU8sU0FBQSxFQUFFLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsTUFBTSxRQUFBO0tBQ1AsQ0FBQztBQUNKLENBQUM7QUFkRCxzQ0FjQztBQUVELFNBQWdCLGFBQWEsQ0FDM0IsVUFBeUIsRUFDekIsUUFBZ0MsRUFDaEMsSUFBOEIsRUFDOUIsWUFBK0M7SUFBL0MsNkJBQUEsRUFBQSxtQkFBaUMsbUJBQVksRUFBRTtJQUUvQyxZQUFZLENBQUMsR0FBRyxDQUNkLFVBQVUsQ0FBQyxTQUFTLENBQUMsVUFBQSxDQUFDO1FBQ3BCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBTSxPQUFBLElBQUksRUFBRSxFQUFOLENBQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN2QyxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0YsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQztBQVpELHNDQVlDIn0=