system-testing 1.0.78 → 1.0.81
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 +232 -6
- package/build/browser-command-client.d.ts +19 -0
- package/build/browser-command-client.js +39 -0
- package/build/browser-command-runner.d.ts +34 -0
- package/build/browser-command-runner.js +155 -0
- package/build/browser-daemon-constants.d.ts +2 -0
- package/build/browser-daemon-constants.js +3 -0
- package/build/browser-process.d.ts +45 -0
- package/build/browser-process.js +134 -0
- package/build/browser-registry.d.ts +44 -0
- package/build/browser-registry.js +191 -0
- package/build/browser.d.ts +240 -0
- package/build/browser.js +375 -0
- package/build/cli-helpers.d.ts +16 -0
- package/build/cli-helpers.js +177 -0
- package/build/cli.d.ts +2 -0
- package/build/cli.js +81 -0
- package/build/drivers/appium-driver.js +21 -21
- package/build/drivers/webdriver-driver.d.ts +4 -4
- package/build/drivers/webdriver-driver.js +32 -28
- package/build/index.d.ts +9 -1
- package/build/index.js +10 -3
- package/build/system-test-browser-helper.d.ts +6 -12
- package/build/system-test-browser-helper.js +12 -13
- package/build/system-test.d.ts +3 -189
- package/build/system-test.js +6 -220
- package/build/use-system-test-expo.d.ts +16 -0
- package/build/use-system-test-expo.js +34 -0
- package/build/use-system-test-react-native.d.ts +25 -0
- package/build/use-system-test-react-native.js +20 -0
- package/build/use-system-test-shape-hook.d.ts +35 -0
- package/build/use-system-test-shape-hook.js +74 -0
- package/build/use-system-test.d.ts +19 -10
- package/build/use-system-test.js +26 -72
- package/package.json +17 -8
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Expo Router integration for system testing.
|
|
3
|
+
* @param {object} options
|
|
4
|
+
* @param {import("./system-test-browser-helper.js").default} [options.browserHelper]
|
|
5
|
+
* @param {function() : void} [options.onFirstInitialize]
|
|
6
|
+
* @param {function() : void} [options.onInitialize]
|
|
7
|
+
* @returns {{enabled: boolean, systemTestBrowserHelper: import("./system-test-browser-helper.js").default | null}}
|
|
8
|
+
*/
|
|
9
|
+
export default function useSystemTestExpo({ browserHelper, onFirstInitialize, onInitialize, ...restArgs }?: {
|
|
10
|
+
browserHelper?: import("./system-test-browser-helper.js").default;
|
|
11
|
+
onFirstInitialize?: () => void;
|
|
12
|
+
onInitialize?: () => void;
|
|
13
|
+
}): {
|
|
14
|
+
enabled: boolean;
|
|
15
|
+
systemTestBrowserHelper: import("./system-test-browser-helper.js").default | null;
|
|
16
|
+
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { useRouter } from "expo-router";
|
|
2
|
+
import useSystemTest from "./use-system-test.js";
|
|
3
|
+
/**
|
|
4
|
+
* Expo Router integration for system testing.
|
|
5
|
+
* @param {object} options
|
|
6
|
+
* @param {import("./system-test-browser-helper.js").default} [options.browserHelper]
|
|
7
|
+
* @param {function() : void} [options.onFirstInitialize]
|
|
8
|
+
* @param {function() : void} [options.onInitialize]
|
|
9
|
+
* @returns {{enabled: boolean, systemTestBrowserHelper: import("./system-test-browser-helper.js").default | null}}
|
|
10
|
+
*/
|
|
11
|
+
export default function useSystemTestExpo({ browserHelper, onFirstInitialize, onInitialize, ...restArgs } = { browserHelper: undefined, onFirstInitialize: undefined, onInitialize: undefined }) {
|
|
12
|
+
const router = useRouter();
|
|
13
|
+
const restArgsKeys = Object.keys(restArgs);
|
|
14
|
+
if (restArgsKeys.length > 0) {
|
|
15
|
+
throw new Error(`Unknown arguments given to useSystemTestExpo: ${restArgsKeys.join(", ")}`);
|
|
16
|
+
}
|
|
17
|
+
return useSystemTest({
|
|
18
|
+
browserHelper,
|
|
19
|
+
onDismissTo: ({ path }) => {
|
|
20
|
+
try {
|
|
21
|
+
router.dismissTo(path);
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
console.error(`Failed to dismiss to path "${path}": ${error instanceof Error ? error.message : error}`);
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
onFirstInitialize,
|
|
28
|
+
onInitialize,
|
|
29
|
+
onNavigate: ({ path }) => {
|
|
30
|
+
router.navigate(path);
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXN5c3RlbS10ZXN0LWV4cG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXNlLXN5c3RlbS10ZXN0LWV4cG8uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGFBQWEsQ0FBQTtBQUNyQyxPQUFPLGFBQWEsTUFBTSxzQkFBc0IsQ0FBQTtBQUVoRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLE9BQU8sVUFBVSxpQkFBaUIsQ0FBQyxFQUFDLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsR0FBRyxRQUFRLEVBQUMsR0FBRyxFQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUM7SUFDekwsTUFBTSxNQUFNLEdBQUcsU0FBUyxFQUFFLENBQUE7SUFDMUIsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUUxQyxJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpREFBaUQsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDN0YsQ0FBQztJQUVELE9BQU8sYUFBYSxDQUFDO1FBQ25CLGFBQWE7UUFDYixXQUFXLEVBQUUsQ0FBQyxFQUFDLElBQUksRUFBQyxFQUFFLEVBQUU7WUFDdEIsSUFBSSxDQUFDO2dCQUNILE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDeEIsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsSUFBSSxNQUFNLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUE7WUFDekcsQ0FBQztRQUNILENBQUM7UUFDRCxpQkFBaUI7UUFDakIsWUFBWTtRQUNaLFVBQVUsRUFBRSxDQUFDLEVBQUMsSUFBSSxFQUFDLEVBQUUsRUFBRTtZQUNyQixNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3ZCLENBQUM7S0FDRixDQUFDLENBQUE7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHt1c2VSb3V0ZXJ9IGZyb20gXCJleHBvLXJvdXRlclwiXG5pbXBvcnQgdXNlU3lzdGVtVGVzdCBmcm9tIFwiLi91c2Utc3lzdGVtLXRlc3QuanNcIlxuXG4vKipcbiAqIEV4cG8gUm91dGVyIGludGVncmF0aW9uIGZvciBzeXN0ZW0gdGVzdGluZy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc3lzdGVtLXRlc3QtYnJvd3Nlci1oZWxwZXIuanNcIikuZGVmYXVsdH0gW29wdGlvbnMuYnJvd3NlckhlbHBlcl1cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKSA6IHZvaWR9IFtvcHRpb25zLm9uRmlyc3RJbml0aWFsaXplXVxuICogQHBhcmFtIHtmdW5jdGlvbigpIDogdm9pZH0gW29wdGlvbnMub25Jbml0aWFsaXplXVxuICogQHJldHVybnMge3tlbmFibGVkOiBib29sZWFuLCBzeXN0ZW1UZXN0QnJvd3NlckhlbHBlcjogaW1wb3J0KFwiLi9zeXN0ZW0tdGVzdC1icm93c2VyLWhlbHBlci5qc1wiKS5kZWZhdWx0IHwgbnVsbH19XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVN5c3RlbVRlc3RFeHBvKHticm93c2VySGVscGVyLCBvbkZpcnN0SW5pdGlhbGl6ZSwgb25Jbml0aWFsaXplLCAuLi5yZXN0QXJnc30gPSB7YnJvd3NlckhlbHBlcjogdW5kZWZpbmVkLCBvbkZpcnN0SW5pdGlhbGl6ZTogdW5kZWZpbmVkLCBvbkluaXRpYWxpemU6IHVuZGVmaW5lZH0pIHtcbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKClcbiAgY29uc3QgcmVzdEFyZ3NLZXlzID0gT2JqZWN0LmtleXMocmVzdEFyZ3MpXG5cbiAgaWYgKHJlc3RBcmdzS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGFyZ3VtZW50cyBnaXZlbiB0byB1c2VTeXN0ZW1UZXN0RXhwbzogJHtyZXN0QXJnc0tleXMuam9pbihcIiwgXCIpfWApXG4gIH1cblxuICByZXR1cm4gdXNlU3lzdGVtVGVzdCh7XG4gICAgYnJvd3NlckhlbHBlcixcbiAgICBvbkRpc21pc3NUbzogKHtwYXRofSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcm91dGVyLmRpc21pc3NUbyhwYXRoKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGRpc21pc3MgdG8gcGF0aCBcIiR7cGF0aH1cIjogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IGVycm9yfWApXG4gICAgICB9XG4gICAgfSxcbiAgICBvbkZpcnN0SW5pdGlhbGl6ZSxcbiAgICBvbkluaXRpYWxpemUsXG4gICAgb25OYXZpZ2F0ZTogKHtwYXRofSkgPT4ge1xuICAgICAgcm91dGVyLm5hdmlnYXRlKHBhdGgpXG4gICAgfVxuICB9KVxufVxuIl19
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React Native integration point for system testing without Expo Router.
|
|
3
|
+
* Supply runtime-specific navigation callbacks.
|
|
4
|
+
* @param {object} options
|
|
5
|
+
* @param {import("./system-test-browser-helper.js").default} [options.browserHelper]
|
|
6
|
+
* @param {(args: {path: string}) => void} [options.onDismissTo]
|
|
7
|
+
* @param {function() : void} [options.onFirstInitialize]
|
|
8
|
+
* @param {function() : void} [options.onInitialize]
|
|
9
|
+
* @param {(args: {path: string}) => void} [options.onNavigate]
|
|
10
|
+
* @returns {{enabled: boolean, systemTestBrowserHelper: import("./system-test-browser-helper.js").default | null}}
|
|
11
|
+
*/
|
|
12
|
+
export default function useSystemTestReactNative({ browserHelper, onDismissTo, onFirstInitialize, onInitialize, onNavigate, ...restArgs }?: {
|
|
13
|
+
browserHelper?: import("./system-test-browser-helper.js").default;
|
|
14
|
+
onDismissTo?: (args: {
|
|
15
|
+
path: string;
|
|
16
|
+
}) => void;
|
|
17
|
+
onFirstInitialize?: () => void;
|
|
18
|
+
onInitialize?: () => void;
|
|
19
|
+
onNavigate?: (args: {
|
|
20
|
+
path: string;
|
|
21
|
+
}) => void;
|
|
22
|
+
}): {
|
|
23
|
+
enabled: boolean;
|
|
24
|
+
systemTestBrowserHelper: import("./system-test-browser-helper.js").default | null;
|
|
25
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import useSystemTest from "./use-system-test.js";
|
|
2
|
+
/**
|
|
3
|
+
* React Native integration point for system testing without Expo Router.
|
|
4
|
+
* Supply runtime-specific navigation callbacks.
|
|
5
|
+
* @param {object} options
|
|
6
|
+
* @param {import("./system-test-browser-helper.js").default} [options.browserHelper]
|
|
7
|
+
* @param {(args: {path: string}) => void} [options.onDismissTo]
|
|
8
|
+
* @param {function() : void} [options.onFirstInitialize]
|
|
9
|
+
* @param {function() : void} [options.onInitialize]
|
|
10
|
+
* @param {(args: {path: string}) => void} [options.onNavigate]
|
|
11
|
+
* @returns {{enabled: boolean, systemTestBrowserHelper: import("./system-test-browser-helper.js").default | null}}
|
|
12
|
+
*/
|
|
13
|
+
export default function useSystemTestReactNative({ browserHelper, onDismissTo, onFirstInitialize, onInitialize, onNavigate, ...restArgs } = { browserHelper: undefined, onDismissTo: undefined, onFirstInitialize: undefined, onInitialize: undefined, onNavigate: undefined }) {
|
|
14
|
+
const restArgsKeys = Object.keys(restArgs);
|
|
15
|
+
if (restArgsKeys.length > 0) {
|
|
16
|
+
throw new Error(`Unknown arguments given to useSystemTestReactNative: ${restArgsKeys.join(", ")}`);
|
|
17
|
+
}
|
|
18
|
+
return useSystemTest({ browserHelper, onDismissTo, onFirstInitialize, onInitialize, onNavigate });
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXN5c3RlbS10ZXN0LXJlYWN0LW5hdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91c2Utc3lzdGVtLXRlc3QtcmVhY3QtbmF0aXZlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sYUFBYSxNQUFNLHNCQUFzQixDQUFBO0FBRWhEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLENBQUMsT0FBTyxVQUFVLHdCQUF3QixDQUFDLEVBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEdBQUcsUUFBUSxFQUFDLEdBQUcsRUFBQyxhQUFhLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBQztJQUN4USxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBRTFDLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLHdEQUF3RCxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUNwRyxDQUFDO0lBRUQsT0FBTyxhQUFhLENBQUMsRUFBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFBO0FBQ2pHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdXNlU3lzdGVtVGVzdCBmcm9tIFwiLi91c2Utc3lzdGVtLXRlc3QuanNcIlxuXG4vKipcbiAqIFJlYWN0IE5hdGl2ZSBpbnRlZ3JhdGlvbiBwb2ludCBmb3Igc3lzdGVtIHRlc3Rpbmcgd2l0aG91dCBFeHBvIFJvdXRlci5cbiAqIFN1cHBseSBydW50aW1lLXNwZWNpZmljIG5hdmlnYXRpb24gY2FsbGJhY2tzLlxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zeXN0ZW0tdGVzdC1icm93c2VyLWhlbHBlci5qc1wiKS5kZWZhdWx0fSBbb3B0aW9ucy5icm93c2VySGVscGVyXVxuICogQHBhcmFtIHsoYXJnczoge3BhdGg6IHN0cmluZ30pID0+IHZvaWR9IFtvcHRpb25zLm9uRGlzbWlzc1RvXVxuICogQHBhcmFtIHtmdW5jdGlvbigpIDogdm9pZH0gW29wdGlvbnMub25GaXJzdEluaXRpYWxpemVdXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKCkgOiB2b2lkfSBbb3B0aW9ucy5vbkluaXRpYWxpemVdXG4gKiBAcGFyYW0geyhhcmdzOiB7cGF0aDogc3RyaW5nfSkgPT4gdm9pZH0gW29wdGlvbnMub25OYXZpZ2F0ZV1cbiAqIEByZXR1cm5zIHt7ZW5hYmxlZDogYm9vbGVhbiwgc3lzdGVtVGVzdEJyb3dzZXJIZWxwZXI6IGltcG9ydChcIi4vc3lzdGVtLXRlc3QtYnJvd3Nlci1oZWxwZXIuanNcIikuZGVmYXVsdCB8IG51bGx9fVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VTeXN0ZW1UZXN0UmVhY3ROYXRpdmUoe2Jyb3dzZXJIZWxwZXIsIG9uRGlzbWlzc1RvLCBvbkZpcnN0SW5pdGlhbGl6ZSwgb25Jbml0aWFsaXplLCBvbk5hdmlnYXRlLCAuLi5yZXN0QXJnc30gPSB7YnJvd3NlckhlbHBlcjogdW5kZWZpbmVkLCBvbkRpc21pc3NUbzogdW5kZWZpbmVkLCBvbkZpcnN0SW5pdGlhbGl6ZTogdW5kZWZpbmVkLCBvbkluaXRpYWxpemU6IHVuZGVmaW5lZCwgb25OYXZpZ2F0ZTogdW5kZWZpbmVkfSkge1xuICBjb25zdCByZXN0QXJnc0tleXMgPSBPYmplY3Qua2V5cyhyZXN0QXJncylcblxuICBpZiAocmVzdEFyZ3NLZXlzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gYXJndW1lbnRzIGdpdmVuIHRvIHVzZVN5c3RlbVRlc3RSZWFjdE5hdGl2ZTogJHtyZXN0QXJnc0tleXMuam9pbihcIiwgXCIpfWApXG4gIH1cblxuICByZXR1cm4gdXNlU3lzdGVtVGVzdCh7YnJvd3NlckhlbHBlciwgb25EaXNtaXNzVG8sIG9uRmlyc3RJbml0aWFsaXplLCBvbkluaXRpYWxpemUsIG9uTmF2aWdhdGV9KVxufVxuIl19
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @param {Record<string, any>} props
|
|
3
|
+
* @returns {UseSystemTestShapeHook}
|
|
4
|
+
*/
|
|
5
|
+
export function useSystemTestShapeHook(props: Record<string, any>): UseSystemTestShapeHook;
|
|
6
|
+
/** Shared shape-hook state container for `useSystemTest*` hooks. */
|
|
7
|
+
export default class UseSystemTestShapeHook extends ShapeHook {
|
|
8
|
+
static defaultProps: {
|
|
9
|
+
browserHelper: any;
|
|
10
|
+
enabled: boolean;
|
|
11
|
+
onDismissTo: any;
|
|
12
|
+
onFirstInitialize: any;
|
|
13
|
+
onInitialize: any;
|
|
14
|
+
onNavigate: any;
|
|
15
|
+
};
|
|
16
|
+
/** @returns {SystemTestBrowserHelper | null} */
|
|
17
|
+
systemTestBrowserHelper(): SystemTestBrowserHelper | null;
|
|
18
|
+
/** @returns {{enabled: boolean, systemTestBrowserHelper: SystemTestBrowserHelper | null}} */
|
|
19
|
+
result(): {
|
|
20
|
+
enabled: boolean;
|
|
21
|
+
systemTestBrowserHelper: SystemTestBrowserHelper | null;
|
|
22
|
+
};
|
|
23
|
+
/** @returns {void} */
|
|
24
|
+
setup(): void;
|
|
25
|
+
/** @param {{path: string}} args */
|
|
26
|
+
onSystemTestBrowserHelperDismissTo: ({ path }: {
|
|
27
|
+
path: string;
|
|
28
|
+
}) => void;
|
|
29
|
+
/** @param {{path: string}} args */
|
|
30
|
+
onSystemTestBrowserHelperNavigate: ({ path }: {
|
|
31
|
+
path: string;
|
|
32
|
+
}) => void;
|
|
33
|
+
}
|
|
34
|
+
import { ShapeHook } from "set-state-compare";
|
|
35
|
+
import SystemTestBrowserHelper from "./system-test-browser-helper.js";
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { ShapeHook, useShapeHook } from "set-state-compare";
|
|
2
|
+
import { useEffect } from "react";
|
|
3
|
+
import SystemTestBrowserHelper from "./system-test-browser-helper.js";
|
|
4
|
+
const shared = {
|
|
5
|
+
defaultSystemTestBrowserHelper: null
|
|
6
|
+
};
|
|
7
|
+
/** Shared shape-hook state container for `useSystemTest*` hooks. */
|
|
8
|
+
class UseSystemTestShapeHook extends ShapeHook {
|
|
9
|
+
constructor() {
|
|
10
|
+
super(...arguments);
|
|
11
|
+
/** @param {{path: string}} args */
|
|
12
|
+
this.onSystemTestBrowserHelperDismissTo = ({ path }) => {
|
|
13
|
+
if (!this.p.enabled || !this.p.onDismissTo) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
this.p.onDismissTo({ path });
|
|
17
|
+
};
|
|
18
|
+
/** @param {{path: string}} args */
|
|
19
|
+
this.onSystemTestBrowserHelperNavigate = ({ path }) => {
|
|
20
|
+
if (!this.p.enabled || !this.p.onNavigate) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
this.p.onNavigate({ path });
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/** @returns {SystemTestBrowserHelper | null} */
|
|
27
|
+
systemTestBrowserHelper() {
|
|
28
|
+
if (!this.p.enabled) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
if (this.p.browserHelper) {
|
|
32
|
+
this.p.browserHelper.enableOnBrowser();
|
|
33
|
+
return this.p.browserHelper;
|
|
34
|
+
}
|
|
35
|
+
if (!shared.defaultSystemTestBrowserHelper) {
|
|
36
|
+
shared.defaultSystemTestBrowserHelper = new SystemTestBrowserHelper();
|
|
37
|
+
}
|
|
38
|
+
shared.defaultSystemTestBrowserHelper.enableOnBrowser();
|
|
39
|
+
return shared.defaultSystemTestBrowserHelper;
|
|
40
|
+
}
|
|
41
|
+
/** @returns {{enabled: boolean, systemTestBrowserHelper: SystemTestBrowserHelper | null}} */
|
|
42
|
+
result() {
|
|
43
|
+
const systemTestBrowserHelper = this.systemTestBrowserHelper();
|
|
44
|
+
return this.cache("result", () => ({ enabled: this.p.enabled, systemTestBrowserHelper }), [this.p.enabled, systemTestBrowserHelper]);
|
|
45
|
+
}
|
|
46
|
+
/** @returns {void} */
|
|
47
|
+
setup() {
|
|
48
|
+
const systemTestBrowserHelper = this.systemTestBrowserHelper();
|
|
49
|
+
useEffect(() => {
|
|
50
|
+
if (!systemTestBrowserHelper) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
systemTestBrowserHelper.onFirstInitialize(this.p.onFirstInitialize);
|
|
54
|
+
systemTestBrowserHelper.onInitialize(this.p.onInitialize);
|
|
55
|
+
}, [systemTestBrowserHelper, this.p.onFirstInitialize, this.p.onInitialize]);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
UseSystemTestShapeHook.defaultProps = {
|
|
59
|
+
browserHelper: undefined,
|
|
60
|
+
enabled: false,
|
|
61
|
+
onDismissTo: undefined,
|
|
62
|
+
onFirstInitialize: undefined,
|
|
63
|
+
onInitialize: undefined,
|
|
64
|
+
onNavigate: undefined
|
|
65
|
+
};
|
|
66
|
+
export default UseSystemTestShapeHook;
|
|
67
|
+
/**
|
|
68
|
+
* @param {Record<string, any>} props
|
|
69
|
+
* @returns {UseSystemTestShapeHook}
|
|
70
|
+
*/
|
|
71
|
+
export function useSystemTestShapeHook(props) {
|
|
72
|
+
return useShapeHook(UseSystemTestShapeHook, props);
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXN5c3RlbS10ZXN0LXNoYXBlLWhvb2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXNlLXN5c3RlbS10ZXN0LXNoYXBlLWhvb2suanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQTtBQUN6RCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sT0FBTyxDQUFBO0FBQy9CLE9BQU8sdUJBQXVCLE1BQU0saUNBQWlDLENBQUE7QUFFckUsTUFBTSxNQUFNLEdBQUc7SUFDYiw4QkFBOEIsRUFBRSxJQUFJO0NBQ3JDLENBQUE7QUFFRCxvRUFBb0U7QUFDcEUsTUFBcUIsc0JBQXVCLFNBQVEsU0FBUztJQUE3RDs7UUF1REUsbUNBQW1DO1FBQ25DLHVDQUFrQyxHQUFHLENBQUMsRUFBQyxJQUFJLEVBQUMsRUFBRSxFQUFFO1lBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQzNDLE9BQU07WUFDUixDQUFDO1lBRUQsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFBO1FBQzVCLENBQUMsQ0FBQTtRQUVELG1DQUFtQztRQUNuQyxzQ0FBaUMsR0FBRyxDQUFDLEVBQUMsSUFBSSxFQUFDLEVBQUUsRUFBRTtZQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUMxQyxPQUFNO1lBQ1IsQ0FBQztZQUVELElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUMzQixDQUFDLENBQUE7SUFDSCxDQUFDO0lBOURDLGdEQUFnRDtJQUNoRCx1QkFBdUI7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDcEIsT0FBTyxJQUFJLENBQUE7UUFDYixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLGVBQWUsRUFBRSxDQUFBO1lBQ3RDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUE7UUFDN0IsQ0FBQztRQUVELElBQUksQ0FBQyxNQUFNLENBQUMsOEJBQThCLEVBQUUsQ0FBQztZQUMzQyxNQUFNLENBQUMsOEJBQThCLEdBQUcsSUFBSSx1QkFBdUIsRUFBRSxDQUFBO1FBQ3ZFLENBQUM7UUFFRCxNQUFNLENBQUMsOEJBQThCLENBQUMsZUFBZSxFQUFFLENBQUE7UUFFdkQsT0FBTyxNQUFNLENBQUMsOEJBQThCLENBQUE7SUFDOUMsQ0FBQztJQUVELDZGQUE2RjtJQUM3RixNQUFNO1FBQ0osTUFBTSx1QkFBdUIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQTtRQUU5RCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQ2YsUUFBUSxFQUNSLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUMsQ0FBQyxFQUMxRCxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLHVCQUF1QixDQUFDLENBQzFDLENBQUE7SUFDSCxDQUFDO0lBRUQsc0JBQXNCO0lBQ3RCLEtBQUs7UUFDSCxNQUFNLHVCQUF1QixHQUFHLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFBO1FBRTlELFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDYixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztnQkFDN0IsT0FBTTtZQUNSLENBQUM7WUFFRCx1QkFBdUIsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUE7WUFDbkUsdUJBQXVCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDM0QsQ0FBQyxFQUFFLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUE7SUFDOUUsQ0FBQzs7QUFwRE0sbUNBQVksR0FBRztJQUNwQixhQUFhLEVBQUUsU0FBUztJQUN4QixPQUFPLEVBQUUsS0FBSztJQUNkLFdBQVcsRUFBRSxTQUFTO0lBQ3RCLGlCQUFpQixFQUFFLFNBQVM7SUFDNUIsWUFBWSxFQUFFLFNBQVM7SUFDdkIsVUFBVSxFQUFFLFNBQVM7Q0FDdEIsQUFQa0IsQ0FPbEI7ZUFSa0Isc0JBQXNCO0FBMEUzQzs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsS0FBSztJQUMxQyxPQUFPLFlBQVksQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLENBQUMsQ0FBQTtBQUNwRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTaGFwZUhvb2ssIHVzZVNoYXBlSG9va30gZnJvbSBcInNldC1zdGF0ZS1jb21wYXJlXCJcbmltcG9ydCB7dXNlRWZmZWN0fSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFN5c3RlbVRlc3RCcm93c2VySGVscGVyIGZyb20gXCIuL3N5c3RlbS10ZXN0LWJyb3dzZXItaGVscGVyLmpzXCJcblxuY29uc3Qgc2hhcmVkID0ge1xuICBkZWZhdWx0U3lzdGVtVGVzdEJyb3dzZXJIZWxwZXI6IG51bGxcbn1cblxuLyoqIFNoYXJlZCBzaGFwZS1ob29rIHN0YXRlIGNvbnRhaW5lciBmb3IgYHVzZVN5c3RlbVRlc3QqYCBob29rcy4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVzZVN5c3RlbVRlc3RTaGFwZUhvb2sgZXh0ZW5kcyBTaGFwZUhvb2sge1xuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIGJyb3dzZXJIZWxwZXI6IHVuZGVmaW5lZCxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBvbkRpc21pc3NUbzogdW5kZWZpbmVkLFxuICAgIG9uRmlyc3RJbml0aWFsaXplOiB1bmRlZmluZWQsXG4gICAgb25Jbml0aWFsaXplOiB1bmRlZmluZWQsXG4gICAgb25OYXZpZ2F0ZTogdW5kZWZpbmVkXG4gIH1cblxuICAvKiogQHJldHVybnMge1N5c3RlbVRlc3RCcm93c2VySGVscGVyIHwgbnVsbH0gKi9cbiAgc3lzdGVtVGVzdEJyb3dzZXJIZWxwZXIoKSB7XG4gICAgaWYgKCF0aGlzLnAuZW5hYmxlZCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wLmJyb3dzZXJIZWxwZXIpIHtcbiAgICAgIHRoaXMucC5icm93c2VySGVscGVyLmVuYWJsZU9uQnJvd3NlcigpXG4gICAgICByZXR1cm4gdGhpcy5wLmJyb3dzZXJIZWxwZXJcbiAgICB9XG5cbiAgICBpZiAoIXNoYXJlZC5kZWZhdWx0U3lzdGVtVGVzdEJyb3dzZXJIZWxwZXIpIHtcbiAgICAgIHNoYXJlZC5kZWZhdWx0U3lzdGVtVGVzdEJyb3dzZXJIZWxwZXIgPSBuZXcgU3lzdGVtVGVzdEJyb3dzZXJIZWxwZXIoKVxuICAgIH1cblxuICAgIHNoYXJlZC5kZWZhdWx0U3lzdGVtVGVzdEJyb3dzZXJIZWxwZXIuZW5hYmxlT25Ccm93c2VyKClcblxuICAgIHJldHVybiBzaGFyZWQuZGVmYXVsdFN5c3RlbVRlc3RCcm93c2VySGVscGVyXG4gIH1cblxuICAvKiogQHJldHVybnMge3tlbmFibGVkOiBib29sZWFuLCBzeXN0ZW1UZXN0QnJvd3NlckhlbHBlcjogU3lzdGVtVGVzdEJyb3dzZXJIZWxwZXIgfCBudWxsfX0gKi9cbiAgcmVzdWx0KCkge1xuICAgIGNvbnN0IHN5c3RlbVRlc3RCcm93c2VySGVscGVyID0gdGhpcy5zeXN0ZW1UZXN0QnJvd3NlckhlbHBlcigpXG5cbiAgICByZXR1cm4gdGhpcy5jYWNoZShcbiAgICAgIFwicmVzdWx0XCIsXG4gICAgICAoKSA9PiAoe2VuYWJsZWQ6IHRoaXMucC5lbmFibGVkLCBzeXN0ZW1UZXN0QnJvd3NlckhlbHBlcn0pLFxuICAgICAgW3RoaXMucC5lbmFibGVkLCBzeXN0ZW1UZXN0QnJvd3NlckhlbHBlcl1cbiAgICApXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIHNldHVwKCkge1xuICAgIGNvbnN0IHN5c3RlbVRlc3RCcm93c2VySGVscGVyID0gdGhpcy5zeXN0ZW1UZXN0QnJvd3NlckhlbHBlcigpXG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKCFzeXN0ZW1UZXN0QnJvd3NlckhlbHBlcikge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgc3lzdGVtVGVzdEJyb3dzZXJIZWxwZXIub25GaXJzdEluaXRpYWxpemUodGhpcy5wLm9uRmlyc3RJbml0aWFsaXplKVxuICAgICAgc3lzdGVtVGVzdEJyb3dzZXJIZWxwZXIub25Jbml0aWFsaXplKHRoaXMucC5vbkluaXRpYWxpemUpXG4gICAgfSwgW3N5c3RlbVRlc3RCcm93c2VySGVscGVyLCB0aGlzLnAub25GaXJzdEluaXRpYWxpemUsIHRoaXMucC5vbkluaXRpYWxpemVdKVxuICB9XG5cbiAgLyoqIEBwYXJhbSB7e3BhdGg6IHN0cmluZ319IGFyZ3MgKi9cbiAgb25TeXN0ZW1UZXN0QnJvd3NlckhlbHBlckRpc21pc3NUbyA9ICh7cGF0aH0pID0+IHtcbiAgICBpZiAoIXRoaXMucC5lbmFibGVkIHx8ICF0aGlzLnAub25EaXNtaXNzVG8pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMucC5vbkRpc21pc3NUbyh7cGF0aH0pXG4gIH1cblxuICAvKiogQHBhcmFtIHt7cGF0aDogc3RyaW5nfX0gYXJncyAqL1xuICBvblN5c3RlbVRlc3RCcm93c2VySGVscGVyTmF2aWdhdGUgPSAoe3BhdGh9KSA9PiB7XG4gICAgaWYgKCF0aGlzLnAuZW5hYmxlZCB8fCAhdGhpcy5wLm9uTmF2aWdhdGUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMucC5vbk5hdmlnYXRlKHtwYXRofSlcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gcHJvcHNcbiAqIEByZXR1cm5zIHtVc2VTeXN0ZW1UZXN0U2hhcGVIb29rfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU3lzdGVtVGVzdFNoYXBlSG9vayhwcm9wcykge1xuICByZXR1cm4gdXNlU2hhcGVIb29rKFVzZVN5c3RlbVRlc3RTaGFwZUhvb2ssIHByb3BzKVxufVxuIl19
|
|
@@ -1,15 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* @param {object} options
|
|
4
|
-
* @param {
|
|
5
|
-
* @param {
|
|
6
|
-
* @
|
|
2
|
+
* Generic system-test hook. Supply navigation callbacks for the target runtime/router.
|
|
3
|
+
* @param {object} options
|
|
4
|
+
* @param {import("./system-test-browser-helper.js").default} [options.browserHelper]
|
|
5
|
+
* @param {(args: {path: string}) => void} [options.onDismissTo]
|
|
6
|
+
* @param {function() : void} [options.onFirstInitialize]
|
|
7
|
+
* @param {function() : void} [options.onInitialize]
|
|
8
|
+
* @param {(args: {path: string}) => void} [options.onNavigate]
|
|
9
|
+
* @returns {{enabled: boolean, systemTestBrowserHelper: import("./system-test-browser-helper.js").default | null}}
|
|
7
10
|
*/
|
|
8
|
-
export default function useSystemTest({ onFirstInitialize, onInitialize, ...restArgs }?: {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
+
export default function useSystemTest({ browserHelper, onDismissTo, onFirstInitialize, onInitialize, onNavigate, ...restArgs }?: {
|
|
12
|
+
browserHelper?: import("./system-test-browser-helper.js").default;
|
|
13
|
+
onDismissTo?: (args: {
|
|
14
|
+
path: string;
|
|
15
|
+
}) => void;
|
|
16
|
+
onFirstInitialize?: () => void;
|
|
17
|
+
onInitialize?: () => void;
|
|
18
|
+
onNavigate?: (args: {
|
|
19
|
+
path: string;
|
|
20
|
+
}) => void;
|
|
11
21
|
}): {
|
|
12
22
|
enabled: boolean;
|
|
13
|
-
systemTestBrowserHelper:
|
|
23
|
+
systemTestBrowserHelper: import("./system-test-browser-helper.js").default | null;
|
|
14
24
|
};
|
|
15
|
-
import SystemTestBrowserHelper from "./system-test-browser-helper.js";
|
package/build/use-system-test.js
CHANGED
|
@@ -1,15 +1,7 @@
|
|
|
1
1
|
import qs from "qs";
|
|
2
|
-
import SystemTestBrowserHelper from "./system-test-browser-helper.js";
|
|
3
|
-
import { useCallback, useMemo } from "react";
|
|
4
2
|
import useEventEmitter from "ya-use-event-emitter";
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
initialized: false,
|
|
8
|
-
systemTestBrowserHelper: null
|
|
9
|
-
};
|
|
10
|
-
/**
|
|
11
|
-
* @returns {boolean}
|
|
12
|
-
*/
|
|
3
|
+
import { useSystemTestShapeHook } from "./use-system-test-shape-hook.js";
|
|
4
|
+
/** @returns {boolean} */
|
|
13
5
|
function isSystemTestEnabled() {
|
|
14
6
|
let enabled = false;
|
|
15
7
|
const envEnabled = process.env.EXPO_PUBLIC_SYSTEM_TEST === "true";
|
|
@@ -28,69 +20,31 @@ function isSystemTestEnabled() {
|
|
|
28
20
|
return enabled;
|
|
29
21
|
}
|
|
30
22
|
/**
|
|
31
|
-
*
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* A hook that provides system test capabilities.
|
|
42
|
-
* @param {object} options - Options for the hook.
|
|
43
|
-
* @param {function() : void} options.onInitialize - A callback function that is called when the system test browser helper is initialized.
|
|
44
|
-
* @param {function() : void} options.onFirstInitialize - A callback function that is called the first time the system test browser helper is initialized.
|
|
45
|
-
* @returns {{enabled: boolean, systemTestBrowserHelper: SystemTestBrowserHelper}}
|
|
23
|
+
* Generic system-test hook. Supply navigation callbacks for the target runtime/router.
|
|
24
|
+
* @param {object} options
|
|
25
|
+
* @param {import("./system-test-browser-helper.js").default} [options.browserHelper]
|
|
26
|
+
* @param {(args: {path: string}) => void} [options.onDismissTo]
|
|
27
|
+
* @param {function() : void} [options.onFirstInitialize]
|
|
28
|
+
* @param {function() : void} [options.onInitialize]
|
|
29
|
+
* @param {(args: {path: string}) => void} [options.onNavigate]
|
|
30
|
+
* @returns {{enabled: boolean, systemTestBrowserHelper: import("./system-test-browser-helper.js").default | null}}
|
|
46
31
|
*/
|
|
47
|
-
export default function useSystemTest({ onFirstInitialize, onInitialize, ...restArgs } = { onFirstInitialize: undefined, onInitialize: undefined }) {
|
|
48
|
-
if (!useMemo)
|
|
49
|
-
throw new Error("[useSystemTest] React.useMemo is not available");
|
|
50
|
-
if (!useCallback)
|
|
51
|
-
throw new Error("[useSystemTest] React.useCallback is not available");
|
|
52
|
-
let router = null;
|
|
53
|
-
try {
|
|
54
|
-
router = useRouter();
|
|
55
|
-
}
|
|
56
|
-
catch (error) {
|
|
57
|
-
console.error("[useSystemTest] useRouter unavailable:", error);
|
|
58
|
-
}
|
|
59
|
-
const enabled = useMemo(() => isSystemTestEnabled(), []);
|
|
60
|
-
const systemTestBrowserHelper = enabled ? getSystemTestBrowserHelper() : null;
|
|
61
|
-
const result = useMemo(() => ({ enabled, systemTestBrowserHelper }), [enabled, systemTestBrowserHelper]);
|
|
62
|
-
const instanceShared = useMemo(() => ({ enabled: false, router: null }), []);
|
|
63
|
-
instanceShared.enabled = enabled;
|
|
64
|
-
instanceShared.router = router;
|
|
65
|
-
// Resets navigation when instructed by the system test browser helper
|
|
66
|
-
const onSystemTestBrowserHelperDismissTo = useCallback(({ path }) => {
|
|
67
|
-
if (instanceShared.enabled) {
|
|
68
|
-
try {
|
|
69
|
-
instanceShared.router?.dismissTo(path);
|
|
70
|
-
}
|
|
71
|
-
catch (error) {
|
|
72
|
-
console.error(`Failed to dismiss to path "${path}": ${error.message}`);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}, []);
|
|
76
|
-
useEventEmitter(shared.systemTestBrowserHelper?.getEvents(), "dismissTo", onSystemTestBrowserHelperDismissTo);
|
|
77
|
-
// Navigates when instructed by the system test browser helper and keeping history of screens
|
|
78
|
-
const onSystemTestBrowserHelperNavigate = useCallback(({ path }) => {
|
|
79
|
-
if (instanceShared.enabled) {
|
|
80
|
-
instanceShared.router?.navigate(path);
|
|
81
|
-
}
|
|
82
|
-
}, []);
|
|
83
|
-
useEventEmitter(shared.systemTestBrowserHelper?.getEvents(), "navigate", onSystemTestBrowserHelperNavigate);
|
|
84
|
-
useMemo(() => {
|
|
85
|
-
if (enabled && !shared.initialized) {
|
|
86
|
-
shared.initialized = true;
|
|
87
|
-
shared.systemTestBrowserHelper?.onFirstInitialize(onFirstInitialize);
|
|
88
|
-
shared.systemTestBrowserHelper?.onInitialize(onInitialize);
|
|
89
|
-
}
|
|
90
|
-
}, [enabled, onFirstInitialize, onInitialize, shared.systemTestBrowserHelper]);
|
|
32
|
+
export default function useSystemTest({ browserHelper, onDismissTo, onFirstInitialize, onInitialize, onNavigate, ...restArgs } = { browserHelper: undefined, onDismissTo: undefined, onFirstInitialize: undefined, onInitialize: undefined, onNavigate: undefined }) {
|
|
91
33
|
const restArgsKeys = Object.keys(restArgs);
|
|
92
|
-
if (restArgsKeys.length > 0)
|
|
34
|
+
if (restArgsKeys.length > 0) {
|
|
93
35
|
throw new Error(`Unknown arguments given to useSystemTest: ${restArgsKeys.join(", ")}`);
|
|
94
|
-
|
|
36
|
+
}
|
|
37
|
+
const shapeHook = useSystemTestShapeHook({
|
|
38
|
+
browserHelper,
|
|
39
|
+
enabled: isSystemTestEnabled(),
|
|
40
|
+
onDismissTo,
|
|
41
|
+
onFirstInitialize,
|
|
42
|
+
onInitialize,
|
|
43
|
+
onNavigate
|
|
44
|
+
});
|
|
45
|
+
const systemTestBrowserHelper = shapeHook.systemTestBrowserHelper();
|
|
46
|
+
useEventEmitter(systemTestBrowserHelper?.getEvents(), "dismissTo", shapeHook.tt.onSystemTestBrowserHelperDismissTo);
|
|
47
|
+
useEventEmitter(systemTestBrowserHelper?.getEvents(), "navigate", shapeHook.tt.onSystemTestBrowserHelperNavigate);
|
|
48
|
+
return shapeHook.result();
|
|
95
49
|
}
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXN5c3RlbS10ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3VzZS1zeXN0ZW0tdGVzdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUE7QUFDbkIsT0FBTyxlQUFlLE1BQU0sc0JBQXNCLENBQUE7QUFDbEQsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0saUNBQWlDLENBQUE7QUFFdEUseUJBQXlCO0FBQ3pCLFNBQVMsbUJBQW1CO0lBQzFCLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQTtJQUNuQixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixLQUFLLE1BQU0sQ0FBQTtJQUNqRSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixDQUFBO0lBQ3hELE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFBO0lBRTVDLElBQUksVUFBVSxFQUFFLENBQUM7UUFDZixNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUN4RixNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBRXpDLElBQUksV0FBVyxDQUFDLFVBQVUsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNyQyxPQUFPLEdBQUcsSUFBSSxDQUFBO1FBQ2hCLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxVQUFVLElBQUksT0FBTyxFQUFFLENBQUM7UUFDMUIsT0FBTyxHQUFHLElBQUksQ0FBQTtJQUNoQixDQUFDO0lBRUQsT0FBTyxPQUFPLENBQUE7QUFDaEIsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sQ0FBQyxPQUFPLFVBQVUsYUFBYSxDQUFDLEVBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEdBQUcsUUFBUSxFQUFDLEdBQUcsRUFBQyxhQUFhLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBQztJQUM3UCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBRTFDLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUN6RixDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQUcsc0JBQXNCLENBQUM7UUFDdkMsYUFBYTtRQUNiLE9BQU8sRUFBRSxtQkFBbUIsRUFBRTtRQUM5QixXQUFXO1FBQ1gsaUJBQWlCO1FBQ2pCLFlBQVk7UUFDWixVQUFVO0tBQ1gsQ0FBQyxDQUFBO0lBQ0YsTUFBTSx1QkFBdUIsR0FBRyxTQUFTLENBQUMsdUJBQXVCLEVBQUUsQ0FBQTtJQUVuRSxlQUFlLENBQUMsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsa0NBQWtDLENBQUMsQ0FBQTtJQUNuSCxlQUFlLENBQUMsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsaUNBQWlDLENBQUMsQ0FBQTtJQUVqSCxPQUFPLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtBQUMzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHFzIGZyb20gXCJxc1wiXG5pbXBvcnQgdXNlRXZlbnRFbWl0dGVyIGZyb20gXCJ5YS11c2UtZXZlbnQtZW1pdHRlclwiXG5pbXBvcnQge3VzZVN5c3RlbVRlc3RTaGFwZUhvb2t9IGZyb20gXCIuL3VzZS1zeXN0ZW0tdGVzdC1zaGFwZS1ob29rLmpzXCJcblxuLyoqIEByZXR1cm5zIHtib29sZWFufSAqL1xuZnVuY3Rpb24gaXNTeXN0ZW1UZXN0RW5hYmxlZCgpIHtcbiAgbGV0IGVuYWJsZWQgPSBmYWxzZVxuICBjb25zdCBlbnZFbmFibGVkID0gcHJvY2Vzcy5lbnYuRVhQT19QVUJMSUNfU1lTVEVNX1RFU1QgPT09IFwidHJ1ZVwiXG4gIGNvbnN0IGVudkhvc3QgPSBwcm9jZXNzLmVudi5FWFBPX1BVQkxJQ19TWVNURU1fVEVTVF9IT1NUXG4gIGNvbnN0IGluaXRpYWxVcmwgPSBnbG9iYWxUaGlzLmxvY2F0aW9uPy5ocmVmXG5cbiAgaWYgKGluaXRpYWxVcmwpIHtcbiAgICBjb25zdCBxdWVyeVN0cmluZyA9IGluaXRpYWxVcmwuc3Vic3RyaW5nKGluaXRpYWxVcmwuaW5kZXhPZihcIj9cIikgKyAxLCBpbml0aWFsVXJsLmxlbmd0aClcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHFzLnBhcnNlKHF1ZXJ5U3RyaW5nKVxuXG4gICAgaWYgKHF1ZXJ5UGFyYW1zLnN5c3RlbVRlc3QgPT0gXCJ0cnVlXCIpIHtcbiAgICAgIGVuYWJsZWQgPSB0cnVlXG4gICAgfVxuICB9XG5cbiAgaWYgKGVudkVuYWJsZWQgfHwgZW52SG9zdCkge1xuICAgIGVuYWJsZWQgPSB0cnVlXG4gIH1cblxuICByZXR1cm4gZW5hYmxlZFxufVxuXG4vKipcbiAqIEdlbmVyaWMgc3lzdGVtLXRlc3QgaG9vay4gU3VwcGx5IG5hdmlnYXRpb24gY2FsbGJhY2tzIGZvciB0aGUgdGFyZ2V0IHJ1bnRpbWUvcm91dGVyLlxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zeXN0ZW0tdGVzdC1icm93c2VyLWhlbHBlci5qc1wiKS5kZWZhdWx0fSBbb3B0aW9ucy5icm93c2VySGVscGVyXVxuICogQHBhcmFtIHsoYXJnczoge3BhdGg6IHN0cmluZ30pID0+IHZvaWR9IFtvcHRpb25zLm9uRGlzbWlzc1RvXVxuICogQHBhcmFtIHtmdW5jdGlvbigpIDogdm9pZH0gW29wdGlvbnMub25GaXJzdEluaXRpYWxpemVdXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKCkgOiB2b2lkfSBbb3B0aW9ucy5vbkluaXRpYWxpemVdXG4gKiBAcGFyYW0geyhhcmdzOiB7cGF0aDogc3RyaW5nfSkgPT4gdm9pZH0gW29wdGlvbnMub25OYXZpZ2F0ZV1cbiAqIEByZXR1cm5zIHt7ZW5hYmxlZDogYm9vbGVhbiwgc3lzdGVtVGVzdEJyb3dzZXJIZWxwZXI6IGltcG9ydChcIi4vc3lzdGVtLXRlc3QtYnJvd3Nlci1oZWxwZXIuanNcIikuZGVmYXVsdCB8IG51bGx9fVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VTeXN0ZW1UZXN0KHticm93c2VySGVscGVyLCBvbkRpc21pc3NUbywgb25GaXJzdEluaXRpYWxpemUsIG9uSW5pdGlhbGl6ZSwgb25OYXZpZ2F0ZSwgLi4ucmVzdEFyZ3N9ID0ge2Jyb3dzZXJIZWxwZXI6IHVuZGVmaW5lZCwgb25EaXNtaXNzVG86IHVuZGVmaW5lZCwgb25GaXJzdEluaXRpYWxpemU6IHVuZGVmaW5lZCwgb25Jbml0aWFsaXplOiB1bmRlZmluZWQsIG9uTmF2aWdhdGU6IHVuZGVmaW5lZH0pIHtcbiAgY29uc3QgcmVzdEFyZ3NLZXlzID0gT2JqZWN0LmtleXMocmVzdEFyZ3MpXG5cbiAgaWYgKHJlc3RBcmdzS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGFyZ3VtZW50cyBnaXZlbiB0byB1c2VTeXN0ZW1UZXN0OiAke3Jlc3RBcmdzS2V5cy5qb2luKFwiLCBcIil9YClcbiAgfVxuXG4gIGNvbnN0IHNoYXBlSG9vayA9IHVzZVN5c3RlbVRlc3RTaGFwZUhvb2soe1xuICAgIGJyb3dzZXJIZWxwZXIsXG4gICAgZW5hYmxlZDogaXNTeXN0ZW1UZXN0RW5hYmxlZCgpLFxuICAgIG9uRGlzbWlzc1RvLFxuICAgIG9uRmlyc3RJbml0aWFsaXplLFxuICAgIG9uSW5pdGlhbGl6ZSxcbiAgICBvbk5hdmlnYXRlXG4gIH0pXG4gIGNvbnN0IHN5c3RlbVRlc3RCcm93c2VySGVscGVyID0gc2hhcGVIb29rLnN5c3RlbVRlc3RCcm93c2VySGVscGVyKClcblxuICB1c2VFdmVudEVtaXR0ZXIoc3lzdGVtVGVzdEJyb3dzZXJIZWxwZXI/LmdldEV2ZW50cygpLCBcImRpc21pc3NUb1wiLCBzaGFwZUhvb2sudHQub25TeXN0ZW1UZXN0QnJvd3NlckhlbHBlckRpc21pc3NUbylcbiAgdXNlRXZlbnRFbWl0dGVyKHN5c3RlbVRlc3RCcm93c2VySGVscGVyPy5nZXRFdmVudHMoKSwgXCJuYXZpZ2F0ZVwiLCBzaGFwZUhvb2sudHQub25TeXN0ZW1UZXN0QnJvd3NlckhlbHBlck5hdmlnYXRlKVxuXG4gIHJldHVybiBzaGFwZUhvb2sucmVzdWx0KClcbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "system-testing",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.81",
|
|
4
4
|
"description": "System testing with Selenium and browsers.",
|
|
5
|
+
"bin": {
|
|
6
|
+
"system-testing": "build/cli.js"
|
|
7
|
+
},
|
|
5
8
|
"main": "build/index.js",
|
|
6
9
|
"types": "build/index.d.ts",
|
|
7
10
|
"files": [
|
|
@@ -36,7 +39,7 @@
|
|
|
36
39
|
"prepublishOnly": "npm run build",
|
|
37
40
|
"release:patch": "node scripts/release-patch.js",
|
|
38
41
|
"test:appium:android": "(npx appium driver update uiautomator2 || npx appium driver install uiautomator2) && SDK_PATH=$(node -e \"const fs=require('fs'); const path=require('path'); const os=require('os'); const candidates=[process.env.ANDROID_SDK_ROOT, process.env.ANDROID_HOME, path.join(os.homedir(),'Android','Sdk'), path.join(os.homedir(),'Library','Android','sdk'), '/usr/lib/android-sdk', '/usr/local/android-sdk', '/opt/android-sdk', '/opt/android-sdk-linux']; const found=candidates.find((candidate)=>candidate && fs.existsSync(candidate)); if (found) process.stdout.write(found);\") && ANDROID_HOME=${ANDROID_HOME:-$SDK_PATH} ANDROID_SDK_ROOT=${ANDROID_SDK_ROOT:-$SDK_PATH} node -e \"if (!process.env.ANDROID_HOME && !process.env.ANDROID_SDK_ROOT) { console.error('ANDROID_HOME or ANDROID_SDK_ROOT must be set to run Appium Android tests'); process.exit(1) }\" && ANDROID_HOME=${ANDROID_HOME:-$SDK_PATH} ANDROID_SDK_ROOT=${ANDROID_SDK_ROOT:-$SDK_PATH} SYSTEM_TEST_HOST=dist SYSTEM_TEST_HTTP_CONNECT_HOST=10.0.2.2 SYSTEM_TEST_DRIVER=appium SYSTEM_TEST_APPIUM_DRIVERS=uiautomator2 SYSTEM_TEST_APPIUM_TEST_ID_STRATEGY=css SYSTEM_TEST_APPIUM_SERVER_ARGS='{\"allowInsecure\":[\"uiautomator2:chromedriver_autodownload\"]}' SYSTEM_TEST_APPIUM_CAPABILITIES='{\"platformName\":\"Android\",\"appium:automationName\":\"UiAutomator2\",\"appium:deviceName\":\"Android Emulator\",\"browserName\":\"Chrome\",\"appium:chromedriverAutodownload\":true}' npm test",
|
|
39
|
-
"test:appium:web": "
|
|
42
|
+
"test:appium:web": "node scripts/test-appium-web.js",
|
|
40
43
|
"test:dist": "npm run export:web && SYSTEM_TEST_HOST=dist npm test",
|
|
41
44
|
"test:selenium": "SYSTEM_TEST_HOST=dist npm test",
|
|
42
45
|
"test": "jasmine",
|
|
@@ -44,39 +47,45 @@
|
|
|
44
47
|
"watch": "tsc -w"
|
|
45
48
|
},
|
|
46
49
|
"dependencies": {
|
|
47
|
-
"appium": "3.2.
|
|
50
|
+
"appium": "3.2.2",
|
|
48
51
|
"awaitery": "^1.0.12",
|
|
49
52
|
"diggerize": "^1.0.9",
|
|
50
53
|
"eventemitter3": "^5.0.1",
|
|
51
54
|
"htmlfy": "^1.0.0",
|
|
52
55
|
"mime": "^4.0.7",
|
|
53
56
|
"moment": "^2.30.1",
|
|
57
|
+
"prop-types": "^15.8.1",
|
|
54
58
|
"qs": "^6.14.1",
|
|
55
59
|
"scoundrel-remote-eval": "^1.0.28",
|
|
60
|
+
"set-state-compare": "^1.0.72",
|
|
56
61
|
"ws": "^8.18.3",
|
|
57
62
|
"ya-use-event-emitter": "^0.1.2"
|
|
58
63
|
},
|
|
59
64
|
"peerDependencies": {
|
|
60
65
|
"expo-router": ">= 1.0.0",
|
|
66
|
+
"react": ">= 18.3.0",
|
|
61
67
|
"selenium-webdriver": ">= 4.34.0"
|
|
62
68
|
},
|
|
63
69
|
"peerDependenciesMeta": {
|
|
64
70
|
"expo-router": {
|
|
65
71
|
"optional": true
|
|
72
|
+
},
|
|
73
|
+
"react": {
|
|
74
|
+
"optional": true
|
|
66
75
|
}
|
|
67
76
|
},
|
|
68
77
|
"devDependencies": {
|
|
69
|
-
"@eslint/js": "^
|
|
78
|
+
"@eslint/js": "^10.0.1",
|
|
70
79
|
"@types/jasmine": "^6.0.0",
|
|
71
80
|
"@types/node": "^25.0.2",
|
|
72
81
|
"@types/qs": "^6.14.0",
|
|
73
82
|
"@types/react": "^19.2.7",
|
|
74
83
|
"@types/selenium-webdriver": "^4.35.4",
|
|
75
|
-
"appium-chromium-driver": "2.1.
|
|
84
|
+
"appium-chromium-driver": "^2.1.6",
|
|
76
85
|
"appium-uiautomator2-driver": "6.7.11",
|
|
77
|
-
"eslint": "^
|
|
78
|
-
"eslint-plugin-jsdoc": "^62.
|
|
79
|
-
"expo-router": "^
|
|
86
|
+
"eslint": "^10.0.3",
|
|
87
|
+
"eslint-plugin-jsdoc": "^62.7.1",
|
|
88
|
+
"expo-router": "^55.0.5",
|
|
80
89
|
"globals": "^17.0.0",
|
|
81
90
|
"jasmine": "^6.0.0",
|
|
82
91
|
"typescript": "^5.9.3"
|