@ohos-cpf/3rdloop 0.0.2 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +290 -244
- package/bin/3rdloop.mjs +46 -46
- package/lib/cli.js +781 -781
- package/lib/config-cmd.js +451 -451
- package/lib/config.js +318 -318
- package/lib/doctor.js +113 -113
- package/lib/exit-codes.js +30 -30
- package/lib/opencode.js +155 -155
- package/lib/orch.js +426 -426
- package/lib/queries.js +263 -263
- package/lib/step.js +325 -325
- package/lib/ui.js +222 -222
- package/lib/update.js +279 -279
- package/lib/workflow.js +308 -308
- package/lib/workflows.js +131 -131
- package/package.json +50 -50
- package/vendor/Server/Agent/SkillSelector/README.md +343 -343
- package/vendor/Server/Agent/SkillSelector/core/Agent.js +207 -207
- package/vendor/Server/Agent/SkillSelector/index.js +14 -14
- package/vendor/Server/Agent/SkillSelector/llm/llmClient.js +313 -313
- package/vendor/Server/Agent/SkillSelector/llm/prompts.js +161 -161
- package/vendor/Server/Agent/SkillSelector/llm/reactSteps.js +144 -144
- package/vendor/Server/Agent/SkillSelector/matcher/fuzzyMatcher.js +433 -433
- package/vendor/Server/Agent/SkillSelector/scanner/skillScanner.js +382 -382
- package/vendor/Server/Agent/SkillSelector/utils/actionWords.js +59 -59
- package/vendor/Server/Brain/AnalysisStrategies.js +422 -422
- package/vendor/Server/Brain/Brain.js +686 -686
- package/vendor/Server/Brain/DecompositionStrategies.js +621 -621
- package/vendor/Server/Brain/PlanPersistence.js +196 -196
- package/vendor/Server/Brain/SkillExecutor.js +251 -251
- package/vendor/Server/Brain/index.js +11 -11
- package/vendor/Server/CLI/cli.js +275 -275
- package/vendor/Server/CLI/deveco-code/index.js +71 -71
- package/vendor/Server/CLI/deveco-code.js +5 -5
- package/vendor/Server/CLI/opencode/index.js +817 -818
- package/vendor/Server/CLI/opencode.js +5 -5
- package/vendor/Server/DbUse/MessageArchive.js +61 -61
- package/vendor/Server/DbUse/StorageManager.js +107 -107
- package/vendor/Server/DbUse/adapters/BaseAdapter.js +94 -94
- package/vendor/Server/DbUse/adapters/FileAdapter.js +138 -138
- package/vendor/Server/DbUse/adapters/JsonAdapter.js +138 -138
- package/vendor/Server/DbUse/adapters/JsonlAdapter.js +114 -114
- package/vendor/Server/DbUse/adapters/SqliteAdapter.js +157 -157
- package/vendor/Server/DbUse/index.js +160 -160
- package/vendor/Server/DbUse/stores/SessionStore.js +279 -279
- package/vendor/Server/DbUse/stores/TaskExecutionStore.js +133 -133
- package/vendor/Server/DbUse/stores/TaskRegistryStore.js +262 -262
- package/vendor/Server/DbUse/stores/TaskStepStore.js +279 -279
- package/vendor/Server/FlexRunner/FlexRunner.js +1759 -1759
- package/vendor/Server/FlexRunner/index.js +12 -12
- package/vendor/Server/Knowledge/KnowledgeImporter.js +523 -523
- package/vendor/Server/Knowledge/KnowledgeManager.js +341 -341
- package/vendor/Server/Knowledge/index.js +33 -33
- package/vendor/Server/LoopEngine/LoopEngine.js +1133 -1133
- package/vendor/Server/LoopEngine/index.js +11 -11
- package/vendor/Server/Orchestrator/Orchestrator.js +0 -3
- package/vendor/Server/Orchestrator/StepNode.js +312 -312
- package/vendor/Server/Orchestrator/index.js +13 -13
- package/vendor/Server/Routes/controllers/BrainController.js +241 -241
- package/vendor/Server/Routes/controllers/FlexRunnerController.js +1125 -1125
- package/vendor/Server/Routes/controllers/HealthController.js +44 -44
- package/vendor/Server/Routes/controllers/KnowledgeImportController.js +355 -355
- package/vendor/Server/Routes/controllers/LoopEngineController.js +788 -788
- package/vendor/Server/Routes/controllers/StatsController.js +57 -57
- package/vendor/Server/Routes/controllers/StreamController.js +67 -67
- package/vendor/Server/Routes/library/logger.js +179 -179
- package/vendor/Server/Routes/library/zipArchive.js +172 -172
- package/vendor/Server/Routes/router/Router.js +204 -204
- package/vendor/Server/Routes/routes/brain.js +47 -47
- package/vendor/Server/Routes/routes/flexrunner.js +72 -72
- package/vendor/Server/Routes/routes/health.js +28 -28
- package/vendor/Server/Routes/routes/index.js +57 -57
- package/vendor/Server/Routes/routes/knowledge.js +55 -55
- package/vendor/Server/Routes/routes/loopengine.js +58 -58
- package/vendor/Server/Routes/routes/orchestrator.js +61 -61
- package/vendor/Server/Routes/routes/registry.js +97 -97
- package/vendor/Server/Routes/routes/stats.js +23 -23
- package/vendor/Server/Routes/routes/stream.js +30 -30
- package/vendor/Server/Routes/server.js +203 -203
- package/vendor/Server/Routes/sse/SseHub.js +308 -308
- package/vendor/Server/Skills/acceptance-check/SKILL.md +191 -191
- package/vendor/Server/Skills/acceptance-check/references/PHASE1_ARTIFACT_COLLECTION.md +52 -52
- package/vendor/Server/Skills/acceptance-check/references/PHASE2_CRITERIA_EVALUATION.md +77 -77
- package/vendor/Server/Skills/acceptance-check/references/PHASE2_EVIDENCE_VERIFICATION.md +70 -70
- package/vendor/Server/Skills/arkts-code-check/SKILL.md +320 -320
- package/vendor/Server/Skills/arkts-code-check/references/CODE_CHECK_GUIDE.md +210 -210
- package/vendor/Server/Skills/arkts-code-check/references/FILE_TYPE_GUIDE.md +28 -28
- package/vendor/Server/Skills/arkts-code-check/references/PHASE1_INFO_COLLECTION.md +233 -233
- package/vendor/Server/Skills/arkts-code-check/references/REPORT_TEMPLATE.md +219 -219
- package/vendor/Server/Skills/arkts-library-compile-validate/SKILL.md +328 -328
- package/vendor/Server/Skills/arkts-library-compile-validate/scripts/build.ps1 +93 -93
- package/vendor/Server/Skills/arkts-library-compile-validate/scripts/code-linter.cjs +432 -432
- package/vendor/Server/Skills/arkts-library-compile-validate/scripts/migrate.cjs +851 -851
- package/vendor/Server/Skills/arkts-library-compile-validate/scripts/ohpm-switch.cjs +788 -788
- package/vendor/Server/Skills/arkts-library-demo-code/SKILL.md +291 -291
- package/vendor/Server/Skills/arkts-library-demo-code/references/API_SIGNATURE_CHECKS.md +68 -68
- package/vendor/Server/Skills/arkts-library-demo-code/references/BUILD_VALIDATION.md +184 -184
- package/vendor/Server/Skills/arkts-library-demo-code/references/CODE_STANDARDS.md +337 -337
- package/vendor/Server/Skills/arkts-library-demo-code/references/EXAMPLES.md +400 -400
- package/vendor/Server/Skills/arkts-library-demo-code/references/SYSTEM_API_LOOKUP.md +98 -98
- package/vendor/Server/Skills/arkts-library-demo-code/references/TEMPLATE.md +544 -544
- package/vendor/Server/Skills/arkts-library-demo-code/scripts/build.ps1 +93 -93
- package/vendor/Server/Skills/arkts-library-demo-code/scripts/code-linter.cjs +432 -432
- package/vendor/Server/Skills/arkts-library-demo-code/scripts/migrate.cjs +851 -851
- package/vendor/Server/Skills/arkts-library-demo-code/scripts/ohpm-switch.cjs +788 -788
- package/vendor/Server/Skills/arkts-library-demo-coverage/SKILL.md +174 -174
- package/vendor/Server/Skills/arkts-library-demo-scenario/SKILL.md +321 -321
- package/vendor/Server/Skills/arkts-library-demo-scenario/references/EXAMPLES.md +100 -100
- package/vendor/Server/Skills/arkts-library-demo-scenario/references/TEMPLATE.md +185 -185
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/SKILL.md +233 -233
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/assets/REPORT_TEMPLATE.md +102 -102
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/CHECK_DIMENSIONS.md +89 -89
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/COMPLIANCE_CHECKLIST.md +62 -62
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/KB_QUERY_GUIDE.md +107 -107
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/MCP_TOOL_DISCOVERY.md +124 -124
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/REPORT_TEMPLATE.md +90 -90
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/SCORING_FORMULA.md +57 -57
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/scripts/validate-skill.cjs +259 -259
- package/vendor/Server/Skills/arkts-library-interface-spec/SKILL.md +97 -97
- package/vendor/Server/Skills/arkts-library-memory-leak-check/SKILL.md +391 -391
- package/vendor/Server/Skills/arkts-library-source-clone/SKILL.md +113 -113
- package/vendor/Server/Skills/arkts-library-stability-check/SKILL.md +312 -312
- package/vendor/Server/Skills/arkts-library-stability-check/assets/REPORT_TEMPLATE.md +154 -154
- package/vendor/Server/Skills/arkts-library-stability-check/references/CHECKLIST.md +165 -165
- package/vendor/Server/Skills/arkts-library-stability-check/references/CODE_EXAMPLES.md +308 -308
- package/vendor/Server/Skills/arkts-library-stability-check/references/SCORING_RULES.md +90 -90
- package/vendor/Server/Skills/arkts-library-stability-check/scripts/validate-skill.cjs +282 -282
- package/vendor/Server/Skills/arkts-library-test-coverage-check/SKILL.md +360 -360
- package/vendor/Server/Skills/arkts-library-test-coverage-check/assets/REPORT_TEMPLATE.md +145 -145
- package/vendor/Server/Skills/arkts-library-test-coverage-check/references/CHECKLIST.md +252 -252
- package/vendor/Server/Skills/arkts-library-test-coverage-check/references/MCP_TOOL_USAGE.md +114 -114
- package/vendor/Server/Skills/arkts-library-test-coverage-check/scripts/validate-skill.cjs +262 -262
- package/vendor/Server/Skills/arkts-library-xts-code/SKILL.md +455 -455
- package/vendor/Server/Skills/arkts-library-xts-code/assets/report-template.md +60 -60
- package/vendor/Server/Skills/arkts-library-xts-code/references/ACCESS_MODIFIER_PRECHECK.md +76 -76
- package/vendor/Server/Skills/arkts-library-xts-code/references/BUILD_VERIFICATION.md +200 -200
- package/vendor/Server/Skills/arkts-library-xts-code/references/CODE_STANDARDS.md +518 -518
- package/vendor/Server/Skills/arkts-library-xts-code/references/SUBAGENT_PROMPT_TEMPLATE.md +276 -276
- package/vendor/Server/Skills/arkts-library-xts-code/references/SYSTEM_API_LOOKUP.md +92 -92
- package/vendor/Server/Skills/arkts-library-xts-code/references/XTS_TEMPLATE.md +767 -767
- package/vendor/Server/Skills/arkts-library-xts-code/scripts/build.ps1 +93 -93
- package/vendor/Server/Skills/arkts-library-xts-code/scripts/code-linter.cjs +432 -432
- package/vendor/Server/Skills/arkts-library-xts-code/scripts/migrate.cjs +851 -851
- package/vendor/Server/Skills/arkts-library-xts-code/scripts/ohpm-switch.cjs +788 -788
- package/vendor/Server/Skills/arkts-library-xts-code/scripts/precheck-access-modifiers.cjs +221 -221
- package/vendor/Server/Skills/arkts-library-xts-code-fix/SKILL.md +228 -228
- package/vendor/Server/Skills/arkts-library-xts-coverage/SKILL.md +97 -97
- package/vendor/Server/Skills/arkts-library-xts-doc/SKILL.md +194 -194
- package/vendor/Server/Skills/arkts-library-xts-doc/references/EXAMPLES.md +575 -575
- package/vendor/Server/Skills/arkts-library-xts-doc/references/TEMPLATE.md +574 -574
- package/vendor/Server/Skills/arkts-library-xts-doc/references/TESTABILITY_GUIDE.md +182 -182
- package/vendor/Server/Skills/arkts-library-xts-execution/SKILL.md +490 -490
- package/vendor/Server/Skills/arkts-library-xts-execution/references/error-fixing-examples.md +217 -217
- package/vendor/Server/Skills/arkts-library-xts-execution/scripts/build.ps1 +93 -93
- package/vendor/Server/Skills/arkts-library-xts-execution/scripts/code-linter.cjs +432 -432
- package/vendor/Server/Skills/arkts-library-xts-execution/scripts/migrate.cjs +851 -851
- package/vendor/Server/Skills/arkts-library-xts-execution/scripts/ohpm-switch.cjs +788 -788
- package/vendor/Server/Skills/flutter-code-check/SKILL.md +299 -299
- package/vendor/Server/Skills/flutter-code-check/assets/OUTPUT_TEMPLATE.md +311 -311
- package/vendor/Server/Skills/flutter-code-check/references/CHECKLIST.md +190 -190
- package/vendor/Server/Skills/flutter-code-check/references/PLATFORMS.md +133 -133
- package/vendor/Server/Skills/flutter-code-check/scripts/validate-skill.cjs +259 -259
- package/vendor/Server/Skills/flutter-interface/README.md +75 -75
- package/vendor/Server/Skills/flutter-interface/SKILL.md +291 -291
- package/vendor/Server/Skills/flutter-interface/references/EXAMPLES.md +336 -336
- package/vendor/Server/Skills/flutter-interface/references/GIT_CLONE_GUIDE.md +190 -190
- package/vendor/Server/Skills/flutter-interface/references/SCRIPT_REFERENCE.md +258 -258
- package/vendor/Server/Skills/flutter-interface/references/TEMPLATE.md +254 -254
- package/vendor/Server/Skills/flutter-library-consistency-check/SKILL.md +517 -517
- package/vendor/Server/Skills/flutter-library-consistency-check/references/CHECKLIST.md +381 -381
- package/vendor/Server/Skills/flutter-library-consistency-check/references/FUNCTION_COMPARISON_GUIDE.md +341 -341
- package/vendor/Server/Skills/flutter-library-consistency-check/references/PLATFORM_LIMITATION_GUIDE.md +71 -71
- package/vendor/Server/Skills/flutter-library-documentation-quality-check/SKILL.md +518 -518
- package/vendor/Server/Skills/flutter-library-documentation-quality-check/references/CHECKLIST.md +406 -406
- package/vendor/Server/Skills/flutter-library-memory-leak-check/SKILL.md +652 -652
- package/vendor/Server/Skills/flutter-library-memory-leak-check/references/CHECKLIST.md +396 -396
- package/vendor/Server/Skills/flutter-library-stability-check/SKILL.md +744 -744
- package/vendor/Server/Skills/flutter-library-stability-check/references/CHECKLIST.md +720 -720
- package/vendor/Server/Skills/flutter-library-test-coverage-check/SKILL.md +414 -414
- package/vendor/Server/Skills/flutter-library-test-coverage-check/assets/REPORT_TEMPLATE.md +150 -150
- package/vendor/Server/Skills/flutter-library-test-coverage-check/references/CHECKLIST.md +304 -304
- package/vendor/Server/Skills/flutter-library-test-coverage-check/references/SCORING_RULES.md +265 -265
- package/vendor/Server/Skills/flutter-library-test-coverage-check/references/SCRIPT_USAGE.md +286 -286
- package/vendor/Server/Skills/knowledge-import/SKILL.md +383 -383
- package/vendor/Server/Skills/knowledge-import/references/MCP_TOOL_USAGE.md +165 -165
- package/vendor/Server/Skills/knowledge-import/references/SKILL_LOCATOR_GUIDE.md +91 -91
- package/vendor/Server/Skills/knowledge-import/references/SKILL_OPTIMIZATION_GUIDE.md +127 -127
- package/vendor/Server/Skills/ohos-lib-pr-push/SKILL.md +453 -301
- package/vendor/Server/Skills/ohos-lib-pr-push/assets/PR_CHECKLIST.md +151 -0
- package/vendor/Server/Skills/ohos-lib-pr-push/assets/PR_ISSUE_TEMPLATE.md +257 -105
- package/vendor/Server/Skills/ohos-lib-pr-push/references/GITCODE_API.md +191 -127
- package/vendor/Server/Skills/ohos-lib-pr-push/scripts/gitcode-api.cjs +317 -208
- package/vendor/Server/Skills/rn-code-check/SKILL.md +320 -320
- package/vendor/Server/Skills/rn-code-check/references/API-GUIDE.md +234 -234
- package/vendor/Server/Skills/rn-code-check/references/CHECKLIST.md +188 -188
- package/vendor/Server/Skills/rn-code-check/references/REPORT-TEMPLATE.md +246 -246
- package/vendor/Server/Skills/rn-lib-add-example/SKILL.md +198 -198
- package/vendor/Server/Skills/rn-lib-add-example/references/APP_RENAME_GUIDE.md +40 -40
- package/vendor/Server/Skills/rn-lib-add-example/references/SHELL_ADAPTATION_CHECKLIST.md +78 -78
- package/vendor/Server/Skills/rn-lib-add-example/references/TEMPLATE_REPO_GUIDE.md +70 -70
- package/vendor/Server/Skills/rn-lib-add-example/references/VERIFICATION_GUIDE.md +47 -47
- package/vendor/Server/Skills/rn-lib-add-example/scripts/create-example.cjs +252 -252
- package/vendor/Server/Skills/rn-lib-update-doc/SKILL.md +176 -176
- package/vendor/Server/Skills/rn-lib-update-doc/config.json +5 -5
- package/vendor/Server/Skills/rn-lib-update-doc/references/changelog-template.md +35 -35
- package/vendor/Server/Skills/rn-lib-update-doc/references/format-diff.md +137 -137
- package/vendor/Server/Skills/rn-lib-update-doc/references/link-registry.json +33 -33
- package/vendor/Server/Skills/rn-lib-update-doc/references/model-0.4.2-overview.md +40 -40
- package/vendor/Server/Skills/rn-lib-update-doc/references/model-0.4.2.md +429 -429
- package/vendor/Server/Skills/rn-lib-update-doc/scripts/detect-readme-format.cjs +105 -105
- package/vendor/Server/Skills/rn-lib-update-doc/scripts/find-usage-doc.cjs +90 -90
- package/vendor/Server/Skills/rn-lib-update-doc/scripts/link-verify.cjs +213 -213
- package/vendor/Server/Skills/rn-lib-update-doc/scripts/normalize-changelog.cjs +73 -73
- package/vendor/Server/Skills/rn-lib-update-doc/scripts/normalize-package-meta.cjs +258 -258
- package/vendor/Server/Skills/rn-lib-update-doc/scripts/normalize-readme-links.cjs +341 -341
- package/vendor/Server/Skills/rn-lib-update-doc/scripts/resolve-usage-docs.cjs +67 -67
- package/vendor/Server/Skills/rn-library-consistency-check/SKILL.md +299 -299
- package/vendor/Server/Skills/rn-library-consistency-check/assets/REPORT_TEMPLATE.md +293 -293
- package/vendor/Server/Skills/rn-library-consistency-check/references/ARKTS_COMPONENT_CHECK_GUIDE.md +857 -857
- package/vendor/Server/Skills/rn-library-consistency-check/references/ARKTS_TURBOMODULE_CHECK_GUIDE.md +856 -856
- package/vendor/Server/Skills/rn-library-consistency-check/references/CHECKLIST.md +157 -157
- package/vendor/Server/Skills/rn-library-consistency-check/references/CPP_COMPONENT_CHECK_GUIDE.md +801 -801
- package/vendor/Server/Skills/rn-library-consistency-check/references/CPP_TURBOMODULE_CHECK_GUIDE.md +683 -683
- package/vendor/Server/Skills/rn-library-consistency-check/references/FUNCTION_COMPARISON_GUIDE.md +233 -233
- package/vendor/Server/Skills/rn-library-consistency-check/references/NATIVE_COMPONENT_IDENTIFICATION.md +1373 -1373
- package/vendor/Server/Skills/rn-library-consistency-check/references/SCORING_STANDARD.md +220 -220
- package/vendor/Server/Skills/rn-library-consistency-check/scripts/validate-skill.py +245 -245
- package/vendor/Server/Skills/rn-library-documentation-quality-check/SKILL.md +263 -263
- package/vendor/Server/Skills/rn-library-documentation-quality-check/assets/MODEL.md +414 -414
- package/vendor/Server/Skills/rn-library-documentation-quality-check/assets/MODEL_en.md +413 -413
- package/vendor/Server/Skills/rn-library-documentation-quality-check/assets/REPORT_TEMPLATE.md +311 -311
- package/vendor/Server/Skills/rn-library-documentation-quality-check/references/CHECK_CHECKLIST.md +355 -355
- package/vendor/Server/Skills/rn-library-documentation-quality-check/references/CROSS_VALIDATION_GUIDE.md +115 -115
- package/vendor/Server/Skills/rn-library-documentation-quality-check/references/DOC_COLLECTION_GUIDE.md +139 -139
- package/vendor/Server/Skills/rn-library-documentation-quality-check/references/EXAMPLES.md +586 -586
- package/vendor/Server/Skills/rn-library-documentation-quality-check/references/GOTCHAS.md +57 -57
- package/vendor/Server/Skills/rn-library-documentation-quality-check/scripts/validate-skill.py +259 -259
- package/vendor/Server/Skills/rn-library-interface-analyzer/SKILL.md +301 -301
- package/vendor/Server/Skills/rn-library-interface-analyzer/assets/REPORT_TEMPLATE.md +148 -148
- package/vendor/Server/Skills/rn-library-interface-analyzer/references/DOC_ANNOTATION_GUIDE.md +118 -118
- package/vendor/Server/Skills/rn-library-interface-analyzer/references/SCRIPT_USAGE_GUIDE.md +168 -168
- package/vendor/Server/Skills/rn-library-interface-analyzer/references/URL_PARSING_RULES.md +176 -176
- package/vendor/Server/Skills/rn-library-issue-generalizer/SKILL.md +274 -274
- package/vendor/Server/Skills/rn-library-issue-generalizer/assets/case-template.md +45 -45
- package/vendor/Server/Skills/rn-library-issue-generalizer/assets/rule-template.md +25 -25
- package/vendor/Server/Skills/rn-library-issue-generalizer/references/PR_FETCH_GUIDE.md +61 -61
- package/vendor/Server/Skills/rn-library-issue-generalizer/references/RULE_TEMPLATE_GUIDE.md +165 -165
- package/vendor/Server/Skills/rn-library-issue-generalizer/scripts/fetch-pr-info.py +239 -239
- package/vendor/Server/Skills/rn-library-known-issue-check/SKILL.md +263 -263
- package/vendor/Server/Skills/rn-library-known-issue-check/assets/REPORT_TEMPLATE.md +96 -96
- package/vendor/Server/Skills/rn-library-known-issue-check/references/COMPLIANCE_CHECKLIST.md +57 -57
- package/vendor/Server/Skills/rn-library-known-issue-check/references/INSPECTION_GUIDE.md +99 -99
- package/vendor/Server/Skills/rn-library-known-issue-check/references/PRESCREEN_GUIDE.md +64 -64
- package/vendor/Server/Skills/rn-library-known-issue-check/references/SOURCE_PREP_GUIDE.md +74 -74
- package/vendor/Server/Skills/rn-library-known-issue-check/scripts/validate-known-issue-report.py +164 -164
- package/vendor/Server/Skills/rn-library-memory-leak-check/SKILL.md +356 -339
- package/vendor/Server/Skills/rn-library-memory-leak-check/assets/REPORT_TEMPLATE.md +85 -83
- package/vendor/Server/Skills/rn-library-memory-leak-check/references/CHECKLIST.md +905 -859
- package/vendor/Server/Skills/rn-library-memory-leak-check/references/HARMONY_CODE_PATTERNS.md +124 -122
- package/vendor/Server/Skills/rn-library-memory-leak-check/scripts/scan_harmony_code.py +287 -279
- package/vendor/Server/Skills/rn-library-stability-check/SKILL.md +273 -273
- package/vendor/Server/Skills/rn-library-stability-check/assets/REPORT_TEMPLATE.md +129 -129
- package/vendor/Server/Skills/rn-library-stability-check/references/CHECKLIST.md +581 -581
- package/vendor/Server/Skills/rn-library-stability-check/references/SCORING_RULES.md +138 -138
- package/vendor/Server/Skills/rn-library-stability-check/scripts/scan-harmony-code.py +168 -168
- package/vendor/Server/Skills/rn-library-test-coverage-check/SKILL.md +526 -506
- package/vendor/Server/Skills/rn-library-test-coverage-check/references/CHECKLIST.md +321 -280
- package/vendor/Server/Skills/rn-library-test-coverage-check/references/DEMO_LOCATION.md +221 -221
- package/vendor/Server/Skills/rn-library-test-coverage-check/references/REPORT_TEMPLATE.md +220 -209
- package/vendor/Server/Skills/rn-library-test-coverage-check/references/SCRIPT_USAGE.md +325 -325
- package/vendor/Server/Skills/rn-ohos-xts-generator/SKILL.md +279 -279
- package/vendor/Server/Skills/rn-ohos-xts-generator/assets/TEST_FILE_TEMPLATES.md +404 -404
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/BUILD_TROUBLESHOOTING.md +185 -185
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/BUILD_WORKFLOW.md +265 -265
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/COMMON_CONFIG.md +189 -189
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/CONFIG_GUIDE.md +203 -203
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/COVERAGE_ANALYZER.md +147 -147
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/DESIGN_DOC_GUIDE.md +148 -148
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/GENERATION_FLOW.md +165 -165
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/GENERATION_STRATEGY.md +195 -195
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/HARMONY_SCANNER.md +249 -249
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/JEST_FRAMEWORK.md +235 -235
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/PLATFORM_COMPAT.md +161 -161
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/RN_TEST_PATTERNS.md +413 -413
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/SOURCE_PARSER.md +235 -235
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/TEST_CONVENTIONS.md +245 -245
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/TROUBLESHOOTING.md +282 -282
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/USAGE_GUIDE.md +251 -251
- package/vendor/Server/Skills/rnoh-cptf-api-test/SKILL.md +469 -469
- package/vendor/Server/Skills/rnoh-cptf-api-test/assets/CPTF_TEST_TEMPLATE.md +310 -310
- package/vendor/Server/Skills/rnoh-cptf-api-test/assets/DEMO_PAGE_TEMPLATE.md +303 -303
- package/vendor/Server/Skills/rnoh-cptf-api-test/references/CPTF_TEST_GENERATION_GUIDE.md +421 -421
- package/vendor/Server/Skills/rnoh-cptf-api-test/references/DEMO_GENERATION_GUIDE.md +358 -358
- package/vendor/Server/Skills/rnoh-cptf-api-test/references/QUALITY_CHECKLIST.md +114 -114
- package/vendor/Server/Skills/rnoh-cptf-api-test/references/SPEC_PARSING_GUIDE.md +274 -274
- package/vendor/Server/Skills/rnoh-cptf-api-test/scripts/validate-rnoh-cptf-api-test.sh +185 -185
- package/vendor/Server/Skills/rnoh-cptf-demo-test/SKILL.md +191 -191
- package/vendor/Server/Skills/rnoh-cptf-demo-test/assets/TEST_TEMPLATE.md +216 -216
- package/vendor/Server/Skills/rnoh-cptf-demo-test/references/CPTF_SETUP.md +107 -107
- package/vendor/Server/Skills/rnoh-cptf-demo-test/references/DEMO_ANALYSIS.md +120 -120
- package/vendor/Server/Skills/rnoh-cptf-demo-test/scripts/validate-rnoh-cptf-test.sh +108 -108
- package/vendor/Server/Skills/rnoh-cptf-test-run/SKILL.md +237 -237
- package/vendor/Server/Skills/rnoh-cptf-test-run/references/DEBUG_PLAYBOOK.md +261 -261
- package/vendor/Server/Skills/rnoh-cptf-test-run/scripts/validate-run-env.sh +112 -112
- package/vendor/Server/Skills/rnoh-lib-code-adapt/SKILL.md +497 -497
- package/vendor/Server/Skills/rnoh-lib-code-adapt/references/adapt-checklist.md +270 -270
- package/vendor/Server/Skills/rnoh-lib-code-adapt/references/api-migration-checklist.md +164 -164
- package/vendor/Server/Skills/rnoh-lib-code-adapt/references/common-compile-errors.md +556 -556
- package/vendor/Server/Skills/rnoh-lib-code-adapt/references/deveco-cli-tools.md +459 -459
- package/vendor/Server/Skills/rnoh-lib-code-adapt/references/edge-cases.md +65 -65
- package/vendor/Server/Skills/rnoh-lib-code-adapt/references/har-tgz-build.md +512 -512
- package/vendor/Server/Skills/rnoh-lib-code-adapt/references/version-compat-matrix.md +132 -132
- package/vendor/Server/Skills/rnoh-lib-code-adapt/scripts/auto-integrate.sh +424 -424
- package/vendor/Server/Skills/rnoh-lib-demo-coverage/SKILL.md +137 -137
- package/vendor/Server/Skills/rnoh-lib-demo-create/SKILL.md +306 -306
- package/vendor/Server/Skills/rnoh-lib-demo-create/assets/DEMO_PAGE_TEMPLATE.md +485 -485
- package/vendor/Server/Skills/rnoh-lib-demo-create/assets/INDEX_TEMPLATE.md +172 -172
- package/vendor/Server/Skills/rnoh-lib-demo-create/references/DEMO_CODE_RULES.md +422 -422
- package/vendor/Server/Skills/rnoh-lib-demo-create/references/QUALITY_CHECKLIST.md +95 -95
- package/vendor/Server/Skills/rnoh-lib-demo-create/references/SOURCE_EXPLORATION.md +169 -169
- package/vendor/Server/Skills/rnoh-lib-demo-doc/SKILL.md +554 -554
- package/vendor/Server/Skills/rnoh-lib-demo-doc/assets/DEMO_DOC_TEMPLATE.md +106 -106
- package/vendor/Server/Skills/rnoh-lib-demo-doc/references/COVERAGE_INCREMENTAL.md +216 -216
- package/vendor/Server/Skills/rnoh-lib-demo-doc/references/DEMO_DESIGN_RULES.md +413 -413
- package/vendor/Server/Skills/rnoh-lib-demo-doc/references/OUTPUT_FORMAT.md +269 -269
- package/vendor/Server/Skills/rnoh-lib-demo-doc/references/QUALITY_CHECKLIST.md +98 -98
- package/vendor/Server/Skills/rnoh-lib-func-test/SKILL.md +337 -337
- package/vendor/Server/Skills/rnoh-lib-rnt-search/SKILL.md +722 -722
- package/vendor/Server/Skills/rnoh-lib-rnt-search/assets/PORT_REPORT_TEMPLATE.md +219 -219
- package/vendor/Server/Skills/rnoh-lib-rnt-search/references/DEMO_PORTING_GUIDE.md +345 -345
- package/vendor/Server/Skills/rnoh-lib-rnt-search/references/PORT_VERIFICATION.md +269 -269
- package/vendor/Server/Skills/rnoh-lib-rnt-search/references/RNT_PROJECT_STRUCTURE.md +173 -173
- package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/analyze-demo-deps.cjs +267 -267
- package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/detect-rnoh-version.cjs +174 -174
- package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/find-rnt-demo.sh +111 -111
- package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/port-demo.sh +186 -186
- package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/read-lib-meta.cjs +150 -150
- package/vendor/Server/Skills/rnoh-lib-test-align/SKILL.md +296 -296
- package/vendor/Server/Skills/rnoh-lib-test-align/references/jest-troubleshooting.md +371 -371
- package/vendor/Server/Skills/rnoh-lib-test-align/references/port-test-demo-guide.md +212 -212
- package/vendor/Server/Skills/rnoh-lib-test-align/references/runtime-troubleshooting.md +345 -345
- package/vendor/Server/Skills/rnoh-lib-test-align/references/unit-test-template.md +223 -223
- package/vendor/Server/Skills/rnoh-lib-test-align/scripts/port-test-demo.sh +1053 -1053
- package/vendor/Server/Skills/rnoh-lib-version-diff/SKILL.md +295 -255
- package/vendor/Server/Skills/rnoh-lib-version-diff/references/OHOS_ADAPTATION.md +82 -77
- package/vendor/Server/Skills/rnoh-lib-version-diff/references/OHOS_API_LOOKUP.md +224 -224
- package/vendor/Server/Skills/rnoh-lib-version-diff/references/script-reference.md +175 -174
- package/vendor/Server/Skills/rnoh-lib-version-diff/scripts/detect-upstream-version.js +967 -967
- package/vendor/Server/Skills/rnoh-lib-version-diff/scripts/generate-diff.js +1798 -1798
- package/vendor/Server/Skills/rnoh-lib-version-diff/scripts/package.json +5 -5
- package/vendor/Server/Skills/rnoh-lib-version-diff/templates/report-template.md +180 -137
- package/vendor/Server/Skills/rnoh-lib-xts-coverage/SKILL.md +145 -145
- package/vendor/Server/Skills/skill-generator/SKILL.md +365 -365
- package/vendor/Server/Skills/skill-generator/assets/SKILL_TEMPLATE.md +183 -183
- package/vendor/Server/Skills/skill-generator/references/COMPLIANCE_CHECKLIST.md +82 -82
- package/vendor/Server/Skills/skill-generator/references/KB_QUERY_GUIDE.md +110 -110
- package/vendor/Server/Skills/skill-generator/references/MCP_TOOL_DISCOVERY.md +122 -122
- package/vendor/Server/Skills/skill-generator/references/SKILL_SPEC.md +121 -121
- package/vendor/Server/Skills/skill-generator/scripts/validate-skill.cjs +259 -259
- package/vendor/Server/Skills/task-analysis/SKILL.md +234 -234
- package/vendor/Server/Skills/task-analysis/assets/OUTPUT_EXAMPLES.md +160 -160
- package/vendor/Server/Skills/task-analysis/references/ACCEPTANCE_CRITERIA_GUIDE.md +190 -190
- package/vendor/Server/Skills/task-analysis/references/ANALYSIS_SCHEMA.md +224 -224
- package/vendor/Server/Skills/task-analysis/references/INTEGRATION_CONTEXT.md +162 -162
- package/vendor/Server/Skills/task-analysis/references/LESSONS_LEARNED.md +55 -55
- package/vendor/Server/Skills/task-analysis/references/REPLAN_CONTEXT_GUIDE.md +126 -126
- package/vendor/Server/Skills/task-analysis/scripts/validate-analysis-output.sh +256 -256
- package/vendor/Server/Skills/task-decomposition/SKILL.md +528 -528
- package/vendor/Server/Skills/task-decomposition/assets/OUTPUT_EXAMPLES.md +451 -451
- package/vendor/Server/Skills/task-decomposition/references/ACCEPTANCE_CRITERIA_GUIDE.md +179 -179
- package/vendor/Server/Skills/task-decomposition/references/DEPENDENCY_GRAPH_GUIDE.md +152 -152
- package/vendor/Server/Skills/task-decomposition/references/INTEGRATION_CONTEXT.md +175 -175
- package/vendor/Server/Skills/task-decomposition/references/REPLAN_CONTEXT_GUIDE.md +195 -195
- package/vendor/Server/Skills/task-decomposition/references/TASK_DECOMPOSITION_TEMPLATES.md +226 -226
- package/vendor/Server/Skills/task-decomposition/scripts/list-available-skills.cjs +263 -263
- package/vendor/Server/Skills/task-decomposition/scripts/skill-blacklist.json +29 -29
- package/vendor/Server/Skills/task-decomposition/scripts/validate-decomposition-output.cjs +376 -376
- package/vendor/Server/Skills/task-decomposition/scripts/validate-param-consistency.cjs +259 -259
- package/vendor/Server/Skills/task-decomposition/scripts/validate-specified-skills.cjs +216 -216
- package/vendor/Server/Skills/task-decomposition/scripts/validate-step-graph.cjs +424 -424
- package/vendor/Server/Skills/tpc-cpp-check/SKILL.md +427 -427
- package/vendor/Server/Skills/tpc-cpp-check/references/CHECKLIST.md +214 -214
- package/vendor/Server/Skills/tpc-cpp-check/references/HPKBUILD_GUIDE.md +235 -235
- package/vendor/Server/Skills/tpc-cpp-check/references/REPORT_TEMPLATE.md +250 -250
- package/vendor/Server/TestCheck/TestCheck.js +775 -775
- package/vendor/Server/TestCheck/index.js +11 -11
- package/vendor/Server/library/McpToolGuide.js +280 -280
- package/vendor/Server/library/StatsService.js +126 -126
- package/vendor/Server/library/cstTime.js +16 -16
- package/vendor/VERSION +3 -3
- package/workflows/pr-check.mjs +105 -105
- package/workflows/pr-push.mjs +192 -192
- package/vendor/Server/Agent/SkillSelector/types.js +0 -63
|
@@ -1,404 +1,404 @@
|
|
|
1
|
-
# RN 三方库测试代码模板库
|
|
2
|
-
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
## 一、模板概述
|
|
6
|
-
|
|
7
|
-
本模块提供 RN 三方库 XTS 测试的各种 Jest 代码模板,包括 Mock 模板、测试文件头、TurboModule 测试、事件测试、组件测试等。
|
|
8
|
-
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
## 二、测试文件头模板
|
|
12
|
-
|
|
13
|
-
### 2.1 Apache 2.0 许可证头部
|
|
14
|
-
|
|
15
|
-
```typescript
|
|
16
|
-
/*
|
|
17
|
-
* Copyright (c) 2025 Huawei Device Co., Ltd.
|
|
18
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
19
|
-
* you may not use this file except in compliance with the License.
|
|
20
|
-
* You may obtain a copy of the License at
|
|
21
|
-
*
|
|
22
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
23
|
-
*
|
|
24
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
25
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
26
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
27
|
-
* See the License for the specific language governing permissions and
|
|
28
|
-
* limitations under the License.
|
|
29
|
-
*/
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
---
|
|
33
|
-
|
|
34
|
-
## 三、Mock 模块模板
|
|
35
|
-
|
|
36
|
-
### 3.1 完整 Mock 模块
|
|
37
|
-
|
|
38
|
-
```typescript
|
|
39
|
-
jest.mock('@react-native-ohos/react-native-audio', () => ({
|
|
40
|
-
AudioRecorder: {
|
|
41
|
-
prepareRecordingAtPath: jest.fn().mockReturnValue(true),
|
|
42
|
-
startRecording: jest.fn(),
|
|
43
|
-
stopRecording: jest.fn(),
|
|
44
|
-
pauseRecording: jest.fn(),
|
|
45
|
-
resumeRecording: jest.fn(),
|
|
46
|
-
requestAuthorization: jest.fn().mockResolvedValue(true),
|
|
47
|
-
isRecording: jest.fn().mockReturnValue(false),
|
|
48
|
-
onProgress: undefined,
|
|
49
|
-
onFinishRecording: undefined,
|
|
50
|
-
},
|
|
51
|
-
AudioUtils: {
|
|
52
|
-
FilesDirectoryPath: '/data/app/files',
|
|
53
|
-
CachesDirectoryPath: '/data/app/cache',
|
|
54
|
-
MainBundlePath: '/data/app/bundle',
|
|
55
|
-
},
|
|
56
|
-
}));
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
### 3.2 Mock 文件模板(__mocks__/@react-native-ohos/[库名]/index.ts)
|
|
60
|
-
|
|
61
|
-
```typescript
|
|
62
|
-
const audioMock = {
|
|
63
|
-
AudioRecorder: {
|
|
64
|
-
prepareRecordingAtPath: jest.fn().mockReturnValue(true),
|
|
65
|
-
startRecording: jest.fn(),
|
|
66
|
-
stopRecording: jest.fn(),
|
|
67
|
-
pauseRecording: jest.fn(),
|
|
68
|
-
resumeRecording: jest.fn(),
|
|
69
|
-
requestAuthorization: jest.fn().mockResolvedValue(true),
|
|
70
|
-
isRecording: jest.fn().mockReturnValue(false),
|
|
71
|
-
onProgress: undefined,
|
|
72
|
-
onFinishRecording: undefined,
|
|
73
|
-
},
|
|
74
|
-
AudioUtils: {
|
|
75
|
-
FilesDirectoryPath: '/data/app/files',
|
|
76
|
-
CachesDirectoryPath: '/data/app/cache',
|
|
77
|
-
MainBundlePath: '/data/app/bundle',
|
|
78
|
-
},
|
|
79
|
-
};
|
|
80
|
-
|
|
81
|
-
export default audioMock;
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
### 3.3 Mock 数据工厂
|
|
85
|
-
|
|
86
|
-
```typescript
|
|
87
|
-
export const createSuccessMock = () => ({
|
|
88
|
-
prepareRecordingAtPath: jest.fn().mockReturnValue(true),
|
|
89
|
-
requestAuthorization: jest.fn().mockResolvedValue(true),
|
|
90
|
-
isRecording: jest.fn().mockReturnValue(false),
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
export const createFailureMock = () => ({
|
|
94
|
-
prepareRecordingAtPath: jest.fn().mockReturnValue(false),
|
|
95
|
-
requestAuthorization: jest.fn().mockResolvedValue(false),
|
|
96
|
-
isRecording: jest.fn().mockReturnValue(false),
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
export const createErrorMock = (errorMessage: string) => ({
|
|
100
|
-
requestAuthorization: jest.fn().mockRejectedValue(new Error(errorMessage)),
|
|
101
|
-
});
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
---
|
|
105
|
-
|
|
106
|
-
## 四、完整测试文件模板
|
|
107
|
-
|
|
108
|
-
### 4.1 TurboModule 测试文件
|
|
109
|
-
|
|
110
|
-
```typescript
|
|
111
|
-
/*
|
|
112
|
-
* Copyright (c) 2025 Huawei Device Co., Ltd.
|
|
113
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
114
|
-
* ...
|
|
115
|
-
*/
|
|
116
|
-
|
|
117
|
-
jest.mock('@react-native-ohos/react-native-audio', () => ({
|
|
118
|
-
AudioRecorder: {
|
|
119
|
-
prepareRecordingAtPath: jest.fn().mockReturnValue(true),
|
|
120
|
-
startRecording: jest.fn(),
|
|
121
|
-
stopRecording: jest.fn(),
|
|
122
|
-
pauseRecording: jest.fn(),
|
|
123
|
-
resumeRecording: jest.fn(),
|
|
124
|
-
requestAuthorization: jest.fn().mockResolvedValue(true),
|
|
125
|
-
isRecording: jest.fn().mockReturnValue(false),
|
|
126
|
-
},
|
|
127
|
-
AudioUtils: {
|
|
128
|
-
FilesDirectoryPath: '/data/app/files',
|
|
129
|
-
CachesDirectoryPath: '/data/app/cache',
|
|
130
|
-
MainBundlePath: '/data/app/bundle',
|
|
131
|
-
},
|
|
132
|
-
}));
|
|
133
|
-
|
|
134
|
-
import { AudioRecorder, AudioUtils } from '@react-native-ohos/react-native-audio';
|
|
135
|
-
|
|
136
|
-
describe('AudioRecorderPrepareTest', () => {
|
|
137
|
-
let testPath: string;
|
|
138
|
-
let testOptions: Record<string, unknown>;
|
|
139
|
-
|
|
140
|
-
beforeEach(() => {
|
|
141
|
-
jest.clearAllMocks();
|
|
142
|
-
testPath = AudioUtils.FilesDirectoryPath + '/test_prepare.aac';
|
|
143
|
-
testOptions = { SampleRate: 22050, Channels: 1, AudioEncoding: 'aac' };
|
|
144
|
-
});
|
|
145
|
-
|
|
146
|
-
/**
|
|
147
|
-
* @tc.name should prepare recording with valid path and options
|
|
148
|
-
* @tc.number SUB_RNOH_AUDIO_PREPARE_PARAM_0001
|
|
149
|
-
* @tc.desc 测试 AudioRecorder 的 prepareRecordingAtPath 方法 - 正常参数场景.
|
|
150
|
-
* @tc.type FUNCTION
|
|
151
|
-
* @tc.size MEDIUMTEST
|
|
152
|
-
* @tc.level LEVEL1
|
|
153
|
-
*/
|
|
154
|
-
it('should prepare recording with valid path and options', () => {
|
|
155
|
-
AudioRecorder.prepareRecordingAtPath(testPath, testOptions);
|
|
156
|
-
expect(AudioRecorder.prepareRecordingAtPath).toHaveBeenCalledWith(testPath, testOptions);
|
|
157
|
-
expect(AudioRecorder.prepareRecordingAtPath).toHaveBeenCalledTimes(1);
|
|
158
|
-
});
|
|
159
|
-
|
|
160
|
-
/**
|
|
161
|
-
* @tc.name should return false when path is empty
|
|
162
|
-
* @tc.number SUB_RNOH_AUDIO_PREPARE_PARAM_0002
|
|
163
|
-
* @tc.desc 测试 AudioRecorder 的 prepareRecordingAtPath 方法 - 空路径场景.
|
|
164
|
-
* @tc.type FUNCTION
|
|
165
|
-
* @tc.size MEDIUMTEST
|
|
166
|
-
* @tc.level LEVEL2
|
|
167
|
-
*/
|
|
168
|
-
it('should return false when path is empty', () => {
|
|
169
|
-
(AudioRecorder.prepareRecordingAtPath as jest.Mock).mockReturnValue(false);
|
|
170
|
-
const result = AudioRecorder.prepareRecordingAtPath('', testOptions);
|
|
171
|
-
expect(result).toBe(false);
|
|
172
|
-
});
|
|
173
|
-
});
|
|
174
|
-
|
|
175
|
-
describe('AudioRecorderAuthorizationTest', () => {
|
|
176
|
-
beforeEach(() => {
|
|
177
|
-
jest.clearAllMocks();
|
|
178
|
-
});
|
|
179
|
-
|
|
180
|
-
/**
|
|
181
|
-
* @tc.name should resolve authorization to true
|
|
182
|
-
* @tc.number SUB_RNOH_AUDIO_GETAUTH_RETURN_0001
|
|
183
|
-
* @tc.desc 测试 AudioRecorder 的 requestAuthorization 方法 - 正常授权场景.
|
|
184
|
-
* @tc.type FUNCTION
|
|
185
|
-
* @tc.size MEDIUMTEST
|
|
186
|
-
* @tc.level LEVEL1
|
|
187
|
-
*/
|
|
188
|
-
it('should resolve authorization to true', async () => {
|
|
189
|
-
(AudioRecorder.requestAuthorization as jest.Mock).mockResolvedValue(true);
|
|
190
|
-
const result = await AudioRecorder.requestAuthorization();
|
|
191
|
-
expect(result).toBe(true);
|
|
192
|
-
expect(AudioRecorder.requestAuthorization).toHaveBeenCalledTimes(1);
|
|
193
|
-
});
|
|
194
|
-
});
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
### 4.2 事件测试文件
|
|
198
|
-
|
|
199
|
-
```typescript
|
|
200
|
-
/*
|
|
201
|
-
* Copyright (c) 2025 Huawei Device Co., Ltd.
|
|
202
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
203
|
-
* ...
|
|
204
|
-
*/
|
|
205
|
-
|
|
206
|
-
jest.mock('@react-native-ohos/react-native-audio', () => ({
|
|
207
|
-
AudioRecorder: {
|
|
208
|
-
prepareRecordingAtPath: jest.fn().mockReturnValue(true),
|
|
209
|
-
startRecording: jest.fn(),
|
|
210
|
-
stopRecording: jest.fn(),
|
|
211
|
-
onProgress: undefined,
|
|
212
|
-
onFinishRecording: undefined,
|
|
213
|
-
},
|
|
214
|
-
AudioUtils: {
|
|
215
|
-
FilesDirectoryPath: '/data/app/files',
|
|
216
|
-
},
|
|
217
|
-
}));
|
|
218
|
-
|
|
219
|
-
import { AudioRecorder, AudioUtils } from '@react-native-ohos/react-native-audio';
|
|
220
|
-
|
|
221
|
-
describe('AudioRecorderProgressEventTest', () => {
|
|
222
|
-
beforeEach(() => {
|
|
223
|
-
jest.clearAllMocks();
|
|
224
|
-
});
|
|
225
|
-
|
|
226
|
-
afterEach(() => {
|
|
227
|
-
AudioRecorder.onProgress = undefined;
|
|
228
|
-
AudioRecorder.onFinishRecording = undefined;
|
|
229
|
-
});
|
|
230
|
-
|
|
231
|
-
/**
|
|
232
|
-
* @tc.name should invoke onProgress callback with correct data
|
|
233
|
-
* @tc.number SUB_RNOH_AUDIO_PROGRESS_EVENT_0001
|
|
234
|
-
* @tc.desc 测试 AudioRecorder 的 onProgress 事件 - 录音进度回调.
|
|
235
|
-
* @tc.type EVENT
|
|
236
|
-
* @tc.size MEDIUMTEST
|
|
237
|
-
* @tc.level LEVEL1
|
|
238
|
-
*/
|
|
239
|
-
it('should invoke onProgress callback with correct data', () => {
|
|
240
|
-
const mockProgress = jest.fn();
|
|
241
|
-
AudioRecorder.onProgress = mockProgress;
|
|
242
|
-
|
|
243
|
-
const progressData = { currentTime: 1.5 };
|
|
244
|
-
mockProgress(progressData);
|
|
245
|
-
|
|
246
|
-
expect(mockProgress).toHaveBeenCalledWith(progressData);
|
|
247
|
-
expect(mockProgress).toHaveBeenCalledTimes(1);
|
|
248
|
-
});
|
|
249
|
-
|
|
250
|
-
/**
|
|
251
|
-
* @tc.name should invoke onFinishRecording with status and audioFileURL
|
|
252
|
-
* @tc.number SUB_RNOH_AUDIO_FINISH_EVENT_0001
|
|
253
|
-
* @tc.desc 测试 AudioRecorder 的 onFinishRecording 事件 - 录音完成回调.
|
|
254
|
-
* @tc.type EVENT
|
|
255
|
-
* @tc.size MEDIUMTEST
|
|
256
|
-
* @tc.level LEVEL1
|
|
257
|
-
*/
|
|
258
|
-
it('should invoke onFinishRecording with status and audioFileURL', () => {
|
|
259
|
-
const mockFinish = jest.fn();
|
|
260
|
-
AudioRecorder.onFinishRecording = mockFinish;
|
|
261
|
-
|
|
262
|
-
const finishData = { status: 'OK', audioFileURL: '/data/app/files/test.aac' };
|
|
263
|
-
mockFinish(finishData);
|
|
264
|
-
|
|
265
|
-
expect(mockFinish).toHaveBeenCalledWith(finishData);
|
|
266
|
-
expect(mockFinish).toHaveBeenCalledTimes(1);
|
|
267
|
-
});
|
|
268
|
-
});
|
|
269
|
-
```
|
|
270
|
-
|
|
271
|
-
### 4.3 常量测试文件
|
|
272
|
-
|
|
273
|
-
```typescript
|
|
274
|
-
/*
|
|
275
|
-
* Copyright (c) 2025 Huawei Device Co., Ltd.
|
|
276
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
277
|
-
* ...
|
|
278
|
-
*/
|
|
279
|
-
|
|
280
|
-
jest.mock('@react-native-ohos/react-native-audio', () => ({
|
|
281
|
-
AudioUtils: {
|
|
282
|
-
FilesDirectoryPath: '/data/app/files',
|
|
283
|
-
CachesDirectoryPath: '/data/app/cache',
|
|
284
|
-
MainBundlePath: '/data/app/bundle',
|
|
285
|
-
},
|
|
286
|
-
}));
|
|
287
|
-
|
|
288
|
-
import { AudioUtils } from '@react-native-ohos/react-native-audio';
|
|
289
|
-
|
|
290
|
-
describe('AudioUtilsConstantsTest', () => {
|
|
291
|
-
/**
|
|
292
|
-
* @tc.name should export non-empty FilesDirectoryPath
|
|
293
|
-
* @tc.number SUB_RNOH_AUDIO_UTILS_RETURN_0001
|
|
294
|
-
* @tc.desc 测试 AudioUtils.FilesDirectoryPath 常量 - 非空验证.
|
|
295
|
-
* @tc.type FUNCTION
|
|
296
|
-
* @tc.size SMALLTEST
|
|
297
|
-
* @tc.level LEVEL1
|
|
298
|
-
*/
|
|
299
|
-
it('should export non-empty FilesDirectoryPath', () => {
|
|
300
|
-
expect(AudioUtils.FilesDirectoryPath).toBeDefined();
|
|
301
|
-
expect(typeof AudioUtils.FilesDirectoryPath).toBe('string');
|
|
302
|
-
expect(AudioUtils.FilesDirectoryPath.length).toBeGreaterThan(0);
|
|
303
|
-
});
|
|
304
|
-
|
|
305
|
-
/**
|
|
306
|
-
* @tc.name should export non-empty CachesDirectoryPath
|
|
307
|
-
* @tc.number SUB_RNOH_AUDIO_UTILS_RETURN_0002
|
|
308
|
-
* @tc.desc 测试 AudioUtils.CachesDirectoryPath 常量 - 非空验证.
|
|
309
|
-
* @tc.type FUNCTION
|
|
310
|
-
* @tc.size SMALLTEST
|
|
311
|
-
* @tc.level LEVEL1
|
|
312
|
-
*/
|
|
313
|
-
it('should export non-empty CachesDirectoryPath', () => {
|
|
314
|
-
expect(AudioUtils.CachesDirectoryPath).toBeDefined();
|
|
315
|
-
expect(typeof AudioUtils.CachesDirectoryPath).toBe('string');
|
|
316
|
-
expect(AudioUtils.CachesDirectoryPath.length).toBeGreaterThan(0);
|
|
317
|
-
});
|
|
318
|
-
});
|
|
319
|
-
```
|
|
320
|
-
|
|
321
|
-
---
|
|
322
|
-
|
|
323
|
-
## 五、测试用例片段模板
|
|
324
|
-
|
|
325
|
-
### 5.1 同步方法 - 正常参数
|
|
326
|
-
|
|
327
|
-
```typescript
|
|
328
|
-
it('should call {methodName} with correct arguments', () => {
|
|
329
|
-
{ModuleName}.{methodName}({正常参数});
|
|
330
|
-
expect({ModuleName}.{methodName}).toHaveBeenCalledWith({正常参数});
|
|
331
|
-
expect({ModuleName}.{methodName}).toHaveBeenCalledTimes(1);
|
|
332
|
-
});
|
|
333
|
-
```
|
|
334
|
-
|
|
335
|
-
### 5.2 同步方法 - 错误参数
|
|
336
|
-
|
|
337
|
-
```typescript
|
|
338
|
-
it('should return false when {condition}', () => {
|
|
339
|
-
({ModuleName}.{methodName} as jest.Mock).mockReturnValue(false);
|
|
340
|
-
const result = {ModuleName}.{methodName}({错误参数});
|
|
341
|
-
expect(result).toBe(false);
|
|
342
|
-
});
|
|
343
|
-
```
|
|
344
|
-
|
|
345
|
-
### 5.3 异步方法 - 正常返回
|
|
346
|
-
|
|
347
|
-
```typescript
|
|
348
|
-
it('should resolve {methodName} to {expectedValue}', async () => {
|
|
349
|
-
({ModuleName}.{methodName} as jest.Mock).mockResolvedValue({expectedValue});
|
|
350
|
-
const result = await {ModuleName}.{methodName}({正常参数});
|
|
351
|
-
expect(result).toBe({expectedValue});
|
|
352
|
-
expect({ModuleName}.{methodName}).toHaveBeenCalledTimes(1);
|
|
353
|
-
});
|
|
354
|
-
```
|
|
355
|
-
|
|
356
|
-
### 5.4 异步方法 - 错误返回
|
|
357
|
-
|
|
358
|
-
```typescript
|
|
359
|
-
it('should reject {methodName} with error', async () => {
|
|
360
|
-
({ModuleName}.{methodName} as jest.Mock).mockRejectedValue(new Error('{errorMessage}'));
|
|
361
|
-
await expect({ModuleName}.{methodName}({参数})).rejects.toThrow('{errorMessage}');
|
|
362
|
-
});
|
|
363
|
-
```
|
|
364
|
-
|
|
365
|
-
### 5.5 事件回调 - 基本验证
|
|
366
|
-
|
|
367
|
-
```typescript
|
|
368
|
-
it('should invoke {eventName} callback with correct data', () => {
|
|
369
|
-
const mockCallback = jest.fn();
|
|
370
|
-
{ModuleName}.{eventName} = mockCallback;
|
|
371
|
-
const eventData = { /* 事件数据 */ };
|
|
372
|
-
mockCallback(eventData);
|
|
373
|
-
expect(mockCallback).toHaveBeenCalledWith(eventData);
|
|
374
|
-
expect(mockCallback).toHaveBeenCalledTimes(1);
|
|
375
|
-
});
|
|
376
|
-
```
|
|
377
|
-
|
|
378
|
-
### 5.6 状态转换测试
|
|
379
|
-
|
|
380
|
-
```typescript
|
|
381
|
-
it('should transition through {state1}->{state2}->{state3}', () => {
|
|
382
|
-
({ModuleName}.{getState} as jest.Mock).mockReturnValue({初始状态});
|
|
383
|
-
{ModuleName}.{触发操作}();
|
|
384
|
-
expect({ModuleName}.{getState}()).toBe({转换后状态});
|
|
385
|
-
});
|
|
386
|
-
```
|
|
387
|
-
|
|
388
|
-
---
|
|
389
|
-
|
|
390
|
-
## 六、导入语句模板
|
|
391
|
-
|
|
392
|
-
### 6.1 标准导入(Jest 测试)
|
|
393
|
-
|
|
394
|
-
```typescript
|
|
395
|
-
// jest.mock() 必须在 import 之前(Jest 会自动提升)
|
|
396
|
-
jest.mock('@react-native-ohos/react-native-audio', () => ({ ... }));
|
|
397
|
-
|
|
398
|
-
// RN 三方库
|
|
399
|
-
import { ModuleName, UtilsName } from '@react-native-ohos/react-native-{name}';
|
|
400
|
-
```
|
|
401
|
-
|
|
402
|
-
### 6.2 导入合并规则
|
|
403
|
-
|
|
404
|
-
同一包名的导入必须合并为一条语句。
|
|
1
|
+
# RN 三方库测试代码模板库
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
## 一、模板概述
|
|
6
|
+
|
|
7
|
+
本模块提供 RN 三方库 XTS 测试的各种 Jest 代码模板,包括 Mock 模板、测试文件头、TurboModule 测试、事件测试、组件测试等。
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 二、测试文件头模板
|
|
12
|
+
|
|
13
|
+
### 2.1 Apache 2.0 许可证头部
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
/*
|
|
17
|
+
* Copyright (c) 2025 Huawei Device Co., Ltd.
|
|
18
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
19
|
+
* you may not use this file except in compliance with the License.
|
|
20
|
+
* You may obtain a copy of the License at
|
|
21
|
+
*
|
|
22
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
23
|
+
*
|
|
24
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
25
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
26
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
27
|
+
* See the License for the specific language governing permissions and
|
|
28
|
+
* limitations under the License.
|
|
29
|
+
*/
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## 三、Mock 模块模板
|
|
35
|
+
|
|
36
|
+
### 3.1 完整 Mock 模块
|
|
37
|
+
|
|
38
|
+
```typescript
|
|
39
|
+
jest.mock('@react-native-ohos/react-native-audio', () => ({
|
|
40
|
+
AudioRecorder: {
|
|
41
|
+
prepareRecordingAtPath: jest.fn().mockReturnValue(true),
|
|
42
|
+
startRecording: jest.fn(),
|
|
43
|
+
stopRecording: jest.fn(),
|
|
44
|
+
pauseRecording: jest.fn(),
|
|
45
|
+
resumeRecording: jest.fn(),
|
|
46
|
+
requestAuthorization: jest.fn().mockResolvedValue(true),
|
|
47
|
+
isRecording: jest.fn().mockReturnValue(false),
|
|
48
|
+
onProgress: undefined,
|
|
49
|
+
onFinishRecording: undefined,
|
|
50
|
+
},
|
|
51
|
+
AudioUtils: {
|
|
52
|
+
FilesDirectoryPath: '/data/app/files',
|
|
53
|
+
CachesDirectoryPath: '/data/app/cache',
|
|
54
|
+
MainBundlePath: '/data/app/bundle',
|
|
55
|
+
},
|
|
56
|
+
}));
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### 3.2 Mock 文件模板(__mocks__/@react-native-ohos/[库名]/index.ts)
|
|
60
|
+
|
|
61
|
+
```typescript
|
|
62
|
+
const audioMock = {
|
|
63
|
+
AudioRecorder: {
|
|
64
|
+
prepareRecordingAtPath: jest.fn().mockReturnValue(true),
|
|
65
|
+
startRecording: jest.fn(),
|
|
66
|
+
stopRecording: jest.fn(),
|
|
67
|
+
pauseRecording: jest.fn(),
|
|
68
|
+
resumeRecording: jest.fn(),
|
|
69
|
+
requestAuthorization: jest.fn().mockResolvedValue(true),
|
|
70
|
+
isRecording: jest.fn().mockReturnValue(false),
|
|
71
|
+
onProgress: undefined,
|
|
72
|
+
onFinishRecording: undefined,
|
|
73
|
+
},
|
|
74
|
+
AudioUtils: {
|
|
75
|
+
FilesDirectoryPath: '/data/app/files',
|
|
76
|
+
CachesDirectoryPath: '/data/app/cache',
|
|
77
|
+
MainBundlePath: '/data/app/bundle',
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
export default audioMock;
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### 3.3 Mock 数据工厂
|
|
85
|
+
|
|
86
|
+
```typescript
|
|
87
|
+
export const createSuccessMock = () => ({
|
|
88
|
+
prepareRecordingAtPath: jest.fn().mockReturnValue(true),
|
|
89
|
+
requestAuthorization: jest.fn().mockResolvedValue(true),
|
|
90
|
+
isRecording: jest.fn().mockReturnValue(false),
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
export const createFailureMock = () => ({
|
|
94
|
+
prepareRecordingAtPath: jest.fn().mockReturnValue(false),
|
|
95
|
+
requestAuthorization: jest.fn().mockResolvedValue(false),
|
|
96
|
+
isRecording: jest.fn().mockReturnValue(false),
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
export const createErrorMock = (errorMessage: string) => ({
|
|
100
|
+
requestAuthorization: jest.fn().mockRejectedValue(new Error(errorMessage)),
|
|
101
|
+
});
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## 四、完整测试文件模板
|
|
107
|
+
|
|
108
|
+
### 4.1 TurboModule 测试文件
|
|
109
|
+
|
|
110
|
+
```typescript
|
|
111
|
+
/*
|
|
112
|
+
* Copyright (c) 2025 Huawei Device Co., Ltd.
|
|
113
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
114
|
+
* ...
|
|
115
|
+
*/
|
|
116
|
+
|
|
117
|
+
jest.mock('@react-native-ohos/react-native-audio', () => ({
|
|
118
|
+
AudioRecorder: {
|
|
119
|
+
prepareRecordingAtPath: jest.fn().mockReturnValue(true),
|
|
120
|
+
startRecording: jest.fn(),
|
|
121
|
+
stopRecording: jest.fn(),
|
|
122
|
+
pauseRecording: jest.fn(),
|
|
123
|
+
resumeRecording: jest.fn(),
|
|
124
|
+
requestAuthorization: jest.fn().mockResolvedValue(true),
|
|
125
|
+
isRecording: jest.fn().mockReturnValue(false),
|
|
126
|
+
},
|
|
127
|
+
AudioUtils: {
|
|
128
|
+
FilesDirectoryPath: '/data/app/files',
|
|
129
|
+
CachesDirectoryPath: '/data/app/cache',
|
|
130
|
+
MainBundlePath: '/data/app/bundle',
|
|
131
|
+
},
|
|
132
|
+
}));
|
|
133
|
+
|
|
134
|
+
import { AudioRecorder, AudioUtils } from '@react-native-ohos/react-native-audio';
|
|
135
|
+
|
|
136
|
+
describe('AudioRecorderPrepareTest', () => {
|
|
137
|
+
let testPath: string;
|
|
138
|
+
let testOptions: Record<string, unknown>;
|
|
139
|
+
|
|
140
|
+
beforeEach(() => {
|
|
141
|
+
jest.clearAllMocks();
|
|
142
|
+
testPath = AudioUtils.FilesDirectoryPath + '/test_prepare.aac';
|
|
143
|
+
testOptions = { SampleRate: 22050, Channels: 1, AudioEncoding: 'aac' };
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* @tc.name should prepare recording with valid path and options
|
|
148
|
+
* @tc.number SUB_RNOH_AUDIO_PREPARE_PARAM_0001
|
|
149
|
+
* @tc.desc 测试 AudioRecorder 的 prepareRecordingAtPath 方法 - 正常参数场景.
|
|
150
|
+
* @tc.type FUNCTION
|
|
151
|
+
* @tc.size MEDIUMTEST
|
|
152
|
+
* @tc.level LEVEL1
|
|
153
|
+
*/
|
|
154
|
+
it('should prepare recording with valid path and options', () => {
|
|
155
|
+
AudioRecorder.prepareRecordingAtPath(testPath, testOptions);
|
|
156
|
+
expect(AudioRecorder.prepareRecordingAtPath).toHaveBeenCalledWith(testPath, testOptions);
|
|
157
|
+
expect(AudioRecorder.prepareRecordingAtPath).toHaveBeenCalledTimes(1);
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* @tc.name should return false when path is empty
|
|
162
|
+
* @tc.number SUB_RNOH_AUDIO_PREPARE_PARAM_0002
|
|
163
|
+
* @tc.desc 测试 AudioRecorder 的 prepareRecordingAtPath 方法 - 空路径场景.
|
|
164
|
+
* @tc.type FUNCTION
|
|
165
|
+
* @tc.size MEDIUMTEST
|
|
166
|
+
* @tc.level LEVEL2
|
|
167
|
+
*/
|
|
168
|
+
it('should return false when path is empty', () => {
|
|
169
|
+
(AudioRecorder.prepareRecordingAtPath as jest.Mock).mockReturnValue(false);
|
|
170
|
+
const result = AudioRecorder.prepareRecordingAtPath('', testOptions);
|
|
171
|
+
expect(result).toBe(false);
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
describe('AudioRecorderAuthorizationTest', () => {
|
|
176
|
+
beforeEach(() => {
|
|
177
|
+
jest.clearAllMocks();
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* @tc.name should resolve authorization to true
|
|
182
|
+
* @tc.number SUB_RNOH_AUDIO_GETAUTH_RETURN_0001
|
|
183
|
+
* @tc.desc 测试 AudioRecorder 的 requestAuthorization 方法 - 正常授权场景.
|
|
184
|
+
* @tc.type FUNCTION
|
|
185
|
+
* @tc.size MEDIUMTEST
|
|
186
|
+
* @tc.level LEVEL1
|
|
187
|
+
*/
|
|
188
|
+
it('should resolve authorization to true', async () => {
|
|
189
|
+
(AudioRecorder.requestAuthorization as jest.Mock).mockResolvedValue(true);
|
|
190
|
+
const result = await AudioRecorder.requestAuthorization();
|
|
191
|
+
expect(result).toBe(true);
|
|
192
|
+
expect(AudioRecorder.requestAuthorization).toHaveBeenCalledTimes(1);
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
### 4.2 事件测试文件
|
|
198
|
+
|
|
199
|
+
```typescript
|
|
200
|
+
/*
|
|
201
|
+
* Copyright (c) 2025 Huawei Device Co., Ltd.
|
|
202
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
203
|
+
* ...
|
|
204
|
+
*/
|
|
205
|
+
|
|
206
|
+
jest.mock('@react-native-ohos/react-native-audio', () => ({
|
|
207
|
+
AudioRecorder: {
|
|
208
|
+
prepareRecordingAtPath: jest.fn().mockReturnValue(true),
|
|
209
|
+
startRecording: jest.fn(),
|
|
210
|
+
stopRecording: jest.fn(),
|
|
211
|
+
onProgress: undefined,
|
|
212
|
+
onFinishRecording: undefined,
|
|
213
|
+
},
|
|
214
|
+
AudioUtils: {
|
|
215
|
+
FilesDirectoryPath: '/data/app/files',
|
|
216
|
+
},
|
|
217
|
+
}));
|
|
218
|
+
|
|
219
|
+
import { AudioRecorder, AudioUtils } from '@react-native-ohos/react-native-audio';
|
|
220
|
+
|
|
221
|
+
describe('AudioRecorderProgressEventTest', () => {
|
|
222
|
+
beforeEach(() => {
|
|
223
|
+
jest.clearAllMocks();
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
afterEach(() => {
|
|
227
|
+
AudioRecorder.onProgress = undefined;
|
|
228
|
+
AudioRecorder.onFinishRecording = undefined;
|
|
229
|
+
});
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* @tc.name should invoke onProgress callback with correct data
|
|
233
|
+
* @tc.number SUB_RNOH_AUDIO_PROGRESS_EVENT_0001
|
|
234
|
+
* @tc.desc 测试 AudioRecorder 的 onProgress 事件 - 录音进度回调.
|
|
235
|
+
* @tc.type EVENT
|
|
236
|
+
* @tc.size MEDIUMTEST
|
|
237
|
+
* @tc.level LEVEL1
|
|
238
|
+
*/
|
|
239
|
+
it('should invoke onProgress callback with correct data', () => {
|
|
240
|
+
const mockProgress = jest.fn();
|
|
241
|
+
AudioRecorder.onProgress = mockProgress;
|
|
242
|
+
|
|
243
|
+
const progressData = { currentTime: 1.5 };
|
|
244
|
+
mockProgress(progressData);
|
|
245
|
+
|
|
246
|
+
expect(mockProgress).toHaveBeenCalledWith(progressData);
|
|
247
|
+
expect(mockProgress).toHaveBeenCalledTimes(1);
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* @tc.name should invoke onFinishRecording with status and audioFileURL
|
|
252
|
+
* @tc.number SUB_RNOH_AUDIO_FINISH_EVENT_0001
|
|
253
|
+
* @tc.desc 测试 AudioRecorder 的 onFinishRecording 事件 - 录音完成回调.
|
|
254
|
+
* @tc.type EVENT
|
|
255
|
+
* @tc.size MEDIUMTEST
|
|
256
|
+
* @tc.level LEVEL1
|
|
257
|
+
*/
|
|
258
|
+
it('should invoke onFinishRecording with status and audioFileURL', () => {
|
|
259
|
+
const mockFinish = jest.fn();
|
|
260
|
+
AudioRecorder.onFinishRecording = mockFinish;
|
|
261
|
+
|
|
262
|
+
const finishData = { status: 'OK', audioFileURL: '/data/app/files/test.aac' };
|
|
263
|
+
mockFinish(finishData);
|
|
264
|
+
|
|
265
|
+
expect(mockFinish).toHaveBeenCalledWith(finishData);
|
|
266
|
+
expect(mockFinish).toHaveBeenCalledTimes(1);
|
|
267
|
+
});
|
|
268
|
+
});
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
### 4.3 常量测试文件
|
|
272
|
+
|
|
273
|
+
```typescript
|
|
274
|
+
/*
|
|
275
|
+
* Copyright (c) 2025 Huawei Device Co., Ltd.
|
|
276
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
277
|
+
* ...
|
|
278
|
+
*/
|
|
279
|
+
|
|
280
|
+
jest.mock('@react-native-ohos/react-native-audio', () => ({
|
|
281
|
+
AudioUtils: {
|
|
282
|
+
FilesDirectoryPath: '/data/app/files',
|
|
283
|
+
CachesDirectoryPath: '/data/app/cache',
|
|
284
|
+
MainBundlePath: '/data/app/bundle',
|
|
285
|
+
},
|
|
286
|
+
}));
|
|
287
|
+
|
|
288
|
+
import { AudioUtils } from '@react-native-ohos/react-native-audio';
|
|
289
|
+
|
|
290
|
+
describe('AudioUtilsConstantsTest', () => {
|
|
291
|
+
/**
|
|
292
|
+
* @tc.name should export non-empty FilesDirectoryPath
|
|
293
|
+
* @tc.number SUB_RNOH_AUDIO_UTILS_RETURN_0001
|
|
294
|
+
* @tc.desc 测试 AudioUtils.FilesDirectoryPath 常量 - 非空验证.
|
|
295
|
+
* @tc.type FUNCTION
|
|
296
|
+
* @tc.size SMALLTEST
|
|
297
|
+
* @tc.level LEVEL1
|
|
298
|
+
*/
|
|
299
|
+
it('should export non-empty FilesDirectoryPath', () => {
|
|
300
|
+
expect(AudioUtils.FilesDirectoryPath).toBeDefined();
|
|
301
|
+
expect(typeof AudioUtils.FilesDirectoryPath).toBe('string');
|
|
302
|
+
expect(AudioUtils.FilesDirectoryPath.length).toBeGreaterThan(0);
|
|
303
|
+
});
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* @tc.name should export non-empty CachesDirectoryPath
|
|
307
|
+
* @tc.number SUB_RNOH_AUDIO_UTILS_RETURN_0002
|
|
308
|
+
* @tc.desc 测试 AudioUtils.CachesDirectoryPath 常量 - 非空验证.
|
|
309
|
+
* @tc.type FUNCTION
|
|
310
|
+
* @tc.size SMALLTEST
|
|
311
|
+
* @tc.level LEVEL1
|
|
312
|
+
*/
|
|
313
|
+
it('should export non-empty CachesDirectoryPath', () => {
|
|
314
|
+
expect(AudioUtils.CachesDirectoryPath).toBeDefined();
|
|
315
|
+
expect(typeof AudioUtils.CachesDirectoryPath).toBe('string');
|
|
316
|
+
expect(AudioUtils.CachesDirectoryPath.length).toBeGreaterThan(0);
|
|
317
|
+
});
|
|
318
|
+
});
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
---
|
|
322
|
+
|
|
323
|
+
## 五、测试用例片段模板
|
|
324
|
+
|
|
325
|
+
### 5.1 同步方法 - 正常参数
|
|
326
|
+
|
|
327
|
+
```typescript
|
|
328
|
+
it('should call {methodName} with correct arguments', () => {
|
|
329
|
+
{ModuleName}.{methodName}({正常参数});
|
|
330
|
+
expect({ModuleName}.{methodName}).toHaveBeenCalledWith({正常参数});
|
|
331
|
+
expect({ModuleName}.{methodName}).toHaveBeenCalledTimes(1);
|
|
332
|
+
});
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
### 5.2 同步方法 - 错误参数
|
|
336
|
+
|
|
337
|
+
```typescript
|
|
338
|
+
it('should return false when {condition}', () => {
|
|
339
|
+
({ModuleName}.{methodName} as jest.Mock).mockReturnValue(false);
|
|
340
|
+
const result = {ModuleName}.{methodName}({错误参数});
|
|
341
|
+
expect(result).toBe(false);
|
|
342
|
+
});
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
### 5.3 异步方法 - 正常返回
|
|
346
|
+
|
|
347
|
+
```typescript
|
|
348
|
+
it('should resolve {methodName} to {expectedValue}', async () => {
|
|
349
|
+
({ModuleName}.{methodName} as jest.Mock).mockResolvedValue({expectedValue});
|
|
350
|
+
const result = await {ModuleName}.{methodName}({正常参数});
|
|
351
|
+
expect(result).toBe({expectedValue});
|
|
352
|
+
expect({ModuleName}.{methodName}).toHaveBeenCalledTimes(1);
|
|
353
|
+
});
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
### 5.4 异步方法 - 错误返回
|
|
357
|
+
|
|
358
|
+
```typescript
|
|
359
|
+
it('should reject {methodName} with error', async () => {
|
|
360
|
+
({ModuleName}.{methodName} as jest.Mock).mockRejectedValue(new Error('{errorMessage}'));
|
|
361
|
+
await expect({ModuleName}.{methodName}({参数})).rejects.toThrow('{errorMessage}');
|
|
362
|
+
});
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
### 5.5 事件回调 - 基本验证
|
|
366
|
+
|
|
367
|
+
```typescript
|
|
368
|
+
it('should invoke {eventName} callback with correct data', () => {
|
|
369
|
+
const mockCallback = jest.fn();
|
|
370
|
+
{ModuleName}.{eventName} = mockCallback;
|
|
371
|
+
const eventData = { /* 事件数据 */ };
|
|
372
|
+
mockCallback(eventData);
|
|
373
|
+
expect(mockCallback).toHaveBeenCalledWith(eventData);
|
|
374
|
+
expect(mockCallback).toHaveBeenCalledTimes(1);
|
|
375
|
+
});
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
### 5.6 状态转换测试
|
|
379
|
+
|
|
380
|
+
```typescript
|
|
381
|
+
it('should transition through {state1}->{state2}->{state3}', () => {
|
|
382
|
+
({ModuleName}.{getState} as jest.Mock).mockReturnValue({初始状态});
|
|
383
|
+
{ModuleName}.{触发操作}();
|
|
384
|
+
expect({ModuleName}.{getState}()).toBe({转换后状态});
|
|
385
|
+
});
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
---
|
|
389
|
+
|
|
390
|
+
## 六、导入语句模板
|
|
391
|
+
|
|
392
|
+
### 6.1 标准导入(Jest 测试)
|
|
393
|
+
|
|
394
|
+
```typescript
|
|
395
|
+
// jest.mock() 必须在 import 之前(Jest 会自动提升)
|
|
396
|
+
jest.mock('@react-native-ohos/react-native-audio', () => ({ ... }));
|
|
397
|
+
|
|
398
|
+
// RN 三方库
|
|
399
|
+
import { ModuleName, UtilsName } from '@react-native-ohos/react-native-{name}';
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
### 6.2 导入合并规则
|
|
403
|
+
|
|
404
|
+
同一包名的导入必须合并为一条语句。
|