@data-client/test
Version:
Testing utilities for Data Client
101 lines (100 loc) • 13.1 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
/**
* Provides an abstraction over react 17 and 18 compatible libraries
*/
import { ErrorBoundary } from '@data-client/react';
import { Suspense } from 'react';
import { act, waitFor, renderHook } from './render18Hook.js';
import { jsx as _jsx } from "react/jsx-runtime";
export { act };
export function render18Wrapper(render, options) {
var _SetUndefined;
let renderProps = options == null ? void 0 : options.initialProps;
let error;
const setError = e => {
error = e;
};
let resetErrorBoundary = () => {};
const ErrorFallback = ({
error,
resetErrorBoundary: reset
}) => {
resetErrorBoundary = () => {
resetErrorBoundary = () => {};
setTimeout(reset, 0);
};
setError(error);
return null;
};
let resultUndefined = false;
const setResultUndefined = () => {
resultUndefined = true;
};
const SetUndefined = () => {
setResultUndefined();
return null;
};
const WithErrorWrap = props => {
resetErrorBoundary();
resultUndefined = false;
return /*#__PURE__*/_jsx(Suspense, {
fallback: _SetUndefined || (_SetUndefined = /*#__PURE__*/_jsx(SetUndefined, {})),
children: /*#__PURE__*/_jsx(ErrorBoundary, {
fallbackComponent: ErrorFallback,
children: props.children
})
});
};
// TODO: add error and waitforupdate
const Wrapper = options == null ? void 0 : options.wrapper;
const wrapper = Wrapper ? function ProviderWrapped(props) {
return /*#__PURE__*/_jsx(Wrapper, _extends({}, renderProps, props, {
children: /*#__PURE__*/_jsx(WithErrorWrap, {
children: props.children
})
}));
} : WithErrorWrap;
const render18Result = renderHook(render, _extends({}, options, {
wrapper
}));
const ret = Object.create(render18Result, {
result: {
value: {
get current() {
return render18Result.result.current === null ? undefined : render18Result.result.current;
},
get error() {
return error;
}
}
},
rerender: {
value: props => {
renderProps = props;
render18Result.rerender(props);
}
},
waitFor: {
value: waitFor
},
waitForNextUpdate: {
value: async options => {
const previousCurrent = ret.result.current;
const prevError = error;
const isMockTimers = typeof jest !== 'undefined' && setTimeout.clock != null && typeof setTimeout.clock.Date === 'function';
if (isMockTimers) {
jest.runOnlyPendingTimers();
jest.useRealTimers();
}
await waitFor(() => {
if (prevError === error && ret.result.current === previousCurrent) {
throw new Error('timeout in waitForNextUpdate');
}
}, options);
if (isMockTimers) jest.useFakeTimers();
}
}
});
return ret;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFcnJvckJvdW5kYXJ5IiwiU3VzcGVuc2UiLCJhY3QiLCJ3YWl0Rm9yIiwicmVuZGVySG9vayIsImpzeCIsIl9qc3giLCJyZW5kZXIxOFdyYXBwZXIiLCJyZW5kZXIiLCJvcHRpb25zIiwiX1NldFVuZGVmaW5lZCIsInJlbmRlclByb3BzIiwiaW5pdGlhbFByb3BzIiwiZXJyb3IiLCJzZXRFcnJvciIsImUiLCJyZXNldEVycm9yQm91bmRhcnkiLCJFcnJvckZhbGxiYWNrIiwicmVzZXQiLCJzZXRUaW1lb3V0IiwicmVzdWx0VW5kZWZpbmVkIiwic2V0UmVzdWx0VW5kZWZpbmVkIiwiU2V0VW5kZWZpbmVkIiwiV2l0aEVycm9yV3JhcCIsInByb3BzIiwiZmFsbGJhY2siLCJjaGlsZHJlbiIsImZhbGxiYWNrQ29tcG9uZW50IiwiV3JhcHBlciIsIndyYXBwZXIiLCJQcm92aWRlcldyYXBwZWQiLCJfZXh0ZW5kcyIsInJlbmRlcjE4UmVzdWx0IiwicmV0IiwiT2JqZWN0IiwiY3JlYXRlIiwicmVzdWx0IiwidmFsdWUiLCJjdXJyZW50IiwidW5kZWZpbmVkIiwicmVyZW5kZXIiLCJ3YWl0Rm9yTmV4dFVwZGF0ZSIsInByZXZpb3VzQ3VycmVudCIsInByZXZFcnJvciIsImlzTW9ja1RpbWVycyIsImplc3QiLCJjbG9jayIsIkRhdGUiLCJydW5Pbmx5UGVuZGluZ1RpbWVycyIsInVzZVJlYWxUaW1lcnMiLCJFcnJvciIsInVzZUZha2VUaW1lcnMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbWFrZVJlbmRlckRhdGFDbGllbnQvcmVuZGVyMThIb29rV3JhcHBlZC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQcm92aWRlcyBhbiBhYnN0cmFjdGlvbiBvdmVyIHJlYWN0IDE3IGFuZCAxOCBjb21wYXRpYmxlIGxpYnJhcmllc1xuICovXG5pbXBvcnQgeyBFcnJvckJvdW5kYXJ5IH0gZnJvbSAnQGRhdGEtY2xpZW50L3JlYWN0JztcbmltcG9ydCB0eXBlIHsgUXVlcmllcywgd2FpdEZvck9wdGlvbnMgfSBmcm9tICdAdGVzdGluZy1saWJyYXJ5L3JlYWN0JztcbmltcG9ydCB7IFN1c3BlbnNlIH0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgeyBhY3QsIHdhaXRGb3IsIHJlbmRlckhvb2ssIFJlbmRlckhvb2tPcHRpb25zIH0gZnJvbSAnLi9yZW5kZXIxOEhvb2suanMnO1xuXG5leHBvcnQgeyBhY3QgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlcjE4V3JhcHBlcjxcbiAgUmVzdWx0LFxuICBQcm9wcyxcbiAgUSBleHRlbmRzIFF1ZXJpZXMgPSBRdWVyaWVzLFxuICBDb250YWluZXIgZXh0ZW5kcyBFbGVtZW50IHwgRG9jdW1lbnRGcmFnbWVudCA9IEhUTUxFbGVtZW50LFxuICBCYXNlRWxlbWVudCBleHRlbmRzIEVsZW1lbnQgfCBEb2N1bWVudEZyYWdtZW50ID0gQ29udGFpbmVyLFxuPihcbiAgcmVuZGVyOiAoaW5pdGlhbFByb3BzOiBQcm9wcykgPT4gUmVzdWx0LFxuICBvcHRpb25zPzogUmVuZGVySG9va09wdGlvbnM8UHJvcHMsIFEsIENvbnRhaW5lciwgQmFzZUVsZW1lbnQ+LFxuKTogUmVuZGVySG9va1Jlc3VsdDxSZXN1bHQsIFByb3BzPiB7XG4gIGxldCByZW5kZXJQcm9wczogYW55ID0gb3B0aW9ucz8uaW5pdGlhbFByb3BzO1xuICBsZXQgZXJyb3I6IGFueTtcbiAgY29uc3Qgc2V0RXJyb3IgPSAoZTogYW55KSA9PiB7XG4gICAgZXJyb3IgPSBlO1xuICB9O1xuICBsZXQgcmVzZXRFcnJvckJvdW5kYXJ5ID0gKCkgPT4ge307XG4gIGNvbnN0IEVycm9yRmFsbGJhY2sgPSAoeyBlcnJvciwgcmVzZXRFcnJvckJvdW5kYXJ5OiByZXNldCB9OiBhbnkpID0+IHtcbiAgICByZXNldEVycm9yQm91bmRhcnkgPSAoKSA9PiB7XG4gICAgICByZXNldEVycm9yQm91bmRhcnkgPSAoKSA9PiB7fTtcbiAgICAgIHNldFRpbWVvdXQocmVzZXQsIDApO1xuICAgIH07XG4gICAgc2V0RXJyb3IoZXJyb3IpO1xuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIGxldCByZXN1bHRVbmRlZmluZWQgPSBmYWxzZTtcbiAgY29uc3Qgc2V0UmVzdWx0VW5kZWZpbmVkID0gKCkgPT4ge1xuICAgIHJlc3VsdFVuZGVmaW5lZCA9IHRydWU7XG4gIH07XG4gIGNvbnN0IFNldFVuZGVmaW5lZCA9ICgpID0+IHtcbiAgICBzZXRSZXN1bHRVbmRlZmluZWQoKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICBjb25zdCBXaXRoRXJyb3JXcmFwID0gKHByb3BzOiBhbnkpID0+IHtcbiAgICByZXNldEVycm9yQm91bmRhcnkoKTtcbiAgICByZXN1bHRVbmRlZmluZWQgPSBmYWxzZTtcblxuICAgIHJldHVybiAoXG4gICAgICA8U3VzcGVuc2UgZmFsbGJhY2s9ezxTZXRVbmRlZmluZWQgLz59PlxuICAgICAgICA8RXJyb3JCb3VuZGFyeSBmYWxsYmFja0NvbXBvbmVudD17RXJyb3JGYWxsYmFja30+XG4gICAgICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgICAgICA8L0Vycm9yQm91bmRhcnk+XG4gICAgICA8L1N1c3BlbnNlPlxuICAgICk7XG4gIH07XG5cbiAgLy8gVE9ETzogYWRkIGVycm9yIGFuZCB3YWl0Zm9ydXBkYXRlXG4gIGNvbnN0IFdyYXBwZXIgPSBvcHRpb25zPy53cmFwcGVyO1xuICBjb25zdCB3cmFwcGVyOiBSZWFjdC5Db21wb25lbnRUeXBlPGFueT4gPVxuICAgIFdyYXBwZXIgP1xuICAgICAgZnVuY3Rpb24gUHJvdmlkZXJXcmFwcGVkKHByb3BzOiBSZWFjdC5Qcm9wc1dpdGhDaGlsZHJlbjxhbnk+KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPFdyYXBwZXIgey4uLnJlbmRlclByb3BzfSB7Li4ucHJvcHN9PlxuICAgICAgICAgICAgPFdpdGhFcnJvcldyYXA+e3Byb3BzLmNoaWxkcmVufTwvV2l0aEVycm9yV3JhcD5cbiAgICAgICAgICA8L1dyYXBwZXI+XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgOiBXaXRoRXJyb3JXcmFwO1xuXG4gIGNvbnN0IHJlbmRlcjE4UmVzdWx0ID0gcmVuZGVySG9vayhyZW5kZXIsIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIHdyYXBwZXIsXG4gIH0pO1xuICBjb25zdCByZXQ6IFJlbmRlckhvb2tSZXN1bHQ8UmVzdWx0LCBQcm9wcz4gPSBPYmplY3QuY3JlYXRlKHJlbmRlcjE4UmVzdWx0LCB7XG4gICAgcmVzdWx0OiB7XG4gICAgICB2YWx1ZToge1xuICAgICAgICBnZXQgY3VycmVudCgpOiBhbnkge1xuICAgICAgICAgIHJldHVybiByZW5kZXIxOFJlc3VsdC5yZXN1bHQuY3VycmVudCA9PT0gbnVsbCA/XG4gICAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICAgICAgOiByZW5kZXIxOFJlc3VsdC5yZXN1bHQuY3VycmVudDtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IGVycm9yKCkge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICByZXJlbmRlcjoge1xuICAgICAgdmFsdWU6IChwcm9wcz86IGFueSkgPT4ge1xuICAgICAgICByZW5kZXJQcm9wcyA9IHByb3BzO1xuICAgICAgICByZW5kZXIxOFJlc3VsdC5yZXJlbmRlcihwcm9wcyk7XG4gICAgICB9LFxuICAgIH0sXG4gICAgd2FpdEZvcjoge1xuICAgICAgdmFsdWU6IHdhaXRGb3IsXG4gICAgfSxcbiAgICB3YWl0Rm9yTmV4dFVwZGF0ZToge1xuICAgICAgdmFsdWU6IGFzeW5jIChvcHRpb25zPzogd2FpdEZvck9wdGlvbnMpID0+IHtcbiAgICAgICAgY29uc3QgcHJldmlvdXNDdXJyZW50ID0gcmV0LnJlc3VsdC5jdXJyZW50O1xuICAgICAgICBjb25zdCBwcmV2RXJyb3IgPSBlcnJvcjtcbiAgICAgICAgY29uc3QgaXNNb2NrVGltZXJzID1cbiAgICAgICAgICB0eXBlb2YgamVzdCAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAoc2V0VGltZW91dCBhcyBhbnkpLmNsb2NrICE9IG51bGwgJiZcbiAgICAgICAgICB0eXBlb2YgKHNldFRpbWVvdXQgYXMgYW55KS5jbG9jay5EYXRlID09PSAnZnVuY3Rpb24nO1xuICAgICAgICBpZiAoaXNNb2NrVGltZXJzKSB7XG4gICAgICAgICAgamVzdC5ydW5Pbmx5UGVuZGluZ1RpbWVycygpO1xuICAgICAgICAgIGplc3QudXNlUmVhbFRpbWVycygpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHdhaXRGb3IoKCkgPT4ge1xuICAgICAgICAgIGlmIChwcmV2RXJyb3IgPT09IGVycm9yICYmIHJldC5yZXN1bHQuY3VycmVudCA9PT0gcHJldmlvdXNDdXJyZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RpbWVvdXQgaW4gd2FpdEZvck5leHRVcGRhdGUnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIG9wdGlvbnMpO1xuICAgICAgICBpZiAoaXNNb2NrVGltZXJzKSBqZXN0LnVzZUZha2VUaW1lcnMoKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJIb29rUmVzdWx0PFJlc3VsdCwgUHJvcHM+IHtcbiAgLyoqXG4gICAqIFRyaWdnZXJzIGEgcmUtcmVuZGVyLiBUaGUgcHJvcHMgd2lsbCBiZSBwYXNzZWQgdG8geW91ciByZW5kZXJIb29rIGNhbGxiYWNrLlxuICAgKi9cbiAgcmVyZW5kZXI6IChwcm9wcz86IFByb3BzKSA9PiB2b2lkO1xuICAvKipcbiAgICogVGhpcyBpcyBhIHN0YWJsZSByZWZlcmVuY2UgdG8gdGhlIGxhdGVzdCB2YWx1ZSByZXR1cm5lZCBieSB5b3VyIHJlbmRlckhvb2tcbiAgICogY2FsbGJhY2tcbiAgICovXG4gIHJlc3VsdDoge1xuICAgIC8qKlxuICAgICAqIFRoZSB2YWx1ZSByZXR1cm5lZCBieSB5b3VyIHJlbmRlckhvb2sgY2FsbGJhY2tcbiAgICAgKi9cbiAgICBjdXJyZW50OiBSZXN1bHQ7XG4gICAgZXJyb3I/OiBFcnJvcjtcbiAgfTtcbiAgLyoqXG4gICAqIFVubW91bnRzIHRoZSB0ZXN0IGNvbXBvbmVudC4gVGhpcyBpcyB1c2VmdWwgZm9yIHdoZW4geW91IG5lZWQgdG8gdGVzdFxuICAgKiBhbnkgY2xlYW51cCB5b3VyIHVzZUVmZmVjdHMgaGF2ZS5cbiAgICovXG4gIHVubW91bnQ6ICgpID0+IHZvaWQ7XG4gIC8qIEBkZXByZWNhdGVkIHVzZSB3YWl0Rm9yICovXG4gIHdhaXRGb3JOZXh0VXBkYXRlOiAob3B0aW9ucz86IHdhaXRGb3JPcHRpb25zKSA9PiBQcm9taXNlPHZvaWQ+O1xuICB3YWl0Rm9yPFQ+KFxuICAgIGNhbGxiYWNrOiAoKSA9PiBQcm9taXNlPFQ+IHwgVCxcbiAgICBvcHRpb25zPzogd2FpdEZvck9wdGlvbnMsXG4gICk6IFByb21pc2U8VD47XG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxhQUFhLFFBQVEsb0JBQW9CO0FBRWxELFNBQVNDLFFBQVEsUUFBUSxPQUFPO0FBRWhDLFNBQVNDLEdBQUcsRUFBRUMsT0FBTyxFQUFFQyxVQUFVLFFBQTJCLG1CQUFtQjtBQUFDLFNBQUFDLEdBQUEsSUFBQUMsSUFBQTtBQUVoRixTQUFTSixHQUFHO0FBRVosT0FBTyxTQUFTSyxlQUFlQSxDQU83QkMsTUFBdUMsRUFDdkNDLE9BQTZELEVBQzVCO0VBQUEsSUFBQUMsYUFBQTtFQUNqQyxJQUFJQyxXQUFnQixHQUFHRixPQUFPLG9CQUFQQSxPQUFPLENBQUVHLFlBQVk7RUFDNUMsSUFBSUMsS0FBVTtFQUNkLE1BQU1DLFFBQVEsR0FBSUMsQ0FBTSxJQUFLO0lBQzNCRixLQUFLLEdBQUdFLENBQUM7RUFDWCxDQUFDO0VBQ0QsSUFBSUMsa0JBQWtCLEdBQUdBLENBQUEsS0FBTSxDQUFDLENBQUM7RUFDakMsTUFBTUMsYUFBYSxHQUFHQSxD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