UNPKG

@react-mvi/testing

Version:

Test module for React MVI.

95 lines (94 loc) 3.28 kB
/** * 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 */ /** * Create functor that is function behave like class. * @param {Function} fn The function that want to define methods. * @param {Object} props Methods. * @returns {Function} */ function functor(fn, props) { for (const prop in props) { fn[prop] = props[prop]; } return fn; } /** * Exit async function gracefully. * @param {Function} cb Async function. * @param {Function} done The Mocha async test case exit callback. * @returns {Function} The function that is notify error to mocha. */ export const graceful = functor((cb, done, optCallback) => (...args) => { let error; try { cb.apply(this, args); } catch (e) { error = e; } finally { optCallback && optCallback(); done(error); } }, { /** * Run graceful function. * @param {Function} cb Async function. * @param {Function} done The Mocha async test case exit callback. * @returns {*} Function return value. */ run: (cb, done, optCallback) => graceful(cb, done, optCallback)() }); /** * Create function that exit async test case. * @param {Function} done The Mocha async test case exit callback. * @returns {Function} Function that exit async test case. */ export const nothing = (done, optCallback) => () => (optCallback && optCallback(), done()); /** * Create function that exit test case if error thrown. * @param {Function} cb Async function. * @param {Function} done The Mocha async test case exit callback. * @returns {Function} Function that exit async test case if error thrown. */ export const stopOnError = functor((cb, done, optCallback) => (...args) => { try { return cb.apply(this, args); } catch (e) { optCallback && optCallback(); done(e); } }, { run(cb, done, optCallback) { return stopOnError(cb, done, optCallback)(); } }); export class Joiner { constructor(time, cb) { this.time = time; this.cb = cb; this.current = 0; } notify() { if (++this.current === this.time) { this.cb(); } } }