@react-native-harness/runtime 1.0.0-alpha.2 → 1.0.0-alpha.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -4
- package/assets/harness-module-system.js +73 -0
- package/dist/bundler/bundle.d.ts.map +1 -1
- package/dist/bundler/bundle.js +7 -2
- package/dist/bundler/errors.d.ts +5 -0
- package/dist/bundler/errors.d.ts.map +1 -1
- package/dist/bundler/errors.js +10 -0
- package/dist/bundler/evaluate.d.ts.map +1 -1
- package/dist/bundler/evaluate.js +7 -7
- package/dist/bundler/factory.d.ts +3 -0
- package/dist/bundler/factory.d.ts.map +1 -0
- package/dist/bundler/factory.js +36 -0
- package/dist/bundler/index.d.ts +2 -1
- package/dist/bundler/index.d.ts.map +1 -1
- package/dist/bundler/index.js +1 -1
- package/dist/bundler/types.d.ts +7 -0
- package/dist/bundler/types.d.ts.map +1 -0
- package/dist/bundler/types.js +1 -0
- package/dist/client/factory.d.ts.map +1 -1
- package/dist/client/factory.js +34 -6
- package/dist/client/getDeviceDescriptor.d.ts +1 -1
- package/dist/client/getDeviceDescriptor.d.ts.map +1 -1
- package/dist/client/getDeviceDescriptor.js +18 -6
- package/dist/client/getWSServer.d.ts.map +1 -1
- package/dist/client/getWSServer.js +2 -1
- package/dist/client/setup-files.d.ts +12 -0
- package/dist/client/setup-files.d.ts.map +1 -0
- package/dist/client/setup-files.js +60 -0
- package/dist/client/store.d.ts +4 -0
- package/dist/client/store.d.ts.map +1 -0
- package/dist/client/store.js +10 -0
- package/dist/collector/functions.d.ts +1 -1
- package/dist/collector/functions.d.ts.map +1 -1
- package/dist/collector/functions.js +10 -2
- package/dist/collector/types.d.ts +1 -1
- package/dist/collector/types.d.ts.map +1 -1
- package/dist/constants.d.ts +0 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +0 -1
- package/dist/disableHMRWhenReady.d.ts +2 -0
- package/dist/disableHMRWhenReady.d.ts.map +1 -0
- package/dist/disableHMRWhenReady.js +20 -0
- package/dist/entry-point.d.ts +2 -0
- package/dist/entry-point.d.ts.map +1 -0
- package/dist/entry-point.js +4 -0
- package/dist/expect/expect.d.ts +9 -0
- package/dist/expect/expect.d.ts.map +1 -0
- package/dist/expect/expect.js +77 -0
- package/dist/expect/index.d.ts.map +1 -1
- package/dist/expect/index.js +2 -0
- package/dist/expect/matchers/toMatchImageSnapshot.d.ts +12 -0
- package/dist/expect/matchers/toMatchImageSnapshot.d.ts.map +1 -0
- package/dist/expect/matchers/toMatchImageSnapshot.js +11 -0
- package/dist/expect/setup.js +2 -0
- package/dist/filtering/index.d.ts +2 -0
- package/dist/filtering/index.d.ts.map +1 -0
- package/dist/filtering/index.js +1 -0
- package/dist/filtering/testNameFilter.d.ts +12 -0
- package/dist/filtering/testNameFilter.d.ts.map +1 -0
- package/dist/filtering/testNameFilter.js +56 -0
- package/dist/globals.d.ts +6 -2
- package/dist/globals.d.ts.map +1 -1
- package/dist/globals.js +7 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/initialize.js +14 -6
- package/dist/jest-mock.d.ts +2 -0
- package/dist/jest-mock.d.ts.map +1 -0
- package/dist/jest-mock.js +25 -0
- package/dist/mocker/index.d.ts +1 -1
- package/dist/mocker/index.d.ts.map +1 -1
- package/dist/mocker/index.js +1 -1
- package/dist/mocker/registry.d.ts +2 -3
- package/dist/mocker/registry.d.ts.map +1 -1
- package/dist/mocker/registry.js +25 -16
- package/dist/namespace.d.ts +18 -0
- package/dist/namespace.d.ts.map +1 -0
- package/dist/namespace.js +19 -0
- package/dist/render/ErrorBoundary.d.ts +17 -0
- package/dist/render/ErrorBoundary.d.ts.map +1 -0
- package/dist/render/ErrorBoundary.js +73 -0
- package/dist/render/TestComponentOverlay.d.ts +3 -0
- package/dist/render/TestComponentOverlay.d.ts.map +1 -0
- package/dist/render/TestComponentOverlay.js +36 -0
- package/dist/render/cleanup.d.ts +2 -0
- package/dist/render/cleanup.d.ts.map +1 -0
- package/dist/render/cleanup.js +6 -0
- package/dist/render/index.d.ts +6 -0
- package/dist/render/index.d.ts.map +1 -0
- package/dist/render/index.js +66 -0
- package/dist/render/queries.d.ts +7 -0
- package/dist/render/queries.d.ts.map +1 -0
- package/dist/render/queries.js +99 -0
- package/dist/render/setup.d.ts +2 -0
- package/dist/render/setup.d.ts.map +1 -0
- package/dist/render/setup.js +7 -0
- package/dist/render/types.d.ts +12 -0
- package/dist/render/types.d.ts.map +1 -0
- package/dist/render/types.js +1 -0
- package/dist/runner/context.d.ts +10 -0
- package/dist/runner/context.d.ts.map +1 -0
- package/dist/runner/context.js +6 -0
- package/dist/runner/errors.d.ts +4 -2
- package/dist/runner/errors.d.ts.map +1 -1
- package/dist/runner/errors.js +21 -3
- package/dist/runner/factory.d.ts.map +1 -1
- package/dist/runner/factory.js +6 -1
- package/dist/runner/runSuite.d.ts.map +1 -1
- package/dist/runner/runSuite.js +59 -7
- package/dist/screen/index.d.ts +8 -0
- package/dist/screen/index.d.ts.map +1 -0
- package/dist/screen/index.js +18 -0
- package/dist/symbolicate.d.ts +3 -0
- package/dist/symbolicate.d.ts.map +1 -0
- package/dist/symbolicate.js +19 -0
- package/dist/tsconfig.lib.tsbuildinfo +1 -1
- package/dist/ui/ReadyScreen.d.ts.map +1 -1
- package/dist/ui/ReadyScreen.js +3 -10
- package/dist/ui/WrongEnvironmentScreen.d.ts.map +1 -1
- package/dist/ui/WrongEnvironmentScreen.js +2 -10
- package/dist/ui/state.d.ts +14 -1
- package/dist/ui/state.d.ts.map +1 -1
- package/dist/ui/state.js +22 -0
- package/dist/userEvent/index.d.ts +6 -0
- package/dist/userEvent/index.d.ts.map +1 -0
- package/dist/userEvent/index.js +10 -0
- package/dist/utils/emitter.d.ts.map +1 -1
- package/dist/waitFor.d.ts +21 -0
- package/dist/waitFor.d.ts.map +1 -0
- package/dist/waitFor.js +137 -0
- package/eslint.config.mjs +1 -7
- package/out-tsc/vitest/src/__tests__/collector.test.d.ts +2 -0
- package/out-tsc/vitest/src/__tests__/collector.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/__tests__/error-handling.test.d.ts +2 -0
- package/out-tsc/vitest/src/__tests__/error-handling.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/__tests__/expect.test.d.ts +2 -0
- package/out-tsc/vitest/src/__tests__/expect.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/__tests__/spy.test.d.ts +2 -0
- package/out-tsc/vitest/src/__tests__/spy.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/bundler/bundle.d.ts +2 -0
- package/out-tsc/vitest/src/bundler/bundle.d.ts.map +1 -0
- package/out-tsc/vitest/src/bundler/errors.d.ts +15 -0
- package/out-tsc/vitest/src/bundler/errors.d.ts.map +1 -0
- package/out-tsc/vitest/src/bundler/evaluate.d.ts +2 -0
- package/out-tsc/vitest/src/bundler/evaluate.d.ts.map +1 -0
- package/out-tsc/vitest/src/bundler/factory.d.ts +3 -0
- package/out-tsc/vitest/src/bundler/factory.d.ts.map +1 -0
- package/out-tsc/vitest/src/bundler/index.d.ts +4 -0
- package/out-tsc/vitest/src/bundler/index.d.ts.map +1 -0
- package/out-tsc/vitest/src/bundler/types.d.ts +7 -0
- package/out-tsc/vitest/src/bundler/types.d.ts.map +1 -0
- package/out-tsc/vitest/src/client/factory.d.ts +2 -0
- package/out-tsc/vitest/src/client/factory.d.ts.map +1 -0
- package/out-tsc/vitest/src/client/getDeviceDescriptor.d.ts +8 -0
- package/out-tsc/vitest/src/client/getDeviceDescriptor.d.ts.map +1 -0
- package/out-tsc/vitest/src/client/getWSServer.d.ts +2 -0
- package/out-tsc/vitest/src/client/getWSServer.d.ts.map +1 -0
- package/out-tsc/vitest/src/client/index.d.ts +2 -0
- package/out-tsc/vitest/src/client/index.d.ts.map +1 -0
- package/out-tsc/vitest/src/client/setup-files.d.ts +12 -0
- package/out-tsc/vitest/src/client/setup-files.d.ts.map +1 -0
- package/out-tsc/vitest/src/client/store.d.ts +4 -0
- package/out-tsc/vitest/src/client/store.d.ts.map +1 -0
- package/out-tsc/vitest/src/collector/errors.d.ts +8 -0
- package/out-tsc/vitest/src/collector/errors.d.ts.map +1 -0
- package/out-tsc/vitest/src/collector/factory.d.ts +3 -0
- package/out-tsc/vitest/src/collector/factory.d.ts.map +1 -0
- package/out-tsc/vitest/src/collector/functions.d.ts +22 -0
- package/out-tsc/vitest/src/collector/functions.d.ts.map +1 -0
- package/out-tsc/vitest/src/collector/index.d.ts +5 -0
- package/out-tsc/vitest/src/collector/index.d.ts.map +1 -0
- package/out-tsc/vitest/src/collector/types.d.ts +10 -0
- package/out-tsc/vitest/src/collector/types.d.ts.map +1 -0
- package/out-tsc/vitest/src/collector/validation.d.ts +4 -0
- package/out-tsc/vitest/src/collector/validation.d.ts.map +1 -0
- package/out-tsc/vitest/src/constants.d.ts +2 -0
- package/out-tsc/vitest/src/constants.d.ts.map +1 -0
- package/out-tsc/vitest/src/entry-point.d.ts +2 -0
- package/out-tsc/vitest/src/entry-point.d.ts.map +1 -0
- package/out-tsc/vitest/src/errors.d.ts +6 -0
- package/out-tsc/vitest/src/errors.d.ts.map +1 -0
- package/out-tsc/vitest/src/expect/index.d.ts +14 -0
- package/out-tsc/vitest/src/expect/index.d.ts.map +1 -0
- package/out-tsc/vitest/src/expect/matchers/toMatchImageSnapshot.d.ts +7 -0
- package/out-tsc/vitest/src/expect/matchers/toMatchImageSnapshot.d.ts.map +1 -0
- package/out-tsc/vitest/src/expect/setup.d.ts +2 -0
- package/out-tsc/vitest/src/expect/setup.d.ts.map +1 -0
- package/out-tsc/vitest/src/filtering/index.d.ts +2 -0
- package/out-tsc/vitest/src/filtering/index.d.ts.map +1 -0
- package/out-tsc/vitest/src/filtering/testNameFilter.d.ts +12 -0
- package/out-tsc/vitest/src/filtering/testNameFilter.d.ts.map +1 -0
- package/out-tsc/vitest/src/globals.d.ts +8 -0
- package/out-tsc/vitest/src/globals.d.ts.map +1 -0
- package/out-tsc/vitest/src/index.d.ts +13 -0
- package/out-tsc/vitest/src/index.d.ts.map +1 -0
- package/out-tsc/vitest/src/initialize.d.ts +2 -0
- package/out-tsc/vitest/src/initialize.d.ts.map +1 -0
- package/out-tsc/vitest/src/jest-mock.d.ts +2 -0
- package/out-tsc/vitest/src/jest-mock.d.ts.map +1 -0
- package/out-tsc/vitest/src/mocker/index.d.ts +2 -0
- package/out-tsc/vitest/src/mocker/index.d.ts.map +1 -0
- package/out-tsc/vitest/src/mocker/registry.d.ts +7 -0
- package/out-tsc/vitest/src/mocker/registry.d.ts.map +1 -0
- package/out-tsc/vitest/src/mocker/types.d.ts +6 -0
- package/out-tsc/vitest/src/mocker/types.d.ts.map +1 -0
- package/out-tsc/vitest/src/namespace.d.ts +18 -0
- package/out-tsc/vitest/src/namespace.d.ts.map +1 -0
- package/out-tsc/vitest/src/render/ErrorBoundary.d.ts +17 -0
- package/out-tsc/vitest/src/render/ErrorBoundary.d.ts.map +1 -0
- package/out-tsc/vitest/src/render/TestComponentOverlay.d.ts +3 -0
- package/out-tsc/vitest/src/render/TestComponentOverlay.d.ts.map +1 -0
- package/out-tsc/vitest/src/render/cleanup.d.ts +2 -0
- package/out-tsc/vitest/src/render/cleanup.d.ts.map +1 -0
- package/out-tsc/vitest/src/render/index.d.ts +6 -0
- package/out-tsc/vitest/src/render/index.d.ts.map +1 -0
- package/out-tsc/vitest/src/render/setup.d.ts +2 -0
- package/out-tsc/vitest/src/render/setup.d.ts.map +1 -0
- package/out-tsc/vitest/src/render/types.d.ts +12 -0
- package/out-tsc/vitest/src/render/types.d.ts.map +1 -0
- package/out-tsc/vitest/src/runner/errors.d.ts +11 -0
- package/out-tsc/vitest/src/runner/errors.d.ts.map +1 -0
- package/out-tsc/vitest/src/runner/factory.d.ts +3 -0
- package/out-tsc/vitest/src/runner/factory.d.ts.map +1 -0
- package/out-tsc/vitest/src/runner/hooks.d.ts +4 -0
- package/out-tsc/vitest/src/runner/hooks.d.ts.map +1 -0
- package/out-tsc/vitest/src/runner/index.d.ts +4 -0
- package/out-tsc/vitest/src/runner/index.d.ts.map +1 -0
- package/out-tsc/vitest/src/runner/runSuite.d.ts +4 -0
- package/out-tsc/vitest/src/runner/runSuite.d.ts.map +1 -0
- package/out-tsc/vitest/src/runner/types.d.ts +13 -0
- package/out-tsc/vitest/src/runner/types.d.ts.map +1 -0
- package/out-tsc/vitest/src/screen/index.d.ts +8 -0
- package/out-tsc/vitest/src/screen/index.d.ts.map +1 -0
- package/out-tsc/vitest/src/spy/index.d.ts +2 -0
- package/out-tsc/vitest/src/spy/index.d.ts.map +1 -0
- package/out-tsc/vitest/src/symbolicate.d.ts +3 -0
- package/out-tsc/vitest/src/symbolicate.d.ts.map +1 -0
- package/out-tsc/vitest/src/ui/ReadyScreen.d.ts +2 -0
- package/out-tsc/vitest/src/ui/ReadyScreen.d.ts.map +1 -0
- package/out-tsc/vitest/src/ui/WrongEnvironmentScreen.d.ts +2 -0
- package/out-tsc/vitest/src/ui/WrongEnvironmentScreen.d.ts.map +1 -0
- package/out-tsc/vitest/src/ui/index.d.ts +2 -0
- package/out-tsc/vitest/src/ui/index.d.ts.map +1 -0
- package/out-tsc/vitest/src/ui/state.d.ts +20 -0
- package/out-tsc/vitest/src/ui/state.d.ts.map +1 -0
- package/out-tsc/vitest/src/userEvent/index.d.ts +6 -0
- package/out-tsc/vitest/src/userEvent/index.d.ts.map +1 -0
- package/out-tsc/vitest/src/utils/dev-server.d.ts +2 -0
- package/out-tsc/vitest/src/utils/dev-server.d.ts.map +1 -0
- package/out-tsc/vitest/src/utils/emitter.d.ts +16 -0
- package/out-tsc/vitest/src/utils/emitter.d.ts.map +1 -0
- package/out-tsc/vitest/src/waitFor.d.ts +21 -0
- package/out-tsc/vitest/src/waitFor.d.ts.map +1 -0
- package/out-tsc/vitest/tsconfig.spec.tsbuildinfo +1 -0
- package/out-tsc/vitest/vite.config.d.ts +3 -0
- package/out-tsc/vitest/vite.config.d.ts.map +1 -0
- package/package.json +22 -14
- package/src/__tests__/collector.test.ts +55 -55
- package/src/__tests__/error-handling.test.ts +34 -34
- package/src/__tests__/expect.test.ts +13 -5
- package/src/__tests__/initialize.test.ts +24 -0
- package/src/bundler/bundle.ts +9 -2
- package/src/bundler/errors.ts +10 -0
- package/src/bundler/evaluate.ts +9 -9
- package/src/bundler/factory.ts +43 -0
- package/src/bundler/index.ts +2 -1
- package/src/bundler/types.ts +7 -0
- package/src/client/factory.ts +53 -11
- package/src/client/getDeviceDescriptor.ts +29 -8
- package/src/client/getWSServer.ts +2 -1
- package/src/client/setup-files.ts +81 -0
- package/src/collector/functions.ts +18 -2
- package/src/collector/types.ts +4 -1
- package/src/constants.ts +0 -1
- package/src/disableHMRWhenReady.ts +27 -0
- package/src/entry-point.ts +8 -0
- package/src/expect/index.ts +8 -2
- package/src/expect/setup.ts +3 -0
- package/src/filtering/index.ts +4 -0
- package/src/filtering/testNameFilter.ts +82 -0
- package/src/globals.ts +15 -2
- package/src/index.ts +3 -0
- package/src/initialize.ts +21 -8
- package/src/jest-mock.ts +32 -0
- package/src/mocker/index.ts +6 -1
- package/src/mocker/metro-require.d.ts +2 -0
- package/src/mocker/registry.ts +29 -18
- package/src/namespace.ts +41 -0
- package/src/react-native.d.ts +35 -6
- package/src/render/ErrorBoundary.tsx +108 -0
- package/src/render/TestComponentOverlay.tsx +47 -0
- package/src/render/cleanup.ts +7 -0
- package/src/render/index.ts +96 -0
- package/src/render/setup.ts +8 -0
- package/src/render/types.ts +11 -0
- package/src/runner/errors.ts +35 -5
- package/src/runner/factory.ts +8 -1
- package/src/runner/runSuite.ts +70 -9
- package/src/symbolicate.ts +24 -0
- package/src/ui/ReadyScreen.tsx +2 -12
- package/src/ui/WrongEnvironmentScreen.tsx +1 -19
- package/src/ui/state.ts +39 -0
- package/src/utils/emitter.ts +1 -0
- package/src/waitFor.ts +199 -0
- package/tsconfig.spec.json +7 -3
- package/tsconfig.tsbuildinfo +1 -1
- package/assets/logo.png +0 -0
- package/assets/moduleSystem.flow.js +0 -1062
- package/types/global.d.ts +0 -2
- package/types/index.d.ts +0 -1
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { RenderResult, RenderOptions } from './types.js';
|
|
3
|
+
export declare const render: (element: React.ReactElement, options?: RenderOptions) => Promise<RenderResult>;
|
|
4
|
+
export { cleanup } from './cleanup.js';
|
|
5
|
+
export type { RenderResult, RenderOptions } from './types.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/render/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAY9D,eAAO,MAAM,MAAM,GACjB,SAAS,KAAK,CAAC,YAAY,EAC3B,UAAS,aAAkB,KAC1B,OAAO,CAAC,YAAY,CA2EtB,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { store } from '../ui/state.js';
|
|
3
|
+
const wrapElement = (element, wrapper) => {
|
|
4
|
+
if (!wrapper) {
|
|
5
|
+
return element;
|
|
6
|
+
}
|
|
7
|
+
return React.createElement(wrapper, { children: element });
|
|
8
|
+
};
|
|
9
|
+
export const render = async (element, options = {}) => {
|
|
10
|
+
const { timeout = 1000, wrapper } = options;
|
|
11
|
+
// If an element is already rendered, unmount it first
|
|
12
|
+
if (store.getState().renderedElement !== null) {
|
|
13
|
+
store.getState().setRenderedElement(null);
|
|
14
|
+
store.getState().setOnLayoutCallback(null);
|
|
15
|
+
store.getState().setOnRenderCallback(null);
|
|
16
|
+
}
|
|
17
|
+
// Create a promise that resolves when the element is laid out
|
|
18
|
+
const layoutPromise = new Promise((resolve, reject) => {
|
|
19
|
+
const timeoutId = setTimeout(() => {
|
|
20
|
+
store.getState().setOnLayoutCallback(null);
|
|
21
|
+
reject(new Error(`Render timeout: Element did not mount within ${timeout}ms`));
|
|
22
|
+
}, timeout);
|
|
23
|
+
store.getState().setOnLayoutCallback(() => {
|
|
24
|
+
clearTimeout(timeoutId);
|
|
25
|
+
resolve();
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
// Wrap and set the element in state (key is generated automatically)
|
|
29
|
+
const wrappedElement = wrapElement(element, wrapper);
|
|
30
|
+
store.getState().setRenderedElement(wrappedElement);
|
|
31
|
+
// Wait for layout
|
|
32
|
+
await layoutPromise;
|
|
33
|
+
const rerender = async (newElement) => {
|
|
34
|
+
if (store.getState().renderedElement === null) {
|
|
35
|
+
throw new Error('No element is currently rendered. Call render() first.');
|
|
36
|
+
}
|
|
37
|
+
// Create a promise that resolves when the element is re-rendered
|
|
38
|
+
const renderPromise = new Promise((resolve, reject) => {
|
|
39
|
+
const timeoutId = setTimeout(() => {
|
|
40
|
+
store.getState().setOnRenderCallback(null);
|
|
41
|
+
reject(new Error(`Rerender timeout: Element did not update within ${timeout}ms`));
|
|
42
|
+
}, timeout);
|
|
43
|
+
store.getState().setOnRenderCallback(() => {
|
|
44
|
+
clearTimeout(timeoutId);
|
|
45
|
+
resolve();
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
const wrappedNewElement = wrapElement(newElement, wrapper);
|
|
49
|
+
store.getState().updateRenderedElement(wrappedNewElement);
|
|
50
|
+
// Wait for render
|
|
51
|
+
await renderPromise;
|
|
52
|
+
};
|
|
53
|
+
const unmount = () => {
|
|
54
|
+
if (store.getState().renderedElement === null) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
store.getState().setRenderedElement(null);
|
|
58
|
+
store.getState().setOnLayoutCallback(null);
|
|
59
|
+
store.getState().setOnRenderCallback(null);
|
|
60
|
+
};
|
|
61
|
+
return {
|
|
62
|
+
rerender,
|
|
63
|
+
unmount,
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
export { cleanup } from './cleanup.js';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { HostInstance } from 'react-native';
|
|
2
|
+
export declare const setRoot: (rootInstance: HostInstance) => void;
|
|
3
|
+
declare const queryByTestId: (params: string) => import("react-native/types_generated/src/private/webapis/dom/nodes/ReactNativeElement").default | null, queryAllByTestId: (params: string) => import("react-native/types_generated/src/private/webapis/dom/nodes/ReactNativeElement").default[], getByTestId: (params: string) => import("react-native/types_generated/src/private/webapis/dom/nodes/ReactNativeElement").default | null, getAllByTestId: (params: string) => import("react-native/types_generated/src/private/webapis/dom/nodes/ReactNativeElement").default[], findByTestId: (params: string) => Promise<import("react-native/types_generated/src/private/webapis/dom/nodes/ReactNativeElement").default>, findAllByTestId: (params: string) => Promise<import("react-native/types_generated/src/private/webapis/dom/nodes/ReactNativeElement").default[]>;
|
|
4
|
+
declare const queryById: (params: string) => import("react-native/types_generated/src/private/webapis/dom/nodes/ReactNativeElement").default | null, queryAllById: (params: string) => import("react-native/types_generated/src/private/webapis/dom/nodes/ReactNativeElement").default[], getId: (params: string) => import("react-native/types_generated/src/private/webapis/dom/nodes/ReactNativeElement").default | null, getAllById: (params: string) => import("react-native/types_generated/src/private/webapis/dom/nodes/ReactNativeElement").default[], findById: (params: string) => Promise<import("react-native/types_generated/src/private/webapis/dom/nodes/ReactNativeElement").default>, findAllById: (params: string) => Promise<import("react-native/types_generated/src/private/webapis/dom/nodes/ReactNativeElement").default[]>;
|
|
5
|
+
export { queryByTestId, queryAllByTestId, getByTestId, getAllByTestId, findByTestId, findAllByTestId, };
|
|
6
|
+
export { queryById, queryAllById, getId, getAllById, findById, findAllById };
|
|
7
|
+
//# sourceMappingURL=queries.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/render/queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAM5C,eAAO,MAAM,OAAO,GAAI,cAAc,YAAY,SAEjD,CAAC;AA6IF,QAAA,MACW,aAAa,8HACV,gBAAgB,yHACrB,WAAW,8HACR,cAAc,yHAChB,YAAY,gIACT,eAAe,gIAG3B,CAAC;AACF,QAAA,MACW,SAAS,8HACN,YAAY,yHACjB,KAAK,8HACF,UAAU,yHACZ,QAAQ,gIACL,WAAW,gIAC+B,CAAC;AAExD,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,YAAY,EACZ,eAAe,GAChB,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// import { store } from '../ui/state.js';
|
|
2
|
+
import { waitUntil } from '../waitFor.js';
|
|
3
|
+
let root = null;
|
|
4
|
+
export const setRoot = (rootInstance) => {
|
|
5
|
+
root = rootInstance;
|
|
6
|
+
};
|
|
7
|
+
const getRoot = () => {
|
|
8
|
+
const container = root;
|
|
9
|
+
if (!container) {
|
|
10
|
+
throw new Error('You need to render a component first!');
|
|
11
|
+
}
|
|
12
|
+
const ownerDocument = container.ownerDocument;
|
|
13
|
+
if (!ownerDocument) {
|
|
14
|
+
throw new Error('This feature is supported in React Native 0.82 and later!');
|
|
15
|
+
}
|
|
16
|
+
return ownerDocument.getRootNode();
|
|
17
|
+
};
|
|
18
|
+
const findNodeByPredicate = (predicate) => {
|
|
19
|
+
const queue = [getRoot()];
|
|
20
|
+
while (queue.length > 0) {
|
|
21
|
+
const node = queue.shift();
|
|
22
|
+
if (predicate(node)) {
|
|
23
|
+
return node;
|
|
24
|
+
}
|
|
25
|
+
for (const child of node.children) {
|
|
26
|
+
queue.push(child);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return null;
|
|
30
|
+
};
|
|
31
|
+
const findNodesByPredicate = (predicate) => {
|
|
32
|
+
const nodes = [];
|
|
33
|
+
const queue = [getRoot()];
|
|
34
|
+
while (queue.length > 0) {
|
|
35
|
+
const node = queue.shift();
|
|
36
|
+
if (predicate(node)) {
|
|
37
|
+
nodes.push(node);
|
|
38
|
+
}
|
|
39
|
+
for (const child of node.children) {
|
|
40
|
+
queue.push(child);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return nodes;
|
|
44
|
+
};
|
|
45
|
+
const getFiberOfHostInstance = (hostInstance) => {
|
|
46
|
+
// This should be considered as 'reaching into the implementation details' of React Native.
|
|
47
|
+
// Not perfect, but it's the only way to get the props of the host instance.
|
|
48
|
+
return (hostInstance
|
|
49
|
+
.__internalInstanceHandle || null);
|
|
50
|
+
};
|
|
51
|
+
const getPropsOfHostInstance = (hostInstance) => {
|
|
52
|
+
return getFiberOfHostInstance(hostInstance)?.memoizedProps || {};
|
|
53
|
+
};
|
|
54
|
+
const findBy = (predicate, options) => {
|
|
55
|
+
return waitUntil(() => findNodeByPredicate(predicate), options);
|
|
56
|
+
};
|
|
57
|
+
const findAllBy = (predicate, options) => {
|
|
58
|
+
return waitUntil(() => {
|
|
59
|
+
const nodes = findNodesByPredicate(predicate);
|
|
60
|
+
if (nodes.length === 0) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
return nodes;
|
|
64
|
+
}, options);
|
|
65
|
+
};
|
|
66
|
+
const queryBy = (predicate) => {
|
|
67
|
+
return findNodeByPredicate(predicate);
|
|
68
|
+
};
|
|
69
|
+
const queryAllBy = (predicate) => {
|
|
70
|
+
return findNodesByPredicate(predicate);
|
|
71
|
+
};
|
|
72
|
+
const getBy = (predicate) => {
|
|
73
|
+
const node = queryBy(predicate);
|
|
74
|
+
if (!node) {
|
|
75
|
+
throw new Error(`No node found with predicate ${predicate}`);
|
|
76
|
+
}
|
|
77
|
+
return node;
|
|
78
|
+
};
|
|
79
|
+
const getAllBy = (predicate) => {
|
|
80
|
+
const nodes = queryAllBy(predicate);
|
|
81
|
+
if (nodes.length === 0) {
|
|
82
|
+
throw new Error(`No nodes found with predicate ${predicate}`);
|
|
83
|
+
}
|
|
84
|
+
return nodes;
|
|
85
|
+
};
|
|
86
|
+
const createQueries = (predicate) => {
|
|
87
|
+
return {
|
|
88
|
+
findBy: (params) => findBy((node) => predicate(node, params)),
|
|
89
|
+
findAllBy: (params) => findAllBy((node) => predicate(node, params)),
|
|
90
|
+
queryBy: (params) => queryBy((node) => predicate(node, params)),
|
|
91
|
+
queryAllBy: (params) => queryAllBy((node) => predicate(node, params)),
|
|
92
|
+
getBy: (params) => getBy((node) => predicate(node, params)),
|
|
93
|
+
getAllBy: (params) => getAllBy((node) => predicate(node, params)),
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
const { queryBy: queryByTestId, queryAllBy: queryAllByTestId, getBy: getByTestId, getAllBy: getAllByTestId, findBy: findByTestId, findAllBy: findAllByTestId, } = createQueries((node, testId) => getPropsOfHostInstance(node).testID === testId);
|
|
97
|
+
const { queryBy: queryById, queryAllBy: queryAllById, getBy: getId, getAllBy: getAllById, findBy: findById, findAllBy: findAllById, } = createQueries((node, id) => node.id === id);
|
|
98
|
+
export { queryByTestId, queryAllByTestId, getByTestId, getAllByTestId, findByTestId, findAllByTestId, };
|
|
99
|
+
export { queryById, queryAllById, getId, getAllById, findById, findAllById };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/render/setup.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,KAAK,YAIjB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type React from 'react';
|
|
2
|
+
export type RenderResult = {
|
|
3
|
+
rerender: (element: React.ReactElement) => Promise<void>;
|
|
4
|
+
unmount: () => void;
|
|
5
|
+
};
|
|
6
|
+
export type RenderOptions = {
|
|
7
|
+
timeout?: number;
|
|
8
|
+
wrapper?: React.ComponentType<{
|
|
9
|
+
children: React.ReactNode;
|
|
10
|
+
}>;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/render/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE,CAAC,CAAC;CAC9D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type HarnessContext = {
|
|
2
|
+
testFilePath: string;
|
|
3
|
+
runner: string;
|
|
4
|
+
};
|
|
5
|
+
declare global {
|
|
6
|
+
var HARNESS_CONTEXT: HarnessContext;
|
|
7
|
+
}
|
|
8
|
+
export declare const getHarnessContext: () => HarnessContext;
|
|
9
|
+
export declare const setHarnessContext: (context: HarnessContext) => void;
|
|
10
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/runner/context.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,OAAO,CAAC,MAAM,CAAC;IACb,IAAI,eAAe,EAAE,cAAc,CAAC;CACrC;AAED,eAAO,MAAM,iBAAiB,QAAO,cAEpC,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,SAAS,cAAc,KAAG,IAE3D,CAAC"}
|
package/dist/runner/errors.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import type { SerializedError } from '@react-native-harness/bridge';
|
|
1
|
+
import type { SerializedError, CodeFrame } from '@react-native-harness/bridge';
|
|
2
2
|
export declare class TestExecutionError extends Error {
|
|
3
3
|
file: string;
|
|
4
4
|
suite: string;
|
|
5
5
|
test: string;
|
|
6
|
-
|
|
6
|
+
codeFrame?: CodeFrame;
|
|
7
|
+
constructor(error: unknown, file: string, suite: string, test: string, codeFrame?: CodeFrame);
|
|
7
8
|
toSerializedJSON(): SerializedError;
|
|
8
9
|
}
|
|
10
|
+
export declare const getTestExecutionError: (error: unknown, file: string, suite: string, test: string) => Promise<TestExecutionError>;
|
|
9
11
|
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/runner/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/runner/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAG/E,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,SAAS,CAAC;gBAGpB,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,SAAS,CAAC,EAAE,SAAS;IAWvB,gBAAgB,IAAI,eAAe;CAapC;AAED,eAAO,MAAM,qBAAqB,GAChC,OAAO,OAAO,EACd,MAAM,MAAM,EACZ,OAAO,MAAM,EACb,MAAM,MAAM,KACX,OAAO,CAAC,kBAAkB,CAe5B,CAAC"}
|
package/dist/runner/errors.js
CHANGED
|
@@ -1,23 +1,41 @@
|
|
|
1
|
+
import { getCodeFrame } from '../symbolicate.js';
|
|
1
2
|
export class TestExecutionError extends Error {
|
|
2
3
|
file;
|
|
3
4
|
suite;
|
|
4
5
|
test;
|
|
5
|
-
|
|
6
|
+
codeFrame;
|
|
7
|
+
constructor(error, file, suite, test, codeFrame) {
|
|
6
8
|
super('Test execution error');
|
|
7
9
|
this.name = 'TestExecutionError';
|
|
8
10
|
this.file = file;
|
|
9
11
|
this.suite = suite;
|
|
10
12
|
this.test = test;
|
|
11
13
|
this.cause = error;
|
|
14
|
+
this.codeFrame = codeFrame;
|
|
12
15
|
}
|
|
13
16
|
toSerializedJSON() {
|
|
14
17
|
const causeName = this.cause instanceof Error ? this.cause.name : 'Unknown name';
|
|
15
18
|
const causeMessage = this.cause instanceof Error ? this.cause.message : 'Unknown message';
|
|
16
|
-
const
|
|
19
|
+
const causeCodeFrame = this.codeFrame;
|
|
17
20
|
return {
|
|
18
21
|
name: causeName,
|
|
19
22
|
message: causeMessage,
|
|
20
|
-
|
|
23
|
+
codeFrame: causeCodeFrame,
|
|
21
24
|
};
|
|
22
25
|
}
|
|
23
26
|
}
|
|
27
|
+
export const getTestExecutionError = async (error, file, suite, test) => {
|
|
28
|
+
try {
|
|
29
|
+
if (error instanceof Error) {
|
|
30
|
+
const codeFrame = await getCodeFrame(error);
|
|
31
|
+
if (codeFrame) {
|
|
32
|
+
return new TestExecutionError(error, file, suite, test, codeFrame);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return new TestExecutionError(error, file, suite, test);
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
// If the stack cannot be symbolicated, return the original error
|
|
39
|
+
return new TestExecutionError(error, file, suite, test);
|
|
40
|
+
}
|
|
41
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/runner/factory.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,eAAO,MAAM,aAAa,QAAO,
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/runner/factory.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,eAAO,MAAM,aAAa,QAAO,UAsBhC,CAAC"}
|
package/dist/runner/factory.js
CHANGED
|
@@ -5,10 +5,15 @@ export const getTestRunner = () => {
|
|
|
5
5
|
return {
|
|
6
6
|
events,
|
|
7
7
|
run: async (testSuite, testFilePath) => {
|
|
8
|
-
|
|
8
|
+
const result = await runSuite(testSuite, {
|
|
9
9
|
events,
|
|
10
10
|
testFilePath,
|
|
11
11
|
});
|
|
12
|
+
// If coverage is enabled, there will be a global variable called __coverage__
|
|
13
|
+
if ('__coverage__' in global && !!global.__coverage__) {
|
|
14
|
+
result.coverage = global.__coverage__;
|
|
15
|
+
}
|
|
16
|
+
return result;
|
|
12
17
|
},
|
|
13
18
|
dispose: () => {
|
|
14
19
|
events.clearAllListeners();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runSuite.d.ts","sourceRoot":"","sources":["../../src/runner/runSuite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,SAAS,EACT,eAAe,EAChB,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAsH/C,eAAO,MAAM,QAAQ,GACnB,OAAO,SAAS,EAChB,SAAS,iBAAiB,KACzB,OAAO,CAAC,eAAe,
|
|
1
|
+
{"version":3,"file":"runSuite.d.ts","sourceRoot":"","sources":["../../src/runner/runSuite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,SAAS,EACT,eAAe,EAChB,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAsH/C,eAAO,MAAM,QAAQ,GACnB,OAAO,SAAS,EAChB,SAAS,iBAAiB,KACzB,OAAO,CAAC,eAAe,CAoIzB,CAAC"}
|
package/dist/runner/runSuite.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { runHooks } from './hooks.js';
|
|
2
|
-
import {
|
|
2
|
+
import { getTestExecutionError } from './errors.js';
|
|
3
3
|
const runTest = async (test, suite, context) => {
|
|
4
4
|
const startTime = Date.now();
|
|
5
5
|
// Emit test-started event
|
|
@@ -69,7 +69,7 @@ const runTest = async (test, suite, context) => {
|
|
|
69
69
|
return result;
|
|
70
70
|
}
|
|
71
71
|
catch (error) {
|
|
72
|
-
const testError =
|
|
72
|
+
const testError = await getTestExecutionError(error, context.testFilePath, suite.name, test.name);
|
|
73
73
|
const duration = Date.now() - startTime;
|
|
74
74
|
const result = {
|
|
75
75
|
name: test.name,
|
|
@@ -98,6 +98,43 @@ export const runSuite = async (suite, context) => {
|
|
|
98
98
|
name: suite.name,
|
|
99
99
|
file: context.testFilePath,
|
|
100
100
|
});
|
|
101
|
+
// Check if suite should be skipped or is todo
|
|
102
|
+
if (suite.status === 'skipped') {
|
|
103
|
+
const result = {
|
|
104
|
+
name: suite.name,
|
|
105
|
+
tests: [],
|
|
106
|
+
suites: [],
|
|
107
|
+
status: 'skipped',
|
|
108
|
+
duration: 0,
|
|
109
|
+
};
|
|
110
|
+
// Emit suite-finished event
|
|
111
|
+
context.events.emit({
|
|
112
|
+
type: 'suite-finished',
|
|
113
|
+
file: context.testFilePath,
|
|
114
|
+
name: suite.name,
|
|
115
|
+
duration: 0,
|
|
116
|
+
status: 'skipped',
|
|
117
|
+
});
|
|
118
|
+
return result;
|
|
119
|
+
}
|
|
120
|
+
if (suite.status === 'todo') {
|
|
121
|
+
const result = {
|
|
122
|
+
name: suite.name,
|
|
123
|
+
tests: [],
|
|
124
|
+
suites: [],
|
|
125
|
+
status: 'todo',
|
|
126
|
+
duration: 0,
|
|
127
|
+
};
|
|
128
|
+
// Emit suite-finished event
|
|
129
|
+
context.events.emit({
|
|
130
|
+
type: 'suite-finished',
|
|
131
|
+
file: context.testFilePath,
|
|
132
|
+
name: suite.name,
|
|
133
|
+
duration: 0,
|
|
134
|
+
status: 'todo',
|
|
135
|
+
});
|
|
136
|
+
return result;
|
|
137
|
+
}
|
|
101
138
|
const testResults = [];
|
|
102
139
|
const suiteResults = [];
|
|
103
140
|
// Run beforeAll hooks
|
|
@@ -123,11 +160,26 @@ export const runSuite = async (suite, context) => {
|
|
|
123
160
|
if (hasFailedTests || hasFailedSuites) {
|
|
124
161
|
status = 'failed';
|
|
125
162
|
}
|
|
126
|
-
else
|
|
127
|
-
|
|
128
|
-
testResults.length > 0
|
|
129
|
-
|
|
130
|
-
|
|
163
|
+
else {
|
|
164
|
+
// Check if all tests and suites are skipped (and there are some tests/suites to check)
|
|
165
|
+
const allTestsSkipped = testResults.length > 0 &&
|
|
166
|
+
testResults.every((result) => result.status === 'skipped');
|
|
167
|
+
const allSuitesSkipped = suiteResults.length > 0 &&
|
|
168
|
+
suiteResults.every((result) => result.status === 'skipped');
|
|
169
|
+
const hasAnyContent = testResults.length > 0 || suiteResults.length > 0;
|
|
170
|
+
if (hasAnyContent &&
|
|
171
|
+
((testResults.length > 0 &&
|
|
172
|
+
allTestsSkipped &&
|
|
173
|
+
suiteResults.length === 0) ||
|
|
174
|
+
(suiteResults.length > 0 &&
|
|
175
|
+
allSuitesSkipped &&
|
|
176
|
+
testResults.length === 0) ||
|
|
177
|
+
(testResults.length > 0 &&
|
|
178
|
+
suiteResults.length > 0 &&
|
|
179
|
+
allTestsSkipped &&
|
|
180
|
+
allSuitesSkipped))) {
|
|
181
|
+
status = 'skipped';
|
|
182
|
+
}
|
|
131
183
|
}
|
|
132
184
|
// Emit suite-finished event
|
|
133
185
|
context.events.emit({
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ElementReference, FileReference } from '@react-native-harness/bridge';
|
|
2
|
+
export type Screen = {
|
|
3
|
+
findByTestId: (testId: string) => Promise<ElementReference>;
|
|
4
|
+
findAllByTestId: (testId: string) => Promise<ElementReference[]>;
|
|
5
|
+
screenshot: (name?: string) => Promise<FileReference>;
|
|
6
|
+
};
|
|
7
|
+
export declare const screen: Screen;
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/screen/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACd,MAAM,8BAA8B,CAAC;AAGtC,MAAM,MAAM,MAAM,GAAG;IACnB,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC5D,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACjE,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;CACvD,CAAC;AAmBF,eAAO,MAAM,MAAM,QAAiB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { getClientInstance } from '../client/store.js';
|
|
2
|
+
const createScreen = () => {
|
|
3
|
+
return {
|
|
4
|
+
findByTestId: async (testId) => {
|
|
5
|
+
const client = getClientInstance();
|
|
6
|
+
return await client.rpc['platform.queries.findByTestId'](testId);
|
|
7
|
+
},
|
|
8
|
+
findAllByTestId: async (testId) => {
|
|
9
|
+
const client = getClientInstance();
|
|
10
|
+
return await client.rpc['platform.queries.findAllByTestId'](testId);
|
|
11
|
+
},
|
|
12
|
+
screenshot: async () => {
|
|
13
|
+
const client = getClientInstance();
|
|
14
|
+
return await client.rpc['platform.actions.screenshot']();
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
export const screen = createScreen();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"symbolicate.d.ts","sourceRoot":"","sources":["../src/symbolicate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAI9D,eAAO,MAAM,YAAY,GAAU,OAAO,KAAK,KAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAmBzE,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import parseErrorStack from 'react-native/Libraries/Core/Devtools/parseErrorStack';
|
|
2
|
+
import symbolicateStackTrace from 'react-native/Libraries/Core/Devtools/symbolicateStackTrace';
|
|
3
|
+
export const getCodeFrame = async (error) => {
|
|
4
|
+
const parsedStack = parseErrorStack(error.stack);
|
|
5
|
+
const symbolicatedStack = await symbolicateStackTrace(parsedStack);
|
|
6
|
+
if (!('codeFrame' in symbolicatedStack) || !symbolicatedStack.codeFrame) {
|
|
7
|
+
return null;
|
|
8
|
+
}
|
|
9
|
+
const codeFrame = symbolicatedStack.codeFrame;
|
|
10
|
+
// Normalize optionality (null -> undefined)
|
|
11
|
+
return {
|
|
12
|
+
...codeFrame,
|
|
13
|
+
location: codeFrame.location
|
|
14
|
+
? {
|
|
15
|
+
...codeFrame.location,
|
|
16
|
+
}
|
|
17
|
+
: undefined,
|
|
18
|
+
};
|
|
19
|
+
};
|