testeranto 0.129.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 +333 -34
- 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 +484 -425
- 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 +485 -426
- 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 +693 -412
- 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 +608 -582
- 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,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,7 +458,7 @@ 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",
|
|
@@ -497,34 +500,67 @@ ${addableFiles.map((x) => {
|
|
|
497
500
|
)}"
|
|
498
501
|
`
|
|
499
502
|
);
|
|
500
|
-
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`;
|
|
501
504
|
this.checkForShutdown();
|
|
502
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();
|
|
530
|
+
this.checkForShutdown();
|
|
531
|
+
};
|
|
532
|
+
this.writeBigBoard = () => {
|
|
533
|
+
fs2.writeFileSync(
|
|
534
|
+
`./testeranto/reports/${this.name}/summary.json`,
|
|
535
|
+
JSON.stringify(this.summary, null, 2)
|
|
536
|
+
);
|
|
537
|
+
};
|
|
503
538
|
this.checkForShutdown = () => {
|
|
539
|
+
console.log(ansiC.inverse(`checkForShutdown`));
|
|
504
540
|
this.writeBigBoard();
|
|
505
541
|
if (this.mode === "dev")
|
|
506
542
|
return;
|
|
507
543
|
let inflight = false;
|
|
508
|
-
Object.keys(this.
|
|
509
|
-
if (this.
|
|
544
|
+
Object.keys(this.summary).forEach((k) => {
|
|
545
|
+
if (this.summary[k].prompt === "?") {
|
|
510
546
|
console.log(ansiC.blue(ansiC.inverse(`\u{1F555} prompt ${k}`)));
|
|
511
547
|
inflight = true;
|
|
512
548
|
}
|
|
513
549
|
});
|
|
514
|
-
Object.keys(this.
|
|
515
|
-
if (this.
|
|
550
|
+
Object.keys(this.summary).forEach((k) => {
|
|
551
|
+
if (this.summary[k].runTimeError === "?") {
|
|
516
552
|
console.log(ansiC.blue(ansiC.inverse(`\u{1F555} runTimeError ${k}`)));
|
|
517
553
|
inflight = true;
|
|
518
554
|
}
|
|
519
555
|
});
|
|
520
|
-
Object.keys(this.
|
|
521
|
-
if (this.
|
|
556
|
+
Object.keys(this.summary).forEach((k) => {
|
|
557
|
+
if (this.summary[k].staticErrors === "?") {
|
|
522
558
|
console.log(ansiC.blue(ansiC.inverse(`\u{1F555} staticErrors ${k}`)));
|
|
523
559
|
inflight = true;
|
|
524
560
|
}
|
|
525
561
|
});
|
|
526
|
-
Object.keys(this.
|
|
527
|
-
if (this.
|
|
562
|
+
Object.keys(this.summary).forEach((k) => {
|
|
563
|
+
if (this.summary[k].typeErrors === "?") {
|
|
528
564
|
console.log(ansiC.blue(ansiC.inverse(`\u{1F555} typeErrors ${k}`)));
|
|
529
565
|
inflight = true;
|
|
530
566
|
}
|
|
@@ -537,38 +573,113 @@ ${addableFiles.map((x) => {
|
|
|
537
573
|
});
|
|
538
574
|
}
|
|
539
575
|
};
|
|
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
|
-
|
|
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);
|
|
565
676
|
};
|
|
566
677
|
this.launchPure = async (src, dest) => {
|
|
567
|
-
console.log(
|
|
678
|
+
console.log(ansiC2.green(ansiC2.inverse(`! pure, ${src}`)));
|
|
568
679
|
this.bddTestIsRunning(src);
|
|
569
680
|
const reportDest = `testeranto/reports/${this.name}/${src.split(".").slice(0, -1).join(".")}/pure`;
|
|
570
|
-
if (!
|
|
571
|
-
|
|
681
|
+
if (!fs3.existsSync(reportDest)) {
|
|
682
|
+
fs3.mkdirSync(reportDest, { recursive: true });
|
|
572
683
|
}
|
|
573
684
|
const destFolder = dest.replace(".mjs", "");
|
|
574
685
|
let argz = "";
|
|
@@ -576,11 +687,11 @@ ${addableFiles.map((x) => {
|
|
|
576
687
|
return t[0] === src;
|
|
577
688
|
});
|
|
578
689
|
if (!testConfig) {
|
|
579
|
-
console.log(
|
|
690
|
+
console.log(ansiC2.inverse("missing test config! Exiting ungracefully!"));
|
|
580
691
|
process.exit(-1);
|
|
581
692
|
}
|
|
582
693
|
const testConfigResource = testConfig[2];
|
|
583
|
-
|
|
694
|
+
const portsToUse = [];
|
|
584
695
|
if (testConfigResource.ports === 0) {
|
|
585
696
|
argz = JSON.stringify({
|
|
586
697
|
scheduled: true,
|
|
@@ -619,21 +730,20 @@ ${addableFiles.map((x) => {
|
|
|
619
730
|
await import(`${builtfile}?cacheBust=${Date.now()}`).then((module) => {
|
|
620
731
|
return module.default.then((defaultModule) => {
|
|
621
732
|
defaultModule.receiveTestResourceConfig(argz).then(async (results) => {
|
|
622
|
-
this.receiveFeatures(results.features, destFolder, src, "pure");
|
|
623
733
|
statusMessagePretty(results.fails, src);
|
|
624
734
|
this.bddTestIsNowDone(src, results.fails);
|
|
625
735
|
}).catch((e) => {
|
|
626
736
|
console.log(
|
|
627
|
-
|
|
737
|
+
ansiC2.red(
|
|
738
|
+
ansiC2.inverse(`launchPure - ${src} errored with: ${e}`)
|
|
739
|
+
)
|
|
628
740
|
);
|
|
629
741
|
this.bddTestIsNowDone(src, -1);
|
|
630
|
-
}).finally(() => {
|
|
631
|
-
webSideCares.forEach((webSideCar) => webSideCar.close());
|
|
632
742
|
});
|
|
633
743
|
}).catch((e) => {
|
|
634
744
|
console.log(
|
|
635
|
-
|
|
636
|
-
|
|
745
|
+
ansiC2.red(
|
|
746
|
+
ansiC2.inverse(
|
|
637
747
|
`${src} errored with: ${e}. Check ${reportDest}/error.txt for more info`
|
|
638
748
|
)
|
|
639
749
|
)
|
|
@@ -645,8 +755,8 @@ ${addableFiles.map((x) => {
|
|
|
645
755
|
});
|
|
646
756
|
} catch (e) {
|
|
647
757
|
console.log(
|
|
648
|
-
|
|
649
|
-
|
|
758
|
+
ansiC2.red(
|
|
759
|
+
ansiC2.inverse(
|
|
650
760
|
`${src} errored with: ${e}. Check ${reportDest}/error.txt for more info`
|
|
651
761
|
)
|
|
652
762
|
)
|
|
@@ -657,38 +767,39 @@ ${addableFiles.map((x) => {
|
|
|
657
767
|
}
|
|
658
768
|
for (let i = 0; i <= portsToUse.length; i++) {
|
|
659
769
|
if (portsToUse[i]) {
|
|
660
|
-
this.ports[portsToUse[i]] =
|
|
770
|
+
this.ports[portsToUse[i]] = true;
|
|
661
771
|
}
|
|
662
772
|
}
|
|
663
773
|
};
|
|
664
774
|
this.launchNode = async (src, dest) => {
|
|
665
|
-
console.log(
|
|
775
|
+
console.log(ansiC2.green(ansiC2.inverse(`! node, ${src}`)));
|
|
666
776
|
this.bddTestIsRunning(src);
|
|
667
777
|
const reportDest = `testeranto/reports/${this.name}/${src.split(".").slice(0, -1).join(".")}/node`;
|
|
668
|
-
if (!
|
|
669
|
-
|
|
778
|
+
if (!fs3.existsSync(reportDest)) {
|
|
779
|
+
fs3.mkdirSync(reportDest, { recursive: true });
|
|
670
780
|
}
|
|
671
|
-
const destFolder = dest.replace(".mjs", "");
|
|
672
781
|
let testResources = "";
|
|
673
782
|
const testConfig = this.configs.tests.find((t) => {
|
|
674
783
|
return t[0] === src;
|
|
675
784
|
});
|
|
676
785
|
if (!testConfig) {
|
|
677
786
|
console.log(
|
|
678
|
-
|
|
787
|
+
ansiC2.inverse(`missing test config! Exiting ungracefully for '${src}'`)
|
|
679
788
|
);
|
|
680
789
|
process.exit(-1);
|
|
681
790
|
}
|
|
682
791
|
const testConfigResource = testConfig[2];
|
|
683
|
-
|
|
792
|
+
const portsToUse = [];
|
|
684
793
|
if (testConfigResource.ports === 0) {
|
|
685
|
-
|
|
686
|
-
|
|
794
|
+
console.error("portsToUse?!", []);
|
|
795
|
+
const t = {
|
|
687
796
|
name: src,
|
|
688
|
-
ports: portsToUse,
|
|
797
|
+
// ports: portsToUse.map((v) => Number(v)),
|
|
798
|
+
ports: [],
|
|
689
799
|
fs: reportDest,
|
|
690
800
|
browserWSEndpoint: this.browser.wsEndpoint()
|
|
691
|
-
}
|
|
801
|
+
};
|
|
802
|
+
testResources = JSON.stringify(t);
|
|
692
803
|
} else if (testConfigResource.ports > 0) {
|
|
693
804
|
const openPorts = Object.entries(this.ports).filter(
|
|
694
805
|
([portnumber, portopen]) => portopen
|
|
@@ -698,14 +809,16 @@ ${addableFiles.map((x) => {
|
|
|
698
809
|
portsToUse.push(openPorts[i][0]);
|
|
699
810
|
this.ports[openPorts[i][0]] = false;
|
|
700
811
|
}
|
|
812
|
+
console.error("portsToUse", portsToUse);
|
|
701
813
|
testResources = JSON.stringify({
|
|
702
814
|
scheduled: true,
|
|
703
815
|
name: src,
|
|
704
816
|
ports: portsToUse,
|
|
705
|
-
fs:
|
|
817
|
+
fs: reportDest,
|
|
706
818
|
browserWSEndpoint: this.browser.wsEndpoint()
|
|
707
819
|
});
|
|
708
820
|
} else {
|
|
821
|
+
console.log("Not enough ports! Enqueuing test job...");
|
|
709
822
|
this.queue.push(src);
|
|
710
823
|
return;
|
|
711
824
|
}
|
|
@@ -715,67 +828,61 @@ ${addableFiles.map((x) => {
|
|
|
715
828
|
}
|
|
716
829
|
const builtfile = dest;
|
|
717
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
|
+
});
|
|
718
835
|
let buffer = new Buffer("");
|
|
719
836
|
const server = net.createServer((socket) => {
|
|
837
|
+
const queue = new Queue();
|
|
720
838
|
socket.on("data", (data) => {
|
|
721
839
|
buffer = Buffer.concat([buffer, data]);
|
|
722
|
-
let messages = [];
|
|
723
840
|
for (let b = 0; b < buffer.length + 1; b++) {
|
|
724
|
-
|
|
841
|
+
const c = buffer.slice(0, b);
|
|
725
842
|
let d;
|
|
726
843
|
try {
|
|
727
844
|
d = JSON.parse(c.toString());
|
|
728
|
-
|
|
845
|
+
queue.enqueue(d);
|
|
729
846
|
buffer = buffer.slice(b, buffer.length + 1);
|
|
730
847
|
b = 0;
|
|
731
848
|
} catch (e) {
|
|
732
849
|
}
|
|
733
850
|
}
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
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
|
+
}
|
|
746
866
|
}
|
|
747
|
-
}
|
|
748
|
-
}
|
|
749
|
-
}
|
|
867
|
+
});
|
|
868
|
+
}
|
|
869
|
+
}
|
|
750
870
|
});
|
|
751
871
|
});
|
|
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";
|
|
872
|
+
const oStream = fs3.createWriteStream(`${reportDest}/console_log.txt`);
|
|
762
873
|
const errFile = `${reportDest}/error.txt`;
|
|
763
|
-
if (
|
|
764
|
-
|
|
874
|
+
if (fs3.existsSync(errFile)) {
|
|
875
|
+
fs3.rmSync(errFile);
|
|
765
876
|
}
|
|
766
|
-
server.listen(
|
|
877
|
+
server.listen(ipcfile, () => {
|
|
767
878
|
child.stderr?.on("data", (data) => {
|
|
768
|
-
oStream.write(`stderr
|
|
879
|
+
oStream.write(`stderr > ${data}`);
|
|
769
880
|
});
|
|
770
881
|
child.stdout?.on("data", (data) => {
|
|
771
|
-
oStream.write(`stdout
|
|
882
|
+
oStream.write(`stdout > ${data}`);
|
|
772
883
|
});
|
|
773
884
|
child.on("close", (code) => {
|
|
774
885
|
console.log("close");
|
|
775
|
-
console.log("deleting", p);
|
|
776
|
-
if (fs2.existsSync(p)) {
|
|
777
|
-
fs2.rmSync(p);
|
|
778
|
-
}
|
|
779
886
|
oStream.close();
|
|
780
887
|
server.close();
|
|
781
888
|
if (code === null) {
|
|
@@ -792,22 +899,20 @@ ${addableFiles.map((x) => {
|
|
|
792
899
|
});
|
|
793
900
|
child.on("exit", (code) => {
|
|
794
901
|
console.log("exit");
|
|
795
|
-
console.log("deleting", p);
|
|
796
|
-
if (fs2.existsSync(p)) {
|
|
797
|
-
fs2.rmSync(p);
|
|
798
|
-
}
|
|
799
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);
|
|
800
909
|
});
|
|
801
910
|
child.on("error", (e) => {
|
|
802
911
|
console.log("error");
|
|
803
|
-
console.log("deleting", p);
|
|
804
|
-
if (fs2.existsSync(p)) {
|
|
805
|
-
fs2.rmSync(p);
|
|
806
|
-
}
|
|
807
912
|
haltReturns = true;
|
|
808
913
|
console.log(
|
|
809
|
-
|
|
810
|
-
|
|
914
|
+
ansiC2.red(
|
|
915
|
+
ansiC2.inverse(
|
|
811
916
|
`${src} errored with: ${e.name}. Check ${errFile}for more info`
|
|
812
917
|
)
|
|
813
918
|
)
|
|
@@ -817,121 +922,241 @@ ${addableFiles.map((x) => {
|
|
|
817
922
|
statusMessagePretty(-1, src);
|
|
818
923
|
});
|
|
819
924
|
});
|
|
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
925
|
};
|
|
827
|
-
this.launchWebSideCar = async (
|
|
828
|
-
const
|
|
829
|
-
|
|
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}`)));
|
|
830
931
|
const fileStreams2 = [];
|
|
831
932
|
const doneFileStream2 = [];
|
|
933
|
+
const oStream = fs3.createWriteStream(`${destFolder}/console_log.txt`);
|
|
832
934
|
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);
|
|
935
|
+
this.browser.newPage().then(async (page) => {
|
|
936
|
+
this.mapping().forEach(async ([command, func]) => {
|
|
937
|
+
page.exposeFunction(command, func);
|
|
876
938
|
});
|
|
877
|
-
|
|
878
|
-
if (!
|
|
879
|
-
|
|
880
|
-
recursive: true
|
|
881
|
-
});
|
|
939
|
+
const close = () => {
|
|
940
|
+
if (!files2[src]) {
|
|
941
|
+
files2[src] = /* @__PURE__ */ new Set();
|
|
882
942
|
}
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
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");
|
|
902
962
|
}
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
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");
|
|
908
967
|
}
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
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();
|
|
912
1009
|
});
|
|
913
1010
|
return page;
|
|
914
1011
|
}).then(async (page) => {
|
|
915
1012
|
await page.goto(`file://${`${dest}.html`}`, {});
|
|
916
|
-
res(page);
|
|
1013
|
+
res([Math.random(), page]);
|
|
917
1014
|
});
|
|
918
1015
|
});
|
|
919
1016
|
};
|
|
920
|
-
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]}`;
|
|
921
1020
|
const d = dest + ".mjs";
|
|
922
|
-
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(".");
|
|
923
1146
|
const destFolder = dest.replace(".mjs", "");
|
|
924
|
-
let argz
|
|
925
|
-
const
|
|
926
|
-
|
|
1147
|
+
let argz;
|
|
1148
|
+
const z = sidecar[2];
|
|
1149
|
+
const testConfigResource = sidecar[2];
|
|
1150
|
+
const src = sidecar[0];
|
|
1151
|
+
const portsToUse = [];
|
|
927
1152
|
if (testConfigResource.ports === 0) {
|
|
928
|
-
argz =
|
|
929
|
-
scheduled: true,
|
|
1153
|
+
argz = {
|
|
1154
|
+
// scheduled: true,
|
|
930
1155
|
name: src,
|
|
931
1156
|
ports: portsToUse,
|
|
932
1157
|
fs: destFolder,
|
|
933
1158
|
browserWSEndpoint: this.browser.wsEndpoint()
|
|
934
|
-
}
|
|
1159
|
+
};
|
|
935
1160
|
} else if (testConfigResource.ports > 0) {
|
|
936
1161
|
const openPorts = Object.entries(this.ports).filter(
|
|
937
1162
|
([portnumber, portopen]) => portopen
|
|
@@ -941,14 +1166,14 @@ ${addableFiles.map((x) => {
|
|
|
941
1166
|
portsToUse.push(openPorts[i][0]);
|
|
942
1167
|
this.ports[openPorts[i][0]] = false;
|
|
943
1168
|
}
|
|
944
|
-
argz =
|
|
945
|
-
scheduled: true,
|
|
1169
|
+
argz = {
|
|
1170
|
+
// scheduled: true,
|
|
946
1171
|
name: src,
|
|
947
1172
|
// ports: [3333],
|
|
948
1173
|
ports: portsToUse,
|
|
949
1174
|
fs: ".",
|
|
950
1175
|
browserWSEndpoint: this.browser.wsEndpoint()
|
|
951
|
-
}
|
|
1176
|
+
};
|
|
952
1177
|
} else {
|
|
953
1178
|
this.queue.push(src);
|
|
954
1179
|
return;
|
|
@@ -957,29 +1182,22 @@ ${addableFiles.map((x) => {
|
|
|
957
1182
|
console.error("negative port makes no sense", src);
|
|
958
1183
|
process.exit(-1);
|
|
959
1184
|
}
|
|
960
|
-
const builtfile = dest + ".mjs";
|
|
961
1185
|
await import(`${builtfile}?cacheBust=${Date.now()}`).then((module) => {
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
s.receiveTestResourceConfig(argz);
|
|
965
|
-
});
|
|
1186
|
+
this.pureSidecars[r] = module.default;
|
|
1187
|
+
this.pureSidecars[r].start(argz);
|
|
966
1188
|
});
|
|
967
|
-
|
|
968
|
-
if (portsToUse[i]) {
|
|
969
|
-
this.ports[portsToUse[i]] = "true";
|
|
970
|
-
}
|
|
971
|
-
}
|
|
1189
|
+
return [r, argz];
|
|
972
1190
|
};
|
|
973
1191
|
this.launchWeb = async (src, dest) => {
|
|
974
|
-
console.log(
|
|
1192
|
+
console.log(ansiC2.green(ansiC2.inverse(`! web ${src}`)));
|
|
975
1193
|
this.bddTestIsRunning(src);
|
|
976
1194
|
const reportDest = `testeranto/reports/${this.name}/${src.split(".").slice(0, -1).join(".")}/web`;
|
|
977
|
-
if (!
|
|
978
|
-
|
|
1195
|
+
if (!fs3.existsSync(reportDest)) {
|
|
1196
|
+
fs3.mkdirSync(reportDest, { recursive: true });
|
|
979
1197
|
}
|
|
980
1198
|
const destFolder = dest.replace(".mjs", "");
|
|
981
1199
|
const webArgz = JSON.stringify({
|
|
982
|
-
name:
|
|
1200
|
+
name: src,
|
|
983
1201
|
ports: [].toString(),
|
|
984
1202
|
fs: reportDest,
|
|
985
1203
|
browserWSEndpoint: this.browser.wsEndpoint()
|
|
@@ -995,10 +1213,20 @@ ${addableFiles.map((x) => {
|
|
|
995
1213
|
console.log("fail", e)
|
|
996
1214
|
}
|
|
997
1215
|
})`;
|
|
998
|
-
const oStream =
|
|
1216
|
+
const oStream = fs3.createWriteStream(`${reportDest}/console_log.txt`);
|
|
999
1217
|
this.browser.newPage().then((page) => {
|
|
1000
1218
|
this.mapping().forEach(async ([command, func]) => {
|
|
1001
|
-
|
|
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
|
+
}
|
|
1002
1230
|
});
|
|
1003
1231
|
return page;
|
|
1004
1232
|
}).then(async (page) => {
|
|
@@ -1006,7 +1234,7 @@ ${addableFiles.map((x) => {
|
|
|
1006
1234
|
if (!files2[src]) {
|
|
1007
1235
|
files2[src] = /* @__PURE__ */ new Set();
|
|
1008
1236
|
}
|
|
1009
|
-
|
|
1237
|
+
fs3.writeFileSync(
|
|
1010
1238
|
destFolder + "/manifest.json",
|
|
1011
1239
|
JSON.stringify(Array.from(files2[src]))
|
|
1012
1240
|
);
|
|
@@ -1039,17 +1267,21 @@ ${addableFiles.map((x) => {
|
|
|
1039
1267
|
});
|
|
1040
1268
|
page.on("console", (log) => {
|
|
1041
1269
|
oStream.write(log.text());
|
|
1270
|
+
oStream.write("\n");
|
|
1042
1271
|
oStream.write(JSON.stringify(log.location()));
|
|
1272
|
+
oStream.write("\n");
|
|
1043
1273
|
oStream.write(JSON.stringify(log.stackTrace()));
|
|
1044
1274
|
oStream.write("\n");
|
|
1045
1275
|
});
|
|
1046
1276
|
await page.goto(`file://${`${destFolder}.html`}`, {});
|
|
1277
|
+
this.webSidecars[Math.random()] = page.mainFrame()._id;
|
|
1047
1278
|
await page.evaluate(evaluation).then(async ({ fails, failed, features }) => {
|
|
1048
|
-
this.receiveFeatures(features, destFolder, src, "web");
|
|
1049
1279
|
statusMessagePretty(fails, src);
|
|
1050
1280
|
this.bddTestIsNowDone(src, fails);
|
|
1051
1281
|
}).catch((e) => {
|
|
1052
|
-
console.log(
|
|
1282
|
+
console.log(
|
|
1283
|
+
ansiC2.red(ansiC2.inverse(`launchweb - ${src} errored with: ${e}`))
|
|
1284
|
+
);
|
|
1053
1285
|
}).finally(() => {
|
|
1054
1286
|
this.bddTestIsNowDone(src, -1);
|
|
1055
1287
|
close();
|
|
@@ -1057,74 +1289,106 @@ ${addableFiles.map((x) => {
|
|
|
1057
1289
|
return page;
|
|
1058
1290
|
});
|
|
1059
1291
|
};
|
|
1060
|
-
this.
|
|
1061
|
-
const featureDestination =
|
|
1292
|
+
this.receiveFeaturesV2 = (reportDest, srcTest, platform) => {
|
|
1293
|
+
const featureDestination = path4.resolve(
|
|
1062
1294
|
process.cwd(),
|
|
1063
1295
|
"reports",
|
|
1064
1296
|
"features",
|
|
1065
1297
|
"strings",
|
|
1066
1298
|
srcTest.split(".").slice(0, -1).join(".") + ".features.txt"
|
|
1067
1299
|
);
|
|
1068
|
-
|
|
1300
|
+
const testReport = JSON.parse(
|
|
1301
|
+
fs3.readFileSync(`${reportDest}/tests.json`).toString()
|
|
1302
|
+
);
|
|
1303
|
+
testReport.features.reduce(async (mm, featureStringKey) => {
|
|
1069
1304
|
const accum = await mm;
|
|
1070
1305
|
const isUrl = isValidUrl(featureStringKey);
|
|
1071
1306
|
if (isUrl) {
|
|
1072
1307
|
const u = new URL(featureStringKey);
|
|
1073
1308
|
if (u.protocol === "file:") {
|
|
1074
|
-
const newPath = `${process.cwd()}/testeranto/features/internal/${
|
|
1309
|
+
const newPath = `${process.cwd()}/testeranto/features/internal/${path4.relative(
|
|
1075
1310
|
process.cwd(),
|
|
1076
1311
|
u.pathname
|
|
1077
1312
|
)}`;
|
|
1078
|
-
|
|
1079
|
-
try {
|
|
1080
|
-
await fs2.unlinkSync(newPath);
|
|
1081
|
-
} catch (error) {
|
|
1082
|
-
if (error.code !== "ENOENT") {
|
|
1083
|
-
}
|
|
1084
|
-
}
|
|
1085
|
-
accum.files.push(newPath);
|
|
1313
|
+
accum.files.push(u.pathname);
|
|
1086
1314
|
} else if (u.protocol === "http:" || u.protocol === "https:") {
|
|
1087
|
-
const newPath = `${process.cwd()}/testeranto/features/external
|
|
1315
|
+
const newPath = `${process.cwd()}/testeranto/features/external/${u.hostname}${u.pathname}`;
|
|
1088
1316
|
const body = await this.configs.featureIngestor(featureStringKey);
|
|
1089
1317
|
writeFileAndCreateDir(newPath, body);
|
|
1090
1318
|
accum.files.push(newPath);
|
|
1091
1319
|
}
|
|
1092
1320
|
} else {
|
|
1093
|
-
await
|
|
1321
|
+
await fs3.promises.mkdir(path4.dirname(featureDestination), {
|
|
1094
1322
|
recursive: true
|
|
1095
1323
|
});
|
|
1096
1324
|
accum.strings.push(featureStringKey);
|
|
1097
1325
|
}
|
|
1098
1326
|
return accum;
|
|
1099
1327
|
}, Promise.resolve({ files: [], strings: [] })).then(({ files: files3, strings }) => {
|
|
1100
|
-
|
|
1328
|
+
fs3.writeFileSync(
|
|
1101
1329
|
`testeranto/reports/${this.name}/${srcTest.split(".").slice(0, -1).join(".")}/${platform}/featurePrompt.txt`,
|
|
1102
1330
|
files3.map((f) => {
|
|
1103
1331
|
return `/read ${f}`;
|
|
1104
1332
|
}).join("\n")
|
|
1105
1333
|
);
|
|
1106
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();
|
|
1107
1341
|
};
|
|
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
1342
|
this.ports = {};
|
|
1117
|
-
this.
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
staticErrors: "?",
|
|
1122
|
-
prompt: "?"
|
|
1123
|
-
};
|
|
1124
|
-
});
|
|
1343
|
+
this.queue = [];
|
|
1344
|
+
this.nodeSidecars = {};
|
|
1345
|
+
this.webSidecars = {};
|
|
1346
|
+
this.pureSidecars = {};
|
|
1125
1347
|
this.configs.ports.forEach((element) => {
|
|
1126
|
-
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;
|
|
1127
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
|
+
}
|
|
1128
1392
|
}
|
|
1129
1393
|
mapping() {
|
|
1130
1394
|
return [
|
|
@@ -1133,20 +1397,23 @@ ${addableFiles.map((x) => {
|
|
|
1133
1397
|
["closePage", this.closePage],
|
|
1134
1398
|
["createWriteStream", this.createWriteStream],
|
|
1135
1399
|
["customclose", this.customclose],
|
|
1136
|
-
["customScreenShot", this.customScreenShot],
|
|
1400
|
+
["customScreenShot", this.customScreenShot.bind(this)],
|
|
1137
1401
|
["end", this.end],
|
|
1138
1402
|
["existsSync", this.existsSync],
|
|
1139
1403
|
["focusOn", this.focusOn],
|
|
1140
1404
|
["getAttribute", this.getAttribute],
|
|
1141
|
-
["
|
|
1142
|
-
["
|
|
1405
|
+
["getInnerHtml", this.getInnerHtml],
|
|
1406
|
+
// ["setValue", this.setValue],
|
|
1407
|
+
["goto", this.goto.bind(this)],
|
|
1143
1408
|
["isDisabled", this.isDisabled],
|
|
1409
|
+
["launchSideCar", this.launchSideCar.bind(this)],
|
|
1144
1410
|
["mkdirSync", this.mkdirSync],
|
|
1145
1411
|
["newPage", this.newPage],
|
|
1146
1412
|
["page", this.page],
|
|
1147
1413
|
["pages", this.pages],
|
|
1148
1414
|
["screencast", this.screencast],
|
|
1149
1415
|
["screencastStop", this.screencastStop],
|
|
1416
|
+
["stopSideCar", this.stopSideCar.bind(this)],
|
|
1150
1417
|
["typeInto", this.typeInto],
|
|
1151
1418
|
["waitForSelector", this.waitForSelector],
|
|
1152
1419
|
["write", this.write],
|
|
@@ -1157,51 +1424,57 @@ ${addableFiles.map((x) => {
|
|
|
1157
1424
|
this.mapping().forEach(async ([command, func]) => {
|
|
1158
1425
|
globalThis[command] = func;
|
|
1159
1426
|
});
|
|
1160
|
-
if (!
|
|
1161
|
-
|
|
1427
|
+
if (!fs3.existsSync(`testeranto/reports/${this.name}`)) {
|
|
1428
|
+
fs3.mkdirSync(`testeranto/reports/${this.name}`);
|
|
1162
1429
|
}
|
|
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
|
-
|
|
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);
|
|
1205
1478
|
[
|
|
1206
1479
|
[
|
|
1207
1480
|
nodeEntryPoints,
|
|
@@ -1220,7 +1493,7 @@ ${addableFiles.map((x) => {
|
|
|
1220
1493
|
}
|
|
1221
1494
|
],
|
|
1222
1495
|
[
|
|
1223
|
-
|
|
1496
|
+
pureEntryPoints,
|
|
1224
1497
|
this.launchPure,
|
|
1225
1498
|
"pure",
|
|
1226
1499
|
(w) => {
|
|
@@ -1240,7 +1513,7 @@ ${addableFiles.map((x) => {
|
|
|
1240
1513
|
if (fileHashes[k] !== hash) {
|
|
1241
1514
|
fileHashes[k] = hash;
|
|
1242
1515
|
console.log(
|
|
1243
|
-
|
|
1516
|
+
ansiC2.yellow(ansiC2.inverse(`< ${e} ${filename}`))
|
|
1244
1517
|
);
|
|
1245
1518
|
launcher(k, outputFile);
|
|
1246
1519
|
}
|
|
@@ -1254,7 +1527,7 @@ ${addableFiles.map((x) => {
|
|
|
1254
1527
|
watcher(
|
|
1255
1528
|
watch(metafile, async (e, filename) => {
|
|
1256
1529
|
console.log(
|
|
1257
|
-
|
|
1530
|
+
ansiC2.yellow(ansiC2.inverse(`< ${e} ${filename} (${runtime})`))
|
|
1258
1531
|
);
|
|
1259
1532
|
this.metafileOutputs(runtime);
|
|
1260
1533
|
})
|
|
@@ -1262,8 +1535,10 @@ ${addableFiles.map((x) => {
|
|
|
1262
1535
|
}
|
|
1263
1536
|
);
|
|
1264
1537
|
}
|
|
1538
|
+
async launchExternalTest(externalTestName, externalTest) {
|
|
1539
|
+
}
|
|
1265
1540
|
async stop() {
|
|
1266
|
-
console.log(
|
|
1541
|
+
console.log(ansiC2.inverse("Testeranto-Run is shutting down gracefully..."));
|
|
1267
1542
|
this.mode = "once";
|
|
1268
1543
|
this.nodeMetafileWatcher.close();
|
|
1269
1544
|
this.webMetafileWatcher.close();
|
|
@@ -1272,7 +1547,7 @@ ${addableFiles.map((x) => {
|
|
|
1272
1547
|
}
|
|
1273
1548
|
async metafileOutputs(platform) {
|
|
1274
1549
|
const metafile = JSON.parse(
|
|
1275
|
-
|
|
1550
|
+
fs3.readFileSync(
|
|
1276
1551
|
`./testeranto/bundles/${platform}/${this.name}/metafile.json`
|
|
1277
1552
|
).toString()
|
|
1278
1553
|
).metafile;
|
|
@@ -1280,16 +1555,22 @@ ${addableFiles.map((x) => {
|
|
|
1280
1555
|
return;
|
|
1281
1556
|
const outputs = metafile.outputs;
|
|
1282
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
|
+
}
|
|
1283
1562
|
const addableFiles = Object.keys(outputs[k].inputs).filter((i) => {
|
|
1284
|
-
if (!
|
|
1563
|
+
if (!fs3.existsSync(i))
|
|
1285
1564
|
return false;
|
|
1286
1565
|
if (i.startsWith("node_modules"))
|
|
1287
1566
|
return false;
|
|
1567
|
+
if (i.startsWith("./node_modules"))
|
|
1568
|
+
return false;
|
|
1288
1569
|
return true;
|
|
1289
1570
|
});
|
|
1290
1571
|
const f = `${k.split(".").slice(0, -1).join(".")}/`;
|
|
1291
|
-
if (!
|
|
1292
|
-
|
|
1572
|
+
if (!fs3.existsSync(f)) {
|
|
1573
|
+
fs3.mkdirSync(f);
|
|
1293
1574
|
}
|
|
1294
1575
|
const entrypoint = outputs[k].entryPoint;
|
|
1295
1576
|
if (entrypoint) {
|
|
@@ -1314,10 +1595,10 @@ ${addableFiles.map((x) => {
|
|
|
1314
1595
|
readline.emitKeypressEvents(process.stdin);
|
|
1315
1596
|
if (process.stdin.isTTY)
|
|
1316
1597
|
process.stdin.setRawMode(true);
|
|
1317
|
-
console.log(
|
|
1598
|
+
console.log(ansiC3.inverse("Press 'x' to shutdown forcefully."));
|
|
1318
1599
|
process.stdin.on("keypress", (str, key) => {
|
|
1319
1600
|
if (key.name === "x") {
|
|
1320
|
-
console.log(
|
|
1601
|
+
console.log(ansiC3.inverse("Shutting down forcefully..."));
|
|
1321
1602
|
process.exit(-1);
|
|
1322
1603
|
}
|
|
1323
1604
|
});
|