testeranto 0.129.0 → 0.135.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 +137798 -0
- package/.aider.input.history +370 -0
- package/.aider.tags.cache.v3/{ec/c0/161c249c35be853cc40cf11f9267.val → 62/f5/8af72140d93c58db2f6aa5bf3f1f.val} +0 -0
- package/.aider.tags.cache.v3/8e/ec/2d4659a1589a0187a757ab1cbefa.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/d8/b0/a8966fcd65890fd9f70d7afe8141.val +0 -0
- package/.aider.tags.cache.v3/dd/5b/0ade824b0841c7c11e9352c5d2ca.val +0 -0
- package/README.md +194 -182
- 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 +189 -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 +492 -428
- package/dist/common/src/PM/node.js +54 -22
- 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 +66 -12
- package/dist/common/src/defaultConfig.js +1 -0
- package/dist/common/src/esbuildConfigs/consoleDetectorPlugin.js +27 -0
- package/dist/common/src/esbuildConfigs/eslint-formatter-testeranto.js +16 -1
- package/dist/common/src/esbuildConfigs/node.js +2 -16
- package/dist/common/src/esbuildConfigs/pure.js +12 -12
- package/dist/common/src/esbuildConfigs/rebuildPlugin.js +22 -0
- package/dist/common/src/esbuildConfigs/web.js +12 -17
- package/dist/common/src/lib/Sidecar.js +6 -0
- package/dist/common/src/lib/abstractBase.js +13 -6
- package/dist/common/src/lib/basebuilder.js +1 -3
- package/dist/common/src/lib/classBuilder.js +6 -20
- 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 +182 -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 +493 -429
- package/dist/module/src/PM/node.js +54 -22
- 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 +66 -12
- package/dist/module/src/defaultConfig.js +1 -0
- package/dist/module/src/esbuildConfigs/consoleDetectorPlugin.js +24 -0
- package/dist/module/src/esbuildConfigs/eslint-formatter-testeranto.js +16 -1
- package/dist/module/src/esbuildConfigs/node.js +2 -16
- package/dist/module/src/esbuildConfigs/pure.js +12 -12
- package/dist/module/src/esbuildConfigs/rebuildPlugin.js +17 -0
- package/dist/module/src/esbuildConfigs/web.js +12 -17
- package/dist/module/src/lib/Sidecar.js +2 -0
- package/dist/module/src/lib/abstractBase.js +13 -6
- package/dist/module/src/lib/basebuilder.js +1 -3
- package/dist/module/src/lib/classBuilder.js +6 -20
- 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 +3287 -385
- package/dist/prebuild/ReportClient.js +0 -24638
- package/dist/prebuild/TestReport.js +26 -22
- package/dist/prebuild/build.mjs +192 -70
- package/dist/prebuild/esbuildConfigs/eslint-formatter-testeranto.mjs +14 -1
- package/dist/prebuild/init-docs.mjs +2 -5
- package/dist/prebuild/mothership/index.mjs +17 -0
- package/dist/prebuild/run.mjs +733 -433
- package/dist/types/src/CoreTypes.d.ts +51 -0
- package/dist/types/src/Node.d.ts +2 -2
- 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 +2 -0
- package/dist/types/src/PM/__tests__/pureSidecar.testeranto.d.ts +2 -0
- package/dist/types/src/PM/__tests__/webSidecar.testeranto.d.ts +2 -0
- package/dist/types/src/PM/base.d.ts +6 -5
- package/dist/types/src/PM/index.d.ts +6 -4
- 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/SP__Polygon.test.d.ts +1 -0
- package/dist/types/src/Types.d.ts +80 -58
- package/dist/types/src/Web.d.ts +1 -1
- package/dist/types/src/WebSidecar.d.ts +8 -0
- package/dist/types/src/esbuildConfigs/consoleDetectorPlugin.d.ts +2 -0
- package/dist/types/src/esbuildConfigs/rebuildPlugin.d.ts +6 -0
- package/dist/types/src/lib/Sidecar.d.ts +5 -0
- package/dist/types/src/lib/abstractBase.d.ts +6 -12
- package/dist/types/src/lib/classBuilder.d.ts +7 -1
- package/dist/types/src/lib/core.d.ts +8 -2
- 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 +2 -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/docs/index.md +277 -0
- package/package.json +23 -104
- package/src/CoreTypes.ts +171 -0
- package/src/Init.ts +6 -5
- package/src/Node.ts +32 -15
- package/src/NodeSidecar.ts +22 -0
- package/src/PM/PM_WithEslintAndTsc.ts +315 -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 +10 -4
- package/src/PM/main.ts +616 -589
- package/src/PM/node.ts +77 -33
- 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 +278 -157
- package/src/Web.ts +0 -3
- package/src/WebSidecar.ts +14 -0
- package/src/build.ts +104 -16
- package/src/defaultConfig.ts +1 -0
- package/src/esbuildConfigs/README.md +46 -0
- package/src/esbuildConfigs/consoleDetectorPlugin.ts +29 -0
- package/src/esbuildConfigs/eslint-formatter-testeranto.ts +17 -1
- package/src/esbuildConfigs/node.ts +2 -18
- package/src/esbuildConfigs/pure.ts +19 -14
- package/src/esbuildConfigs/rebuildPlugin.ts +23 -0
- package/src/esbuildConfigs/web.ts +15 -18
- package/src/lib/Sidecar.ts +6 -0
- package/src/lib/TEST_ADAPTER_RENAME.md +48 -0
- package/src/lib/abstractBase.ts +18 -10
- package/src/lib/basebuilder.ts +5 -4
- package/src/lib/classBuilder.ts +19 -21
- package/src/lib/core.ts +28 -19
- 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/common/src/{SubPackages/react-dom/jsx/index.js → CoreTypes.js} +0 -0
- /package/dist/module/src/{SubPackages/react-dom/jsx/index.js → CoreTypes.js} +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,93 +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(
|
|
342
|
-
ansiC.green(ansiC.inverse(`> ${test} completed successfully?!?`))
|
|
343
|
-
);
|
|
344
|
-
} else {
|
|
345
|
-
console.log(ansiC.red(ansiC.inverse(`> ${test} failed ${failures} times`)));
|
|
346
|
-
}
|
|
347
|
-
};
|
|
348
|
-
async function writeFileAndCreateDir(filePath, data) {
|
|
349
|
-
const dirPath = path3.dirname(filePath);
|
|
350
|
-
try {
|
|
351
|
-
await fs2.promises.mkdir(dirPath, { recursive: true });
|
|
352
|
-
await fs2.appendFileSync(filePath, data);
|
|
353
|
-
} catch (error) {
|
|
354
|
-
console.error(`Error writing file: ${error}`);
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
var filesHash = async (files3, algorithm = "md5") => {
|
|
358
|
-
return new Promise((resolve, reject) => {
|
|
359
|
-
resolve(
|
|
360
|
-
files3.reduce(async (mm, f) => {
|
|
361
|
-
return await mm + await fileHash(f);
|
|
362
|
-
}, Promise.resolve(""))
|
|
363
|
-
);
|
|
364
|
-
});
|
|
365
|
-
};
|
|
366
|
-
function isValidUrl(string) {
|
|
367
|
-
try {
|
|
368
|
-
new URL(string);
|
|
369
|
-
return true;
|
|
370
|
-
} catch (err) {
|
|
371
|
-
return false;
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
function pollForFile(path4, timeout = 2e3) {
|
|
375
|
-
const intervalObj = setInterval(function() {
|
|
376
|
-
const file = path4;
|
|
377
|
-
const fileExists = fs2.existsSync(file);
|
|
378
|
-
if (fileExists) {
|
|
379
|
-
clearInterval(intervalObj);
|
|
380
|
-
}
|
|
381
|
-
}, timeout);
|
|
382
|
-
}
|
|
383
|
-
var PM_Main = class extends PM_Base {
|
|
393
|
+
var PM_WithEslintAndTsc = class extends PM_Base {
|
|
384
394
|
constructor(configs, name, mode2) {
|
|
385
395
|
super(configs);
|
|
386
|
-
this.
|
|
387
|
-
this.getRunnables = (tests, testName2, payload = {
|
|
388
|
-
nodeEntryPoints: {},
|
|
389
|
-
webEntryPoints: {},
|
|
390
|
-
importEntryPoints: {}
|
|
391
|
-
}) => {
|
|
392
|
-
return getRunnables(tests, testName2, payload);
|
|
393
|
-
};
|
|
396
|
+
this.summary = {};
|
|
394
397
|
this.tscCheck = async ({
|
|
395
398
|
entrypoint,
|
|
396
399
|
addableFiles,
|
|
@@ -415,15 +418,15 @@ var PM_Main = class extends PM_Base {
|
|
|
415
418
|
// exclude: ["**/*.test.ts", "**/*.spec.ts"],
|
|
416
419
|
});
|
|
417
420
|
const tscPath = tscPather(entrypoint, platform, this.name);
|
|
418
|
-
|
|
421
|
+
const allDiagnostics = program.getSemanticDiagnostics();
|
|
419
422
|
const results = [];
|
|
420
423
|
allDiagnostics.forEach((diagnostic) => {
|
|
421
424
|
if (diagnostic.file) {
|
|
422
|
-
|
|
425
|
+
const { line, character } = ts.getLineAndCharacterOfPosition(
|
|
423
426
|
diagnostic.file,
|
|
424
427
|
diagnostic.start
|
|
425
428
|
);
|
|
426
|
-
|
|
429
|
+
const message = ts.flattenDiagnosticMessageText(
|
|
427
430
|
diagnostic.messageText,
|
|
428
431
|
"\n"
|
|
429
432
|
);
|
|
@@ -455,14 +458,14 @@ var PM_Main = class extends PM_Base {
|
|
|
455
458
|
this.lintIsNowDone(entrypoint, results.length);
|
|
456
459
|
};
|
|
457
460
|
this.makePrompt = async (entryPoint, addableFiles, platform) => {
|
|
458
|
-
this.
|
|
461
|
+
this.summary[entryPoint].prompt = "?";
|
|
459
462
|
const promptPath = promptPather(entryPoint, platform, this.name);
|
|
460
463
|
const testPaths = path3.join(
|
|
461
464
|
"testeranto",
|
|
462
465
|
"reports",
|
|
463
466
|
this.name,
|
|
464
|
-
platform,
|
|
465
467
|
entryPoint.split(".").slice(0, -1).join("."),
|
|
468
|
+
platform,
|
|
466
469
|
`tests.json`
|
|
467
470
|
);
|
|
468
471
|
const featuresPath = path3.join(
|
|
@@ -473,6 +476,38 @@ var PM_Main = class extends PM_Base {
|
|
|
473
476
|
entryPoint.split(".").slice(0, -1).join("."),
|
|
474
477
|
`featurePrompt.txt`
|
|
475
478
|
);
|
|
479
|
+
const logPath = path3.join(
|
|
480
|
+
"testeranto",
|
|
481
|
+
"reports",
|
|
482
|
+
this.name,
|
|
483
|
+
entryPoint.split(".").slice(0, -1).join("."),
|
|
484
|
+
platform,
|
|
485
|
+
`console_log.txt`
|
|
486
|
+
);
|
|
487
|
+
const lintPath = path3.join(
|
|
488
|
+
"testeranto",
|
|
489
|
+
"reports",
|
|
490
|
+
this.name,
|
|
491
|
+
entryPoint.split(".").slice(0, -1).join("."),
|
|
492
|
+
platform,
|
|
493
|
+
`lint_errors.json`
|
|
494
|
+
);
|
|
495
|
+
const typePath = path3.join(
|
|
496
|
+
"testeranto",
|
|
497
|
+
"reports",
|
|
498
|
+
this.name,
|
|
499
|
+
entryPoint.split(".").slice(0, -1).join("."),
|
|
500
|
+
platform,
|
|
501
|
+
`type_errors.txt`
|
|
502
|
+
);
|
|
503
|
+
const messagePath = path3.join(
|
|
504
|
+
"testeranto",
|
|
505
|
+
"reports",
|
|
506
|
+
this.name,
|
|
507
|
+
entryPoint.split(".").slice(0, -1).join("."),
|
|
508
|
+
platform,
|
|
509
|
+
`message`
|
|
510
|
+
);
|
|
476
511
|
fs2.writeFileSync(
|
|
477
512
|
promptPath,
|
|
478
513
|
`
|
|
@@ -480,51 +515,77 @@ ${addableFiles.map((x) => {
|
|
|
480
515
|
return `/add ${x}`;
|
|
481
516
|
}).join("\n")}
|
|
482
517
|
|
|
483
|
-
/read ${lintPather(entryPoint, platform, this.name)}
|
|
484
|
-
/read ${tscPather(entryPoint, platform, this.name)}
|
|
485
518
|
/read ${testPaths}
|
|
486
|
-
|
|
487
|
-
/
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
entryPoint,
|
|
495
|
-
platform,
|
|
496
|
-
this.name
|
|
497
|
-
)}"
|
|
498
|
-
`
|
|
519
|
+
/read ${logPath}
|
|
520
|
+
/read ${typePath}
|
|
521
|
+
/read ${lintPath}
|
|
522
|
+
`
|
|
523
|
+
);
|
|
524
|
+
fs2.writeFileSync(
|
|
525
|
+
messagePath,
|
|
526
|
+
`Fix the failing tests described in ${testPaths} and ${logPath}. DO NOT refactor beyond what is necessary. Always prefer minimal changes, focusing mostly on keeping the BDD tests passing`
|
|
499
527
|
);
|
|
500
|
-
this.
|
|
528
|
+
this.summary[entryPoint].prompt = `aider --model deepseek/deepseek-chat --load testeranto/${this.name}/reports/${platform}/${entryPoint.split(".").slice(0, -1).join(".")}/prompt.txt`;
|
|
529
|
+
this.checkForShutdown();
|
|
530
|
+
};
|
|
531
|
+
this.typeCheckIsRunning = (src) => {
|
|
532
|
+
this.summary[src].typeErrors = "?";
|
|
533
|
+
};
|
|
534
|
+
this.typeCheckIsNowDone = (src, failures) => {
|
|
535
|
+
this.summary[src].typeErrors = failures;
|
|
536
|
+
this.writeBigBoard();
|
|
501
537
|
this.checkForShutdown();
|
|
502
538
|
};
|
|
539
|
+
this.lintIsRunning = (src) => {
|
|
540
|
+
this.summary[src].staticErrors = "?";
|
|
541
|
+
this.writeBigBoard();
|
|
542
|
+
};
|
|
543
|
+
this.lintIsNowDone = (src, failures) => {
|
|
544
|
+
this.summary[src].staticErrors = failures;
|
|
545
|
+
this.writeBigBoard();
|
|
546
|
+
this.checkForShutdown();
|
|
547
|
+
};
|
|
548
|
+
this.bddTestIsRunning = (src) => {
|
|
549
|
+
this.summary[src].runTimeError = "?";
|
|
550
|
+
this.writeBigBoard();
|
|
551
|
+
};
|
|
552
|
+
this.bddTestIsNowDone = (src, failures) => {
|
|
553
|
+
this.summary[src].runTimeError = failures;
|
|
554
|
+
this.writeBigBoard();
|
|
555
|
+
this.checkForShutdown();
|
|
556
|
+
};
|
|
557
|
+
this.writeBigBoard = () => {
|
|
558
|
+
fs2.writeFileSync(
|
|
559
|
+
`./testeranto/reports/${this.name}/summary.json`,
|
|
560
|
+
JSON.stringify(this.summary, null, 2)
|
|
561
|
+
);
|
|
562
|
+
};
|
|
503
563
|
this.checkForShutdown = () => {
|
|
564
|
+
console.log(ansiC.inverse(`checkForShutdown`));
|
|
504
565
|
this.writeBigBoard();
|
|
505
566
|
if (this.mode === "dev")
|
|
506
567
|
return;
|
|
507
568
|
let inflight = false;
|
|
508
|
-
Object.keys(this.
|
|
509
|
-
if (this.
|
|
569
|
+
Object.keys(this.summary).forEach((k) => {
|
|
570
|
+
if (this.summary[k].prompt === "?") {
|
|
510
571
|
console.log(ansiC.blue(ansiC.inverse(`\u{1F555} prompt ${k}`)));
|
|
511
572
|
inflight = true;
|
|
512
573
|
}
|
|
513
574
|
});
|
|
514
|
-
Object.keys(this.
|
|
515
|
-
if (this.
|
|
575
|
+
Object.keys(this.summary).forEach((k) => {
|
|
576
|
+
if (this.summary[k].runTimeError === "?") {
|
|
516
577
|
console.log(ansiC.blue(ansiC.inverse(`\u{1F555} runTimeError ${k}`)));
|
|
517
578
|
inflight = true;
|
|
518
579
|
}
|
|
519
580
|
});
|
|
520
|
-
Object.keys(this.
|
|
521
|
-
if (this.
|
|
581
|
+
Object.keys(this.summary).forEach((k) => {
|
|
582
|
+
if (this.summary[k].staticErrors === "?") {
|
|
522
583
|
console.log(ansiC.blue(ansiC.inverse(`\u{1F555} staticErrors ${k}`)));
|
|
523
584
|
inflight = true;
|
|
524
585
|
}
|
|
525
586
|
});
|
|
526
|
-
Object.keys(this.
|
|
527
|
-
if (this.
|
|
587
|
+
Object.keys(this.summary).forEach((k) => {
|
|
588
|
+
if (this.summary[k].typeErrors === "?") {
|
|
528
589
|
console.log(ansiC.blue(ansiC.inverse(`\u{1F555} typeErrors ${k}`)));
|
|
529
590
|
inflight = true;
|
|
530
591
|
}
|
|
@@ -537,38 +598,113 @@ ${addableFiles.map((x) => {
|
|
|
537
598
|
});
|
|
538
599
|
}
|
|
539
600
|
};
|
|
540
|
-
this.
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
601
|
+
this.name = name;
|
|
602
|
+
this.mode = mode2;
|
|
603
|
+
this.configs.tests.forEach(([t, rt, tr, sidecars]) => {
|
|
604
|
+
this.summary[t] = {
|
|
605
|
+
runTimeError: "?",
|
|
606
|
+
typeErrors: "?",
|
|
607
|
+
staticErrors: "?",
|
|
608
|
+
prompt: "?",
|
|
609
|
+
failingFeatures: {}
|
|
610
|
+
};
|
|
611
|
+
sidecars.forEach(([t2]) => {
|
|
612
|
+
this.summary[t2] = {
|
|
613
|
+
// runTimeError: "?",
|
|
614
|
+
typeErrors: "?",
|
|
615
|
+
staticErrors: "?"
|
|
616
|
+
// prompt: "?",
|
|
617
|
+
// failingFeatures: {},
|
|
618
|
+
};
|
|
619
|
+
});
|
|
620
|
+
});
|
|
621
|
+
}
|
|
622
|
+
};
|
|
623
|
+
|
|
624
|
+
// src/PM/main.ts
|
|
625
|
+
var changes = {};
|
|
626
|
+
var fileHashes = {};
|
|
627
|
+
var files2 = {};
|
|
628
|
+
var screenshots2 = {};
|
|
629
|
+
async function fileHash(filePath, algorithm = "md5") {
|
|
630
|
+
return new Promise((resolve, reject) => {
|
|
631
|
+
const hash = crypto.createHash(algorithm);
|
|
632
|
+
const fileStream = fs3.createReadStream(filePath);
|
|
633
|
+
fileStream.on("data", (data) => {
|
|
634
|
+
hash.update(data);
|
|
635
|
+
});
|
|
636
|
+
fileStream.on("end", () => {
|
|
637
|
+
const fileHash2 = hash.digest("hex");
|
|
638
|
+
resolve(fileHash2);
|
|
639
|
+
});
|
|
640
|
+
fileStream.on("error", (error) => {
|
|
641
|
+
reject(`Error reading file: ${error.message}`);
|
|
642
|
+
});
|
|
643
|
+
});
|
|
644
|
+
}
|
|
645
|
+
var statusMessagePretty = (failures, test) => {
|
|
646
|
+
if (failures === 0) {
|
|
647
|
+
console.log(
|
|
648
|
+
ansiC2.green(ansiC2.inverse(`> ${test} completed successfully?!?`))
|
|
649
|
+
);
|
|
650
|
+
} else {
|
|
651
|
+
console.log(ansiC2.red(ansiC2.inverse(`> ${test} failed ${failures} times`)));
|
|
652
|
+
}
|
|
653
|
+
};
|
|
654
|
+
async function writeFileAndCreateDir(filePath, data) {
|
|
655
|
+
const dirPath = path4.dirname(filePath);
|
|
656
|
+
try {
|
|
657
|
+
await fs3.promises.mkdir(dirPath, { recursive: true });
|
|
658
|
+
await fs3.writeFileSync(filePath, data);
|
|
659
|
+
} catch (error) {
|
|
660
|
+
console.error(`Error writing file: ${error}`);
|
|
661
|
+
}
|
|
662
|
+
}
|
|
663
|
+
var filesHash = async (files3, algorithm = "md5") => {
|
|
664
|
+
return new Promise((resolve, reject) => {
|
|
665
|
+
resolve(
|
|
666
|
+
files3.reduce(async (mm, f) => {
|
|
667
|
+
return await mm + await fileHash(f);
|
|
668
|
+
}, Promise.resolve(""))
|
|
669
|
+
);
|
|
670
|
+
});
|
|
671
|
+
};
|
|
672
|
+
function isValidUrl(string) {
|
|
673
|
+
try {
|
|
674
|
+
new URL(string);
|
|
675
|
+
return true;
|
|
676
|
+
} catch (err) {
|
|
677
|
+
return false;
|
|
678
|
+
}
|
|
679
|
+
}
|
|
680
|
+
async function pollForFile(path5, timeout = 2e3) {
|
|
681
|
+
const intervalObj = setInterval(function() {
|
|
682
|
+
const file = path5;
|
|
683
|
+
const fileExists = fs3.existsSync(file);
|
|
684
|
+
if (fileExists) {
|
|
685
|
+
clearInterval(intervalObj);
|
|
686
|
+
}
|
|
687
|
+
}, timeout);
|
|
688
|
+
}
|
|
689
|
+
var PM_Main = class extends PM_WithEslintAndTsc {
|
|
690
|
+
constructor(configs, name, mode2) {
|
|
691
|
+
super(configs, name, mode2);
|
|
692
|
+
this.getRunnables = (tests, testName2, payload = {
|
|
693
|
+
nodeEntryPoints: {},
|
|
694
|
+
nodeEntryPointSidecars: {},
|
|
695
|
+
webEntryPoints: {},
|
|
696
|
+
webEntryPointSidecars: {},
|
|
697
|
+
pureEntryPoints: {},
|
|
698
|
+
pureEntryPointSidecars: {}
|
|
699
|
+
}) => {
|
|
700
|
+
return getRunnables(tests, testName2, payload);
|
|
565
701
|
};
|
|
566
702
|
this.launchPure = async (src, dest) => {
|
|
567
|
-
console.log(
|
|
703
|
+
console.log(ansiC2.green(ansiC2.inverse(`! pure, ${src}`)));
|
|
568
704
|
this.bddTestIsRunning(src);
|
|
569
705
|
const reportDest = `testeranto/reports/${this.name}/${src.split(".").slice(0, -1).join(".")}/pure`;
|
|
570
|
-
if (!
|
|
571
|
-
|
|
706
|
+
if (!fs3.existsSync(reportDest)) {
|
|
707
|
+
fs3.mkdirSync(reportDest, { recursive: true });
|
|
572
708
|
}
|
|
573
709
|
const destFolder = dest.replace(".mjs", "");
|
|
574
710
|
let argz = "";
|
|
@@ -576,11 +712,11 @@ ${addableFiles.map((x) => {
|
|
|
576
712
|
return t[0] === src;
|
|
577
713
|
});
|
|
578
714
|
if (!testConfig) {
|
|
579
|
-
console.log(
|
|
715
|
+
console.log(ansiC2.inverse("missing test config! Exiting ungracefully!"));
|
|
580
716
|
process.exit(-1);
|
|
581
717
|
}
|
|
582
718
|
const testConfigResource = testConfig[2];
|
|
583
|
-
|
|
719
|
+
const portsToUse = [];
|
|
584
720
|
if (testConfigResource.ports === 0) {
|
|
585
721
|
argz = JSON.stringify({
|
|
586
722
|
scheduled: true,
|
|
@@ -619,21 +755,20 @@ ${addableFiles.map((x) => {
|
|
|
619
755
|
await import(`${builtfile}?cacheBust=${Date.now()}`).then((module) => {
|
|
620
756
|
return module.default.then((defaultModule) => {
|
|
621
757
|
defaultModule.receiveTestResourceConfig(argz).then(async (results) => {
|
|
622
|
-
this.receiveFeatures(results.features, destFolder, src, "pure");
|
|
623
758
|
statusMessagePretty(results.fails, src);
|
|
624
759
|
this.bddTestIsNowDone(src, results.fails);
|
|
625
760
|
}).catch((e) => {
|
|
626
761
|
console.log(
|
|
627
|
-
|
|
762
|
+
ansiC2.red(
|
|
763
|
+
ansiC2.inverse(`launchPure - ${src} errored with: ${e}`)
|
|
764
|
+
)
|
|
628
765
|
);
|
|
629
766
|
this.bddTestIsNowDone(src, -1);
|
|
630
|
-
}).finally(() => {
|
|
631
|
-
webSideCares.forEach((webSideCar) => webSideCar.close());
|
|
632
767
|
});
|
|
633
768
|
}).catch((e) => {
|
|
634
769
|
console.log(
|
|
635
|
-
|
|
636
|
-
|
|
770
|
+
ansiC2.red(
|
|
771
|
+
ansiC2.inverse(
|
|
637
772
|
`${src} errored with: ${e}. Check ${reportDest}/error.txt for more info`
|
|
638
773
|
)
|
|
639
774
|
)
|
|
@@ -645,8 +780,8 @@ ${addableFiles.map((x) => {
|
|
|
645
780
|
});
|
|
646
781
|
} catch (e) {
|
|
647
782
|
console.log(
|
|
648
|
-
|
|
649
|
-
|
|
783
|
+
ansiC2.red(
|
|
784
|
+
ansiC2.inverse(
|
|
650
785
|
`${src} errored with: ${e}. Check ${reportDest}/error.txt for more info`
|
|
651
786
|
)
|
|
652
787
|
)
|
|
@@ -657,38 +792,39 @@ ${addableFiles.map((x) => {
|
|
|
657
792
|
}
|
|
658
793
|
for (let i = 0; i <= portsToUse.length; i++) {
|
|
659
794
|
if (portsToUse[i]) {
|
|
660
|
-
this.ports[portsToUse[i]] =
|
|
795
|
+
this.ports[portsToUse[i]] = true;
|
|
661
796
|
}
|
|
662
797
|
}
|
|
663
798
|
};
|
|
664
799
|
this.launchNode = async (src, dest) => {
|
|
665
|
-
console.log(
|
|
800
|
+
console.log(ansiC2.green(ansiC2.inverse(`! node, ${src}`)));
|
|
666
801
|
this.bddTestIsRunning(src);
|
|
667
802
|
const reportDest = `testeranto/reports/${this.name}/${src.split(".").slice(0, -1).join(".")}/node`;
|
|
668
|
-
if (!
|
|
669
|
-
|
|
803
|
+
if (!fs3.existsSync(reportDest)) {
|
|
804
|
+
fs3.mkdirSync(reportDest, { recursive: true });
|
|
670
805
|
}
|
|
671
|
-
const destFolder = dest.replace(".mjs", "");
|
|
672
806
|
let testResources = "";
|
|
673
807
|
const testConfig = this.configs.tests.find((t) => {
|
|
674
808
|
return t[0] === src;
|
|
675
809
|
});
|
|
676
810
|
if (!testConfig) {
|
|
677
811
|
console.log(
|
|
678
|
-
|
|
812
|
+
ansiC2.inverse(`missing test config! Exiting ungracefully for '${src}'`)
|
|
679
813
|
);
|
|
680
814
|
process.exit(-1);
|
|
681
815
|
}
|
|
682
816
|
const testConfigResource = testConfig[2];
|
|
683
|
-
|
|
817
|
+
const portsToUse = [];
|
|
684
818
|
if (testConfigResource.ports === 0) {
|
|
685
|
-
|
|
686
|
-
|
|
819
|
+
console.error("portsToUse?!", []);
|
|
820
|
+
const t = {
|
|
687
821
|
name: src,
|
|
688
|
-
ports: portsToUse,
|
|
822
|
+
// ports: portsToUse.map((v) => Number(v)),
|
|
823
|
+
ports: [],
|
|
689
824
|
fs: reportDest,
|
|
690
825
|
browserWSEndpoint: this.browser.wsEndpoint()
|
|
691
|
-
}
|
|
826
|
+
};
|
|
827
|
+
testResources = JSON.stringify(t);
|
|
692
828
|
} else if (testConfigResource.ports > 0) {
|
|
693
829
|
const openPorts = Object.entries(this.ports).filter(
|
|
694
830
|
([portnumber, portopen]) => portopen
|
|
@@ -698,14 +834,16 @@ ${addableFiles.map((x) => {
|
|
|
698
834
|
portsToUse.push(openPorts[i][0]);
|
|
699
835
|
this.ports[openPorts[i][0]] = false;
|
|
700
836
|
}
|
|
837
|
+
console.error("portsToUse", portsToUse);
|
|
701
838
|
testResources = JSON.stringify({
|
|
702
839
|
scheduled: true,
|
|
703
840
|
name: src,
|
|
704
841
|
ports: portsToUse,
|
|
705
|
-
fs:
|
|
842
|
+
fs: reportDest,
|
|
706
843
|
browserWSEndpoint: this.browser.wsEndpoint()
|
|
707
844
|
});
|
|
708
845
|
} else {
|
|
846
|
+
console.log("Not enough ports! Enqueuing test job...");
|
|
709
847
|
this.queue.push(src);
|
|
710
848
|
return;
|
|
711
849
|
}
|
|
@@ -715,67 +853,65 @@ ${addableFiles.map((x) => {
|
|
|
715
853
|
}
|
|
716
854
|
const builtfile = dest;
|
|
717
855
|
let haltReturns = false;
|
|
856
|
+
const ipcfile = "/tmp/tpipe_" + Math.random();
|
|
857
|
+
const child = spawn(
|
|
858
|
+
"node",
|
|
859
|
+
// "node --inspect-brk ",
|
|
860
|
+
[builtfile, testResources, ipcfile],
|
|
861
|
+
{
|
|
862
|
+
stdio: ["pipe", "pipe", "pipe", "ipc"]
|
|
863
|
+
}
|
|
864
|
+
);
|
|
718
865
|
let buffer = new Buffer("");
|
|
719
866
|
const server = net.createServer((socket) => {
|
|
867
|
+
const queue = new Queue();
|
|
720
868
|
socket.on("data", (data) => {
|
|
721
869
|
buffer = Buffer.concat([buffer, data]);
|
|
722
|
-
let messages = [];
|
|
723
870
|
for (let b = 0; b < buffer.length + 1; b++) {
|
|
724
|
-
|
|
871
|
+
const c = buffer.slice(0, b);
|
|
725
872
|
let d;
|
|
726
873
|
try {
|
|
727
874
|
d = JSON.parse(c.toString());
|
|
728
|
-
|
|
875
|
+
queue.enqueue(d);
|
|
729
876
|
buffer = buffer.slice(b, buffer.length + 1);
|
|
730
877
|
b = 0;
|
|
731
878
|
} catch (e) {
|
|
732
879
|
}
|
|
733
880
|
}
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
881
|
+
while (queue.size() > 0) {
|
|
882
|
+
const message = queue.dequeue();
|
|
883
|
+
if (message) {
|
|
884
|
+
this.mapping().forEach(async ([command, func]) => {
|
|
885
|
+
if (message[0] === command) {
|
|
886
|
+
const x = message.slice(1, -1);
|
|
887
|
+
const r = await this[command](...x);
|
|
888
|
+
if (!haltReturns) {
|
|
889
|
+
child.send(
|
|
890
|
+
JSON.stringify({
|
|
891
|
+
payload: r,
|
|
892
|
+
key: message[message.length - 1]
|
|
893
|
+
})
|
|
894
|
+
);
|
|
895
|
+
}
|
|
746
896
|
}
|
|
747
|
-
}
|
|
748
|
-
}
|
|
749
|
-
}
|
|
897
|
+
});
|
|
898
|
+
}
|
|
899
|
+
}
|
|
750
900
|
});
|
|
751
901
|
});
|
|
752
|
-
const oStream =
|
|
753
|
-
const child = spawn(
|
|
754
|
-
"node",
|
|
755
|
-
[builtfile, testResources, "--trace-warnings"],
|
|
756
|
-
{
|
|
757
|
-
stdio: ["pipe", "pipe", "pipe", "ipc"]
|
|
758
|
-
// silent: true
|
|
759
|
-
}
|
|
760
|
-
);
|
|
761
|
-
const p = destFolder + "/tpipe";
|
|
902
|
+
const oStream = fs3.createWriteStream(`${reportDest}/console_log.txt`);
|
|
762
903
|
const errFile = `${reportDest}/error.txt`;
|
|
763
|
-
if (
|
|
764
|
-
|
|
904
|
+
if (fs3.existsSync(errFile)) {
|
|
905
|
+
fs3.rmSync(errFile);
|
|
765
906
|
}
|
|
766
|
-
server.listen(
|
|
907
|
+
server.listen(ipcfile, () => {
|
|
767
908
|
child.stderr?.on("data", (data) => {
|
|
768
|
-
oStream.write(`stderr
|
|
909
|
+
oStream.write(`stderr > ${data}`);
|
|
769
910
|
});
|
|
770
911
|
child.stdout?.on("data", (data) => {
|
|
771
|
-
oStream.write(`stdout
|
|
912
|
+
oStream.write(`stdout > ${data}`);
|
|
772
913
|
});
|
|
773
914
|
child.on("close", (code) => {
|
|
774
|
-
console.log("close");
|
|
775
|
-
console.log("deleting", p);
|
|
776
|
-
if (fs2.existsSync(p)) {
|
|
777
|
-
fs2.rmSync(p);
|
|
778
|
-
}
|
|
779
915
|
oStream.close();
|
|
780
916
|
server.close();
|
|
781
917
|
if (code === null) {
|
|
@@ -791,23 +927,19 @@ ${addableFiles.map((x) => {
|
|
|
791
927
|
haltReturns = true;
|
|
792
928
|
});
|
|
793
929
|
child.on("exit", (code) => {
|
|
794
|
-
console.log("exit");
|
|
795
|
-
console.log("deleting", p);
|
|
796
|
-
if (fs2.existsSync(p)) {
|
|
797
|
-
fs2.rmSync(p);
|
|
798
|
-
}
|
|
799
930
|
haltReturns = true;
|
|
931
|
+
for (let i = 0; i <= portsToUse.length; i++) {
|
|
932
|
+
if (portsToUse[i]) {
|
|
933
|
+
this.ports[portsToUse[i]] = true;
|
|
934
|
+
}
|
|
935
|
+
}
|
|
800
936
|
});
|
|
801
937
|
child.on("error", (e) => {
|
|
802
938
|
console.log("error");
|
|
803
|
-
console.log("deleting", p);
|
|
804
|
-
if (fs2.existsSync(p)) {
|
|
805
|
-
fs2.rmSync(p);
|
|
806
|
-
}
|
|
807
939
|
haltReturns = true;
|
|
808
940
|
console.log(
|
|
809
|
-
|
|
810
|
-
|
|
941
|
+
ansiC2.red(
|
|
942
|
+
ansiC2.inverse(
|
|
811
943
|
`${src} errored with: ${e.name}. Check ${errFile}for more info`
|
|
812
944
|
)
|
|
813
945
|
)
|
|
@@ -817,121 +949,237 @@ ${addableFiles.map((x) => {
|
|
|
817
949
|
statusMessagePretty(-1, src);
|
|
818
950
|
});
|
|
819
951
|
});
|
|
820
|
-
child.send({ path: p });
|
|
821
|
-
for (let i = 0; i <= portsToUse.length; i++) {
|
|
822
|
-
if (portsToUse[i]) {
|
|
823
|
-
this.ports[portsToUse[i]] = "true";
|
|
824
|
-
}
|
|
825
|
-
}
|
|
826
952
|
};
|
|
827
|
-
this.launchWebSideCar = async (
|
|
828
|
-
const
|
|
829
|
-
|
|
953
|
+
this.launchWebSideCar = async (testConfig) => {
|
|
954
|
+
const src = testConfig[0];
|
|
955
|
+
const dest = src.split(".").slice(0, -1).join(".");
|
|
956
|
+
const destFolder = dest.replace(".mjs", "");
|
|
957
|
+
console.log(ansiC2.green(ansiC2.inverse(`launchWebSideCar ${src}`)));
|
|
830
958
|
const fileStreams2 = [];
|
|
831
959
|
const doneFileStream2 = [];
|
|
960
|
+
const oStream = fs3.createWriteStream(`${destFolder}/console_log.txt`);
|
|
832
961
|
return new Promise((res, rej) => {
|
|
833
|
-
this.browser.newPage().then((page) => {
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
async (ssOpts, testName2) => {
|
|
837
|
-
const p = ssOpts.path;
|
|
838
|
-
const dir = path3.dirname(p);
|
|
839
|
-
fs2.mkdirSync(dir, {
|
|
840
|
-
recursive: true
|
|
841
|
-
});
|
|
842
|
-
files2[testName2].add(ssOpts.path);
|
|
843
|
-
const sPromise = page.screenshot({
|
|
844
|
-
...ssOpts,
|
|
845
|
-
path: p
|
|
846
|
-
});
|
|
847
|
-
if (!screenshots2[testName2]) {
|
|
848
|
-
screenshots2[testName2] = [];
|
|
849
|
-
}
|
|
850
|
-
screenshots2[testName2].push(sPromise);
|
|
851
|
-
await sPromise;
|
|
852
|
-
return sPromise;
|
|
853
|
-
}
|
|
854
|
-
);
|
|
855
|
-
page.exposeFunction(
|
|
856
|
-
"writeFileSync",
|
|
857
|
-
(fp, contents, testName2) => {
|
|
858
|
-
const dir = path3.dirname(fp);
|
|
859
|
-
fs2.mkdirSync(dir, {
|
|
860
|
-
recursive: true
|
|
861
|
-
});
|
|
862
|
-
const p = new Promise(async (res2, rej2) => {
|
|
863
|
-
fs2.writeFileSync(fp, contents);
|
|
864
|
-
res2(fp);
|
|
865
|
-
});
|
|
866
|
-
doneFileStream2.push(p);
|
|
867
|
-
if (!files2[testName2]) {
|
|
868
|
-
files2[testName2] = /* @__PURE__ */ new Set();
|
|
869
|
-
}
|
|
870
|
-
files2[testName2].add(fp);
|
|
871
|
-
return p;
|
|
872
|
-
}
|
|
873
|
-
);
|
|
874
|
-
page.exposeFunction("existsSync", (fp, contents) => {
|
|
875
|
-
return fs2.existsSync(fp);
|
|
962
|
+
this.browser.newPage().then(async (page) => {
|
|
963
|
+
this.mapping().forEach(async ([command, func]) => {
|
|
964
|
+
page.exposeFunction(command, func);
|
|
876
965
|
});
|
|
877
|
-
|
|
878
|
-
if (!
|
|
879
|
-
|
|
880
|
-
recursive: true
|
|
881
|
-
});
|
|
966
|
+
const close = () => {
|
|
967
|
+
if (!files2[src]) {
|
|
968
|
+
files2[src] = /* @__PURE__ */ new Set();
|
|
882
969
|
}
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
return {
|
|
899
|
-
...JSON.parse(JSON.stringify(f)),
|
|
900
|
-
uid: fileStreams2.length - 1
|
|
901
|
-
};
|
|
970
|
+
delete files2[src];
|
|
971
|
+
Promise.all(screenshots2[src] || []).then(() => {
|
|
972
|
+
delete screenshots2[src];
|
|
973
|
+
page.close();
|
|
974
|
+
oStream.close();
|
|
975
|
+
});
|
|
976
|
+
};
|
|
977
|
+
page.on("pageerror", (err) => {
|
|
978
|
+
console.debug(`Error from ${src}: [${err.name}] `);
|
|
979
|
+
oStream.write(err.name);
|
|
980
|
+
oStream.write("\n");
|
|
981
|
+
if (err.cause) {
|
|
982
|
+
console.debug(`Error from ${src} cause: [${err.cause}] `);
|
|
983
|
+
oStream.write(err.cause);
|
|
984
|
+
oStream.write("\n");
|
|
902
985
|
}
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
return fileStreams2[uid].write(contents);
|
|
986
|
+
if (err.stack) {
|
|
987
|
+
console.debug(`Error from stack ${src}: [${err.stack}] `);
|
|
988
|
+
oStream.write(err.stack);
|
|
989
|
+
oStream.write("\n");
|
|
908
990
|
}
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
991
|
+
console.debug(`Error from message ${src}: [${err.message}] `);
|
|
992
|
+
oStream.write(err.message);
|
|
993
|
+
oStream.write("\n");
|
|
994
|
+
this.bddTestIsNowDone(src, -1);
|
|
995
|
+
close();
|
|
996
|
+
});
|
|
997
|
+
page.on("console", (log) => {
|
|
998
|
+
oStream.write(log.text());
|
|
999
|
+
oStream.write(JSON.stringify(log.location()));
|
|
1000
|
+
oStream.write(JSON.stringify(log.stackTrace()));
|
|
1001
|
+
oStream.write("\n");
|
|
1002
|
+
});
|
|
1003
|
+
await page.goto(`file://${`${destFolder}.html`}`, {});
|
|
1004
|
+
const webArgz = JSON.stringify({
|
|
1005
|
+
name: dest,
|
|
1006
|
+
ports: [].toString(),
|
|
1007
|
+
fs: dest,
|
|
1008
|
+
browserWSEndpoint: this.browser.wsEndpoint()
|
|
1009
|
+
});
|
|
1010
|
+
const d = `${dest}?cacheBust=${Date.now()}`;
|
|
1011
|
+
const evaluation = `
|
|
1012
|
+
import('${d}').then(async (x) => {
|
|
1013
|
+
|
|
1014
|
+
try {
|
|
1015
|
+
return await (await x.default).receiveTestResourceConfig(${webArgz})
|
|
1016
|
+
} catch (e) {
|
|
1017
|
+
console.log("fail", e.toString())
|
|
1018
|
+
}
|
|
1019
|
+
})`;
|
|
1020
|
+
await page.evaluate(evaluation).then(async ({ fails, failed, features }) => {
|
|
1021
|
+
statusMessagePretty(fails, src);
|
|
1022
|
+
this.bddTestIsNowDone(src, fails);
|
|
1023
|
+
}).catch((e) => {
|
|
1024
|
+
console.log(
|
|
1025
|
+
ansiC2.red(
|
|
1026
|
+
ansiC2.inverse(`launchWebSidecar - ${src} errored with: ${e}`)
|
|
1027
|
+
)
|
|
1028
|
+
);
|
|
1029
|
+
}).finally(() => {
|
|
1030
|
+
this.bddTestIsNowDone(src, -1);
|
|
1031
|
+
close();
|
|
912
1032
|
});
|
|
913
1033
|
return page;
|
|
914
1034
|
}).then(async (page) => {
|
|
915
1035
|
await page.goto(`file://${`${dest}.html`}`, {});
|
|
916
|
-
res(page);
|
|
1036
|
+
res([Math.random(), page]);
|
|
917
1037
|
});
|
|
918
1038
|
});
|
|
919
1039
|
};
|
|
920
|
-
this.launchNodeSideCar = async (
|
|
1040
|
+
this.launchNodeSideCar = async (sidecar) => {
|
|
1041
|
+
const src = sidecar[0];
|
|
1042
|
+
const dest = process.cwd() + `/testeranto/bundles/node/${this.name}/${sidecar[0]}`;
|
|
921
1043
|
const d = dest + ".mjs";
|
|
922
|
-
console.log(
|
|
1044
|
+
console.log(ansiC2.green(ansiC2.inverse(`launchNodeSideCar ${sidecar[0]}`)));
|
|
1045
|
+
const destFolder = dest.replace(".ts", "");
|
|
1046
|
+
const reportDest = `testeranto/reports/${this.name}/${src.split(".").slice(0, -1).join(".")}/node`;
|
|
1047
|
+
const argz = {
|
|
1048
|
+
name: sidecar[0],
|
|
1049
|
+
ports: [],
|
|
1050
|
+
fs: destFolder,
|
|
1051
|
+
browserWSEndpoint: this.browser.wsEndpoint()
|
|
1052
|
+
};
|
|
1053
|
+
const testReq = sidecar[2];
|
|
1054
|
+
const portsToUse = [];
|
|
1055
|
+
if (testReq.ports === 0) {
|
|
1056
|
+
} else if (testReq.ports > 0) {
|
|
1057
|
+
const openPorts = Object.entries(this.ports).filter(
|
|
1058
|
+
([portnumber, portopen]) => portopen
|
|
1059
|
+
);
|
|
1060
|
+
if (openPorts.length >= testReq.ports) {
|
|
1061
|
+
for (let i = 0; i < testReq.ports; i++) {
|
|
1062
|
+
portsToUse.push(openPorts[i][0]);
|
|
1063
|
+
this.ports[openPorts[i][0]] = false;
|
|
1064
|
+
}
|
|
1065
|
+
console.log("nodeSideCar portsToUse", portsToUse);
|
|
1066
|
+
argz.ports = portsToUse;
|
|
1067
|
+
const builtfile = destFolder + ".mjs";
|
|
1068
|
+
let haltReturns = false;
|
|
1069
|
+
let buffer = new Buffer("");
|
|
1070
|
+
const server = net.createServer((socket) => {
|
|
1071
|
+
socket.on("data", (data) => {
|
|
1072
|
+
buffer = Buffer.concat([buffer, data]);
|
|
1073
|
+
const messages = [];
|
|
1074
|
+
for (let b = 0; b < buffer.length + 1; b++) {
|
|
1075
|
+
const c = buffer.slice(0, b);
|
|
1076
|
+
let d2;
|
|
1077
|
+
try {
|
|
1078
|
+
d2 = JSON.parse(c.toString());
|
|
1079
|
+
messages.push(d2);
|
|
1080
|
+
buffer = buffer.slice(b, buffer.length + 1);
|
|
1081
|
+
b = 0;
|
|
1082
|
+
} catch (e) {
|
|
1083
|
+
}
|
|
1084
|
+
}
|
|
1085
|
+
messages.forEach(async (payload) => {
|
|
1086
|
+
this.mapping().forEach(async ([command, func]) => {
|
|
1087
|
+
if (payload[0] === command) {
|
|
1088
|
+
const x = payload.slice(1, -1);
|
|
1089
|
+
const r2 = await this[command](...x);
|
|
1090
|
+
if (!haltReturns) {
|
|
1091
|
+
child.send(
|
|
1092
|
+
JSON.stringify({
|
|
1093
|
+
payload: r2,
|
|
1094
|
+
key: payload[payload.length - 1]
|
|
1095
|
+
})
|
|
1096
|
+
);
|
|
1097
|
+
}
|
|
1098
|
+
}
|
|
1099
|
+
});
|
|
1100
|
+
});
|
|
1101
|
+
});
|
|
1102
|
+
});
|
|
1103
|
+
const oStream = fs3.createWriteStream(`${reportDest}/console_log.txt`);
|
|
1104
|
+
const child = spawn("node", [builtfile, JSON.stringify(argz)], {
|
|
1105
|
+
stdio: ["pipe", "pipe", "pipe", "ipc"]
|
|
1106
|
+
// silent: true
|
|
1107
|
+
});
|
|
1108
|
+
const p = "/tmp/tpipe" + Math.random();
|
|
1109
|
+
const errFile = `${reportDest}/error.txt`;
|
|
1110
|
+
server.listen(p, () => {
|
|
1111
|
+
child.stderr?.on("data", (data) => {
|
|
1112
|
+
oStream.write(`stderr > ${data}`);
|
|
1113
|
+
});
|
|
1114
|
+
child.stdout?.on("data", (data) => {
|
|
1115
|
+
oStream.write(`stdout > ${data}`);
|
|
1116
|
+
});
|
|
1117
|
+
child.on("close", (code) => {
|
|
1118
|
+
oStream.close();
|
|
1119
|
+
server.close();
|
|
1120
|
+
haltReturns = true;
|
|
1121
|
+
});
|
|
1122
|
+
child.on("exit", (code) => {
|
|
1123
|
+
haltReturns = true;
|
|
1124
|
+
for (let i = 0; i <= portsToUse.length; i++) {
|
|
1125
|
+
if (portsToUse[i]) {
|
|
1126
|
+
this.ports[portsToUse[i]] = true;
|
|
1127
|
+
}
|
|
1128
|
+
}
|
|
1129
|
+
});
|
|
1130
|
+
child.on("error", (e) => {
|
|
1131
|
+
if (fs3.existsSync(p)) {
|
|
1132
|
+
fs3.rmSync(p);
|
|
1133
|
+
}
|
|
1134
|
+
haltReturns = true;
|
|
1135
|
+
console.log(
|
|
1136
|
+
ansiC2.red(
|
|
1137
|
+
ansiC2.inverse(
|
|
1138
|
+
`launchNodeSideCar - ${src} errored with: ${e.name}. Check ${errFile}for more info`
|
|
1139
|
+
)
|
|
1140
|
+
)
|
|
1141
|
+
);
|
|
1142
|
+
this.writeFileSync(`${reportDest}/error.txt`, e.toString(), src);
|
|
1143
|
+
});
|
|
1144
|
+
});
|
|
1145
|
+
child.send({ path: p });
|
|
1146
|
+
const r = Math.random();
|
|
1147
|
+
this.nodeSidecars[r] = child;
|
|
1148
|
+
return [r, argz];
|
|
1149
|
+
} else {
|
|
1150
|
+
console.log("Not enough open ports!", openPorts, testReq.ports);
|
|
1151
|
+
this.queue.push(sidecar[0]);
|
|
1152
|
+
return [Math.random(), argz];
|
|
1153
|
+
}
|
|
1154
|
+
} else {
|
|
1155
|
+
console.error("negative port makes no sense", sidecar[0]);
|
|
1156
|
+
process.exit(-1);
|
|
1157
|
+
}
|
|
1158
|
+
};
|
|
1159
|
+
this.stopPureSideCar = async (uid) => {
|
|
1160
|
+
console.log(ansiC2.green(ansiC2.inverse(`stopPureSideCar ${uid}`)));
|
|
1161
|
+
await this.sidecars[uid].shutdown();
|
|
1162
|
+
return;
|
|
1163
|
+
};
|
|
1164
|
+
this.launchPureSideCar = async (sidecar) => {
|
|
1165
|
+
console.log(ansiC2.green(ansiC2.inverse(`launchPureSideCar ${sidecar[0]}`)));
|
|
1166
|
+
const r = Math.random();
|
|
1167
|
+
const dest = process.cwd() + `/testeranto/bundles/pure/${this.name}/${sidecar[0]}`;
|
|
1168
|
+
const builtfile = dest.split(".").slice(0, -1).concat("mjs").join(".");
|
|
923
1169
|
const destFolder = dest.replace(".mjs", "");
|
|
924
|
-
let argz
|
|
925
|
-
const
|
|
926
|
-
|
|
1170
|
+
let argz;
|
|
1171
|
+
const z = sidecar[2];
|
|
1172
|
+
const testConfigResource = sidecar[2];
|
|
1173
|
+
const src = sidecar[0];
|
|
1174
|
+
const portsToUse = [];
|
|
927
1175
|
if (testConfigResource.ports === 0) {
|
|
928
|
-
argz =
|
|
929
|
-
scheduled: true,
|
|
1176
|
+
argz = {
|
|
1177
|
+
// scheduled: true,
|
|
930
1178
|
name: src,
|
|
931
1179
|
ports: portsToUse,
|
|
932
1180
|
fs: destFolder,
|
|
933
1181
|
browserWSEndpoint: this.browser.wsEndpoint()
|
|
934
|
-
}
|
|
1182
|
+
};
|
|
935
1183
|
} else if (testConfigResource.ports > 0) {
|
|
936
1184
|
const openPorts = Object.entries(this.ports).filter(
|
|
937
1185
|
([portnumber, portopen]) => portopen
|
|
@@ -941,14 +1189,14 @@ ${addableFiles.map((x) => {
|
|
|
941
1189
|
portsToUse.push(openPorts[i][0]);
|
|
942
1190
|
this.ports[openPorts[i][0]] = false;
|
|
943
1191
|
}
|
|
944
|
-
argz =
|
|
945
|
-
scheduled: true,
|
|
1192
|
+
argz = {
|
|
1193
|
+
// scheduled: true,
|
|
946
1194
|
name: src,
|
|
947
1195
|
// ports: [3333],
|
|
948
1196
|
ports: portsToUse,
|
|
949
1197
|
fs: ".",
|
|
950
1198
|
browserWSEndpoint: this.browser.wsEndpoint()
|
|
951
|
-
}
|
|
1199
|
+
};
|
|
952
1200
|
} else {
|
|
953
1201
|
this.queue.push(src);
|
|
954
1202
|
return;
|
|
@@ -957,29 +1205,22 @@ ${addableFiles.map((x) => {
|
|
|
957
1205
|
console.error("negative port makes no sense", src);
|
|
958
1206
|
process.exit(-1);
|
|
959
1207
|
}
|
|
960
|
-
const builtfile = dest + ".mjs";
|
|
961
1208
|
await import(`${builtfile}?cacheBust=${Date.now()}`).then((module) => {
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
s.receiveTestResourceConfig(argz);
|
|
965
|
-
});
|
|
1209
|
+
this.pureSidecars[r] = module.default;
|
|
1210
|
+
this.pureSidecars[r].start(argz);
|
|
966
1211
|
});
|
|
967
|
-
|
|
968
|
-
if (portsToUse[i]) {
|
|
969
|
-
this.ports[portsToUse[i]] = "true";
|
|
970
|
-
}
|
|
971
|
-
}
|
|
1212
|
+
return [r, argz];
|
|
972
1213
|
};
|
|
973
1214
|
this.launchWeb = async (src, dest) => {
|
|
974
|
-
console.log(
|
|
1215
|
+
console.log(ansiC2.green(ansiC2.inverse(`! web ${src}`)));
|
|
975
1216
|
this.bddTestIsRunning(src);
|
|
976
1217
|
const reportDest = `testeranto/reports/${this.name}/${src.split(".").slice(0, -1).join(".")}/web`;
|
|
977
|
-
if (!
|
|
978
|
-
|
|
1218
|
+
if (!fs3.existsSync(reportDest)) {
|
|
1219
|
+
fs3.mkdirSync(reportDest, { recursive: true });
|
|
979
1220
|
}
|
|
980
1221
|
const destFolder = dest.replace(".mjs", "");
|
|
981
1222
|
const webArgz = JSON.stringify({
|
|
982
|
-
name:
|
|
1223
|
+
name: src,
|
|
983
1224
|
ports: [].toString(),
|
|
984
1225
|
fs: reportDest,
|
|
985
1226
|
browserWSEndpoint: this.browser.wsEndpoint()
|
|
@@ -995,10 +1236,20 @@ ${addableFiles.map((x) => {
|
|
|
995
1236
|
console.log("fail", e)
|
|
996
1237
|
}
|
|
997
1238
|
})`;
|
|
998
|
-
const oStream =
|
|
1239
|
+
const oStream = fs3.createWriteStream(`${reportDest}/console_log.txt`);
|
|
999
1240
|
this.browser.newPage().then((page) => {
|
|
1000
1241
|
this.mapping().forEach(async ([command, func]) => {
|
|
1001
|
-
|
|
1242
|
+
if (command === "page") {
|
|
1243
|
+
page.exposeFunction(command, (x) => {
|
|
1244
|
+
if (x) {
|
|
1245
|
+
return func(x);
|
|
1246
|
+
} else {
|
|
1247
|
+
return func(page.mainFrame()._id);
|
|
1248
|
+
}
|
|
1249
|
+
});
|
|
1250
|
+
} else {
|
|
1251
|
+
return page.exposeFunction(command, func);
|
|
1252
|
+
}
|
|
1002
1253
|
});
|
|
1003
1254
|
return page;
|
|
1004
1255
|
}).then(async (page) => {
|
|
@@ -1006,10 +1257,6 @@ ${addableFiles.map((x) => {
|
|
|
1006
1257
|
if (!files2[src]) {
|
|
1007
1258
|
files2[src] = /* @__PURE__ */ new Set();
|
|
1008
1259
|
}
|
|
1009
|
-
fs2.writeFileSync(
|
|
1010
|
-
destFolder + "/manifest.json",
|
|
1011
|
-
JSON.stringify(Array.from(files2[src]))
|
|
1012
|
-
);
|
|
1013
1260
|
delete files2[src];
|
|
1014
1261
|
Promise.all(screenshots2[src] || []).then(() => {
|
|
1015
1262
|
delete screenshots2[src];
|
|
@@ -1039,17 +1286,21 @@ ${addableFiles.map((x) => {
|
|
|
1039
1286
|
});
|
|
1040
1287
|
page.on("console", (log) => {
|
|
1041
1288
|
oStream.write(log.text());
|
|
1289
|
+
oStream.write("\n");
|
|
1042
1290
|
oStream.write(JSON.stringify(log.location()));
|
|
1291
|
+
oStream.write("\n");
|
|
1043
1292
|
oStream.write(JSON.stringify(log.stackTrace()));
|
|
1044
1293
|
oStream.write("\n");
|
|
1045
1294
|
});
|
|
1046
1295
|
await page.goto(`file://${`${destFolder}.html`}`, {});
|
|
1296
|
+
this.webSidecars[Math.random()] = page.mainFrame()._id;
|
|
1047
1297
|
await page.evaluate(evaluation).then(async ({ fails, failed, features }) => {
|
|
1048
|
-
this.receiveFeatures(features, destFolder, src, "web");
|
|
1049
1298
|
statusMessagePretty(fails, src);
|
|
1050
1299
|
this.bddTestIsNowDone(src, fails);
|
|
1051
1300
|
}).catch((e) => {
|
|
1052
|
-
console.log(
|
|
1301
|
+
console.log(
|
|
1302
|
+
ansiC2.red(ansiC2.inverse(`launchweb - ${src} errored with: ${e}`))
|
|
1303
|
+
);
|
|
1053
1304
|
}).finally(() => {
|
|
1054
1305
|
this.bddTestIsNowDone(src, -1);
|
|
1055
1306
|
close();
|
|
@@ -1057,74 +1308,106 @@ ${addableFiles.map((x) => {
|
|
|
1057
1308
|
return page;
|
|
1058
1309
|
});
|
|
1059
1310
|
};
|
|
1060
|
-
this.
|
|
1061
|
-
const featureDestination =
|
|
1311
|
+
this.receiveFeaturesV2 = (reportDest, srcTest, platform) => {
|
|
1312
|
+
const featureDestination = path4.resolve(
|
|
1062
1313
|
process.cwd(),
|
|
1063
1314
|
"reports",
|
|
1064
1315
|
"features",
|
|
1065
1316
|
"strings",
|
|
1066
1317
|
srcTest.split(".").slice(0, -1).join(".") + ".features.txt"
|
|
1067
1318
|
);
|
|
1068
|
-
|
|
1319
|
+
const testReport = JSON.parse(
|
|
1320
|
+
fs3.readFileSync(`${reportDest}/tests.json`).toString()
|
|
1321
|
+
);
|
|
1322
|
+
testReport.features.reduce(async (mm, featureStringKey) => {
|
|
1069
1323
|
const accum = await mm;
|
|
1070
1324
|
const isUrl = isValidUrl(featureStringKey);
|
|
1071
1325
|
if (isUrl) {
|
|
1072
1326
|
const u = new URL(featureStringKey);
|
|
1073
1327
|
if (u.protocol === "file:") {
|
|
1074
|
-
const newPath = `${process.cwd()}/testeranto/features/internal/${
|
|
1328
|
+
const newPath = `${process.cwd()}/testeranto/features/internal/${path4.relative(
|
|
1075
1329
|
process.cwd(),
|
|
1076
1330
|
u.pathname
|
|
1077
1331
|
)}`;
|
|
1078
|
-
|
|
1079
|
-
try {
|
|
1080
|
-
await fs2.unlinkSync(newPath);
|
|
1081
|
-
} catch (error) {
|
|
1082
|
-
if (error.code !== "ENOENT") {
|
|
1083
|
-
}
|
|
1084
|
-
}
|
|
1085
|
-
accum.files.push(newPath);
|
|
1332
|
+
accum.files.push(u.pathname);
|
|
1086
1333
|
} else if (u.protocol === "http:" || u.protocol === "https:") {
|
|
1087
|
-
const newPath = `${process.cwd()}/testeranto/features/external
|
|
1334
|
+
const newPath = `${process.cwd()}/testeranto/features/external/${u.hostname}${u.pathname}`;
|
|
1088
1335
|
const body = await this.configs.featureIngestor(featureStringKey);
|
|
1089
1336
|
writeFileAndCreateDir(newPath, body);
|
|
1090
1337
|
accum.files.push(newPath);
|
|
1091
1338
|
}
|
|
1092
1339
|
} else {
|
|
1093
|
-
await
|
|
1340
|
+
await fs3.promises.mkdir(path4.dirname(featureDestination), {
|
|
1094
1341
|
recursive: true
|
|
1095
1342
|
});
|
|
1096
1343
|
accum.strings.push(featureStringKey);
|
|
1097
1344
|
}
|
|
1098
1345
|
return accum;
|
|
1099
1346
|
}, Promise.resolve({ files: [], strings: [] })).then(({ files: files3, strings }) => {
|
|
1100
|
-
|
|
1347
|
+
fs3.writeFileSync(
|
|
1101
1348
|
`testeranto/reports/${this.name}/${srcTest.split(".").slice(0, -1).join(".")}/${platform}/featurePrompt.txt`,
|
|
1102
1349
|
files3.map((f) => {
|
|
1103
1350
|
return `/read ${f}`;
|
|
1104
1351
|
}).join("\n")
|
|
1105
1352
|
);
|
|
1106
1353
|
});
|
|
1354
|
+
testReport.givens.forEach((g) => {
|
|
1355
|
+
if (g.failed === true) {
|
|
1356
|
+
this.summary[srcTest].failingFeatures[g.key] = g.features;
|
|
1357
|
+
}
|
|
1358
|
+
});
|
|
1359
|
+
this.writeBigBoard();
|
|
1107
1360
|
};
|
|
1108
|
-
this.writeBigBoard = () => {
|
|
1109
|
-
fs2.writeFileSync(
|
|
1110
|
-
`./testeranto/reports/${this.name}/summary.json`,
|
|
1111
|
-
JSON.stringify(this.bigBoard, null, 2)
|
|
1112
|
-
);
|
|
1113
|
-
};
|
|
1114
|
-
this.name = name;
|
|
1115
|
-
this.mode = mode2;
|
|
1116
1361
|
this.ports = {};
|
|
1117
|
-
this.
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
staticErrors: "?",
|
|
1122
|
-
prompt: "?"
|
|
1123
|
-
};
|
|
1124
|
-
});
|
|
1362
|
+
this.queue = [];
|
|
1363
|
+
this.nodeSidecars = {};
|
|
1364
|
+
this.webSidecars = {};
|
|
1365
|
+
this.pureSidecars = {};
|
|
1125
1366
|
this.configs.ports.forEach((element) => {
|
|
1126
|
-
this.ports[element] =
|
|
1367
|
+
this.ports[element] = true;
|
|
1368
|
+
});
|
|
1369
|
+
}
|
|
1370
|
+
async stopSideCar(uid) {
|
|
1371
|
+
console.log(ansiC2.green(ansiC2.inverse(`stopSideCar ${uid}`)));
|
|
1372
|
+
Object.entries(this.pureSidecars).forEach(async ([k, v]) => {
|
|
1373
|
+
if (Number(k) === uid) {
|
|
1374
|
+
await this.pureSidecars[Number(k)].stop();
|
|
1375
|
+
delete this.pureSidecars[Number(k)];
|
|
1376
|
+
}
|
|
1377
|
+
});
|
|
1378
|
+
Object.entries(this.nodeSidecars).forEach(async ([k, v]) => {
|
|
1379
|
+
if (Number(k) === uid) {
|
|
1380
|
+
await this.nodeSidecars[Number(k)].send("stop");
|
|
1381
|
+
delete this.nodeSidecars[Number(k)];
|
|
1382
|
+
}
|
|
1383
|
+
});
|
|
1384
|
+
Object.entries(this.webSidecars).forEach(async ([k, v]) => {
|
|
1385
|
+
if (Number(k) === uid) {
|
|
1386
|
+
(await this.browser.pages()).forEach(async (p) => {
|
|
1387
|
+
if (p.mainFrame()._id === k) {
|
|
1388
|
+
await this.webSidecars[Number(k)].close();
|
|
1389
|
+
delete this.webSidecars[Number(k)];
|
|
1390
|
+
}
|
|
1391
|
+
});
|
|
1392
|
+
}
|
|
1127
1393
|
});
|
|
1394
|
+
return;
|
|
1395
|
+
}
|
|
1396
|
+
async launchSideCar(n, name) {
|
|
1397
|
+
const c = this.configs.tests.find(([v, r2]) => {
|
|
1398
|
+
return v === name;
|
|
1399
|
+
});
|
|
1400
|
+
const s = c[3][n];
|
|
1401
|
+
const r = s[1];
|
|
1402
|
+
if (r === "node") {
|
|
1403
|
+
return this.launchNodeSideCar(s);
|
|
1404
|
+
} else if (r === "web") {
|
|
1405
|
+
return this.launchWebSideCar(s);
|
|
1406
|
+
} else if (r === "pure") {
|
|
1407
|
+
return this.launchPureSideCar(s);
|
|
1408
|
+
} else {
|
|
1409
|
+
throw `unknown runtime ${r}`;
|
|
1410
|
+
}
|
|
1128
1411
|
}
|
|
1129
1412
|
mapping() {
|
|
1130
1413
|
return [
|
|
@@ -1133,20 +1416,23 @@ ${addableFiles.map((x) => {
|
|
|
1133
1416
|
["closePage", this.closePage],
|
|
1134
1417
|
["createWriteStream", this.createWriteStream],
|
|
1135
1418
|
["customclose", this.customclose],
|
|
1136
|
-
["customScreenShot", this.customScreenShot],
|
|
1419
|
+
["customScreenShot", this.customScreenShot.bind(this)],
|
|
1137
1420
|
["end", this.end],
|
|
1138
1421
|
["existsSync", this.existsSync],
|
|
1139
1422
|
["focusOn", this.focusOn],
|
|
1140
1423
|
["getAttribute", this.getAttribute],
|
|
1141
|
-
["
|
|
1142
|
-
["
|
|
1424
|
+
["getInnerHtml", this.getInnerHtml],
|
|
1425
|
+
// ["setValue", this.setValue],
|
|
1426
|
+
["goto", this.goto.bind(this)],
|
|
1143
1427
|
["isDisabled", this.isDisabled],
|
|
1428
|
+
["launchSideCar", this.launchSideCar.bind(this)],
|
|
1144
1429
|
["mkdirSync", this.mkdirSync],
|
|
1145
1430
|
["newPage", this.newPage],
|
|
1146
1431
|
["page", this.page],
|
|
1147
1432
|
["pages", this.pages],
|
|
1148
1433
|
["screencast", this.screencast],
|
|
1149
1434
|
["screencastStop", this.screencastStop],
|
|
1435
|
+
["stopSideCar", this.stopSideCar.bind(this)],
|
|
1150
1436
|
["typeInto", this.typeInto],
|
|
1151
1437
|
["waitForSelector", this.waitForSelector],
|
|
1152
1438
|
["write", this.write],
|
|
@@ -1157,51 +1443,57 @@ ${addableFiles.map((x) => {
|
|
|
1157
1443
|
this.mapping().forEach(async ([command, func]) => {
|
|
1158
1444
|
globalThis[command] = func;
|
|
1159
1445
|
});
|
|
1160
|
-
if (!
|
|
1161
|
-
|
|
1446
|
+
if (!fs3.existsSync(`testeranto/reports/${this.name}`)) {
|
|
1447
|
+
fs3.mkdirSync(`testeranto/reports/${this.name}`);
|
|
1162
1448
|
}
|
|
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
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
})
|
|
1204
|
-
|
|
1449
|
+
const executablePath = "/opt/homebrew/bin/chromium";
|
|
1450
|
+
try {
|
|
1451
|
+
this.browser = await puppeteer.launch({
|
|
1452
|
+
slowMo: 1,
|
|
1453
|
+
waitForInitialPage: false,
|
|
1454
|
+
executablePath,
|
|
1455
|
+
headless: true,
|
|
1456
|
+
dumpio: false,
|
|
1457
|
+
devtools: false,
|
|
1458
|
+
args: [
|
|
1459
|
+
"--disable-features=site-per-process",
|
|
1460
|
+
"--allow-file-access-from-files",
|
|
1461
|
+
"--allow-insecure-localhost",
|
|
1462
|
+
"--allow-running-insecure-content",
|
|
1463
|
+
"--auto-open-devtools-for-tabs",
|
|
1464
|
+
"--disable-dev-shm-usage",
|
|
1465
|
+
"--disable-extensions",
|
|
1466
|
+
"--disable-gpu",
|
|
1467
|
+
"--disable-setuid-sandbox",
|
|
1468
|
+
"--disable-site-isolation-trials",
|
|
1469
|
+
"--disable-web-security",
|
|
1470
|
+
"--no-first-run",
|
|
1471
|
+
"--no-sandbox",
|
|
1472
|
+
"--no-startup-window",
|
|
1473
|
+
"--reduce-security-for-testing",
|
|
1474
|
+
"--remote-allow-origins=*",
|
|
1475
|
+
"--unsafely-treat-insecure-origin-as-secure=*",
|
|
1476
|
+
`--remote-debugging-port=3234`
|
|
1477
|
+
// "--disable-features=IsolateOrigins,site-per-process",
|
|
1478
|
+
// "--disable-features=IsolateOrigins",
|
|
1479
|
+
// "--disk-cache-dir=/dev/null",
|
|
1480
|
+
// "--disk-cache-size=1",
|
|
1481
|
+
// "--no-zygote",
|
|
1482
|
+
// "--remote-allow-origins=ws://localhost:3234",
|
|
1483
|
+
// "--single-process",
|
|
1484
|
+
// "--start-maximized",
|
|
1485
|
+
// "--unsafely-treat-insecure-origin-as-secure",
|
|
1486
|
+
// "--unsafely-treat-insecure-origin-as-secure=ws://192.168.0.101:3234",
|
|
1487
|
+
]
|
|
1488
|
+
});
|
|
1489
|
+
} catch (e) {
|
|
1490
|
+
console.error(e);
|
|
1491
|
+
console.error(
|
|
1492
|
+
"could not start chrome via puppeter. Check this path: ",
|
|
1493
|
+
executablePath
|
|
1494
|
+
);
|
|
1495
|
+
}
|
|
1496
|
+
const { nodeEntryPoints, webEntryPoints, pureEntryPoints } = this.getRunnables(this.configs.tests, this.name);
|
|
1205
1497
|
[
|
|
1206
1498
|
[
|
|
1207
1499
|
nodeEntryPoints,
|
|
@@ -1220,7 +1512,7 @@ ${addableFiles.map((x) => {
|
|
|
1220
1512
|
}
|
|
1221
1513
|
],
|
|
1222
1514
|
[
|
|
1223
|
-
|
|
1515
|
+
pureEntryPoints,
|
|
1224
1516
|
this.launchPure,
|
|
1225
1517
|
"pure",
|
|
1226
1518
|
(w) => {
|
|
@@ -1240,7 +1532,7 @@ ${addableFiles.map((x) => {
|
|
|
1240
1532
|
if (fileHashes[k] !== hash) {
|
|
1241
1533
|
fileHashes[k] = hash;
|
|
1242
1534
|
console.log(
|
|
1243
|
-
|
|
1535
|
+
ansiC2.yellow(ansiC2.inverse(`< ${e} ${filename}`))
|
|
1244
1536
|
);
|
|
1245
1537
|
launcher(k, outputFile);
|
|
1246
1538
|
}
|
|
@@ -1254,7 +1546,7 @@ ${addableFiles.map((x) => {
|
|
|
1254
1546
|
watcher(
|
|
1255
1547
|
watch(metafile, async (e, filename) => {
|
|
1256
1548
|
console.log(
|
|
1257
|
-
|
|
1549
|
+
ansiC2.yellow(ansiC2.inverse(`< ${e} ${filename} (${runtime})`))
|
|
1258
1550
|
);
|
|
1259
1551
|
this.metafileOutputs(runtime);
|
|
1260
1552
|
})
|
|
@@ -1262,8 +1554,10 @@ ${addableFiles.map((x) => {
|
|
|
1262
1554
|
}
|
|
1263
1555
|
);
|
|
1264
1556
|
}
|
|
1557
|
+
async launchExternalTest(externalTestName, externalTest) {
|
|
1558
|
+
}
|
|
1265
1559
|
async stop() {
|
|
1266
|
-
console.log(
|
|
1560
|
+
console.log(ansiC2.inverse("Testeranto-Run is shutting down gracefully..."));
|
|
1267
1561
|
this.mode = "once";
|
|
1268
1562
|
this.nodeMetafileWatcher.close();
|
|
1269
1563
|
this.webMetafileWatcher.close();
|
|
@@ -1272,7 +1566,7 @@ ${addableFiles.map((x) => {
|
|
|
1272
1566
|
}
|
|
1273
1567
|
async metafileOutputs(platform) {
|
|
1274
1568
|
const metafile = JSON.parse(
|
|
1275
|
-
|
|
1569
|
+
fs3.readFileSync(
|
|
1276
1570
|
`./testeranto/bundles/${platform}/${this.name}/metafile.json`
|
|
1277
1571
|
).toString()
|
|
1278
1572
|
).metafile;
|
|
@@ -1280,16 +1574,22 @@ ${addableFiles.map((x) => {
|
|
|
1280
1574
|
return;
|
|
1281
1575
|
const outputs = metafile.outputs;
|
|
1282
1576
|
Object.keys(outputs).forEach(async (k) => {
|
|
1577
|
+
const pattern = `testeranto/bundles/${platform}/${this.name}/${this.configs.src}`;
|
|
1578
|
+
if (!k.startsWith(pattern)) {
|
|
1579
|
+
return false;
|
|
1580
|
+
}
|
|
1283
1581
|
const addableFiles = Object.keys(outputs[k].inputs).filter((i) => {
|
|
1284
|
-
if (!
|
|
1582
|
+
if (!fs3.existsSync(i))
|
|
1285
1583
|
return false;
|
|
1286
1584
|
if (i.startsWith("node_modules"))
|
|
1287
1585
|
return false;
|
|
1586
|
+
if (i.startsWith("./node_modules"))
|
|
1587
|
+
return false;
|
|
1288
1588
|
return true;
|
|
1289
1589
|
});
|
|
1290
1590
|
const f = `${k.split(".").slice(0, -1).join(".")}/`;
|
|
1291
|
-
if (!
|
|
1292
|
-
|
|
1591
|
+
if (!fs3.existsSync(f)) {
|
|
1592
|
+
fs3.mkdirSync(f);
|
|
1293
1593
|
}
|
|
1294
1594
|
const entrypoint = outputs[k].entryPoint;
|
|
1295
1595
|
if (entrypoint) {
|
|
@@ -1314,10 +1614,10 @@ ${addableFiles.map((x) => {
|
|
|
1314
1614
|
readline.emitKeypressEvents(process.stdin);
|
|
1315
1615
|
if (process.stdin.isTTY)
|
|
1316
1616
|
process.stdin.setRawMode(true);
|
|
1317
|
-
console.log(
|
|
1617
|
+
console.log(ansiC3.inverse("Press 'x' to shutdown forcefully."));
|
|
1318
1618
|
process.stdin.on("keypress", (str, key) => {
|
|
1319
1619
|
if (key.name === "x") {
|
|
1320
|
-
console.log(
|
|
1620
|
+
console.log(ansiC3.inverse("Shutting down forcefully..."));
|
|
1321
1621
|
process.exit(-1);
|
|
1322
1622
|
}
|
|
1323
1623
|
});
|