testeranto 0.128.0 → 0.134.0
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/.aider.chat.history.md +137197 -0
- package/.aider.input.history +334 -0
- package/.aider.tags.cache.v3/18/8b/7dfca822129dad10b5cacadf7728.val +0 -0
- package/.aider.tags.cache.v3/{ec/c0/161c249c35be853cc40cf11f9267.val → 62/f5/8af72140d93c58db2f6aa5bf3f1f.val} +0 -0
- package/.aider.tags.cache.v3/8d/fa/12860238755bcfab9af8a93c52ab.val +0 -0
- package/.aider.tags.cache.v3/{b7/e6/5be87b62aeaf2bc244ff41c1b61a.val → a7/97/6d37fce350ad2d588f36729db0cd.val} +0 -0
- package/.aider.tags.cache.v3/{e3/e6/3501625caf5d5eb171f0d248462e.val → ad/3c/10f2ab1397f6d544e613d2a6acaf.val} +0 -0
- package/.aider.tags.cache.v3/cache.db +0 -0
- package/.aider.tags.cache.v3/cache.db-shm +0 -0
- package/.aider.tags.cache.v3/cache.db-wal +0 -0
- package/.aider.tags.cache.v3/dd/5b/0ade824b0841c7c11e9352c5d2ca.val +0 -0
- package/README.md +560 -19
- package/bundle.js +8 -75
- package/dist/common/src/Init.js +6 -1
- package/dist/common/src/Node.js +6 -4
- package/dist/common/src/NodeSidecar.js +15 -0
- package/dist/common/src/PM/PM_WithEslintAndTsc.js +187 -0
- package/dist/common/src/PM/__tests__/nodeSidecar.testeranto.js +109 -0
- package/dist/common/src/PM/__tests__/pureSidecar.testeranto.js +94 -0
- package/dist/common/src/PM/__tests__/webSidecar.testeranto.js +94 -0
- package/dist/common/src/PM/base.js +33 -16
- package/dist/common/src/PM/main.js +488 -422
- package/dist/common/src/PM/node.js +44 -19
- package/dist/common/src/PM/nodeSidecar.js +65 -0
- package/dist/common/src/PM/pure.js +55 -47
- package/dist/common/src/PM/pureSidecar.js +48 -0
- package/dist/common/src/PM/sidecar.js +11 -0
- package/dist/common/src/PM/web.js +24 -6
- package/dist/common/src/PM/webSidecar.js +47 -0
- package/dist/common/src/PureSidecar.js +13 -0
- package/dist/common/src/SP__Polygon.test.js +10 -0
- package/dist/common/src/WebSidecar.js +14 -0
- package/dist/common/src/build.js +63 -10
- package/dist/common/src/defaultConfig.js +1 -0
- package/dist/common/src/esbuildConfigs/consoleDetectorPlugin.js +27 -0
- package/dist/common/src/esbuildConfigs/pure.js +15 -1
- package/dist/common/src/esbuildConfigs/web.js +10 -1
- package/dist/common/src/{SubPackages/react-dom/jsx/index.js → lib/Sidecar.js} +4 -0
- package/dist/common/src/lib/abstractBase.js +7 -5
- package/dist/common/src/lib/basebuilder.js +1 -3
- package/dist/common/src/lib/classBuilder.js +4 -17
- package/dist/common/src/lib/core.js +11 -6
- package/dist/common/src/lib/index.js +13 -4
- package/dist/common/src/lib/pmProxy.js +1 -1
- package/dist/common/src/mothership/index.js +16 -0
- package/dist/common/src/mothership/test.js +65 -0
- package/dist/common/src/utils/queue.js +36 -0
- package/dist/common/src/utils.js +34 -5
- package/dist/common/testeranto.config.js +77 -39
- package/dist/common/tsconfig.common.tsbuildinfo +1 -1
- package/dist/module/src/Init.js +6 -1
- package/dist/module/src/Node.js +6 -4
- package/dist/module/src/NodeSidecar.js +11 -0
- package/dist/module/src/PM/PM_WithEslintAndTsc.js +180 -0
- package/dist/module/src/PM/__tests__/nodeSidecar.testeranto.js +104 -0
- package/dist/module/src/PM/__tests__/pureSidecar.testeranto.js +89 -0
- package/dist/module/src/PM/__tests__/webSidecar.testeranto.js +89 -0
- package/dist/module/src/PM/base.js +33 -16
- package/dist/module/src/PM/main.js +489 -423
- package/dist/module/src/PM/node.js +44 -19
- package/dist/module/src/PM/nodeSidecar.js +58 -0
- package/dist/module/src/PM/pure.js +55 -44
- package/dist/module/src/PM/pureSidecar.js +41 -0
- package/dist/module/src/PM/sidecar.js +7 -0
- package/dist/module/src/PM/web.js +24 -6
- package/dist/module/src/PM/webSidecar.js +40 -0
- package/dist/module/src/Project.js +154 -75
- package/dist/module/src/PureSidecar.js +9 -0
- package/dist/module/src/ReportClient.js +132 -97
- package/dist/module/src/SP__Polygon.test.js +8 -0
- package/dist/module/src/TestReport.js +32 -14
- package/dist/module/src/WebSidecar.js +10 -0
- package/dist/module/src/build.js +63 -10
- package/dist/module/src/defaultConfig.js +1 -0
- package/dist/module/src/esbuildConfigs/consoleDetectorPlugin.js +24 -0
- package/dist/module/src/esbuildConfigs/pure.js +15 -1
- package/dist/module/src/esbuildConfigs/web.js +10 -1
- package/dist/module/src/lib/Sidecar.js +2 -0
- package/dist/module/src/lib/abstractBase.js +7 -5
- package/dist/module/src/lib/basebuilder.js +1 -3
- package/dist/module/src/lib/classBuilder.js +4 -17
- package/dist/module/src/lib/core.js +11 -6
- package/dist/module/src/lib/index.js +12 -4
- package/dist/module/src/lib/pmProxy.js +1 -1
- package/dist/module/src/mothership/index.js +11 -0
- package/dist/module/src/mothership/test.js +60 -0
- package/dist/module/src/utils/queue.js +32 -0
- package/dist/module/src/utils.js +34 -5
- package/dist/module/testeranto.config.js +77 -36
- package/dist/module/tsconfig.module.tsbuildinfo +1 -1
- package/dist/prebuild/Project.js +3288 -385
- package/dist/prebuild/ReportClient.js +0 -24638
- package/dist/prebuild/TestReport.js +14 -8
- package/dist/prebuild/build.mjs +159 -15
- package/dist/prebuild/init-docs.mjs +2 -5
- package/dist/prebuild/mothership/index.mjs +17 -0
- package/dist/prebuild/run.mjs +696 -404
- package/dist/types/src/NodeSidecar.d.ts +6 -0
- package/dist/types/src/PM/PM_WithEslintAndTsc.d.ts +23 -0
- package/dist/types/src/PM/__tests__/nodeSidecar.testeranto.d.ts +20 -0
- package/dist/types/src/PM/__tests__/pureSidecar.testeranto.d.ts +20 -0
- package/dist/types/src/PM/__tests__/webSidecar.testeranto.d.ts +20 -0
- package/dist/types/src/PM/base.d.ts +6 -5
- package/dist/types/src/PM/index.d.ts +5 -3
- package/dist/types/src/PM/main.d.ts +23 -26
- package/dist/types/src/PM/node.d.ts +8 -6
- package/dist/types/src/PM/nodeSidecar.d.ts +13 -0
- package/dist/types/src/PM/pure.d.ts +4 -3
- package/dist/types/src/PM/pureSidecar.d.ts +11 -0
- package/dist/types/src/PM/sidecar.d.ts +8 -0
- package/dist/types/src/PM/web.d.ts +18 -8
- package/dist/types/src/PM/webSidecar.d.ts +11 -0
- package/dist/types/src/PureSidecar.d.ts +8 -0
- package/dist/types/src/Types.d.ts +109 -43
- package/dist/types/src/WebSidecar.d.ts +8 -0
- package/dist/types/src/esbuildConfigs/consoleDetectorPlugin.d.ts +2 -0
- package/dist/types/src/lib/Sidecar.d.ts +5 -0
- package/dist/types/src/lib/abstractBase.d.ts +6 -6
- package/dist/types/src/lib/classBuilder.d.ts +7 -1
- package/dist/types/src/lib/core.d.ts +7 -1
- package/dist/types/src/lib/index.d.ts +10 -4
- package/dist/types/src/lib/types.d.ts +12 -2
- package/dist/types/src/mothership/index.d.ts +2 -0
- package/dist/types/src/mothership/test.d.ts +21 -0
- package/dist/types/src/utils/queue.d.ts +11 -0
- package/dist/types/src/utils.d.ts +4 -7
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/package.json +19 -105
- package/src/Init.ts +6 -5
- package/src/Node.ts +7 -4
- package/src/NodeSidecar.ts +22 -0
- package/src/PM/PM_WithEslintAndTsc.ts +284 -0
- package/src/PM/__tests__/nodeSidecar.testeranto.ts +173 -0
- package/src/PM/__tests__/pureSidecar.testeranto.ts +157 -0
- package/src/PM/__tests__/webSidecar.testeranto.ts +157 -0
- package/src/PM/base.ts +38 -17
- package/src/PM/index.ts +9 -3
- package/src/PM/main.ts +617 -578
- package/src/PM/node.ts +67 -23
- package/src/PM/nodeSidecar.ts +73 -0
- package/src/PM/pure.ts +68 -58
- package/src/PM/pureSidecar.ts +56 -0
- package/src/PM/sidecar.ts +48 -0
- package/src/PM/web.ts +42 -11
- package/src/PM/webSidecar.ts +55 -0
- package/src/Project.tsx +312 -109
- package/src/Pure.ts +0 -2
- package/src/PureSidecar.ts +14 -0
- package/src/ReportClient.tsx +164 -170
- package/src/SP__Polygon.test.ts +13 -0
- package/src/TestReport.tsx +77 -6
- package/src/Types.ts +227 -122
- package/src/WebSidecar.ts +14 -0
- package/src/build.ts +101 -14
- package/src/defaultConfig.ts +1 -0
- package/src/esbuildConfigs/README.md +46 -0
- package/src/esbuildConfigs/consoleDetectorPlugin.ts +29 -0
- package/src/esbuildConfigs/pure.ts +22 -1
- package/src/esbuildConfigs/web.ts +13 -0
- package/src/lib/Sidecar.ts +6 -0
- package/src/lib/TEST_ADAPTER_RENAME.md +48 -0
- package/src/lib/abstractBase.ts +12 -9
- package/src/lib/basebuilder.ts +5 -4
- package/src/lib/classBuilder.ts +15 -18
- package/src/lib/core.ts +24 -11
- package/src/lib/index.ts +38 -18
- package/src/lib/pmProxy.ts +3 -1
- package/src/lib/types.ts +15 -2
- package/src/mothership/index.ts +15 -0
- package/src/mothership/test.ts +137 -0
- package/src/run.ts +0 -1
- package/src/utils/queue.ts +41 -0
- package/src/utils.ts +41 -15
- package/testeranto/bundles/node/mothership/chunk-PG6KUKNP.mjs +44 -0
- package/testeranto/bundles/node/mothership/chunk-V2EQEXU2.mjs +1032 -0
- package/testeranto/bundles/node/mothership/metafile.json +389 -0
- package/testeranto/bundles/node/mothership/src/PM/__tests__/nodeSidecar.testeranto.mjs +1219 -0
- package/testeranto/bundles/node/mothership/src/PM/__tests__/pureSidecar.testeranto.mjs +156 -0
- package/testeranto/bundles/node/mothership/src/PM/__tests__/sidecar.testeranto.mjs +1199 -0
- package/testeranto/bundles/node/mothership/src/PM/__tests__/webSidecar.testeranto.mjs +156 -0
- package/testeranto/bundles/node/mothership/src/mothership/test.mjs +24411 -0
- package/testeranto/bundles/pure/mothership/metafile.json +8 -0
- package/testeranto/bundles/web/mothership/metafile.json +8 -0
- package/testeranto/index.html +4 -4
- package/testeranto/reports/mothership/config.json +25 -0
- package/testeranto/reports/{redux → mothership}/index.html +8 -8
- package/testeranto/reports/mothership/src/PM/__tests__/nodeSidecar.testeranto/node/console_log.txt +0 -0
- package/testeranto/reports/mothership/src/PM/__tests__/nodeSidecar.testeranto/node/index.html +20 -0
- package/testeranto/reports/mothership/src/PM/__tests__/nodeSidecar.testeranto/node/lint_errors.json +1564 -0
- package/testeranto/reports/mothership/src/PM/__tests__/nodeSidecar.testeranto/node/log.txt +0 -0
- package/testeranto/reports/mothership/src/PM/__tests__/nodeSidecar.testeranto/node/prompt.txt +22 -0
- package/testeranto/reports/mothership/src/PM/__tests__/nodeSidecar.testeranto/node/type_errors.txt +35 -0
- package/testeranto/reports/mothership/src/PM/__tests__/pureSidecar.testeranto/node/index.html +20 -0
- package/testeranto/reports/mothership/src/PM/__tests__/pureSidecar.testeranto/node/lint_errors.json +80 -0
- package/testeranto/reports/mothership/src/PM/__tests__/pureSidecar.testeranto/node/prompt.txt +12 -0
- package/testeranto/reports/mothership/src/PM/__tests__/pureSidecar.testeranto/node/type_errors.txt +26 -0
- package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/bdd_errors.txt +1 -0
- package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/console_log.txt +0 -0
- package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/index.html +20 -0
- package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/lint_errors.json +1564 -0
- package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/log.txt +0 -0
- package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/prompt.txt +22 -0
- package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/tests.json +56 -0
- package/testeranto/reports/mothership/src/PM/__tests__/sidecar.testeranto/node/type_errors.txt +29 -0
- package/testeranto/reports/mothership/src/PM/__tests__/webSidecar.testeranto/node/index.html +20 -0
- package/testeranto/reports/mothership/src/PM/__tests__/webSidecar.testeranto/node/lint_errors.json +80 -0
- package/testeranto/reports/mothership/src/PM/__tests__/webSidecar.testeranto/node/prompt.txt +12 -0
- package/testeranto/reports/mothership/src/PM/__tests__/webSidecar.testeranto/node/type_errors.txt +26 -0
- package/testeranto/reports/mothership/src/mothership/test/node/bdd_errors.txt +1 -0
- package/testeranto/reports/mothership/src/mothership/test/node/console_log.txt +4 -0
- package/testeranto/reports/mothership/src/mothership/test/node/index.html +20 -0
- package/testeranto/reports/mothership/src/mothership/test/node/lint_errors.json +1 -0
- package/testeranto/reports/mothership/src/mothership/test/node/log.txt +0 -0
- package/testeranto/reports/mothership/src/mothership/test/node/prompt.txt +12 -0
- package/testeranto/reports/mothership/src/mothership/test/node/tests.json +24 -0
- package/testeranto/reports/mothership/src/mothership/test/node/type_errors.txt +18 -0
- package/testeranto/reports/mothership/summary.json +9 -0
- package/testeranto.config.ts +82 -44
- package/tsc.log +78 -81
- package/dist/common/src/SubPackages/react/component/index.js +0 -20
- package/dist/common/src/SubPackages/react/component/node.js +0 -10
- package/dist/common/src/SubPackages/react/component/pure.js +0 -10
- package/dist/common/src/SubPackages/react/component/web.js +0 -10
- package/dist/common/src/SubPackages/react/jsx/index.js +0 -64
- package/dist/common/src/SubPackages/react/jsx/node.js +0 -10
- package/dist/common/src/SubPackages/react/jsx/pure.js +0 -10
- package/dist/common/src/SubPackages/react/jsx/web.js +0 -10
- package/dist/common/src/SubPackages/react-dom/component/dynamic.js +0 -61
- package/dist/common/src/SubPackages/react-dom/component/node.js +0 -10
- package/dist/common/src/SubPackages/react-dom/component/pure.js +0 -10
- package/dist/common/src/SubPackages/react-dom/component/static.js +0 -26
- package/dist/common/src/SubPackages/react-dom/component/web.js +0 -16
- package/dist/common/src/SubPackages/react-dom/jsx/dynamic.js +0 -31
- package/dist/common/src/SubPackages/react-dom/jsx/node.js +0 -10
- package/dist/common/src/SubPackages/react-dom/jsx/pure.js +0 -10
- package/dist/common/src/SubPackages/react-dom/jsx/static.js +0 -59
- package/dist/common/src/SubPackages/react-dom/jsx/web.js +0 -16
- package/dist/common/src/SubPackages/react-test-renderer/MemoExoticComponent/node.js +0 -54
- package/dist/common/src/SubPackages/react-test-renderer/component/index.js +0 -15
- package/dist/common/src/SubPackages/react-test-renderer/component/interface.js +0 -70
- package/dist/common/src/SubPackages/react-test-renderer/component/node.js +0 -8
- package/dist/common/src/SubPackages/react-test-renderer/component/pure.js +0 -8
- package/dist/common/src/SubPackages/react-test-renderer/component/test/implementation.js +0 -57
- package/dist/common/src/SubPackages/react-test-renderer/component/test/node.js +0 -10
- package/dist/common/src/SubPackages/react-test-renderer/component/test/pure.js +0 -10
- package/dist/common/src/SubPackages/react-test-renderer/component/test/web.js +0 -10
- package/dist/common/src/SubPackages/react-test-renderer/component/web.js +0 -8
- package/dist/common/src/SubPackages/react-test-renderer/fc/node.js +0 -60
- package/dist/common/src/SubPackages/react-test-renderer/fc/web.js +0 -60
- package/dist/common/src/SubPackages/react-test-renderer/jsx/index.js +0 -67
- package/dist/common/src/SubPackages/react-test-renderer/jsx/node.js +0 -10
- package/dist/common/src/SubPackages/react-test-renderer/jsx/pure.js +0 -10
- package/dist/common/src/SubPackages/react-test-renderer/jsx/web.js +0 -10
- package/dist/common/src/SubPackages/react-test-renderer/jsx-promised/index.js +0 -52
- package/dist/common/src/SubPackages/react-test-renderer/jsx-promised/node.js +0 -10
- package/dist/common/src/SubPackages/react-test-renderer/jsx-promised/web.js +0 -10
- package/dist/common/src/examples/react/component/index.js +0 -33
- package/dist/common/src/examples/react/component/test.js +0 -36
- package/dist/module/src/SubPackages/react/component/index.js +0 -13
- package/dist/module/src/SubPackages/react/component/node.js +0 -5
- package/dist/module/src/SubPackages/react/component/pure.js +0 -5
- package/dist/module/src/SubPackages/react/component/web.js +0 -5
- package/dist/module/src/SubPackages/react/jsx/index.js +0 -58
- package/dist/module/src/SubPackages/react/jsx/node.js +0 -5
- package/dist/module/src/SubPackages/react/jsx/pure.js +0 -5
- package/dist/module/src/SubPackages/react/jsx/web.js +0 -5
- package/dist/module/src/SubPackages/react-dom/component/dynamic.js +0 -54
- package/dist/module/src/SubPackages/react-dom/component/node.js +0 -5
- package/dist/module/src/SubPackages/react-dom/component/pure.js +0 -5
- package/dist/module/src/SubPackages/react-dom/component/static.js +0 -22
- package/dist/module/src/SubPackages/react-dom/component/web.js +0 -11
- package/dist/module/src/SubPackages/react-dom/jsx/dynamic.js +0 -27
- package/dist/module/src/SubPackages/react-dom/jsx/node.js +0 -5
- package/dist/module/src/SubPackages/react-dom/jsx/pure.js +0 -5
- package/dist/module/src/SubPackages/react-dom/jsx/static.js +0 -53
- package/dist/module/src/SubPackages/react-dom/jsx/web.js +0 -11
- package/dist/module/src/SubPackages/react-test-renderer/MemoExoticComponent/node.js +0 -16
- package/dist/module/src/SubPackages/react-test-renderer/component/index.js +0 -14
- package/dist/module/src/SubPackages/react-test-renderer/component/interface.js +0 -31
- package/dist/module/src/SubPackages/react-test-renderer/component/node.js +0 -3
- package/dist/module/src/SubPackages/react-test-renderer/component/pure.js +0 -3
- package/dist/module/src/SubPackages/react-test-renderer/component/test/implementation.js +0 -54
- package/dist/module/src/SubPackages/react-test-renderer/component/test/node.js +0 -5
- package/dist/module/src/SubPackages/react-test-renderer/component/test/pure.js +0 -5
- package/dist/module/src/SubPackages/react-test-renderer/component/test/web.js +0 -5
- package/dist/module/src/SubPackages/react-test-renderer/component/web.js +0 -3
- package/dist/module/src/SubPackages/react-test-renderer/fc/node.js +0 -22
- package/dist/module/src/SubPackages/react-test-renderer/fc/web.js +0 -22
- package/dist/module/src/SubPackages/react-test-renderer/jsx/index.js +0 -28
- package/dist/module/src/SubPackages/react-test-renderer/jsx/node.js +0 -5
- package/dist/module/src/SubPackages/react-test-renderer/jsx/pure.js +0 -5
- package/dist/module/src/SubPackages/react-test-renderer/jsx/web.js +0 -5
- package/dist/module/src/SubPackages/react-test-renderer/jsx-promised/index.js +0 -16
- package/dist/module/src/SubPackages/react-test-renderer/jsx-promised/node.js +0 -5
- package/dist/module/src/SubPackages/react-test-renderer/jsx-promised/web.js +0 -5
- package/dist/module/src/examples/react/component/index.js +0 -26
- package/dist/module/src/examples/react/component/test.js +0 -32
- package/dist/prebuild/ReportClient.css +0 -11342
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/dist/types/src/SubPackages/react/component/index.d.ts +0 -4
- package/dist/types/src/SubPackages/react/component/node.d.ts +0 -4
- package/dist/types/src/SubPackages/react/component/pure.d.ts +0 -4
- package/dist/types/src/SubPackages/react/component/web.d.ts +0 -4
- package/dist/types/src/SubPackages/react/jsx/index.d.ts +0 -5
- package/dist/types/src/SubPackages/react/jsx/node.d.ts +0 -4
- package/dist/types/src/SubPackages/react/jsx/pure.d.ts +0 -4
- package/dist/types/src/SubPackages/react/jsx/web.d.ts +0 -4
- package/dist/types/src/SubPackages/react-dom/component/dynamic.d.ts +0 -20
- package/dist/types/src/SubPackages/react-dom/component/node.d.ts +0 -4
- package/dist/types/src/SubPackages/react-dom/component/pure.d.ts +0 -4
- package/dist/types/src/SubPackages/react-dom/component/static.d.ts +0 -9
- package/dist/types/src/SubPackages/react-dom/component/web.d.ts +0 -4
- package/dist/types/src/SubPackages/react-dom/jsx/dynamic.d.ts +0 -5
- package/dist/types/src/SubPackages/react-dom/jsx/index.d.ts +0 -6
- package/dist/types/src/SubPackages/react-dom/jsx/node.d.ts +0 -4
- package/dist/types/src/SubPackages/react-dom/jsx/pure.d.ts +0 -4
- package/dist/types/src/SubPackages/react-dom/jsx/static.d.ts +0 -5
- package/dist/types/src/SubPackages/react-dom/jsx/web.d.ts +0 -5
- package/dist/types/src/SubPackages/react-test-renderer/MemoExoticComponent/node.d.ts +0 -6
- package/dist/types/src/SubPackages/react-test-renderer/component/index.d.ts +0 -5
- package/dist/types/src/SubPackages/react-test-renderer/component/interface.d.ts +0 -3
- package/dist/types/src/SubPackages/react-test-renderer/component/node.d.ts +0 -4
- package/dist/types/src/SubPackages/react-test-renderer/component/pure.d.ts +0 -4
- package/dist/types/src/SubPackages/react-test-renderer/component/test/implementation.d.ts +0 -4
- package/dist/types/src/SubPackages/react-test-renderer/component/test/node.d.ts +0 -3
- package/dist/types/src/SubPackages/react-test-renderer/component/test/pure.d.ts +0 -4
- package/dist/types/src/SubPackages/react-test-renderer/component/test/web.d.ts +0 -3
- package/dist/types/src/SubPackages/react-test-renderer/component/web.d.ts +0 -4
- package/dist/types/src/SubPackages/react-test-renderer/fc/node.d.ts +0 -8
- package/dist/types/src/SubPackages/react-test-renderer/fc/web.d.ts +0 -9
- package/dist/types/src/SubPackages/react-test-renderer/jsx/index.d.ts +0 -11
- package/dist/types/src/SubPackages/react-test-renderer/jsx/node.d.ts +0 -4
- package/dist/types/src/SubPackages/react-test-renderer/jsx/pure.d.ts +0 -4
- package/dist/types/src/SubPackages/react-test-renderer/jsx/web.d.ts +0 -4
- package/dist/types/src/SubPackages/react-test-renderer/jsx-promised/index.d.ts +0 -15
- package/dist/types/src/SubPackages/react-test-renderer/jsx-promised/node.d.ts +0 -5
- package/dist/types/src/SubPackages/react-test-renderer/jsx-promised/web.d.ts +0 -5
- package/dist/types/src/examples/react/component/index.d.ts +0 -13
- package/dist/types/src/examples/react/component/test.d.ts +0 -17
- package/src/SubPackages/react/component/index.ts +0 -28
- package/src/SubPackages/react/component/node.ts +0 -17
- package/src/SubPackages/react/component/pure.ts +0 -17
- package/src/SubPackages/react/component/web.ts +0 -17
- package/src/SubPackages/react/jsx/index.ts +0 -75
- package/src/SubPackages/react/jsx/node.ts +0 -23
- package/src/SubPackages/react/jsx/pure.ts +0 -23
- package/src/SubPackages/react/jsx/web.ts +0 -24
- package/src/SubPackages/react-dom/component/dynamic.ts +0 -107
- package/src/SubPackages/react-dom/component/node.ts +0 -17
- package/src/SubPackages/react-dom/component/pure.ts +0 -17
- package/src/SubPackages/react-dom/component/static.ts +0 -41
- package/src/SubPackages/react-dom/component/web.ts +0 -32
- package/src/SubPackages/react-dom/jsx/dynamic.ts +0 -46
- package/src/SubPackages/react-dom/jsx/index.ts +0 -6
- package/src/SubPackages/react-dom/jsx/node.ts +0 -18
- package/src/SubPackages/react-dom/jsx/pure.ts +0 -18
- package/src/SubPackages/react-dom/jsx/static.ts +0 -87
- package/src/SubPackages/react-dom/jsx/web.ts +0 -26
- package/src/SubPackages/react-test-renderer/MemoExoticComponent/node.ts +0 -54
- package/src/SubPackages/react-test-renderer/component/index.ts +0 -32
- package/src/SubPackages/react-test-renderer/component/interface.ts +0 -43
- package/src/SubPackages/react-test-renderer/component/node.ts +0 -18
- package/src/SubPackages/react-test-renderer/component/pure.ts +0 -18
- package/src/SubPackages/react-test-renderer/component/test/implementation.ts +0 -63
- package/src/SubPackages/react-test-renderer/component/test/node.ts +0 -14
- package/src/SubPackages/react-test-renderer/component/test/pure.ts +0 -14
- package/src/SubPackages/react-test-renderer/component/test/web.ts +0 -14
- package/src/SubPackages/react-test-renderer/component/web.ts +0 -18
- package/src/SubPackages/react-test-renderer/fc/node.ts +0 -83
- package/src/SubPackages/react-test-renderer/fc/web.ts +0 -80
- package/src/SubPackages/react-test-renderer/jsx/index.ts +0 -61
- package/src/SubPackages/react-test-renderer/jsx/node.ts +0 -31
- package/src/SubPackages/react-test-renderer/jsx/pure.ts +0 -31
- package/src/SubPackages/react-test-renderer/jsx/web.ts +0 -32
- package/src/SubPackages/react-test-renderer/jsx-promised/index.ts +0 -73
- package/src/SubPackages/react-test-renderer/jsx-promised/node.ts +0 -36
- package/src/SubPackages/react-test-renderer/jsx-promised/web.ts +0 -36
- package/src/examples/react/component/index.tsx +0 -35
- package/src/examples/react/component/test.ts +0 -83
- package/testeranto/bundles/node/redux/metafile.json +0 -559
- package/testeranto/bundles/pure/redux/metafile.json +0 -554
- package/testeranto/bundles/web/redux/metafile.json +0 -504
- package/testeranto/bundles/web/redux/test/web.html +0 -19
- package/testeranto/reports/redux/config.json +0 -38
- package/testeranto/reports/redux/summary.json +0 -20
- /package/dist/{module/src/SubPackages/react-dom/jsx/index.js → types/src/SP__Polygon.test.d.ts} +0 -0
package/dist/prebuild/run.mjs
CHANGED
|
@@ -1,20 +1,17 @@
|
|
|
1
1
|
import { createRequire } from 'module';const require = createRequire(import.meta.url);
|
|
2
2
|
|
|
3
3
|
// src/run.ts
|
|
4
|
-
import
|
|
4
|
+
import ansiC3 from "ansi-colors";
|
|
5
5
|
import readline from "readline";
|
|
6
6
|
|
|
7
7
|
// src/PM/main.ts
|
|
8
8
|
import { spawn } from "node:child_process";
|
|
9
|
-
import ts from "typescript";
|
|
10
9
|
import net from "net";
|
|
11
|
-
import
|
|
12
|
-
import
|
|
10
|
+
import fs3, { watch } from "fs";
|
|
11
|
+
import path4 from "path";
|
|
13
12
|
import puppeteer from "puppeteer-core";
|
|
14
|
-
import
|
|
13
|
+
import ansiC2 from "ansi-colors";
|
|
15
14
|
import crypto from "node:crypto";
|
|
16
|
-
import { ESLint } from "eslint";
|
|
17
|
-
import tsc from "tsc-prog";
|
|
18
15
|
|
|
19
16
|
// src/utils.ts
|
|
20
17
|
import path from "path";
|
|
@@ -50,8 +47,11 @@ var promptPather = (entryPoint, platform, projectName) => {
|
|
|
50
47
|
};
|
|
51
48
|
var getRunnables = (tests, projectName, payload = {
|
|
52
49
|
nodeEntryPoints: {},
|
|
50
|
+
nodeEntryPointSidecars: {},
|
|
53
51
|
webEntryPoints: {},
|
|
54
|
-
|
|
52
|
+
webEntryPointSidecars: {},
|
|
53
|
+
pureEntryPoints: {},
|
|
54
|
+
pureEntryPointSidecars: {}
|
|
55
55
|
}) => {
|
|
56
56
|
return tests.reduce((pt, cv, cndx, cry) => {
|
|
57
57
|
if (cv[1] === "node") {
|
|
@@ -63,14 +63,71 @@ var getRunnables = (tests, projectName, payload = {
|
|
|
63
63
|
`./testeranto/bundles/web/${projectName}/${cv[0].split(".").slice(0, -1).concat("mjs").join(".")}`
|
|
64
64
|
);
|
|
65
65
|
} else if (cv[1] === "pure") {
|
|
66
|
-
pt.
|
|
66
|
+
pt.pureEntryPoints[cv[0]] = path.resolve(
|
|
67
67
|
`./testeranto/bundles/pure/${projectName}/${cv[0].split(".").slice(0, -1).concat("mjs").join(".")}`
|
|
68
68
|
);
|
|
69
69
|
}
|
|
70
|
+
cv[3].filter((t) => t[1] === "node").forEach((t) => {
|
|
71
|
+
pt.nodeEntryPointSidecars[`${t[0]}`] = path.resolve(
|
|
72
|
+
`./testeranto/bundles/node/${projectName}/${cv[0].split(".").slice(0, -1).concat("mjs").join(".")}`
|
|
73
|
+
);
|
|
74
|
+
});
|
|
75
|
+
cv[3].filter((t) => t[1] === "web").forEach((t) => {
|
|
76
|
+
pt.webEntryPointSidecars[`${t[0]}`] = path.resolve(
|
|
77
|
+
`./testeranto/bundles/web/${projectName}/${cv[0].split(".").slice(0, -1).concat("mjs").join(".")}`
|
|
78
|
+
);
|
|
79
|
+
});
|
|
80
|
+
cv[3].filter((t) => t[1] === "pure").forEach((t) => {
|
|
81
|
+
pt.pureEntryPointSidecars[`${t[0]}`] = path.resolve(
|
|
82
|
+
`./testeranto/bundles/pure/${projectName}/${cv[0].split(".").slice(0, -1).concat("mjs").join(".")}`
|
|
83
|
+
);
|
|
84
|
+
});
|
|
70
85
|
return pt;
|
|
71
86
|
}, payload);
|
|
72
87
|
};
|
|
73
88
|
|
|
89
|
+
// src/utils/queue.ts
|
|
90
|
+
var Queue = class {
|
|
91
|
+
constructor() {
|
|
92
|
+
this.items = [];
|
|
93
|
+
}
|
|
94
|
+
enqueue(element) {
|
|
95
|
+
this.items.push(element);
|
|
96
|
+
}
|
|
97
|
+
dequeue() {
|
|
98
|
+
if (this.isEmpty()) {
|
|
99
|
+
return "Queue is empty";
|
|
100
|
+
}
|
|
101
|
+
return this.items.shift();
|
|
102
|
+
}
|
|
103
|
+
peek() {
|
|
104
|
+
if (this.isEmpty()) {
|
|
105
|
+
return "Queue is empty";
|
|
106
|
+
}
|
|
107
|
+
return this.items[0];
|
|
108
|
+
}
|
|
109
|
+
isEmpty() {
|
|
110
|
+
return this.items.length === 0;
|
|
111
|
+
}
|
|
112
|
+
size() {
|
|
113
|
+
return this.items.length;
|
|
114
|
+
}
|
|
115
|
+
clear() {
|
|
116
|
+
this.items = [];
|
|
117
|
+
}
|
|
118
|
+
print() {
|
|
119
|
+
console.log(this.items.join(" -> "));
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
// src/PM/PM_WithEslintAndTsc.ts
|
|
124
|
+
import ts from "typescript";
|
|
125
|
+
import fs2 from "fs";
|
|
126
|
+
import path3 from "path";
|
|
127
|
+
import ansiC from "ansi-colors";
|
|
128
|
+
import { ESLint } from "eslint";
|
|
129
|
+
import tsc from "tsc-prog";
|
|
130
|
+
|
|
74
131
|
// src/PM/base.ts
|
|
75
132
|
import fs from "fs";
|
|
76
133
|
import path2 from "path";
|
|
@@ -84,7 +141,7 @@ var PM_Base = class {
|
|
|
84
141
|
this.configs = configs;
|
|
85
142
|
}
|
|
86
143
|
customclose() {
|
|
87
|
-
throw new Error("
|
|
144
|
+
throw new Error("customclose not implemented.");
|
|
88
145
|
}
|
|
89
146
|
waitForSelector(p, s) {
|
|
90
147
|
return new Promise((res) => {
|
|
@@ -103,8 +160,8 @@ var PM_Base = class {
|
|
|
103
160
|
});
|
|
104
161
|
});
|
|
105
162
|
}
|
|
106
|
-
newPage() {
|
|
107
|
-
return this.browser.newPage();
|
|
163
|
+
async newPage() {
|
|
164
|
+
return (await this.browser.newPage()).mainFrame()._id;
|
|
108
165
|
}
|
|
109
166
|
goto(p, url) {
|
|
110
167
|
return new Promise((res) => {
|
|
@@ -117,9 +174,9 @@ var PM_Base = class {
|
|
|
117
174
|
$(selector, p) {
|
|
118
175
|
return new Promise((res) => {
|
|
119
176
|
this.doInPage(p, async (page) => {
|
|
120
|
-
const x = page.$(selector);
|
|
121
|
-
const y = await x;
|
|
122
|
-
res(y
|
|
177
|
+
const x = await page.$(selector);
|
|
178
|
+
const y = await x?.jsonValue();
|
|
179
|
+
res(y);
|
|
123
180
|
});
|
|
124
181
|
});
|
|
125
182
|
}
|
|
@@ -149,7 +206,7 @@ var PM_Base = class {
|
|
|
149
206
|
await sPromise;
|
|
150
207
|
return sPromise;
|
|
151
208
|
}
|
|
152
|
-
async customScreenShot(ssOpts, testName2,
|
|
209
|
+
async customScreenShot(ssOpts, testName2, pageUid) {
|
|
153
210
|
const p = ssOpts.path;
|
|
154
211
|
const dir = path2.dirname(p);
|
|
155
212
|
fs.mkdirSync(dir, {
|
|
@@ -159,6 +216,9 @@ var PM_Base = class {
|
|
|
159
216
|
files[testName2] = /* @__PURE__ */ new Set();
|
|
160
217
|
}
|
|
161
218
|
files[testName2].add(ssOpts.path);
|
|
219
|
+
const page = (await this.browser.pages()).find(
|
|
220
|
+
(p2) => p2.mainFrame()._id === pageUid
|
|
221
|
+
);
|
|
162
222
|
const sPromise = page.screenshot({
|
|
163
223
|
...ssOpts,
|
|
164
224
|
path: p
|
|
@@ -266,8 +326,8 @@ var PM_Base = class {
|
|
|
266
326
|
res(x);
|
|
267
327
|
});
|
|
268
328
|
}
|
|
269
|
-
page() {
|
|
270
|
-
|
|
329
|
+
page(p) {
|
|
330
|
+
return p;
|
|
271
331
|
}
|
|
272
332
|
click(selector, page) {
|
|
273
333
|
return page.click(selector);
|
|
@@ -282,14 +342,27 @@ var PM_Base = class {
|
|
|
282
342
|
return page.keyboard.type(value);
|
|
283
343
|
});
|
|
284
344
|
}
|
|
285
|
-
|
|
345
|
+
// setValue(value: string, p: string) {
|
|
346
|
+
// this.doInPage(p, (page) => {
|
|
347
|
+
// return page.keyboard.type(value);
|
|
348
|
+
// });
|
|
349
|
+
// }
|
|
350
|
+
getAttribute(selector, attribute, p) {
|
|
286
351
|
this.doInPage(p, (page) => {
|
|
287
|
-
return page.
|
|
352
|
+
return page.$eval(selector, (input) => input.getAttribute(attribute));
|
|
288
353
|
});
|
|
289
354
|
}
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
355
|
+
async getInnerHtml(selector, p) {
|
|
356
|
+
return new Promise((res, rej) => {
|
|
357
|
+
this.doInPage(p, async (page) => {
|
|
358
|
+
const e = await page.$(selector);
|
|
359
|
+
if (!e) {
|
|
360
|
+
rej();
|
|
361
|
+
} else {
|
|
362
|
+
const text = await (await e.getProperty("textContent")).jsonValue();
|
|
363
|
+
res(text);
|
|
364
|
+
}
|
|
365
|
+
});
|
|
293
366
|
});
|
|
294
367
|
}
|
|
295
368
|
isDisabled(selector, p) {
|
|
@@ -304,91 +377,23 @@ var PM_Base = class {
|
|
|
304
377
|
}
|
|
305
378
|
async doInPage(p, cb) {
|
|
306
379
|
(await this.browser.pages()).forEach((page) => {
|
|
307
|
-
|
|
380
|
+
const frame = page.mainFrame();
|
|
381
|
+
if (frame._id === p) {
|
|
308
382
|
return cb(page);
|
|
309
383
|
}
|
|
310
384
|
});
|
|
311
385
|
}
|
|
312
386
|
};
|
|
313
387
|
|
|
314
|
-
// src/PM/
|
|
388
|
+
// src/PM/PM_WithEslintAndTsc.ts
|
|
315
389
|
var eslint = new ESLint();
|
|
316
390
|
var formatter = await eslint.loadFormatter(
|
|
317
391
|
"./node_modules/testeranto/dist/prebuild/esbuildConfigs/eslint-formatter-testeranto.mjs"
|
|
318
392
|
);
|
|
319
|
-
var
|
|
320
|
-
var fileHashes = {};
|
|
321
|
-
var files2 = {};
|
|
322
|
-
var screenshots2 = {};
|
|
323
|
-
async function fileHash(filePath, algorithm = "md5") {
|
|
324
|
-
return new Promise((resolve, reject) => {
|
|
325
|
-
const hash = crypto.createHash(algorithm);
|
|
326
|
-
const fileStream = fs2.createReadStream(filePath);
|
|
327
|
-
fileStream.on("data", (data) => {
|
|
328
|
-
hash.update(data);
|
|
329
|
-
});
|
|
330
|
-
fileStream.on("end", () => {
|
|
331
|
-
const fileHash2 = hash.digest("hex");
|
|
332
|
-
resolve(fileHash2);
|
|
333
|
-
});
|
|
334
|
-
fileStream.on("error", (error) => {
|
|
335
|
-
reject(`Error reading file: ${error.message}`);
|
|
336
|
-
});
|
|
337
|
-
});
|
|
338
|
-
}
|
|
339
|
-
var statusMessagePretty = (failures, test) => {
|
|
340
|
-
if (failures === 0) {
|
|
341
|
-
console.log(ansiC.green(ansiC.inverse(`> ${test} completed successfully`)));
|
|
342
|
-
} else {
|
|
343
|
-
console.log(ansiC.red(ansiC.inverse(`> ${test} failed ${failures} times`)));
|
|
344
|
-
}
|
|
345
|
-
};
|
|
346
|
-
async function writeFileAndCreateDir(filePath, data) {
|
|
347
|
-
const dirPath = path3.dirname(filePath);
|
|
348
|
-
try {
|
|
349
|
-
await fs2.promises.mkdir(dirPath, { recursive: true });
|
|
350
|
-
await fs2.appendFileSync(filePath, data);
|
|
351
|
-
} catch (error) {
|
|
352
|
-
console.error(`Error writing file: ${error}`);
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
var filesHash = async (files3, algorithm = "md5") => {
|
|
356
|
-
return new Promise((resolve, reject) => {
|
|
357
|
-
resolve(
|
|
358
|
-
files3.reduce(async (mm, f) => {
|
|
359
|
-
return await mm + await fileHash(f);
|
|
360
|
-
}, Promise.resolve(""))
|
|
361
|
-
);
|
|
362
|
-
});
|
|
363
|
-
};
|
|
364
|
-
function isValidUrl(string) {
|
|
365
|
-
try {
|
|
366
|
-
new URL(string);
|
|
367
|
-
return true;
|
|
368
|
-
} catch (err) {
|
|
369
|
-
return false;
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
|
-
function pollForFile(path4, timeout = 2e3) {
|
|
373
|
-
const intervalObj = setInterval(function() {
|
|
374
|
-
const file = path4;
|
|
375
|
-
const fileExists = fs2.existsSync(file);
|
|
376
|
-
if (fileExists) {
|
|
377
|
-
clearInterval(intervalObj);
|
|
378
|
-
}
|
|
379
|
-
}, timeout);
|
|
380
|
-
}
|
|
381
|
-
var PM_Main = class extends PM_Base {
|
|
393
|
+
var PM_WithEslintAndTsc = class extends PM_Base {
|
|
382
394
|
constructor(configs, name, mode2) {
|
|
383
395
|
super(configs);
|
|
384
|
-
this.
|
|
385
|
-
this.getRunnables = (tests, testName2, payload = {
|
|
386
|
-
nodeEntryPoints: {},
|
|
387
|
-
webEntryPoints: {},
|
|
388
|
-
importEntryPoints: {}
|
|
389
|
-
}) => {
|
|
390
|
-
return getRunnables(tests, testName2, payload);
|
|
391
|
-
};
|
|
396
|
+
this.summary = {};
|
|
392
397
|
this.tscCheck = async ({
|
|
393
398
|
entrypoint,
|
|
394
399
|
addableFiles,
|
|
@@ -413,15 +418,15 @@ var PM_Main = class extends PM_Base {
|
|
|
413
418
|
// exclude: ["**/*.test.ts", "**/*.spec.ts"],
|
|
414
419
|
});
|
|
415
420
|
const tscPath = tscPather(entrypoint, platform, this.name);
|
|
416
|
-
|
|
421
|
+
const allDiagnostics = program.getSemanticDiagnostics();
|
|
417
422
|
const results = [];
|
|
418
423
|
allDiagnostics.forEach((diagnostic) => {
|
|
419
424
|
if (diagnostic.file) {
|
|
420
|
-
|
|
425
|
+
const { line, character } = ts.getLineAndCharacterOfPosition(
|
|
421
426
|
diagnostic.file,
|
|
422
427
|
diagnostic.start
|
|
423
428
|
);
|
|
424
|
-
|
|
429
|
+
const message = ts.flattenDiagnosticMessageText(
|
|
425
430
|
diagnostic.messageText,
|
|
426
431
|
"\n"
|
|
427
432
|
);
|
|
@@ -453,7 +458,7 @@ var PM_Main = class extends PM_Base {
|
|
|
453
458
|
this.lintIsNowDone(entrypoint, results.length);
|
|
454
459
|
};
|
|
455
460
|
this.makePrompt = async (entryPoint, addableFiles, platform) => {
|
|
456
|
-
this.
|
|
461
|
+
this.summary[entryPoint].prompt = "?";
|
|
457
462
|
const promptPath = promptPather(entryPoint, platform, this.name);
|
|
458
463
|
const testPaths = path3.join(
|
|
459
464
|
"testeranto",
|
|
@@ -495,34 +500,67 @@ ${addableFiles.map((x) => {
|
|
|
495
500
|
)}"
|
|
496
501
|
`
|
|
497
502
|
);
|
|
498
|
-
this.
|
|
503
|
+
this.summary[entryPoint].prompt = `aider --model deepseek/deepseek-chat --load testeranto/${this.name}/reports/${platform}/${entryPoint.split(".").slice(0, -1).join(".")}/prompt.txt`;
|
|
504
|
+
this.checkForShutdown();
|
|
505
|
+
};
|
|
506
|
+
this.typeCheckIsRunning = (src) => {
|
|
507
|
+
this.summary[src].typeErrors = "?";
|
|
508
|
+
};
|
|
509
|
+
this.typeCheckIsNowDone = (src, failures) => {
|
|
510
|
+
this.summary[src].typeErrors = failures;
|
|
511
|
+
this.writeBigBoard();
|
|
512
|
+
this.checkForShutdown();
|
|
513
|
+
};
|
|
514
|
+
this.lintIsRunning = (src) => {
|
|
515
|
+
this.summary[src].staticErrors = "?";
|
|
516
|
+
this.writeBigBoard();
|
|
517
|
+
};
|
|
518
|
+
this.lintIsNowDone = (src, failures) => {
|
|
519
|
+
this.summary[src].staticErrors = failures;
|
|
520
|
+
this.writeBigBoard();
|
|
521
|
+
this.checkForShutdown();
|
|
522
|
+
};
|
|
523
|
+
this.bddTestIsRunning = (src) => {
|
|
524
|
+
this.summary[src].runTimeError = "?";
|
|
525
|
+
this.writeBigBoard();
|
|
526
|
+
};
|
|
527
|
+
this.bddTestIsNowDone = (src, failures) => {
|
|
528
|
+
this.summary[src].runTimeError = failures;
|
|
529
|
+
this.writeBigBoard();
|
|
499
530
|
this.checkForShutdown();
|
|
500
531
|
};
|
|
532
|
+
this.writeBigBoard = () => {
|
|
533
|
+
fs2.writeFileSync(
|
|
534
|
+
`./testeranto/reports/${this.name}/summary.json`,
|
|
535
|
+
JSON.stringify(this.summary, null, 2)
|
|
536
|
+
);
|
|
537
|
+
};
|
|
501
538
|
this.checkForShutdown = () => {
|
|
539
|
+
console.log(ansiC.inverse(`checkForShutdown`));
|
|
502
540
|
this.writeBigBoard();
|
|
503
541
|
if (this.mode === "dev")
|
|
504
542
|
return;
|
|
505
543
|
let inflight = false;
|
|
506
|
-
Object.keys(this.
|
|
507
|
-
if (this.
|
|
544
|
+
Object.keys(this.summary).forEach((k) => {
|
|
545
|
+
if (this.summary[k].prompt === "?") {
|
|
508
546
|
console.log(ansiC.blue(ansiC.inverse(`\u{1F555} prompt ${k}`)));
|
|
509
547
|
inflight = true;
|
|
510
548
|
}
|
|
511
549
|
});
|
|
512
|
-
Object.keys(this.
|
|
513
|
-
if (this.
|
|
550
|
+
Object.keys(this.summary).forEach((k) => {
|
|
551
|
+
if (this.summary[k].runTimeError === "?") {
|
|
514
552
|
console.log(ansiC.blue(ansiC.inverse(`\u{1F555} runTimeError ${k}`)));
|
|
515
553
|
inflight = true;
|
|
516
554
|
}
|
|
517
555
|
});
|
|
518
|
-
Object.keys(this.
|
|
519
|
-
if (this.
|
|
556
|
+
Object.keys(this.summary).forEach((k) => {
|
|
557
|
+
if (this.summary[k].staticErrors === "?") {
|
|
520
558
|
console.log(ansiC.blue(ansiC.inverse(`\u{1F555} staticErrors ${k}`)));
|
|
521
559
|
inflight = true;
|
|
522
560
|
}
|
|
523
561
|
});
|
|
524
|
-
Object.keys(this.
|
|
525
|
-
if (this.
|
|
562
|
+
Object.keys(this.summary).forEach((k) => {
|
|
563
|
+
if (this.summary[k].typeErrors === "?") {
|
|
526
564
|
console.log(ansiC.blue(ansiC.inverse(`\u{1F555} typeErrors ${k}`)));
|
|
527
565
|
inflight = true;
|
|
528
566
|
}
|
|
@@ -535,38 +573,113 @@ ${addableFiles.map((x) => {
|
|
|
535
573
|
});
|
|
536
574
|
}
|
|
537
575
|
};
|
|
538
|
-
this.
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
576
|
+
this.name = name;
|
|
577
|
+
this.mode = mode2;
|
|
578
|
+
this.configs.tests.forEach(([t, rt, tr, sidecars]) => {
|
|
579
|
+
this.summary[t] = {
|
|
580
|
+
runTimeError: "?",
|
|
581
|
+
typeErrors: "?",
|
|
582
|
+
staticErrors: "?",
|
|
583
|
+
prompt: "?",
|
|
584
|
+
failingFeatures: {}
|
|
585
|
+
};
|
|
586
|
+
sidecars.forEach(([t2]) => {
|
|
587
|
+
this.summary[t2] = {
|
|
588
|
+
// runTimeError: "?",
|
|
589
|
+
typeErrors: "?",
|
|
590
|
+
staticErrors: "?"
|
|
591
|
+
// prompt: "?",
|
|
592
|
+
// failingFeatures: {},
|
|
593
|
+
};
|
|
594
|
+
});
|
|
595
|
+
});
|
|
596
|
+
}
|
|
597
|
+
};
|
|
598
|
+
|
|
599
|
+
// src/PM/main.ts
|
|
600
|
+
var changes = {};
|
|
601
|
+
var fileHashes = {};
|
|
602
|
+
var files2 = {};
|
|
603
|
+
var screenshots2 = {};
|
|
604
|
+
async function fileHash(filePath, algorithm = "md5") {
|
|
605
|
+
return new Promise((resolve, reject) => {
|
|
606
|
+
const hash = crypto.createHash(algorithm);
|
|
607
|
+
const fileStream = fs3.createReadStream(filePath);
|
|
608
|
+
fileStream.on("data", (data) => {
|
|
609
|
+
hash.update(data);
|
|
610
|
+
});
|
|
611
|
+
fileStream.on("end", () => {
|
|
612
|
+
const fileHash2 = hash.digest("hex");
|
|
613
|
+
resolve(fileHash2);
|
|
614
|
+
});
|
|
615
|
+
fileStream.on("error", (error) => {
|
|
616
|
+
reject(`Error reading file: ${error.message}`);
|
|
617
|
+
});
|
|
618
|
+
});
|
|
619
|
+
}
|
|
620
|
+
var statusMessagePretty = (failures, test) => {
|
|
621
|
+
if (failures === 0) {
|
|
622
|
+
console.log(
|
|
623
|
+
ansiC2.green(ansiC2.inverse(`> ${test} completed successfully?!?`))
|
|
624
|
+
);
|
|
625
|
+
} else {
|
|
626
|
+
console.log(ansiC2.red(ansiC2.inverse(`> ${test} failed ${failures} times`)));
|
|
627
|
+
}
|
|
628
|
+
};
|
|
629
|
+
async function writeFileAndCreateDir(filePath, data) {
|
|
630
|
+
const dirPath = path4.dirname(filePath);
|
|
631
|
+
try {
|
|
632
|
+
await fs3.promises.mkdir(dirPath, { recursive: true });
|
|
633
|
+
await fs3.writeFileSync(filePath, data);
|
|
634
|
+
} catch (error) {
|
|
635
|
+
console.error(`Error writing file: ${error}`);
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
var filesHash = async (files3, algorithm = "md5") => {
|
|
639
|
+
return new Promise((resolve, reject) => {
|
|
640
|
+
resolve(
|
|
641
|
+
files3.reduce(async (mm, f) => {
|
|
642
|
+
return await mm + await fileHash(f);
|
|
643
|
+
}, Promise.resolve(""))
|
|
644
|
+
);
|
|
645
|
+
});
|
|
646
|
+
};
|
|
647
|
+
function isValidUrl(string) {
|
|
648
|
+
try {
|
|
649
|
+
new URL(string);
|
|
650
|
+
return true;
|
|
651
|
+
} catch (err) {
|
|
652
|
+
return false;
|
|
653
|
+
}
|
|
654
|
+
}
|
|
655
|
+
async function pollForFile(path5, timeout = 2e3) {
|
|
656
|
+
const intervalObj = setInterval(function() {
|
|
657
|
+
const file = path5;
|
|
658
|
+
const fileExists = fs3.existsSync(file);
|
|
659
|
+
if (fileExists) {
|
|
660
|
+
clearInterval(intervalObj);
|
|
661
|
+
}
|
|
662
|
+
}, timeout);
|
|
663
|
+
}
|
|
664
|
+
var PM_Main = class extends PM_WithEslintAndTsc {
|
|
665
|
+
constructor(configs, name, mode2) {
|
|
666
|
+
super(configs, name, mode2);
|
|
667
|
+
this.getRunnables = (tests, testName2, payload = {
|
|
668
|
+
nodeEntryPoints: {},
|
|
669
|
+
nodeEntryPointSidecars: {},
|
|
670
|
+
webEntryPoints: {},
|
|
671
|
+
webEntryPointSidecars: {},
|
|
672
|
+
pureEntryPoints: {},
|
|
673
|
+
pureEntryPointSidecars: {}
|
|
674
|
+
}) => {
|
|
675
|
+
return getRunnables(tests, testName2, payload);
|
|
563
676
|
};
|
|
564
677
|
this.launchPure = async (src, dest) => {
|
|
565
|
-
console.log(
|
|
678
|
+
console.log(ansiC2.green(ansiC2.inverse(`! pure, ${src}`)));
|
|
566
679
|
this.bddTestIsRunning(src);
|
|
567
680
|
const reportDest = `testeranto/reports/${this.name}/${src.split(".").slice(0, -1).join(".")}/pure`;
|
|
568
|
-
if (!
|
|
569
|
-
|
|
681
|
+
if (!fs3.existsSync(reportDest)) {
|
|
682
|
+
fs3.mkdirSync(reportDest, { recursive: true });
|
|
570
683
|
}
|
|
571
684
|
const destFolder = dest.replace(".mjs", "");
|
|
572
685
|
let argz = "";
|
|
@@ -574,11 +687,11 @@ ${addableFiles.map((x) => {
|
|
|
574
687
|
return t[0] === src;
|
|
575
688
|
});
|
|
576
689
|
if (!testConfig) {
|
|
577
|
-
console.log(
|
|
690
|
+
console.log(ansiC2.inverse("missing test config! Exiting ungracefully!"));
|
|
578
691
|
process.exit(-1);
|
|
579
692
|
}
|
|
580
693
|
const testConfigResource = testConfig[2];
|
|
581
|
-
|
|
694
|
+
const portsToUse = [];
|
|
582
695
|
if (testConfigResource.ports === 0) {
|
|
583
696
|
argz = JSON.stringify({
|
|
584
697
|
scheduled: true,
|
|
@@ -617,21 +730,20 @@ ${addableFiles.map((x) => {
|
|
|
617
730
|
await import(`${builtfile}?cacheBust=${Date.now()}`).then((module) => {
|
|
618
731
|
return module.default.then((defaultModule) => {
|
|
619
732
|
defaultModule.receiveTestResourceConfig(argz).then(async (results) => {
|
|
620
|
-
this.receiveFeatures(results.features, destFolder, src, "pure");
|
|
621
733
|
statusMessagePretty(results.fails, src);
|
|
622
734
|
this.bddTestIsNowDone(src, results.fails);
|
|
623
735
|
}).catch((e) => {
|
|
624
736
|
console.log(
|
|
625
|
-
|
|
737
|
+
ansiC2.red(
|
|
738
|
+
ansiC2.inverse(`launchPure - ${src} errored with: ${e}`)
|
|
739
|
+
)
|
|
626
740
|
);
|
|
627
741
|
this.bddTestIsNowDone(src, -1);
|
|
628
|
-
}).finally(() => {
|
|
629
|
-
webSideCares.forEach((webSideCar) => webSideCar.close());
|
|
630
742
|
});
|
|
631
743
|
}).catch((e) => {
|
|
632
744
|
console.log(
|
|
633
|
-
|
|
634
|
-
|
|
745
|
+
ansiC2.red(
|
|
746
|
+
ansiC2.inverse(
|
|
635
747
|
`${src} errored with: ${e}. Check ${reportDest}/error.txt for more info`
|
|
636
748
|
)
|
|
637
749
|
)
|
|
@@ -643,8 +755,8 @@ ${addableFiles.map((x) => {
|
|
|
643
755
|
});
|
|
644
756
|
} catch (e) {
|
|
645
757
|
console.log(
|
|
646
|
-
|
|
647
|
-
|
|
758
|
+
ansiC2.red(
|
|
759
|
+
ansiC2.inverse(
|
|
648
760
|
`${src} errored with: ${e}. Check ${reportDest}/error.txt for more info`
|
|
649
761
|
)
|
|
650
762
|
)
|
|
@@ -655,38 +767,39 @@ ${addableFiles.map((x) => {
|
|
|
655
767
|
}
|
|
656
768
|
for (let i = 0; i <= portsToUse.length; i++) {
|
|
657
769
|
if (portsToUse[i]) {
|
|
658
|
-
this.ports[portsToUse[i]] =
|
|
770
|
+
this.ports[portsToUse[i]] = true;
|
|
659
771
|
}
|
|
660
772
|
}
|
|
661
773
|
};
|
|
662
774
|
this.launchNode = async (src, dest) => {
|
|
663
|
-
console.log(
|
|
775
|
+
console.log(ansiC2.green(ansiC2.inverse(`! node, ${src}`)));
|
|
664
776
|
this.bddTestIsRunning(src);
|
|
665
777
|
const reportDest = `testeranto/reports/${this.name}/${src.split(".").slice(0, -1).join(".")}/node`;
|
|
666
|
-
if (!
|
|
667
|
-
|
|
778
|
+
if (!fs3.existsSync(reportDest)) {
|
|
779
|
+
fs3.mkdirSync(reportDest, { recursive: true });
|
|
668
780
|
}
|
|
669
|
-
const destFolder = dest.replace(".mjs", "");
|
|
670
781
|
let testResources = "";
|
|
671
782
|
const testConfig = this.configs.tests.find((t) => {
|
|
672
783
|
return t[0] === src;
|
|
673
784
|
});
|
|
674
785
|
if (!testConfig) {
|
|
675
786
|
console.log(
|
|
676
|
-
|
|
787
|
+
ansiC2.inverse(`missing test config! Exiting ungracefully for '${src}'`)
|
|
677
788
|
);
|
|
678
789
|
process.exit(-1);
|
|
679
790
|
}
|
|
680
791
|
const testConfigResource = testConfig[2];
|
|
681
|
-
|
|
792
|
+
const portsToUse = [];
|
|
682
793
|
if (testConfigResource.ports === 0) {
|
|
683
|
-
|
|
684
|
-
|
|
794
|
+
console.error("portsToUse?!", []);
|
|
795
|
+
const t = {
|
|
685
796
|
name: src,
|
|
686
|
-
ports: portsToUse,
|
|
797
|
+
// ports: portsToUse.map((v) => Number(v)),
|
|
798
|
+
ports: [],
|
|
687
799
|
fs: reportDest,
|
|
688
800
|
browserWSEndpoint: this.browser.wsEndpoint()
|
|
689
|
-
}
|
|
801
|
+
};
|
|
802
|
+
testResources = JSON.stringify(t);
|
|
690
803
|
} else if (testConfigResource.ports > 0) {
|
|
691
804
|
const openPorts = Object.entries(this.ports).filter(
|
|
692
805
|
([portnumber, portopen]) => portopen
|
|
@@ -696,14 +809,16 @@ ${addableFiles.map((x) => {
|
|
|
696
809
|
portsToUse.push(openPorts[i][0]);
|
|
697
810
|
this.ports[openPorts[i][0]] = false;
|
|
698
811
|
}
|
|
812
|
+
console.error("portsToUse", portsToUse);
|
|
699
813
|
testResources = JSON.stringify({
|
|
700
814
|
scheduled: true,
|
|
701
815
|
name: src,
|
|
702
816
|
ports: portsToUse,
|
|
703
|
-
fs:
|
|
817
|
+
fs: reportDest,
|
|
704
818
|
browserWSEndpoint: this.browser.wsEndpoint()
|
|
705
819
|
});
|
|
706
820
|
} else {
|
|
821
|
+
console.log("Not enough ports! Enqueuing test job...");
|
|
707
822
|
this.queue.push(src);
|
|
708
823
|
return;
|
|
709
824
|
}
|
|
@@ -713,62 +828,61 @@ ${addableFiles.map((x) => {
|
|
|
713
828
|
}
|
|
714
829
|
const builtfile = dest;
|
|
715
830
|
let haltReturns = false;
|
|
831
|
+
const ipcfile = "/tmp/tpipe_" + Math.random();
|
|
832
|
+
const child = spawn("node", [builtfile, testResources, ipcfile], {
|
|
833
|
+
stdio: ["pipe", "pipe", "pipe", "ipc"]
|
|
834
|
+
});
|
|
716
835
|
let buffer = new Buffer("");
|
|
717
836
|
const server = net.createServer((socket) => {
|
|
837
|
+
const queue = new Queue();
|
|
718
838
|
socket.on("data", (data) => {
|
|
719
839
|
buffer = Buffer.concat([buffer, data]);
|
|
720
|
-
let messages = [];
|
|
721
840
|
for (let b = 0; b < buffer.length + 1; b++) {
|
|
722
|
-
|
|
841
|
+
const c = buffer.slice(0, b);
|
|
723
842
|
let d;
|
|
724
843
|
try {
|
|
725
844
|
d = JSON.parse(c.toString());
|
|
726
|
-
|
|
845
|
+
queue.enqueue(d);
|
|
727
846
|
buffer = buffer.slice(b, buffer.length + 1);
|
|
728
847
|
b = 0;
|
|
729
848
|
} catch (e) {
|
|
730
849
|
}
|
|
731
850
|
}
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
851
|
+
while (queue.size() > 0) {
|
|
852
|
+
const message = queue.dequeue();
|
|
853
|
+
if (message) {
|
|
854
|
+
this.mapping().forEach(async ([command, func]) => {
|
|
855
|
+
if (message[0] === command) {
|
|
856
|
+
const x = message.slice(1, -1);
|
|
857
|
+
const r = await this[command](...x);
|
|
858
|
+
if (!haltReturns) {
|
|
859
|
+
child.send(
|
|
860
|
+
JSON.stringify({
|
|
861
|
+
payload: r,
|
|
862
|
+
key: message[message.length - 1]
|
|
863
|
+
})
|
|
864
|
+
);
|
|
865
|
+
}
|
|
744
866
|
}
|
|
745
|
-
}
|
|
746
|
-
}
|
|
747
|
-
}
|
|
867
|
+
});
|
|
868
|
+
}
|
|
869
|
+
}
|
|
748
870
|
});
|
|
749
871
|
});
|
|
750
|
-
const oStream =
|
|
751
|
-
const child = spawn(
|
|
752
|
-
"node",
|
|
753
|
-
[builtfile, testResources, "--trace-warnings"],
|
|
754
|
-
{
|
|
755
|
-
stdio: ["pipe", "pipe", "pipe", "ipc"]
|
|
756
|
-
// silent: true
|
|
757
|
-
}
|
|
758
|
-
);
|
|
759
|
-
const p = destFolder + "/pipe";
|
|
872
|
+
const oStream = fs3.createWriteStream(`${reportDest}/console_log.txt`);
|
|
760
873
|
const errFile = `${reportDest}/error.txt`;
|
|
761
|
-
if (
|
|
762
|
-
|
|
874
|
+
if (fs3.existsSync(errFile)) {
|
|
875
|
+
fs3.rmSync(errFile);
|
|
763
876
|
}
|
|
764
|
-
server.listen(
|
|
877
|
+
server.listen(ipcfile, () => {
|
|
765
878
|
child.stderr?.on("data", (data) => {
|
|
766
|
-
oStream.write(`stderr
|
|
879
|
+
oStream.write(`stderr > ${data}`);
|
|
767
880
|
});
|
|
768
881
|
child.stdout?.on("data", (data) => {
|
|
769
|
-
oStream.write(`stdout
|
|
882
|
+
oStream.write(`stdout > ${data}`);
|
|
770
883
|
});
|
|
771
884
|
child.on("close", (code) => {
|
|
885
|
+
console.log("close");
|
|
772
886
|
oStream.close();
|
|
773
887
|
server.close();
|
|
774
888
|
if (code === null) {
|
|
@@ -781,22 +895,24 @@ ${addableFiles.map((x) => {
|
|
|
781
895
|
this.bddTestIsNowDone(src, code);
|
|
782
896
|
statusMessagePretty(code, src);
|
|
783
897
|
}
|
|
784
|
-
if (fs2.existsSync(p)) {
|
|
785
|
-
fs2.rmSync(p);
|
|
786
|
-
}
|
|
787
898
|
haltReturns = true;
|
|
788
899
|
});
|
|
789
900
|
child.on("exit", (code) => {
|
|
901
|
+
console.log("exit");
|
|
790
902
|
haltReturns = true;
|
|
903
|
+
for (let i = 0; i <= portsToUse.length; i++) {
|
|
904
|
+
if (portsToUse[i]) {
|
|
905
|
+
this.ports[portsToUse[i]] = true;
|
|
906
|
+
}
|
|
907
|
+
}
|
|
908
|
+
console.log("exitthis.ports", this.ports);
|
|
791
909
|
});
|
|
792
910
|
child.on("error", (e) => {
|
|
911
|
+
console.log("error");
|
|
793
912
|
haltReturns = true;
|
|
794
|
-
if (fs2.existsSync(p)) {
|
|
795
|
-
fs2.rmSync(p);
|
|
796
|
-
}
|
|
797
913
|
console.log(
|
|
798
|
-
|
|
799
|
-
|
|
914
|
+
ansiC2.red(
|
|
915
|
+
ansiC2.inverse(
|
|
800
916
|
`${src} errored with: ${e.name}. Check ${errFile}for more info`
|
|
801
917
|
)
|
|
802
918
|
)
|
|
@@ -806,121 +922,241 @@ ${addableFiles.map((x) => {
|
|
|
806
922
|
statusMessagePretty(-1, src);
|
|
807
923
|
});
|
|
808
924
|
});
|
|
809
|
-
child.send({ path: p });
|
|
810
|
-
for (let i = 0; i <= portsToUse.length; i++) {
|
|
811
|
-
if (portsToUse[i]) {
|
|
812
|
-
this.ports[portsToUse[i]] = "true";
|
|
813
|
-
}
|
|
814
|
-
}
|
|
815
925
|
};
|
|
816
|
-
this.launchWebSideCar = async (
|
|
817
|
-
const
|
|
818
|
-
|
|
926
|
+
this.launchWebSideCar = async (testConfig) => {
|
|
927
|
+
const src = testConfig[0];
|
|
928
|
+
const dest = src.split(".").slice(0, -1).join(".");
|
|
929
|
+
const destFolder = dest.replace(".mjs", "");
|
|
930
|
+
console.log(ansiC2.green(ansiC2.inverse(`launchWebSideCar ${src}`)));
|
|
819
931
|
const fileStreams2 = [];
|
|
820
932
|
const doneFileStream2 = [];
|
|
933
|
+
const oStream = fs3.createWriteStream(`${destFolder}/console_log.txt`);
|
|
821
934
|
return new Promise((res, rej) => {
|
|
822
|
-
this.browser.newPage().then((page) => {
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
async (ssOpts, testName2) => {
|
|
826
|
-
const p = ssOpts.path;
|
|
827
|
-
const dir = path3.dirname(p);
|
|
828
|
-
fs2.mkdirSync(dir, {
|
|
829
|
-
recursive: true
|
|
830
|
-
});
|
|
831
|
-
files2[testName2].add(ssOpts.path);
|
|
832
|
-
const sPromise = page.screenshot({
|
|
833
|
-
...ssOpts,
|
|
834
|
-
path: p
|
|
835
|
-
});
|
|
836
|
-
if (!screenshots2[testName2]) {
|
|
837
|
-
screenshots2[testName2] = [];
|
|
838
|
-
}
|
|
839
|
-
screenshots2[testName2].push(sPromise);
|
|
840
|
-
await sPromise;
|
|
841
|
-
return sPromise;
|
|
842
|
-
}
|
|
843
|
-
);
|
|
844
|
-
page.exposeFunction(
|
|
845
|
-
"writeFileSync",
|
|
846
|
-
(fp, contents, testName2) => {
|
|
847
|
-
const dir = path3.dirname(fp);
|
|
848
|
-
fs2.mkdirSync(dir, {
|
|
849
|
-
recursive: true
|
|
850
|
-
});
|
|
851
|
-
const p = new Promise(async (res2, rej2) => {
|
|
852
|
-
fs2.writeFileSync(fp, contents);
|
|
853
|
-
res2(fp);
|
|
854
|
-
});
|
|
855
|
-
doneFileStream2.push(p);
|
|
856
|
-
if (!files2[testName2]) {
|
|
857
|
-
files2[testName2] = /* @__PURE__ */ new Set();
|
|
858
|
-
}
|
|
859
|
-
files2[testName2].add(fp);
|
|
860
|
-
return p;
|
|
861
|
-
}
|
|
862
|
-
);
|
|
863
|
-
page.exposeFunction("existsSync", (fp, contents) => {
|
|
864
|
-
return fs2.existsSync(fp);
|
|
935
|
+
this.browser.newPage().then(async (page) => {
|
|
936
|
+
this.mapping().forEach(async ([command, func]) => {
|
|
937
|
+
page.exposeFunction(command, func);
|
|
865
938
|
});
|
|
866
|
-
|
|
867
|
-
if (!
|
|
868
|
-
|
|
869
|
-
recursive: true
|
|
870
|
-
});
|
|
939
|
+
const close = () => {
|
|
940
|
+
if (!files2[src]) {
|
|
941
|
+
files2[src] = /* @__PURE__ */ new Set();
|
|
871
942
|
}
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
943
|
+
fs3.writeFileSync(
|
|
944
|
+
destFolder + "/manifest.json",
|
|
945
|
+
JSON.stringify(Array.from(files2[src]))
|
|
946
|
+
);
|
|
947
|
+
delete files2[src];
|
|
948
|
+
Promise.all(screenshots2[src] || []).then(() => {
|
|
949
|
+
delete screenshots2[src];
|
|
950
|
+
page.close();
|
|
951
|
+
oStream.close();
|
|
952
|
+
});
|
|
953
|
+
};
|
|
954
|
+
page.on("pageerror", (err) => {
|
|
955
|
+
console.debug(`Error from ${src}: [${err.name}] `);
|
|
956
|
+
oStream.write(err.name);
|
|
957
|
+
oStream.write("\n");
|
|
958
|
+
if (err.cause) {
|
|
959
|
+
console.debug(`Error from ${src} cause: [${err.cause}] `);
|
|
960
|
+
oStream.write(err.cause);
|
|
961
|
+
oStream.write("\n");
|
|
891
962
|
}
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
return fileStreams2[uid].write(contents);
|
|
963
|
+
if (err.stack) {
|
|
964
|
+
console.debug(`Error from stack ${src}: [${err.stack}] `);
|
|
965
|
+
oStream.write(err.stack);
|
|
966
|
+
oStream.write("\n");
|
|
897
967
|
}
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
968
|
+
console.debug(`Error from message ${src}: [${err.message}] `);
|
|
969
|
+
oStream.write(err.message);
|
|
970
|
+
oStream.write("\n");
|
|
971
|
+
this.bddTestIsNowDone(src, -1);
|
|
972
|
+
close();
|
|
973
|
+
});
|
|
974
|
+
page.on("console", (log) => {
|
|
975
|
+
oStream.write(log.text());
|
|
976
|
+
oStream.write(JSON.stringify(log.location()));
|
|
977
|
+
oStream.write(JSON.stringify(log.stackTrace()));
|
|
978
|
+
oStream.write("\n");
|
|
979
|
+
});
|
|
980
|
+
await page.goto(`file://${`${destFolder}.html`}`, {});
|
|
981
|
+
const webArgz = JSON.stringify({
|
|
982
|
+
name: dest,
|
|
983
|
+
ports: [].toString(),
|
|
984
|
+
fs: dest,
|
|
985
|
+
browserWSEndpoint: this.browser.wsEndpoint()
|
|
986
|
+
});
|
|
987
|
+
const d = `${dest}?cacheBust=${Date.now()}`;
|
|
988
|
+
const evaluation = `
|
|
989
|
+
import('${d}').then(async (x) => {
|
|
990
|
+
|
|
991
|
+
try {
|
|
992
|
+
return await (await x.default).receiveTestResourceConfig(${webArgz})
|
|
993
|
+
} catch (e) {
|
|
994
|
+
console.log("fail", e.toString())
|
|
995
|
+
}
|
|
996
|
+
})`;
|
|
997
|
+
await page.evaluate(evaluation).then(async ({ fails, failed, features }) => {
|
|
998
|
+
statusMessagePretty(fails, src);
|
|
999
|
+
this.bddTestIsNowDone(src, fails);
|
|
1000
|
+
}).catch((e) => {
|
|
1001
|
+
console.log(
|
|
1002
|
+
ansiC2.red(
|
|
1003
|
+
ansiC2.inverse(`launchWebSidecar - ${src} errored with: ${e}`)
|
|
1004
|
+
)
|
|
1005
|
+
);
|
|
1006
|
+
}).finally(() => {
|
|
1007
|
+
this.bddTestIsNowDone(src, -1);
|
|
1008
|
+
close();
|
|
901
1009
|
});
|
|
902
1010
|
return page;
|
|
903
1011
|
}).then(async (page) => {
|
|
904
1012
|
await page.goto(`file://${`${dest}.html`}`, {});
|
|
905
|
-
res(page);
|
|
1013
|
+
res([Math.random(), page]);
|
|
906
1014
|
});
|
|
907
1015
|
});
|
|
908
1016
|
};
|
|
909
|
-
this.launchNodeSideCar = async (
|
|
1017
|
+
this.launchNodeSideCar = async (sidecar) => {
|
|
1018
|
+
const src = sidecar[0];
|
|
1019
|
+
const dest = process.cwd() + `/testeranto/bundles/node/${this.name}/${sidecar[0]}`;
|
|
910
1020
|
const d = dest + ".mjs";
|
|
911
|
-
console.log(
|
|
1021
|
+
console.log(ansiC2.green(ansiC2.inverse(`launchNodeSideCar ${sidecar[0]}`)));
|
|
1022
|
+
const destFolder = dest.replace(".ts", "");
|
|
1023
|
+
const reportDest = `testeranto/reports/${this.name}/${src.split(".").slice(0, -1).join(".")}/node`;
|
|
1024
|
+
const argz = {
|
|
1025
|
+
name: sidecar[0],
|
|
1026
|
+
ports: [],
|
|
1027
|
+
fs: destFolder,
|
|
1028
|
+
browserWSEndpoint: this.browser.wsEndpoint()
|
|
1029
|
+
};
|
|
1030
|
+
const testReq = sidecar[2];
|
|
1031
|
+
const portsToUse = [];
|
|
1032
|
+
if (testReq.ports === 0) {
|
|
1033
|
+
} else if (testReq.ports > 0) {
|
|
1034
|
+
const openPorts = Object.entries(this.ports).filter(
|
|
1035
|
+
([portnumber, portopen]) => portopen
|
|
1036
|
+
);
|
|
1037
|
+
if (openPorts.length >= testReq.ports) {
|
|
1038
|
+
for (let i = 0; i < testReq.ports; i++) {
|
|
1039
|
+
portsToUse.push(openPorts[i][0]);
|
|
1040
|
+
this.ports[openPorts[i][0]] = false;
|
|
1041
|
+
}
|
|
1042
|
+
console.log("nodeSideCar portsToUse", portsToUse);
|
|
1043
|
+
argz.ports = portsToUse;
|
|
1044
|
+
const builtfile = destFolder + ".mjs";
|
|
1045
|
+
let haltReturns = false;
|
|
1046
|
+
let buffer = new Buffer("");
|
|
1047
|
+
const server = net.createServer((socket) => {
|
|
1048
|
+
socket.on("data", (data) => {
|
|
1049
|
+
buffer = Buffer.concat([buffer, data]);
|
|
1050
|
+
const messages = [];
|
|
1051
|
+
for (let b = 0; b < buffer.length + 1; b++) {
|
|
1052
|
+
const c = buffer.slice(0, b);
|
|
1053
|
+
let d2;
|
|
1054
|
+
try {
|
|
1055
|
+
d2 = JSON.parse(c.toString());
|
|
1056
|
+
messages.push(d2);
|
|
1057
|
+
buffer = buffer.slice(b, buffer.length + 1);
|
|
1058
|
+
b = 0;
|
|
1059
|
+
} catch (e) {
|
|
1060
|
+
}
|
|
1061
|
+
}
|
|
1062
|
+
messages.forEach(async (payload) => {
|
|
1063
|
+
this.mapping().forEach(async ([command, func]) => {
|
|
1064
|
+
if (payload[0] === command) {
|
|
1065
|
+
const x = payload.slice(1, -1);
|
|
1066
|
+
const r2 = await this[command](...x);
|
|
1067
|
+
if (!haltReturns) {
|
|
1068
|
+
child.send(
|
|
1069
|
+
JSON.stringify({
|
|
1070
|
+
payload: r2,
|
|
1071
|
+
key: payload[payload.length - 1]
|
|
1072
|
+
})
|
|
1073
|
+
);
|
|
1074
|
+
}
|
|
1075
|
+
}
|
|
1076
|
+
});
|
|
1077
|
+
});
|
|
1078
|
+
});
|
|
1079
|
+
});
|
|
1080
|
+
const oStream = fs3.createWriteStream(`${reportDest}/console_log.txt`);
|
|
1081
|
+
const child = spawn("node", [builtfile, JSON.stringify(argz)], {
|
|
1082
|
+
stdio: ["pipe", "pipe", "pipe", "ipc"]
|
|
1083
|
+
// silent: true
|
|
1084
|
+
});
|
|
1085
|
+
const p = "/tmp/tpipe" + Math.random();
|
|
1086
|
+
const errFile = `${reportDest}/error.txt`;
|
|
1087
|
+
server.listen(p, () => {
|
|
1088
|
+
child.stderr?.on("data", (data) => {
|
|
1089
|
+
oStream.write(`stderr > ${data}`);
|
|
1090
|
+
});
|
|
1091
|
+
child.stdout?.on("data", (data) => {
|
|
1092
|
+
oStream.write(`stdout > ${data}`);
|
|
1093
|
+
});
|
|
1094
|
+
child.on("close", (code) => {
|
|
1095
|
+
oStream.close();
|
|
1096
|
+
server.close();
|
|
1097
|
+
haltReturns = true;
|
|
1098
|
+
});
|
|
1099
|
+
child.on("exit", (code) => {
|
|
1100
|
+
haltReturns = true;
|
|
1101
|
+
for (let i = 0; i <= portsToUse.length; i++) {
|
|
1102
|
+
if (portsToUse[i]) {
|
|
1103
|
+
this.ports[portsToUse[i]] = true;
|
|
1104
|
+
}
|
|
1105
|
+
}
|
|
1106
|
+
});
|
|
1107
|
+
child.on("error", (e) => {
|
|
1108
|
+
if (fs3.existsSync(p)) {
|
|
1109
|
+
fs3.rmSync(p);
|
|
1110
|
+
}
|
|
1111
|
+
haltReturns = true;
|
|
1112
|
+
console.log(
|
|
1113
|
+
ansiC2.red(
|
|
1114
|
+
ansiC2.inverse(
|
|
1115
|
+
`launchNodeSideCar - ${src} errored with: ${e.name}. Check ${errFile}for more info`
|
|
1116
|
+
)
|
|
1117
|
+
)
|
|
1118
|
+
);
|
|
1119
|
+
this.writeFileSync(`${reportDest}/error.txt`, e.toString(), src);
|
|
1120
|
+
});
|
|
1121
|
+
});
|
|
1122
|
+
child.send({ path: p });
|
|
1123
|
+
const r = Math.random();
|
|
1124
|
+
this.nodeSidecars[r] = child;
|
|
1125
|
+
return [r, argz];
|
|
1126
|
+
} else {
|
|
1127
|
+
console.log("Not enough open ports!", openPorts, testReq.ports);
|
|
1128
|
+
this.queue.push(sidecar[0]);
|
|
1129
|
+
return [Math.random(), argz];
|
|
1130
|
+
}
|
|
1131
|
+
} else {
|
|
1132
|
+
console.error("negative port makes no sense", sidecar[0]);
|
|
1133
|
+
process.exit(-1);
|
|
1134
|
+
}
|
|
1135
|
+
};
|
|
1136
|
+
this.stopPureSideCar = async (uid) => {
|
|
1137
|
+
console.log(ansiC2.green(ansiC2.inverse(`stopPureSideCar ${uid}`)));
|
|
1138
|
+
await this.sidecars[uid].shutdown();
|
|
1139
|
+
return;
|
|
1140
|
+
};
|
|
1141
|
+
this.launchPureSideCar = async (sidecar) => {
|
|
1142
|
+
console.log(ansiC2.green(ansiC2.inverse(`launchPureSideCar ${sidecar[0]}`)));
|
|
1143
|
+
const r = Math.random();
|
|
1144
|
+
const dest = process.cwd() + `/testeranto/bundles/pure/${this.name}/${sidecar[0]}`;
|
|
1145
|
+
const builtfile = dest.split(".").slice(0, -1).concat("mjs").join(".");
|
|
912
1146
|
const destFolder = dest.replace(".mjs", "");
|
|
913
|
-
let argz
|
|
914
|
-
const
|
|
915
|
-
|
|
1147
|
+
let argz;
|
|
1148
|
+
const z = sidecar[2];
|
|
1149
|
+
const testConfigResource = sidecar[2];
|
|
1150
|
+
const src = sidecar[0];
|
|
1151
|
+
const portsToUse = [];
|
|
916
1152
|
if (testConfigResource.ports === 0) {
|
|
917
|
-
argz =
|
|
918
|
-
scheduled: true,
|
|
1153
|
+
argz = {
|
|
1154
|
+
// scheduled: true,
|
|
919
1155
|
name: src,
|
|
920
1156
|
ports: portsToUse,
|
|
921
1157
|
fs: destFolder,
|
|
922
1158
|
browserWSEndpoint: this.browser.wsEndpoint()
|
|
923
|
-
}
|
|
1159
|
+
};
|
|
924
1160
|
} else if (testConfigResource.ports > 0) {
|
|
925
1161
|
const openPorts = Object.entries(this.ports).filter(
|
|
926
1162
|
([portnumber, portopen]) => portopen
|
|
@@ -930,14 +1166,14 @@ ${addableFiles.map((x) => {
|
|
|
930
1166
|
portsToUse.push(openPorts[i][0]);
|
|
931
1167
|
this.ports[openPorts[i][0]] = false;
|
|
932
1168
|
}
|
|
933
|
-
argz =
|
|
934
|
-
scheduled: true,
|
|
1169
|
+
argz = {
|
|
1170
|
+
// scheduled: true,
|
|
935
1171
|
name: src,
|
|
936
1172
|
// ports: [3333],
|
|
937
1173
|
ports: portsToUse,
|
|
938
1174
|
fs: ".",
|
|
939
1175
|
browserWSEndpoint: this.browser.wsEndpoint()
|
|
940
|
-
}
|
|
1176
|
+
};
|
|
941
1177
|
} else {
|
|
942
1178
|
this.queue.push(src);
|
|
943
1179
|
return;
|
|
@@ -946,29 +1182,22 @@ ${addableFiles.map((x) => {
|
|
|
946
1182
|
console.error("negative port makes no sense", src);
|
|
947
1183
|
process.exit(-1);
|
|
948
1184
|
}
|
|
949
|
-
const builtfile = dest + ".mjs";
|
|
950
1185
|
await import(`${builtfile}?cacheBust=${Date.now()}`).then((module) => {
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
s.receiveTestResourceConfig(argz);
|
|
954
|
-
});
|
|
1186
|
+
this.pureSidecars[r] = module.default;
|
|
1187
|
+
this.pureSidecars[r].start(argz);
|
|
955
1188
|
});
|
|
956
|
-
|
|
957
|
-
if (portsToUse[i]) {
|
|
958
|
-
this.ports[portsToUse[i]] = "true";
|
|
959
|
-
}
|
|
960
|
-
}
|
|
1189
|
+
return [r, argz];
|
|
961
1190
|
};
|
|
962
1191
|
this.launchWeb = async (src, dest) => {
|
|
963
|
-
console.log(
|
|
1192
|
+
console.log(ansiC2.green(ansiC2.inverse(`! web ${src}`)));
|
|
964
1193
|
this.bddTestIsRunning(src);
|
|
965
1194
|
const reportDest = `testeranto/reports/${this.name}/${src.split(".").slice(0, -1).join(".")}/web`;
|
|
966
|
-
if (!
|
|
967
|
-
|
|
1195
|
+
if (!fs3.existsSync(reportDest)) {
|
|
1196
|
+
fs3.mkdirSync(reportDest, { recursive: true });
|
|
968
1197
|
}
|
|
969
1198
|
const destFolder = dest.replace(".mjs", "");
|
|
970
1199
|
const webArgz = JSON.stringify({
|
|
971
|
-
name:
|
|
1200
|
+
name: src,
|
|
972
1201
|
ports: [].toString(),
|
|
973
1202
|
fs: reportDest,
|
|
974
1203
|
browserWSEndpoint: this.browser.wsEndpoint()
|
|
@@ -984,10 +1213,20 @@ ${addableFiles.map((x) => {
|
|
|
984
1213
|
console.log("fail", e)
|
|
985
1214
|
}
|
|
986
1215
|
})`;
|
|
987
|
-
const oStream =
|
|
1216
|
+
const oStream = fs3.createWriteStream(`${reportDest}/console_log.txt`);
|
|
988
1217
|
this.browser.newPage().then((page) => {
|
|
989
1218
|
this.mapping().forEach(async ([command, func]) => {
|
|
990
|
-
|
|
1219
|
+
if (command === "page") {
|
|
1220
|
+
page.exposeFunction(command, (x) => {
|
|
1221
|
+
if (x) {
|
|
1222
|
+
return func(x);
|
|
1223
|
+
} else {
|
|
1224
|
+
return func(page.mainFrame()._id);
|
|
1225
|
+
}
|
|
1226
|
+
});
|
|
1227
|
+
} else {
|
|
1228
|
+
return page.exposeFunction(command, func);
|
|
1229
|
+
}
|
|
991
1230
|
});
|
|
992
1231
|
return page;
|
|
993
1232
|
}).then(async (page) => {
|
|
@@ -995,7 +1234,7 @@ ${addableFiles.map((x) => {
|
|
|
995
1234
|
if (!files2[src]) {
|
|
996
1235
|
files2[src] = /* @__PURE__ */ new Set();
|
|
997
1236
|
}
|
|
998
|
-
|
|
1237
|
+
fs3.writeFileSync(
|
|
999
1238
|
destFolder + "/manifest.json",
|
|
1000
1239
|
JSON.stringify(Array.from(files2[src]))
|
|
1001
1240
|
);
|
|
@@ -1028,17 +1267,21 @@ ${addableFiles.map((x) => {
|
|
|
1028
1267
|
});
|
|
1029
1268
|
page.on("console", (log) => {
|
|
1030
1269
|
oStream.write(log.text());
|
|
1270
|
+
oStream.write("\n");
|
|
1031
1271
|
oStream.write(JSON.stringify(log.location()));
|
|
1272
|
+
oStream.write("\n");
|
|
1032
1273
|
oStream.write(JSON.stringify(log.stackTrace()));
|
|
1033
1274
|
oStream.write("\n");
|
|
1034
1275
|
});
|
|
1035
1276
|
await page.goto(`file://${`${destFolder}.html`}`, {});
|
|
1277
|
+
this.webSidecars[Math.random()] = page.mainFrame()._id;
|
|
1036
1278
|
await page.evaluate(evaluation).then(async ({ fails, failed, features }) => {
|
|
1037
|
-
this.receiveFeatures(features, destFolder, src, "web");
|
|
1038
1279
|
statusMessagePretty(fails, src);
|
|
1039
1280
|
this.bddTestIsNowDone(src, fails);
|
|
1040
1281
|
}).catch((e) => {
|
|
1041
|
-
console.log(
|
|
1282
|
+
console.log(
|
|
1283
|
+
ansiC2.red(ansiC2.inverse(`launchweb - ${src} errored with: ${e}`))
|
|
1284
|
+
);
|
|
1042
1285
|
}).finally(() => {
|
|
1043
1286
|
this.bddTestIsNowDone(src, -1);
|
|
1044
1287
|
close();
|
|
@@ -1046,74 +1289,106 @@ ${addableFiles.map((x) => {
|
|
|
1046
1289
|
return page;
|
|
1047
1290
|
});
|
|
1048
1291
|
};
|
|
1049
|
-
this.
|
|
1050
|
-
const featureDestination =
|
|
1292
|
+
this.receiveFeaturesV2 = (reportDest, srcTest, platform) => {
|
|
1293
|
+
const featureDestination = path4.resolve(
|
|
1051
1294
|
process.cwd(),
|
|
1052
1295
|
"reports",
|
|
1053
1296
|
"features",
|
|
1054
1297
|
"strings",
|
|
1055
1298
|
srcTest.split(".").slice(0, -1).join(".") + ".features.txt"
|
|
1056
1299
|
);
|
|
1057
|
-
|
|
1300
|
+
const testReport = JSON.parse(
|
|
1301
|
+
fs3.readFileSync(`${reportDest}/tests.json`).toString()
|
|
1302
|
+
);
|
|
1303
|
+
testReport.features.reduce(async (mm, featureStringKey) => {
|
|
1058
1304
|
const accum = await mm;
|
|
1059
1305
|
const isUrl = isValidUrl(featureStringKey);
|
|
1060
1306
|
if (isUrl) {
|
|
1061
1307
|
const u = new URL(featureStringKey);
|
|
1062
1308
|
if (u.protocol === "file:") {
|
|
1063
|
-
const newPath = `${process.cwd()}/testeranto/features/internal/${
|
|
1309
|
+
const newPath = `${process.cwd()}/testeranto/features/internal/${path4.relative(
|
|
1064
1310
|
process.cwd(),
|
|
1065
1311
|
u.pathname
|
|
1066
1312
|
)}`;
|
|
1067
|
-
|
|
1068
|
-
try {
|
|
1069
|
-
await fs2.unlinkSync(newPath);
|
|
1070
|
-
} catch (error) {
|
|
1071
|
-
if (error.code !== "ENOENT") {
|
|
1072
|
-
}
|
|
1073
|
-
}
|
|
1074
|
-
accum.files.push(newPath);
|
|
1313
|
+
accum.files.push(u.pathname);
|
|
1075
1314
|
} else if (u.protocol === "http:" || u.protocol === "https:") {
|
|
1076
|
-
const newPath = `${process.cwd()}/testeranto/features/external
|
|
1315
|
+
const newPath = `${process.cwd()}/testeranto/features/external/${u.hostname}${u.pathname}`;
|
|
1077
1316
|
const body = await this.configs.featureIngestor(featureStringKey);
|
|
1078
1317
|
writeFileAndCreateDir(newPath, body);
|
|
1079
1318
|
accum.files.push(newPath);
|
|
1080
1319
|
}
|
|
1081
1320
|
} else {
|
|
1082
|
-
await
|
|
1321
|
+
await fs3.promises.mkdir(path4.dirname(featureDestination), {
|
|
1083
1322
|
recursive: true
|
|
1084
1323
|
});
|
|
1085
1324
|
accum.strings.push(featureStringKey);
|
|
1086
1325
|
}
|
|
1087
1326
|
return accum;
|
|
1088
1327
|
}, Promise.resolve({ files: [], strings: [] })).then(({ files: files3, strings }) => {
|
|
1089
|
-
|
|
1328
|
+
fs3.writeFileSync(
|
|
1090
1329
|
`testeranto/reports/${this.name}/${srcTest.split(".").slice(0, -1).join(".")}/${platform}/featurePrompt.txt`,
|
|
1091
1330
|
files3.map((f) => {
|
|
1092
1331
|
return `/read ${f}`;
|
|
1093
1332
|
}).join("\n")
|
|
1094
1333
|
);
|
|
1095
1334
|
});
|
|
1335
|
+
testReport.givens.forEach((g) => {
|
|
1336
|
+
if (g.failed === true) {
|
|
1337
|
+
this.summary[srcTest].failingFeatures[g.key] = g.features;
|
|
1338
|
+
}
|
|
1339
|
+
});
|
|
1340
|
+
this.writeBigBoard();
|
|
1096
1341
|
};
|
|
1097
|
-
this.writeBigBoard = () => {
|
|
1098
|
-
fs2.writeFileSync(
|
|
1099
|
-
`./testeranto/reports/${this.name}/summary.json`,
|
|
1100
|
-
JSON.stringify(this.bigBoard, null, 2)
|
|
1101
|
-
);
|
|
1102
|
-
};
|
|
1103
|
-
this.name = name;
|
|
1104
|
-
this.mode = mode2;
|
|
1105
1342
|
this.ports = {};
|
|
1106
|
-
this.
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
staticErrors: "?",
|
|
1111
|
-
prompt: "?"
|
|
1112
|
-
};
|
|
1113
|
-
});
|
|
1343
|
+
this.queue = [];
|
|
1344
|
+
this.nodeSidecars = {};
|
|
1345
|
+
this.webSidecars = {};
|
|
1346
|
+
this.pureSidecars = {};
|
|
1114
1347
|
this.configs.ports.forEach((element) => {
|
|
1115
|
-
this.ports[element] =
|
|
1348
|
+
this.ports[element] = true;
|
|
1349
|
+
});
|
|
1350
|
+
}
|
|
1351
|
+
async stopSideCar(uid) {
|
|
1352
|
+
console.log(ansiC2.green(ansiC2.inverse(`stopSideCar ${uid}`)));
|
|
1353
|
+
Object.entries(this.pureSidecars).forEach(async ([k, v]) => {
|
|
1354
|
+
if (Number(k) === uid) {
|
|
1355
|
+
await this.pureSidecars[Number(k)].stop();
|
|
1356
|
+
delete this.pureSidecars[Number(k)];
|
|
1357
|
+
}
|
|
1358
|
+
});
|
|
1359
|
+
Object.entries(this.nodeSidecars).forEach(async ([k, v]) => {
|
|
1360
|
+
if (Number(k) === uid) {
|
|
1361
|
+
await this.nodeSidecars[Number(k)].send("stop");
|
|
1362
|
+
delete this.nodeSidecars[Number(k)];
|
|
1363
|
+
}
|
|
1364
|
+
});
|
|
1365
|
+
Object.entries(this.webSidecars).forEach(async ([k, v]) => {
|
|
1366
|
+
if (Number(k) === uid) {
|
|
1367
|
+
(await this.browser.pages()).forEach(async (p) => {
|
|
1368
|
+
if (p.mainFrame()._id === k) {
|
|
1369
|
+
await this.webSidecars[Number(k)].close();
|
|
1370
|
+
delete this.webSidecars[Number(k)];
|
|
1371
|
+
}
|
|
1372
|
+
});
|
|
1373
|
+
}
|
|
1374
|
+
});
|
|
1375
|
+
return;
|
|
1376
|
+
}
|
|
1377
|
+
async launchSideCar(n, name) {
|
|
1378
|
+
const c = this.configs.tests.find(([v, r2]) => {
|
|
1379
|
+
return v === name;
|
|
1116
1380
|
});
|
|
1381
|
+
const s = c[3][n];
|
|
1382
|
+
const r = s[1];
|
|
1383
|
+
if (r === "node") {
|
|
1384
|
+
return this.launchNodeSideCar(s);
|
|
1385
|
+
} else if (r === "web") {
|
|
1386
|
+
return this.launchWebSideCar(s);
|
|
1387
|
+
} else if (r === "pure") {
|
|
1388
|
+
return this.launchPureSideCar(s);
|
|
1389
|
+
} else {
|
|
1390
|
+
throw `unknown runtime ${r}`;
|
|
1391
|
+
}
|
|
1117
1392
|
}
|
|
1118
1393
|
mapping() {
|
|
1119
1394
|
return [
|
|
@@ -1122,20 +1397,23 @@ ${addableFiles.map((x) => {
|
|
|
1122
1397
|
["closePage", this.closePage],
|
|
1123
1398
|
["createWriteStream", this.createWriteStream],
|
|
1124
1399
|
["customclose", this.customclose],
|
|
1125
|
-
["customScreenShot", this.customScreenShot],
|
|
1400
|
+
["customScreenShot", this.customScreenShot.bind(this)],
|
|
1126
1401
|
["end", this.end],
|
|
1127
1402
|
["existsSync", this.existsSync],
|
|
1128
1403
|
["focusOn", this.focusOn],
|
|
1129
1404
|
["getAttribute", this.getAttribute],
|
|
1130
|
-
["
|
|
1131
|
-
["
|
|
1405
|
+
["getInnerHtml", this.getInnerHtml],
|
|
1406
|
+
// ["setValue", this.setValue],
|
|
1407
|
+
["goto", this.goto.bind(this)],
|
|
1132
1408
|
["isDisabled", this.isDisabled],
|
|
1409
|
+
["launchSideCar", this.launchSideCar.bind(this)],
|
|
1133
1410
|
["mkdirSync", this.mkdirSync],
|
|
1134
1411
|
["newPage", this.newPage],
|
|
1135
1412
|
["page", this.page],
|
|
1136
1413
|
["pages", this.pages],
|
|
1137
1414
|
["screencast", this.screencast],
|
|
1138
1415
|
["screencastStop", this.screencastStop],
|
|
1416
|
+
["stopSideCar", this.stopSideCar.bind(this)],
|
|
1139
1417
|
["typeInto", this.typeInto],
|
|
1140
1418
|
["waitForSelector", this.waitForSelector],
|
|
1141
1419
|
["write", this.write],
|
|
@@ -1146,51 +1424,57 @@ ${addableFiles.map((x) => {
|
|
|
1146
1424
|
this.mapping().forEach(async ([command, func]) => {
|
|
1147
1425
|
globalThis[command] = func;
|
|
1148
1426
|
});
|
|
1149
|
-
if (!
|
|
1150
|
-
|
|
1427
|
+
if (!fs3.existsSync(`testeranto/reports/${this.name}`)) {
|
|
1428
|
+
fs3.mkdirSync(`testeranto/reports/${this.name}`);
|
|
1151
1429
|
}
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
})
|
|
1193
|
-
|
|
1430
|
+
const executablePath = "/opt/homebrew/bin/chromium";
|
|
1431
|
+
try {
|
|
1432
|
+
this.browser = await puppeteer.launch({
|
|
1433
|
+
slowMo: 1,
|
|
1434
|
+
waitForInitialPage: false,
|
|
1435
|
+
executablePath,
|
|
1436
|
+
headless: false,
|
|
1437
|
+
dumpio: false,
|
|
1438
|
+
devtools: false,
|
|
1439
|
+
args: [
|
|
1440
|
+
"--disable-features=site-per-process",
|
|
1441
|
+
"--allow-file-access-from-files",
|
|
1442
|
+
"--allow-insecure-localhost",
|
|
1443
|
+
"--allow-running-insecure-content",
|
|
1444
|
+
"--auto-open-devtools-for-tabs",
|
|
1445
|
+
"--disable-dev-shm-usage",
|
|
1446
|
+
"--disable-extensions",
|
|
1447
|
+
"--disable-gpu",
|
|
1448
|
+
"--disable-setuid-sandbox",
|
|
1449
|
+
"--disable-site-isolation-trials",
|
|
1450
|
+
"--disable-web-security",
|
|
1451
|
+
"--no-first-run",
|
|
1452
|
+
"--no-sandbox",
|
|
1453
|
+
"--no-startup-window",
|
|
1454
|
+
"--reduce-security-for-testing",
|
|
1455
|
+
"--remote-allow-origins=*",
|
|
1456
|
+
"--unsafely-treat-insecure-origin-as-secure=*",
|
|
1457
|
+
`--remote-debugging-port=3234`
|
|
1458
|
+
// "--disable-features=IsolateOrigins,site-per-process",
|
|
1459
|
+
// "--disable-features=IsolateOrigins",
|
|
1460
|
+
// "--disk-cache-dir=/dev/null",
|
|
1461
|
+
// "--disk-cache-size=1",
|
|
1462
|
+
// "--no-zygote",
|
|
1463
|
+
// "--remote-allow-origins=ws://localhost:3234",
|
|
1464
|
+
// "--single-process",
|
|
1465
|
+
// "--start-maximized",
|
|
1466
|
+
// "--unsafely-treat-insecure-origin-as-secure",
|
|
1467
|
+
// "--unsafely-treat-insecure-origin-as-secure=ws://192.168.0.101:3234",
|
|
1468
|
+
]
|
|
1469
|
+
});
|
|
1470
|
+
} catch (e) {
|
|
1471
|
+
console.error(e);
|
|
1472
|
+
console.error(
|
|
1473
|
+
"could not start chrome via puppeter. Check this path: ",
|
|
1474
|
+
executablePath
|
|
1475
|
+
);
|
|
1476
|
+
}
|
|
1477
|
+
const { nodeEntryPoints, webEntryPoints, pureEntryPoints } = this.getRunnables(this.configs.tests, this.name);
|
|
1194
1478
|
[
|
|
1195
1479
|
[
|
|
1196
1480
|
nodeEntryPoints,
|
|
@@ -1209,7 +1493,7 @@ ${addableFiles.map((x) => {
|
|
|
1209
1493
|
}
|
|
1210
1494
|
],
|
|
1211
1495
|
[
|
|
1212
|
-
|
|
1496
|
+
pureEntryPoints,
|
|
1213
1497
|
this.launchPure,
|
|
1214
1498
|
"pure",
|
|
1215
1499
|
(w) => {
|
|
@@ -1229,7 +1513,7 @@ ${addableFiles.map((x) => {
|
|
|
1229
1513
|
if (fileHashes[k] !== hash) {
|
|
1230
1514
|
fileHashes[k] = hash;
|
|
1231
1515
|
console.log(
|
|
1232
|
-
|
|
1516
|
+
ansiC2.yellow(ansiC2.inverse(`< ${e} ${filename}`))
|
|
1233
1517
|
);
|
|
1234
1518
|
launcher(k, outputFile);
|
|
1235
1519
|
}
|
|
@@ -1243,7 +1527,7 @@ ${addableFiles.map((x) => {
|
|
|
1243
1527
|
watcher(
|
|
1244
1528
|
watch(metafile, async (e, filename) => {
|
|
1245
1529
|
console.log(
|
|
1246
|
-
|
|
1530
|
+
ansiC2.yellow(ansiC2.inverse(`< ${e} ${filename} (${runtime})`))
|
|
1247
1531
|
);
|
|
1248
1532
|
this.metafileOutputs(runtime);
|
|
1249
1533
|
})
|
|
@@ -1251,8 +1535,10 @@ ${addableFiles.map((x) => {
|
|
|
1251
1535
|
}
|
|
1252
1536
|
);
|
|
1253
1537
|
}
|
|
1538
|
+
async launchExternalTest(externalTestName, externalTest) {
|
|
1539
|
+
}
|
|
1254
1540
|
async stop() {
|
|
1255
|
-
console.log(
|
|
1541
|
+
console.log(ansiC2.inverse("Testeranto-Run is shutting down gracefully..."));
|
|
1256
1542
|
this.mode = "once";
|
|
1257
1543
|
this.nodeMetafileWatcher.close();
|
|
1258
1544
|
this.webMetafileWatcher.close();
|
|
@@ -1261,7 +1547,7 @@ ${addableFiles.map((x) => {
|
|
|
1261
1547
|
}
|
|
1262
1548
|
async metafileOutputs(platform) {
|
|
1263
1549
|
const metafile = JSON.parse(
|
|
1264
|
-
|
|
1550
|
+
fs3.readFileSync(
|
|
1265
1551
|
`./testeranto/bundles/${platform}/${this.name}/metafile.json`
|
|
1266
1552
|
).toString()
|
|
1267
1553
|
).metafile;
|
|
@@ -1269,16 +1555,22 @@ ${addableFiles.map((x) => {
|
|
|
1269
1555
|
return;
|
|
1270
1556
|
const outputs = metafile.outputs;
|
|
1271
1557
|
Object.keys(outputs).forEach(async (k) => {
|
|
1558
|
+
const pattern = `testeranto/bundles/${platform}/${this.name}/${this.configs.src}`;
|
|
1559
|
+
if (!k.startsWith(pattern)) {
|
|
1560
|
+
return false;
|
|
1561
|
+
}
|
|
1272
1562
|
const addableFiles = Object.keys(outputs[k].inputs).filter((i) => {
|
|
1273
|
-
if (!
|
|
1563
|
+
if (!fs3.existsSync(i))
|
|
1274
1564
|
return false;
|
|
1275
1565
|
if (i.startsWith("node_modules"))
|
|
1276
1566
|
return false;
|
|
1567
|
+
if (i.startsWith("./node_modules"))
|
|
1568
|
+
return false;
|
|
1277
1569
|
return true;
|
|
1278
1570
|
});
|
|
1279
1571
|
const f = `${k.split(".").slice(0, -1).join(".")}/`;
|
|
1280
|
-
if (!
|
|
1281
|
-
|
|
1572
|
+
if (!fs3.existsSync(f)) {
|
|
1573
|
+
fs3.mkdirSync(f);
|
|
1282
1574
|
}
|
|
1283
1575
|
const entrypoint = outputs[k].entryPoint;
|
|
1284
1576
|
if (entrypoint) {
|
|
@@ -1303,10 +1595,10 @@ ${addableFiles.map((x) => {
|
|
|
1303
1595
|
readline.emitKeypressEvents(process.stdin);
|
|
1304
1596
|
if (process.stdin.isTTY)
|
|
1305
1597
|
process.stdin.setRawMode(true);
|
|
1306
|
-
console.log(
|
|
1598
|
+
console.log(ansiC3.inverse("Press 'x' to shutdown forcefully."));
|
|
1307
1599
|
process.stdin.on("keypress", (str, key) => {
|
|
1308
1600
|
if (key.name === "x") {
|
|
1309
|
-
console.log(
|
|
1601
|
+
console.log(ansiC3.inverse("Shutting down forcefully..."));
|
|
1310
1602
|
process.exit(-1);
|
|
1311
1603
|
}
|
|
1312
1604
|
});
|