@ai-dev-tools/csharp-copilot-core 0.0.30 → 0.0.31

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.
Files changed (303) hide show
  1. package/package.json +1 -1
  2. package/out/analyze/cecil.d.ts +0 -1
  3. package/out/analyze/cecil.js +0 -42
  4. package/out/analyze/cecil.js.map +0 -1
  5. package/out/analyze/checkCodeSyntax.d.ts +0 -7
  6. package/out/analyze/checkCodeSyntax.js +0 -67
  7. package/out/analyze/checkCodeSyntax.js.map +0 -1
  8. package/out/analyze/generateCodeDependency.d.ts +0 -6
  9. package/out/analyze/generateCodeDependency.js +0 -126
  10. package/out/analyze/generateCodeDependency.js.map +0 -1
  11. package/out/analyze/installAnalyzerTool.d.ts +0 -1
  12. package/out/analyze/installAnalyzerTool.js +0 -82
  13. package/out/analyze/installAnalyzerTool.js.map +0 -1
  14. package/out/batch/generateCodeTests.d.ts +0 -6
  15. package/out/batch/generateCodeTests.js +0 -147
  16. package/out/batch/generateCodeTests.js.map +0 -1
  17. package/out/batch/getFolderCodeFile.d.ts +0 -1
  18. package/out/batch/getFolderCodeFile.js +0 -19
  19. package/out/batch/getFolderCodeFile.js.map +0 -1
  20. package/out/batch/getProjectCodeFile.d.ts +0 -4
  21. package/out/batch/getProjectCodeFile.js +0 -86
  22. package/out/batch/getProjectCodeFile.js.map +0 -1
  23. package/out/batch/getSolutionCodeFile.d.ts +0 -8
  24. package/out/batch/getSolutionCodeFile.js +0 -70
  25. package/out/batch/getSolutionCodeFile.js.map +0 -1
  26. package/out/benchmark/formatToMarkdown.d.ts +0 -2
  27. package/out/benchmark/formatToMarkdown.js +0 -101
  28. package/out/benchmark/formatToMarkdown.js.map +0 -1
  29. package/out/benchmark/generateBenchmarkReport.d.ts +0 -1
  30. package/out/benchmark/generateBenchmarkReport.js +0 -82
  31. package/out/benchmark/generateBenchmarkReport.js.map +0 -1
  32. package/out/codeCoverage/codeCoverage.d.ts +0 -6
  33. package/out/codeCoverage/codeCoverage.js +0 -39
  34. package/out/codeCoverage/codeCoverage.js.map +0 -1
  35. package/out/codeCoverage/codeCoverageReport.d.ts +0 -6
  36. package/out/codeCoverage/codeCoverageReport.js +0 -76
  37. package/out/codeCoverage/codeCoverageReport.js.map +0 -1
  38. package/out/codeCoverage/extractCodeCoverageInfo.d.ts +0 -2
  39. package/out/codeCoverage/extractCodeCoverageInfo.js +0 -80
  40. package/out/codeCoverage/extractCodeCoverageInfo.js.map +0 -1
  41. package/out/codeCoverage/extractCoverageReportPath.d.ts +0 -1
  42. package/out/codeCoverage/extractCoverageReportPath.js +0 -24
  43. package/out/codeCoverage/extractCoverageReportPath.js.map +0 -1
  44. package/out/codeCoverage/generateCodeCoverageReport.d.ts +0 -1
  45. package/out/codeCoverage/generateCodeCoverageReport.js +0 -30
  46. package/out/codeCoverage/generateCodeCoverageReport.js.map +0 -1
  47. package/out/codeCoverage/getCodeCoverageSetting.d.ts +0 -1
  48. package/out/codeCoverage/getCodeCoverageSetting.js +0 -58
  49. package/out/codeCoverage/getCodeCoverageSetting.js.map +0 -1
  50. package/out/codeCoverage/reportTool.d.ts +0 -2
  51. package/out/codeCoverage/reportTool.js +0 -22
  52. package/out/codeCoverage/reportTool.js.map +0 -1
  53. package/out/codeCoverage/simplifyCoverageXml.d.ts +0 -2
  54. package/out/codeCoverage/simplifyCoverageXml.js +0 -117
  55. package/out/codeCoverage/simplifyCoverageXml.js.map +0 -1
  56. package/out/codebk/250804prompt/buildAfGuidelines.liquid +0 -15
  57. package/out/codebk/250804prompt/general/generalBuildAutofixGuidelines.liquid +0 -13
  58. package/out/codebk/250804prompt/general/generalUtGuidelines.liquid +0 -18
  59. package/out/codebk/250804prompt/generateUtAutoFix.liquid +0 -19
  60. package/out/codebk/250804prompt/generateUtGuidelines.liquid +0 -13
  61. package/out/codebk/250804prompt/generateUtSystem.liquid +0 -5
  62. package/out/codebk/250804prompt/generateUtUserInput.liquid +0 -27
  63. package/out/codebk/250804prompt/testAfGuidelines.liquid +0 -6
  64. package/out/codebk/250804prompt/xap/xapBuildAutofixGuidelines.liquid +0 -13
  65. package/out/codebk/250804prompt/xap/xapCodeCodeDependency.liquid +0 -0
  66. package/out/codebk/250804prompt/xap/xapCodeSample.liquid +0 -38
  67. package/out/codebk/250804prompt/xap/xapUtGuideline-240804.liquid +0 -36
  68. package/out/codebk/250804prompt/xap/xapUtGuideline.liquid +0 -36
  69. package/out/codebk/childProcessManager.d.ts +0 -1
  70. package/out/codebk/childProcessManager.js +0 -50
  71. package/out/codebk/childProcessManager.js.map +0 -1
  72. package/out/codebk/msBuidSpawn.d.ts +0 -1
  73. package/out/codebk/msBuidSpawn.js +0 -58
  74. package/out/codebk/msBuidSpawn.js.map +0 -1
  75. package/out/codebk/msBuild.d.ts +0 -1
  76. package/out/codebk/msBuild.js +0 -123
  77. package/out/codebk/msBuild.js.map +0 -1
  78. package/out/codebk/old/generateXapTestAutoFix.liquid +0 -12
  79. package/out/codebk/old/generateXapTestGuidelines-fm.liquid +0 -68
  80. package/out/codebk/old/generateXapTestGuidelines.liquid +0 -28
  81. package/out/codebk/old/xapGuideline-fm.liquid +0 -149
  82. package/out/codebk/old/xapGuideline.liquid +0 -37
  83. package/out/codebk/oldExec/checkCodeSyntax.d.ts +0 -1
  84. package/out/codebk/oldExec/checkCodeSyntax.js +0 -81
  85. package/out/codebk/oldExec/checkCodeSyntax.js.map +0 -1
  86. package/out/codebk/oldExec/codeCoverage.d.ts +0 -1
  87. package/out/codebk/oldExec/codeCoverage.js +0 -54
  88. package/out/codebk/oldExec/codeCoverage.js.map +0 -1
  89. package/out/codebk/oldExec/codeCoverageReport.d.ts +0 -1
  90. package/out/codebk/oldExec/codeCoverageReport.js +0 -64
  91. package/out/codebk/oldExec/codeCoverageReport.js.map +0 -1
  92. package/out/codebk/oldExec/containsMethods.d.ts +0 -1
  93. package/out/codebk/oldExec/containsMethods.js +0 -74
  94. package/out/codebk/oldExec/containsMethods.js.map +0 -1
  95. package/out/codebk/oldExec/generateCodeDependency.d.ts +0 -1
  96. package/out/codebk/oldExec/generateCodeDependency.js +0 -95
  97. package/out/codebk/oldExec/generateCodeDependency.js.map +0 -1
  98. package/out/codebk/oldExec/msBuild.d.ts +0 -1
  99. package/out/codebk/oldExec/msBuild.js +0 -53
  100. package/out/codebk/oldExec/msBuild.js.map +0 -1
  101. package/out/codebk/oldExec/vsTest.d.ts +0 -1
  102. package/out/codebk/oldExec/vsTest.js +0 -71
  103. package/out/codebk/oldExec/vsTest.js.map +0 -1
  104. package/out/codebk/prompts/general/generalUnitTestGuidelines-20250702.liquid +0 -56
  105. package/out/codebk/prompts/generateXapTestGuidelines-20250704.liquid +0 -21
  106. package/out/codebk/prompts/generateXapTestGuidelines-o.liquid +0 -29
  107. package/out/codebk/prompts/xap/xapGuideline-o.liquid +0 -45
  108. package/out/codebk/testbuildkill.d.ts +0 -1
  109. package/out/codebk/testbuildkill.js +0 -37
  110. package/out/codebk/testbuildkill.js.map +0 -1
  111. package/out/command/index.d.ts +0 -2
  112. package/out/command/index.js +0 -94
  113. package/out/command/index.js.map +0 -1
  114. package/out/command/utGenWrapper.d.ts +0 -4
  115. package/out/command/utGenWrapper.js +0 -46
  116. package/out/command/utGenWrapper.js.map +0 -1
  117. package/out/exit/childProcessManager.d.ts +0 -2
  118. package/out/exit/childProcessManager.js +0 -43
  119. package/out/exit/childProcessManager.js.map +0 -1
  120. package/out/exit/setupProcessSignalHandler.d.ts +0 -1
  121. package/out/exit/setupProcessSignalHandler.js +0 -18
  122. package/out/exit/setupProcessSignalHandler.js.map +0 -1
  123. package/out/gen/autoFix.d.ts +0 -4
  124. package/out/gen/autoFix.js +0 -125
  125. package/out/gen/autoFix.js.map +0 -1
  126. package/out/gen/csharpUtGen.d.ts +0 -2
  127. package/out/gen/csharpUtGen.js +0 -125
  128. package/out/gen/csharpUtGen.js.map +0 -1
  129. package/out/gen/ensureValidLLMResponse.d.ts +0 -1
  130. package/out/gen/ensureValidLLMResponse.js +0 -19
  131. package/out/gen/ensureValidLLMResponse.js.map +0 -1
  132. package/out/gen/postGen/extractCodeFromResponse.d.ts +0 -1
  133. package/out/gen/postGen/extractCodeFromResponse.js +0 -37
  134. package/out/gen/postGen/extractCodeFromResponse.js.map +0 -1
  135. package/out/gen/postGen/postGenProcess.d.ts +0 -1
  136. package/out/gen/postGen/postGenProcess.js +0 -37
  137. package/out/gen/postGen/postGenProcess.js.map +0 -1
  138. package/out/gen/postGen/removeComments.d.ts +0 -1
  139. package/out/gen/postGen/removeComments.js +0 -92
  140. package/out/gen/postGen/removeComments.js.map +0 -1
  141. package/out/gen/postGen/removeSingleLines.d.ts +0 -1
  142. package/out/gen/postGen/removeSingleLines.js +0 -28
  143. package/out/gen/postGen/removeSingleLines.js.map +0 -1
  144. package/out/gen/postGen/repairRequiredNameSpaces.d.ts +0 -2
  145. package/out/gen/postGen/repairRequiredNameSpaces.js +0 -141
  146. package/out/gen/postGen/repairRequiredNameSpaces.js.map +0 -1
  147. package/out/gen/postGen/validateTestCode.d.ts +0 -1
  148. package/out/gen/postGen/validateTestCode.js +0 -14
  149. package/out/gen/postGen/validateTestCode.js.map +0 -1
  150. package/out/gen/preGen/excludeFileName.d.ts +0 -1
  151. package/out/gen/preGen/excludeFileName.js +0 -49
  152. package/out/gen/preGen/excludeFileName.js.map +0 -1
  153. package/out/gen/preGen/excludeSpecificTag.d.ts +0 -1
  154. package/out/gen/preGen/excludeSpecificTag.js +0 -18
  155. package/out/gen/preGen/excludeSpecificTag.js.map +0 -1
  156. package/out/gen/preGen/preGenProcess.d.ts +0 -1
  157. package/out/gen/preGen/preGenProcess.js +0 -22
  158. package/out/gen/preGen/preGenProcess.js.map +0 -1
  159. package/out/gen/preGen/validateCode.d.ts +0 -3
  160. package/out/gen/preGen/validateCode.js +0 -62
  161. package/out/gen/preGen/validateCode.js.map +0 -1
  162. package/out/index.d.ts +0 -3
  163. package/out/index.js +0 -10
  164. package/out/index.js.map +0 -1
  165. package/out/llm/model/Gpt.d.ts +0 -1
  166. package/out/llm/model/Gpt.js +0 -93
  167. package/out/llm/model/Gpt.js.map +0 -1
  168. package/out/llm/preparePrompt.d.ts +0 -2
  169. package/out/llm/preparePrompt.js +0 -135
  170. package/out/llm/preparePrompt.js.map +0 -1
  171. package/out/llm/prompt/buildAfGuidelines.liquid +0 -15
  172. package/out/llm/prompt/general/generalBuildAutofixGuidelines.liquid +0 -13
  173. package/out/llm/prompt/general/generalUtGuidelines.liquid +0 -16
  174. package/out/llm/prompt/generateUtAutoFix.liquid +0 -23
  175. package/out/llm/prompt/generateUtDependency.liquid +0 -3
  176. package/out/llm/prompt/generateUtSystem.liquid +0 -5
  177. package/out/llm/prompt/generateUtTemplate.liquid +0 -32
  178. package/out/llm/prompt/generateUtUserInput.liquid +0 -4
  179. package/out/llm/prompt/xap/xapBuildAutofixGuidelines.liquid +0 -13
  180. package/out/llm/prompt/xap/xapCodeCodeDependency.liquid +0 -0
  181. package/out/llm/prompt/xap/xapCodeSample.liquid +0 -38
  182. package/out/llm/prompt/xap/xapUtGuideline.liquid +0 -37
  183. package/out/llm/sendRequestToLLM.d.ts +0 -4
  184. package/out/llm/sendRequestToLLM.js +0 -9
  185. package/out/llm/sendRequestToLLM.js.map +0 -1
  186. package/out/llm/sendRequestToSelfHostLLM.d.ts +0 -4
  187. package/out/llm/sendRequestToSelfHostLLM.js +0 -41
  188. package/out/llm/sendRequestToSelfHostLLM.js.map +0 -1
  189. package/out/metrics/appInsightTelemetry.d.ts +0 -6
  190. package/out/metrics/appInsightTelemetry.js +0 -77
  191. package/out/metrics/appInsightTelemetry.js.map +0 -1
  192. package/out/metrics/machineId.d.ts +0 -11
  193. package/out/metrics/machineId.js +0 -85
  194. package/out/metrics/machineId.js.map +0 -1
  195. package/out/setup/setup.d.ts +0 -1
  196. package/out/setup/setup.js +0 -10
  197. package/out/setup/setup.js.map +0 -1
  198. package/out/setup/setupConsole.d.ts +0 -1
  199. package/out/setup/setupConsole.js +0 -23
  200. package/out/setup/setupConsole.js.map +0 -1
  201. package/out/setup/setupLLMRequest.d.ts +0 -2
  202. package/out/setup/setupLLMRequest.js +0 -10
  203. package/out/setup/setupLLMRequest.js.map +0 -1
  204. package/out/tools/devenvcom.cmd +0 -13
  205. package/out/tools/devenvexe.cmd +0 -13
  206. package/out/tools/msbuildexe.cmd +0 -13
  207. package/out/tools/vstestexe.cmd +0 -13
  208. package/out/types/benchmark.d.ts +0 -11
  209. package/out/types/benchmark.js +0 -3
  210. package/out/types/benchmark.js.map +0 -1
  211. package/out/types/buildResult.d.ts +0 -8
  212. package/out/types/buildResult.js +0 -3
  213. package/out/types/buildResult.js.map +0 -1
  214. package/out/types/constants.d.ts +0 -6
  215. package/out/types/constants.js +0 -10
  216. package/out/types/constants.js.map +0 -1
  217. package/out/types/genResult.d.ts +0 -10
  218. package/out/types/genResult.js +0 -3
  219. package/out/types/genResult.js.map +0 -1
  220. package/out/types/testResult.d.ts +0 -12
  221. package/out/types/testResult.js +0 -3
  222. package/out/types/testResult.js.map +0 -1
  223. package/out/types/verifyResult.d.ts +0 -8
  224. package/out/types/verifyResult.js +0 -3
  225. package/out/types/verifyResult.js.map +0 -1
  226. package/out/utils/checkTestProject.d.ts +0 -2
  227. package/out/utils/checkTestProject.js +0 -79
  228. package/out/utils/checkTestProject.js.map +0 -1
  229. package/out/utils/checkXapCode.d.ts +0 -2
  230. package/out/utils/checkXapCode.js +0 -59
  231. package/out/utils/checkXapCode.js.map +0 -1
  232. package/out/utils/delay.d.ts +0 -1
  233. package/out/utils/delay.js +0 -7
  234. package/out/utils/delay.js.map +0 -1
  235. package/out/utils/detectTestFramework.d.ts +0 -1
  236. package/out/utils/detectTestFramework.js +0 -33
  237. package/out/utils/detectTestFramework.js.map +0 -1
  238. package/out/utils/fileUtils.d.ts +0 -2
  239. package/out/utils/fileUtils.js +0 -42
  240. package/out/utils/fileUtils.js.map +0 -1
  241. package/out/utils/generateCodeSha256.d.ts +0 -1
  242. package/out/utils/generateCodeSha256.js +0 -46
  243. package/out/utils/generateCodeSha256.js.map +0 -1
  244. package/out/utils/getCodeStructurePath.d.ts +0 -5
  245. package/out/utils/getCodeStructurePath.js +0 -155
  246. package/out/utils/getCodeStructurePath.js.map +0 -1
  247. package/out/utils/getOrCreateDir.d.ts +0 -2
  248. package/out/utils/getOrCreateDir.js +0 -63
  249. package/out/utils/getOrCreateDir.js.map +0 -1
  250. package/out/utils/getTestCodeInfo.d.ts +0 -2
  251. package/out/utils/getTestCodeInfo.js +0 -121
  252. package/out/utils/getTestCodeInfo.js.map +0 -1
  253. package/out/utils/getTestFile.d.ts +0 -13
  254. package/out/utils/getTestFile.js +0 -295
  255. package/out/utils/getTestFile.js.map +0 -1
  256. package/out/utils/parseBuildResult.d.ts +0 -3
  257. package/out/utils/parseBuildResult.js +0 -44
  258. package/out/utils/parseBuildResult.js.map +0 -1
  259. package/out/utils/parseSyntaxCheckResult.d.ts +0 -2
  260. package/out/utils/parseSyntaxCheckResult.js +0 -38
  261. package/out/utils/parseSyntaxCheckResult.js.map +0 -1
  262. package/out/utils/parseVstestResult.d.ts +0 -3
  263. package/out/utils/parseVstestResult.js +0 -61
  264. package/out/utils/parseVstestResult.js.map +0 -1
  265. package/out/utils/removeFailedTestMethods.d.ts +0 -3
  266. package/out/utils/removeFailedTestMethods.js +0 -207
  267. package/out/utils/removeFailedTestMethods.js.map +0 -1
  268. package/out/utils/runCommand.d.ts +0 -1
  269. package/out/utils/runCommand.js +0 -14
  270. package/out/utils/runCommand.js.map +0 -1
  271. package/out/utils/spawnExec.d.ts +0 -1
  272. package/out/utils/spawnExec.js +0 -80
  273. package/out/utils/spawnExec.js.map +0 -1
  274. package/out/utils/verifyBuildErrorCausedFile.d.ts +0 -1
  275. package/out/utils/verifyBuildErrorCausedFile.js +0 -60
  276. package/out/utils/verifyBuildErrorCausedFile.js.map +0 -1
  277. package/out/utils/verifyTestCode.d.ts +0 -2
  278. package/out/utils/verifyTestCode.js +0 -25
  279. package/out/utils/verifyTestCode.js.map +0 -1
  280. package/out/utils/writeGenCode.d.ts +0 -1
  281. package/out/utils/writeGenCode.js +0 -50
  282. package/out/utils/writeGenCode.js.map +0 -1
  283. package/out/vs/msBuild.d.ts +0 -13
  284. package/out/vs/msBuild.js +0 -49
  285. package/out/vs/msBuild.js.map +0 -1
  286. package/out/vs/vsTest.d.ts +0 -15
  287. package/out/vs/vsTest.js +0 -75
  288. package/out/vs/vsTest.js.map +0 -1
  289. package/out/vs/vsTools.d.ts +0 -7
  290. package/out/vs/vsTools.js +0 -177
  291. package/out/vs/vsTools.js.map +0 -1
  292. package/out/vsPlugin/getVsPluginVerifyResult.d.ts +0 -2
  293. package/out/vsPlugin/getVsPluginVerifyResult.js +0 -41
  294. package/out/vsPlugin/getVsPluginVerifyResult.js.map +0 -1
  295. package/out/vsPlugin/interactionConstants.d.ts +0 -2
  296. package/out/vsPlugin/interactionConstants.js +0 -10
  297. package/out/vsPlugin/interactionConstants.js.map +0 -1
  298. package/out/vsPlugin/sendStdToVsPlugin.d.ts +0 -1
  299. package/out/vsPlugin/sendStdToVsPlugin.js +0 -12
  300. package/out/vsPlugin/sendStdToVsPlugin.js.map +0 -1
  301. package/out/vsPlugin/stdListener.d.ts +0 -3
  302. package/out/vsPlugin/stdListener.js +0 -57
  303. package/out/vsPlugin/stdListener.js.map +0 -1
@@ -1,125 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.autoFixTestCode = autoFixTestCode;
4
- exports.generateAutoFixCode = generateAutoFixCode;
5
- exports.autoRetryTestCode = autoRetryTestCode;
6
- const checkCodeSyntax_1 = require("../analyze/checkCodeSyntax");
7
- const ensureValidLLMResponse_1 = require("./ensureValidLLMResponse");
8
- const postGenProcess_1 = require("./postGen/postGenProcess");
9
- const preparePrompt_1 = require("../llm/preparePrompt");
10
- const verifyBuildErrorCausedFile_1 = require("../utils/verifyBuildErrorCausedFile");
11
- const verifyTestCode_1 = require("../utils/verifyTestCode");
12
- const getVsPluginVerifyResult_1 = require("../vsPlugin/getVsPluginVerifyResult");
13
- const writeGenCode_1 = require("../utils/writeGenCode");
14
- const fileUtils_1 = require("../utils/fileUtils");
15
- async function autoFixTestCode(prompts, sourceCodePath, testCode, testProjectPath, testFilePath, testFramework, isXapCode, isVsPlugin, retryTimes = 3, isBenchmark = false) {
16
- const startTime = Date.now();
17
- let generatedCode = testCode;
18
- let testResult;
19
- let buildResult;
20
- let errorMessage;
21
- let isBuildFailure = true;
22
- try {
23
- for (let i = 0; i <= retryTimes; i++) {
24
- // write generated code, to review and improve code quality
25
- isBenchmark && (0, writeGenCode_1.writeGenCode)(sourceCodePath, generatedCode, i);
26
- // for case: generatedCode is invalid, just retry instead of auto fix process
27
- if (!generatedCode) {
28
- console.error(`Generated code is invalid, try to regenerate. \nGenerated code: \n${generatedCode}`);
29
- generatedCode = await (0, ensureValidLLMResponse_1.ensureValidLLMResponse)(prompts, testFramework, isXapCode);
30
- // extract valid code from LLM response
31
- generatedCode = (0, postGenProcess_1.postGenProcess)(generatedCode, testFramework, isXapCode);
32
- continue;
33
- }
34
- // analyze generated code issue before verify: build, because build will cost much time.
35
- const syntaxResult = await (0, checkCodeSyntax_1.checkCodeSyntax)(testFilePath);
36
- if (syntaxResult.success) {
37
- // if generated code passed the syntax check, verify the generated test code
38
- // const { success, message, buildErrors, vsTestResult } = await verifyTestCode(generatedCode, testProjectPath);
39
- const verifyResult = await verifyGeneratedCode(generatedCode, testProjectPath, testFilePath, isVsPlugin);
40
- errorMessage = verifyResult.message;
41
- testResult = verifyResult.testResult;
42
- buildResult = verifyResult.buildErrors;
43
- isBuildFailure = !testResult;
44
- // if build errors caused by other code files instead of generate test code, abort generation
45
- const validBuildError = (0, verifyBuildErrorCausedFile_1.verifyBuildErrorCausedFile)(testFilePath, buildResult);
46
- if (!validBuildError) {
47
- console.error("Due to build errors caused by other code files, abort generation, please fix it first.");
48
- return { success: false, testFilePath, testProjectPath, codeFilePath: sourceCodePath, buildResult, testResult };
49
- }
50
- if (verifyResult.success) {
51
- console.log("XapUt code generated successfully");
52
- return { success: true, testFilePath, testProjectPath, codeFilePath: sourceCodePath, buildResult, testResult };
53
- }
54
- console.error("Failed to verifyTestCode, error:", errorMessage);
55
- }
56
- else {
57
- buildResult = syntaxResult.buildErrors;
58
- errorMessage = syntaxResult.message;
59
- console.error("Failed to check the generated UT code syntax, error:", errorMessage);
60
- }
61
- // keep test failed tast cases in test file automatically
62
- // if (!isBuildFailure && vsTestRes.passed !== 0) {
63
- // console.log("remove failed test cases in test file");
64
- // removeFailedTestCasesInTestFile(vsTestRes, testCodePath);
65
- // return { success: true, testCode: generatedCode };
66
- // }
67
- if (i === retryTimes) {
68
- console.error(`Failed to generate ut code after ${retryTimes} attempts.`);
69
- break;
70
- }
71
- // case: vs plugin no response or msbuild/vstest failed.
72
- if (!buildResult && !testResult) {
73
- console.error("!!!Verify process failed, retrying...");
74
- continue;
75
- }
76
- generatedCode = await generateAutoFixCode(prompts, generatedCode, errorMessage, isBuildFailure, testFilePath, testFramework, isXapCode);
77
- }
78
- console.log(`Autofix time: ${(Date.now() - startTime) / 1000} seconds`);
79
- return { success: false, testFilePath, testProjectPath, codeFilePath: sourceCodePath, buildResult, testResult };
80
- }
81
- catch (error) {
82
- console.error("Error during auto-fix process:", error);
83
- return { success: false, testFilePath, testProjectPath, codeFilePath: sourceCodePath, buildResult: null, testResult: null };
84
- }
85
- }
86
- async function verifyGeneratedCode(generatedCode, testProjectPath, testFilePath, isVsPlugin = false) {
87
- if (isVsPlugin) {
88
- const vsVerifyResult = await (0, getVsPluginVerifyResult_1.verifyTestCodeByVsPlugin)(testFilePath);
89
- return vsVerifyResult;
90
- }
91
- else {
92
- // verifyResult: { success, message, buildErrors, vsTestResult }
93
- const verifyResult = await (0, verifyTestCode_1.verifyTestCode)(generatedCode, testProjectPath);
94
- return verifyResult;
95
- }
96
- }
97
- async function generateAutoFixCode(prompts, generatedCode, errorMessage, isBuildFailure, testFilePath, testFramework, isXapCode) {
98
- console.log("start auto-fix process...");
99
- const autofixPrompt = (0, preparePrompt_1.prepareUtAutoFixPrompt)(prompts, generatedCode, errorMessage, isBuildFailure);
100
- // get valid code from LLM response with retry
101
- const newGeneratedCode = await (0, ensureValidLLMResponse_1.ensureValidLLMResponse)(autofixPrompt, testFramework, isXapCode);
102
- // if generate code is valid, write test code to test project
103
- !!newGeneratedCode && (0, fileUtils_1.writeTestCode)(newGeneratedCode, testFilePath);
104
- return newGeneratedCode;
105
- }
106
- // use for quick dev test
107
- async function autoRetryTestCode(prompts, sourceCodePath, testCode, testProjectPath, testFilePath, testFramework, isXapCode, retryTimes = 3) {
108
- const startTime = Date.now();
109
- let generatedCode = testCode;
110
- let vsTestRes;
111
- for (let i = 0; i <= retryTimes; i++) {
112
- if (i === retryTimes) {
113
- console.error(`Failed to generate XapUt code after ${retryTimes} attempts.`);
114
- break;
115
- }
116
- const autofixPrompt = prompts;
117
- // get valid code from LLM response
118
- generatedCode = await (0, ensureValidLLMResponse_1.ensureValidLLMResponse)(autofixPrompt, testFramework, isXapCode);
119
- // write test code to test project
120
- (0, fileUtils_1.writeTestCode)(generatedCode, testFilePath);
121
- }
122
- console.log(`Autofix time: ${(Date.now() - startTime) / 1000} seconds`);
123
- return { success: true, testFilePath: testFilePath, testProjectPath, codeFilePath: sourceCodePath, buildResult: null, testResult: vsTestRes };
124
- }
125
- //# sourceMappingURL=autoFix.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"autoFix.js","sourceRoot":"","sources":["../../src/gen/autoFix.ts"],"names":[],"mappings":"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","sourcesContent":["import { GenResult } from \"../types/genResult\";\r\nimport { VerifyResult } from \"../types/verifyResult\";\r\nimport { checkCodeSyntax } from \"../analyze/checkCodeSyntax\";\r\nimport { ensureValidLLMResponse } from \"./ensureValidLLMResponse\";\r\nimport { postGenProcess } from \"./postGen/postGenProcess\";\r\nimport { prepareUtAutoFixPrompt } from \"../llm/preparePrompt\";\r\nimport { verifyBuildErrorCausedFile } from \"../utils/verifyBuildErrorCausedFile\";\r\nimport { verifyTestCode } from \"../utils/verifyTestCode\";\r\nimport { verifyTestCodeByVsPlugin } from \"../vsPlugin/getVsPluginVerifyResult\";\r\nimport { writeGenCode } from \"../utils/writeGenCode\";\r\nimport { writeTestCode } from \"../utils/fileUtils\";\r\n\r\nexport async function autoFixTestCode(\r\n prompts: any[],\r\n sourceCodePath: string,\r\n testCode: string,\r\n testProjectPath: string,\r\n testFilePath: string,\r\n testFramework: string,\r\n isXapCode: boolean,\r\n isVsPlugin: boolean,\r\n retryTimes: number = 3,\r\n isBenchmark: boolean = false\r\n): Promise<GenResult> {\r\n const startTime = Date.now();\r\n\r\n let generatedCode = testCode;\r\n let testResult;\r\n let buildResult;\r\n let errorMessage;\r\n let isBuildFailure = true;\r\n try {\r\n for (let i = 0; i <= retryTimes; i++) {\r\n // write generated code, to review and improve code quality\r\n isBenchmark && writeGenCode(sourceCodePath, generatedCode, i);\r\n\r\n // for case: generatedCode is invalid, just retry instead of auto fix process\r\n if (!generatedCode) {\r\n console.error(`Generated code is invalid, try to regenerate. \\nGenerated code: \\n${generatedCode}`);\r\n generatedCode = await ensureValidLLMResponse(prompts, testFramework, isXapCode);\r\n // extract valid code from LLM response\r\n generatedCode = postGenProcess(generatedCode, testFramework, isXapCode);\r\n continue;\r\n }\r\n\r\n // analyze generated code issue before verify: build, because build will cost much time.\r\n const syntaxResult = await checkCodeSyntax(testFilePath);\r\n if (syntaxResult.success) {\r\n // if generated code passed the syntax check, verify the generated test code\r\n // const { success, message, buildErrors, vsTestResult } = await verifyTestCode(generatedCode, testProjectPath);\r\n const verifyResult = await verifyGeneratedCode(generatedCode, testProjectPath, testFilePath, isVsPlugin);\r\n errorMessage = verifyResult.message;\r\n testResult = verifyResult.testResult;\r\n buildResult = verifyResult.buildErrors;\r\n isBuildFailure = !testResult;\r\n\r\n // if build errors caused by other code files instead of generate test code, abort generation\r\n const validBuildError = verifyBuildErrorCausedFile(testFilePath, buildResult);\r\n if (!validBuildError) {\r\n console.error(\"Due to build errors caused by other code files, abort generation, please fix it first.\");\r\n return { success: false, testFilePath, testProjectPath, codeFilePath: sourceCodePath, buildResult, testResult };\r\n }\r\n\r\n if (verifyResult.success) {\r\n console.log(\"XapUt code generated successfully\");\r\n return { success: true, testFilePath, testProjectPath, codeFilePath: sourceCodePath, buildResult, testResult };\r\n }\r\n\r\n console.error(\"Failed to verifyTestCode, error:\", errorMessage);\r\n } else {\r\n buildResult = syntaxResult.buildErrors;\r\n errorMessage = syntaxResult.message;\r\n console.error(\"Failed to check the generated UT code syntax, error:\", errorMessage);\r\n }\r\n\r\n // keep test failed tast cases in test file automatically\r\n // if (!isBuildFailure && vsTestRes.passed !== 0) {\r\n // console.log(\"remove failed test cases in test file\");\r\n // removeFailedTestCasesInTestFile(vsTestRes, testCodePath);\r\n // return { success: true, testCode: generatedCode };\r\n // }\r\n\r\n if (i === retryTimes) {\r\n console.error(`Failed to generate ut code after ${retryTimes} attempts.`);\r\n break;\r\n }\r\n\r\n // case: vs plugin no response or msbuild/vstest failed.\r\n if (!buildResult && !testResult) {\r\n console.error(\"!!!Verify process failed, retrying...\");\r\n continue;\r\n }\r\n\r\n generatedCode = await generateAutoFixCode(prompts, generatedCode, errorMessage, isBuildFailure, testFilePath, testFramework, isXapCode);\r\n }\r\n\r\n console.log(`Autofix time: ${(Date.now() - startTime) / 1000} seconds`);\r\n\r\n return { success: false, testFilePath, testProjectPath, codeFilePath: sourceCodePath, buildResult, testResult };\r\n } catch (error) {\r\n console.error(\"Error during auto-fix process:\", error);\r\n return { success: false, testFilePath, testProjectPath, codeFilePath: sourceCodePath, buildResult: null, testResult: null };\r\n\r\n }\r\n}\r\n\r\nasync function verifyGeneratedCode(\r\n generatedCode: string,\r\n testProjectPath: string,\r\n testFilePath: string,\r\n isVsPlugin: boolean = false\r\n): Promise<VerifyResult> {\r\n if (isVsPlugin) {\r\n const vsVerifyResult = await verifyTestCodeByVsPlugin(testFilePath);\r\n return vsVerifyResult;\r\n } else {\r\n // verifyResult: { success, message, buildErrors, vsTestResult }\r\n const verifyResult = await verifyTestCode(generatedCode, testProjectPath);\r\n return verifyResult;\r\n }\r\n}\r\n\r\nexport async function generateAutoFixCode(\r\n prompts: any[],\r\n generatedCode: string,\r\n errorMessage: string,\r\n isBuildFailure: boolean,\r\n testFilePath: string,\r\n testFramework: string,\r\n isXapCode: boolean\r\n): Promise<string> {\r\n console.log(\"start auto-fix process...\");\r\n const autofixPrompt = prepareUtAutoFixPrompt(prompts, generatedCode, errorMessage, isBuildFailure);\r\n\r\n // get valid code from LLM response with retry\r\n const newGeneratedCode = await ensureValidLLMResponse(autofixPrompt, testFramework, isXapCode);\r\n\r\n // if generate code is valid, write test code to test project\r\n !!newGeneratedCode && writeTestCode(newGeneratedCode, testFilePath);\r\n\r\n return newGeneratedCode;\r\n}\r\n\r\n\r\n// use for quick dev test\r\nexport async function autoRetryTestCode(\r\n prompts: any[],\r\n sourceCodePath: string,\r\n testCode: string,\r\n testProjectPath: string,\r\n testFilePath: string,\r\n testFramework: string,\r\n isXapCode: boolean,\r\n retryTimes: number = 3\r\n): Promise<GenResult> {\r\n const startTime = Date.now();\r\n\r\n let generatedCode = testCode;\r\n let vsTestRes;\r\n for (let i = 0; i <= retryTimes; i++) {\r\n if (i === retryTimes) {\r\n console.error(`Failed to generate XapUt code after ${retryTimes} attempts.`);\r\n break;\r\n }\r\n\r\n const autofixPrompt = prompts;\r\n // get valid code from LLM response\r\n generatedCode = await ensureValidLLMResponse(autofixPrompt, testFramework, isXapCode);\r\n // write test code to test project\r\n writeTestCode(generatedCode, testFilePath);\r\n }\r\n\r\n console.log(`Autofix time: ${(Date.now() - startTime) / 1000} seconds`);\r\n\r\n return { success: true, testFilePath: testFilePath, testProjectPath, codeFilePath: sourceCodePath, buildResult: null, testResult: vsTestRes };\r\n}"]}
@@ -1,2 +0,0 @@
1
- import { GenResult } from '../types/genResult';
2
- export declare function generateCsharpUtCode(sourceCodePath: string, testCodePath: string, enableAutoFix: boolean, keepFailedTests: boolean, source?: string, isBenchmark?: boolean, nugetPackagePath?: string): Promise<GenResult>;
@@ -1,125 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.generateCsharpUtCode = generateCsharpUtCode;
37
- const fs = __importStar(require("fs"));
38
- const path = __importStar(require("path"));
39
- const constants_1 = require("../types/constants");
40
- const fileUtils_1 = require("../utils/fileUtils");
41
- const autoFix_1 = require("./autoFix");
42
- const checkXapCode_1 = require("../utils/checkXapCode");
43
- const detectTestFramework_1 = require("../utils/detectTestFramework");
44
- const ensureValidLLMResponse_1 = require("./ensureValidLLMResponse");
45
- const generateCodeDependency_1 = require("../analyze/generateCodeDependency");
46
- const getTestFile_1 = require("../utils/getTestFile");
47
- const installAnalyzerTool_1 = require("../analyze/installAnalyzerTool");
48
- const preGenProcess_1 = require("./preGen/preGenProcess");
49
- const preparePrompt_1 = require("../llm/preparePrompt");
50
- const removeFailedTestMethods_1 = require("../utils/removeFailedTestMethods");
51
- const appInsightTelemetry_1 = require("../metrics/appInsightTelemetry");
52
- const RETRYTIMES = 3;
53
- async function generateCsharpUtCode(sourceCodePath, testCodePath, enableAutoFix, keepFailedTests, source = constants_1.CSHARPUTGEN, isBenchmark = false, nugetPackagePath = null) {
54
- const startTime = Date.now();
55
- console.log(`*****************Generating C# unit test code for: ${sourceCodePath}*****************`);
56
- console.log(`Current work dir: ${process.cwd()}`);
57
- // send usage metrics
58
- (0, appInsightTelemetry_1.sendUserUsageEvent)(source);
59
- sourceCodePath = path.normalize(sourceCodePath);
60
- if (!fs.existsSync(sourceCodePath)) {
61
- console.error(`Source code file not found: ${sourceCodePath}`);
62
- return;
63
- }
64
- // install nuget cli tool to analyze code
65
- (0, installAnalyzerTool_1.installOrUpdateAnalyzerTool)();
66
- let sourceCode = fs.readFileSync(sourceCodePath, 'utf-8');
67
- // check if source code is xap code, if so, use xap code generation prompt
68
- const isXapCode = (0, checkXapCode_1.checkXapCode)(sourceCode);
69
- sourceCode = await (0, preGenProcess_1.preGenProcess)(sourceCode, sourceCodePath, isXapCode);
70
- if (!sourceCode) {
71
- console.error(`Skip generate test for source code: ${sourceCodePath}`);
72
- return { success: false, testFilePath: undefined, testProjectPath: undefined, codeFilePath: sourceCodePath, buildResult: null, testResult: null };
73
- }
74
- // get code dependencies
75
- let codeDependency = await (0, generateCodeDependency_1.generateCodeDependency)(sourceCodePath, nugetPackagePath);
76
- // detect existing test file or create a new one by source code path
77
- const { testFilePath, testProjectPath, testFileExist } = (0, getTestFile_1.getOrCreatTestFile)(sourceCodePath, testCodePath, isXapCode);
78
- if (!testFilePath || !testProjectPath) {
79
- console.error(`Failed to get or create test file for source code: ${sourceCodePath}. Please check if the test project exists.`);
80
- return { success: false, testFilePath: undefined, testProjectPath: undefined, codeFilePath: sourceCodePath, buildResult: null, testResult: null };
81
- }
82
- // get test framework
83
- const testFramework = (0, detectTestFramework_1.detectTestFramework)(testProjectPath);
84
- // prepare prompt
85
- let prompt = (0, preparePrompt_1.prepareUtGenPrompt)(sourceCodePath, sourceCode, codeDependency, isXapCode, testFramework);
86
- // call LLM service to gen code with retry
87
- const testCode = await (0, ensureValidLLMResponse_1.ensureValidLLMResponse)(prompt, testFramework, isXapCode);
88
- // write test code to test project
89
- // To run vstest, need to write the test code to test project first, then build the test project and run the tests
90
- (0, fileUtils_1.writeTestCode)(testCode, testFilePath);
91
- // autofix
92
- let autoFixResult = { success: true, testFilePath, testProjectPath, codeFilePath: sourceCodePath, buildResult: null, testResult: null };
93
- if (enableAutoFix) {
94
- const isVsPlugin = source === constants_1.CSVSPLUGIN;
95
- autoFixResult = await (0, autoFix_1.autoFixTestCode)(prompt, sourceCodePath, testCode, testProjectPath, testFilePath, testFramework, isXapCode, isVsPlugin, RETRYTIMES, isBenchmark);
96
- // autoFixResult = await autoRetryTestCode(prompt, sourceCode, testCode, testProjectPath, testFilePath, isXapTest);
97
- }
98
- if (autoFixResult.success) {
99
- console.log(`Generate UT success time: ${(Date.now() - startTime) / 1000} seconds`);
100
- return autoFixResult;
101
- }
102
- // if retry max times or test generation failed, and keepFailedTests is false, delete failed test file or remove failed test methods
103
- if (!keepFailedTests) {
104
- // keep succeed test code, or delete test file
105
- if (!autoFixResult.testResult || autoFixResult.testResult.passed === 0) {
106
- !testFileExist && (0, fileUtils_1.deleteTestFileIfExists)(testFilePath);
107
- console.log(`Failed to generate csharp test code, deleted test file: ${testFilePath}`);
108
- }
109
- else {
110
- (0, removeFailedTestMethods_1.removeFailedTestCasesInTestFile)(autoFixResult.testResult, testFilePath);
111
- console.log(`write succeed test code to file: ${testFilePath}`);
112
- }
113
- }
114
- else {
115
- console.log(`keep failed test file: ${testFilePath}`);
116
- }
117
- console.log(`Generate UT failed time: ${(Date.now() - startTime) / 1000} seconds`);
118
- return autoFixResult;
119
- }
120
- // generateCsharpUtCode("D:\\code\\IndexServe\\private\\indexserve\\RecommendationEngine\\RecoPS\\PSTableClient\\PSTableClient.cs", undefined, false, true, false);
121
- // generateCsharpUtCode("D:\\code\\CS.Service.Fundamental\\SharedSegments\\SharedSegments\\SharedSegments.Plugins\\Workflows\\Overview\\HttpRequestParser\\Utils\\SqmidHelper.cs", undefined, true, true, false);
122
- // generateCsharpUtCode("D:\\code\\CS.Service.Fundamental\\SharedSegments\\SharedSegments\\SharedSegments.Plugins\\Workflows\\Eplant\\ResponseBuilders\\EplantMigrateResponseBuilder.cs", undefined, true, true, true);
123
- // generateCsharpUtCode("D:\\code\\UCMDynamics\\private\\DynamicCode\\Plugin\\UCMDynamics.AppointmentPlugin\\AppointmentOperation.cs", undefined, false, true, false);
124
- // generateCsharpUtCode("D:\\code\\AIUnitTestExample\\src\\ToListinator.Analyzers\\ToListCountAnalyzer.cs", undefined, true, true, false);
125
- //# sourceMappingURL=csharpUtGen.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"csharpUtGen.js","sourceRoot":"","sources":["../../src/gen/csharpUtGen.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from 'fs';\r\nimport * as path from 'path';\r\n\r\nimport { CSHARPUTGEN, CSVSPLUGIN } from '../types/constants';\r\nimport { deleteTestFileIfExists, writeTestCode } from \"../utils/fileUtils\";\r\n\r\nimport { GenResult } from '../types/genResult';\r\nimport { autoFixTestCode } from './autoFix';\r\nimport { checkXapCode } from '../utils/checkXapCode';\r\nimport { detectTestFramework } from '../utils/detectTestFramework';\r\nimport { ensureValidLLMResponse } from './ensureValidLLMResponse';\r\nimport { generateCodeDependency } from '../analyze/generateCodeDependency';\r\nimport { getOrCreatTestFile } from '../utils/getTestFile';\r\nimport { installOrUpdateAnalyzerTool } from '../analyze/installAnalyzerTool';\r\nimport { preGenProcess } from './preGen/preGenProcess';\r\nimport { prepareUtGenPrompt } from '../llm/preparePrompt';\r\nimport { removeFailedTestCasesInTestFile } from '../utils/removeFailedTestMethods';\r\nimport { sendUserUsageEvent } from '../metrics/appInsightTelemetry';\r\n\r\nconst RETRYTIMES = 3;\r\n\r\nexport async function generateCsharpUtCode(\r\n sourceCodePath: string,\r\n testCodePath: string,\r\n enableAutoFix: boolean,\r\n keepFailedTests: boolean,\r\n source: string = CSHARPUTGEN,\r\n isBenchmark: boolean = false,\r\n nugetPackagePath: string = null\r\n): Promise<GenResult> {\r\n const startTime = Date.now();\r\n\r\n console.log(`*****************Generating C# unit test code for: ${sourceCodePath}*****************`);\r\n console.log(`Current work dir: ${process.cwd()}`);\r\n\r\n // send usage metrics\r\n sendUserUsageEvent(source);\r\n\r\n sourceCodePath = path.normalize(sourceCodePath);\r\n if (!fs.existsSync(sourceCodePath)) {\r\n console.error(`Source code file not found: ${sourceCodePath}`);\r\n return;\r\n }\r\n\r\n // install nuget cli tool to analyze code\r\n installOrUpdateAnalyzerTool();\r\n\r\n let sourceCode = fs.readFileSync(sourceCodePath, 'utf-8');\r\n\r\n // check if source code is xap code, if so, use xap code generation prompt\r\n const isXapCode = checkXapCode(sourceCode);\r\n\r\n sourceCode = await preGenProcess(sourceCode, sourceCodePath, isXapCode);\r\n if (!sourceCode) {\r\n console.error(`Skip generate test for source code: ${sourceCodePath}`);\r\n return { success: false, testFilePath: undefined, testProjectPath: undefined, codeFilePath: sourceCodePath, buildResult: null, testResult: null };\r\n }\r\n\r\n // get code dependencies\r\n let codeDependency = await generateCodeDependency(sourceCodePath, nugetPackagePath);\r\n\r\n // detect existing test file or create a new one by source code path\r\n const { testFilePath, testProjectPath, testFileExist } = getOrCreatTestFile(sourceCodePath, testCodePath, isXapCode);\r\n if (!testFilePath || !testProjectPath) {\r\n console.error(`Failed to get or create test file for source code: ${sourceCodePath}. Please check if the test project exists.`);\r\n return { success: false, testFilePath: undefined, testProjectPath: undefined, codeFilePath: sourceCodePath, buildResult: null, testResult: null };\r\n }\r\n\r\n // get test framework\r\n const testFramework = detectTestFramework(testProjectPath);\r\n\r\n // prepare prompt\r\n let prompt = prepareUtGenPrompt(sourceCodePath, sourceCode, codeDependency, isXapCode, testFramework);\r\n\r\n // call LLM service to gen code with retry\r\n const testCode = await ensureValidLLMResponse(prompt, testFramework, isXapCode);\r\n\r\n // write test code to test project\r\n // To run vstest, need to write the test code to test project first, then build the test project and run the tests\r\n writeTestCode(testCode, testFilePath);\r\n\r\n // autofix\r\n let autoFixResult: GenResult = { success: true, testFilePath, testProjectPath, codeFilePath: sourceCodePath, buildResult: null, testResult: null };\r\n if (enableAutoFix) {\r\n const isVsPlugin = source === CSVSPLUGIN;\r\n autoFixResult = await autoFixTestCode(prompt, sourceCodePath, testCode, testProjectPath, testFilePath, testFramework, isXapCode, isVsPlugin, RETRYTIMES, isBenchmark);\r\n // autoFixResult = await autoRetryTestCode(prompt, sourceCode, testCode, testProjectPath, testFilePath, isXapTest);\r\n }\r\n\r\n if (autoFixResult.success) {\r\n console.log(`Generate UT success time: ${(Date.now() - startTime) / 1000} seconds`);\r\n return autoFixResult;\r\n }\r\n\r\n // if retry max times or test generation failed, and keepFailedTests is false, delete failed test file or remove failed test methods\r\n if (!keepFailedTests) {\r\n // keep succeed test code, or delete test file\r\n if (!autoFixResult.testResult || autoFixResult.testResult.passed === 0) {\r\n !testFileExist && deleteTestFileIfExists(testFilePath);\r\n console.log(`Failed to generate csharp test code, deleted test file: ${testFilePath}`);\r\n } else {\r\n removeFailedTestCasesInTestFile(autoFixResult.testResult, testFilePath);\r\n console.log(`write succeed test code to file: ${testFilePath}`);\r\n }\r\n } else {\r\n console.log(`keep failed test file: ${testFilePath}`);\r\n }\r\n console.log(`Generate UT failed time: ${(Date.now() - startTime) / 1000} seconds`);\r\n return autoFixResult;\r\n}\r\n\r\n// generateCsharpUtCode(\"D:\\\\code\\\\IndexServe\\\\private\\\\indexserve\\\\RecommendationEngine\\\\RecoPS\\\\PSTableClient\\\\PSTableClient.cs\", undefined, false, true, false);\r\n// generateCsharpUtCode(\"D:\\\\code\\\\CS.Service.Fundamental\\\\SharedSegments\\\\SharedSegments\\\\SharedSegments.Plugins\\\\Workflows\\\\Overview\\\\HttpRequestParser\\\\Utils\\\\SqmidHelper.cs\", undefined, true, true, false);\r\n// generateCsharpUtCode(\"D:\\\\code\\\\CS.Service.Fundamental\\\\SharedSegments\\\\SharedSegments\\\\SharedSegments.Plugins\\\\Workflows\\\\Eplant\\\\ResponseBuilders\\\\EplantMigrateResponseBuilder.cs\", undefined, true, true, true);\r\n// generateCsharpUtCode(\"D:\\\\code\\\\UCMDynamics\\\\private\\\\DynamicCode\\\\Plugin\\\\UCMDynamics.AppointmentPlugin\\\\AppointmentOperation.cs\", undefined, false, true, false);\r\n// generateCsharpUtCode(\"D:\\\\code\\\\AIUnitTestExample\\\\src\\\\ToListinator.Analyzers\\\\ToListCountAnalyzer.cs\", undefined, true, true, false);\r\n"]}
@@ -1 +0,0 @@
1
- export declare function ensureValidLLMResponse(prompt: any[], testFramework: string, isXapCode: boolean, retryTimes?: number): Promise<string>;
@@ -1,19 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ensureValidLLMResponse = ensureValidLLMResponse;
4
- const postGenProcess_1 = require("./postGen/postGenProcess");
5
- const sendRequestToLLM_1 = require("../llm/sendRequestToLLM");
6
- async function ensureValidLLMResponse(prompt, testFramework, isXapCode, retryTimes = 3) {
7
- for (let i = 0; i < retryTimes; i++) {
8
- // call LLM service to gen code
9
- const { content: generatedCode } = await (0, sendRequestToLLM_1.sendRequestToLLM)(prompt);
10
- // extract valid code from LLM response
11
- const testCode = (0, postGenProcess_1.postGenProcess)(generatedCode, testFramework, isXapCode);
12
- if (!!testCode) {
13
- return testCode;
14
- }
15
- console.log(`Failed to generate valid test code, retrying... (${i + 1}/${retryTimes})`);
16
- }
17
- return undefined;
18
- }
19
- //# sourceMappingURL=ensureValidLLMResponse.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ensureValidLLMResponse.js","sourceRoot":"","sources":["../../src/gen/ensureValidLLMResponse.ts"],"names":[],"mappings":";;AAGA,wDAcC;AAjBD,6DAA0D;AAC1D,8DAA2D;AAEpD,KAAK,UAAU,sBAAsB,CAAC,MAAa,EAAE,aAAqB,EAAE,SAAkB,EAAE,aAAqB,CAAC;IACzH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,+BAA+B;QAC/B,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,MAAM,IAAA,mCAAgB,EAAC,MAAM,CAAC,CAAC;QAElE,uCAAuC;QACvC,MAAM,QAAQ,GAAG,IAAA,+BAAc,EAAC,aAAa,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;QACzE,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAC;QACpB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,GAAG,CAAC,IAAI,UAAU,GAAG,CAAC,CAAC;IAC5F,CAAC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC","sourcesContent":["import { postGenProcess } from \"./postGen/postGenProcess\";\r\nimport { sendRequestToLLM } from \"../llm/sendRequestToLLM\";\r\n\r\nexport async function ensureValidLLMResponse(prompt: any[], testFramework: string, isXapCode: boolean, retryTimes: number = 3): Promise<string> {\r\n for (let i = 0; i < retryTimes; i++) {\r\n // call LLM service to gen code\r\n const { content: generatedCode } = await sendRequestToLLM(prompt);\r\n \r\n // extract valid code from LLM response\r\n const testCode = postGenProcess(generatedCode, testFramework, isXapCode);\r\n if (!!testCode) {\r\n return testCode;\r\n }\r\n console.log(`Failed to generate valid test code, retrying... (${i + 1}/${retryTimes})`);\r\n }\r\n\r\n return undefined;\r\n}"]}
@@ -1 +0,0 @@
1
- export declare function extractCodeFromResponse(response: string): string;
@@ -1,37 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.extractCodeFromResponse = extractCodeFromResponse;
4
- const regexList = [
5
- /```(?:C#|csharp|CSharp|json|mermaid)?([\s\S]*?)(\n?```\n*|$)/g,
6
- /```([\s\S]*?)(\n?```\n*|$)/g,
7
- /```C#\s*([\s\S]*?)```/gi
8
- ];
9
- function extractCodeFromResponse(response) {
10
- if (!response) {
11
- return '';
12
- }
13
- const text = response.trim();
14
- for (const regex of regexList) {
15
- let testCode = getRegexResult(text, regex);
16
- if (!!testCode) {
17
- return testCode;
18
- }
19
- }
20
- const lines = text.split(/\r?\n/);
21
- const hasMarkdown = lines.some(line => line.startsWith('#'));
22
- if (hasMarkdown) {
23
- return '';
24
- }
25
- return text;
26
- }
27
- function getRegexResult(response, regex) {
28
- const match = regex.exec(response);
29
- if (!match || match.length < 2) {
30
- return null;
31
- }
32
- return match[1].trim();
33
- }
34
- // const input = '```C#\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Moq;\nusing System;\nusing System.Collections.Generic;\nusing SharedSegments.Plugins.Workflows.Overview.HttpRequestParser.Utils;\n\nnamespace SharedSegments.Tests\n{\n [TestClass]\n public class SqmidHelperTests\n {\n [TestMethod]\n public void GetSqmidFromCookie_CookieWithValidBlisId_ReturnsDecodedSqmid()\n {\n var cookies = new Dictionary<string, string>\n {\n { \"USRLOC\", \"BID=QlJfU01JRA==\" }\n };\n\n var result = SqmidHelper.GetSqmidFromCookie(cookies);\n\n Assert.AreEqual(\"SMID\", result);\n }\n\n [TestMethod]\n public void GetSqmidFromCookie_CookieWithoutBlisId_ReturnsNull()\n {\n var cookies = new Dictionary<string, string>\n {\n { \"USRLOC\", \"ANOTHERDATA=123\" }\n };\n\n var result = SqmidHelper.GetSqmidFromCookie(cookies);\n\n Assert.IsNull(result);\n }\n\n [TestMethod]\n public void GetSqmidFromCookie_CookieWithEmptyValues_ReturnsEmptyString()\n {\n var cookies = new Dictionary<string, string>\n {\n { \"USRLOC\", \"BID=\" }\n };\n\n var result = SqmidHelper.GetSqmidFromCookie(cookies);\n\n Assert.AreEqual(string.Empty, result);\n }\n\n [TestMethod]\n public void GetSqmidFromCookie_InvalidBase64BlisId_ThrowsArgumentException_ReturnsEmptyString()\n {\n var cookies = new Dictionary<string, string>\n {\n { \"USRLOC\", \"BID=InvalidBase64\" }\n };\n\n var result = SqmidHelper.GetSqmidFromCookie(cookies);\n\n Assert.AreEqual(string.Empty, result);\n }\n\n [TestMethod]\n public void GetSqmidFromCookie_NoLocationCookie_ReturnsEmptyString()\n {\n var cookies = new Dictionary<string, string>();\n\n var result = SqmidHelper.GetSqmidFromCookie(cookies);\n\n Assert.AreEqual(string.Empty, result);\n }\n\n [TestMethod]\n public void GetSqmidFromCookie_NullCookies_ReturnsEmptyString()\n {\n var result = SqmidHelper.GetSqmidFromCookie(null);\n\n Assert.AreEqual(string.Empty, result);\n }\n\n [TestMethod]\n public void DecodeBlisId_ValidBase64_ReturnsExpectedValue()\n {\n var blisId = \"QlJfU01JRA==\";\n\n var result = InvokeDecodeBlisId(blisId);\n\n Assert.AreEqual(\"SMID\", result);\n }\n\n [TestMethod]\n public void DecodeBlisId_InvalidBase64_ReturnsEmptyString()\n {\n var blisId = \"InvalidBase64\";\n\n var result = InvokeDecodeBlisId(blisId);\n\n Assert.AreEqual(string.Empty, result);\n }\n\n [TestMethod]\n public void DecodeBlisId_EmptyBlisId_ReturnsEmptyString()\n {\n var blisId = string.Empty;\n\n var result = InvokeDecodeBlisId(blisId);\n\n Assert.AreEqual(string.Empty, result);\n }\n\n [TestMethod]\n public void DecodeBlisId_NullBlisId_ReturnsEmptyString()\n {\n var result = InvokeDecodeBlisId(null);\n\n Assert.AreEqual(string.Empty, result);\n }\n\n private string InvokeDecodeBlisId(string blisId)\n {\n var method = typeof(SqmidHelper).GetMethod(\"DecodeBlisId\", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static);\n return (string)method.Invoke(null, new object[] { blisId });\n }\n }\n}\n```';
35
- // const code = extractCode(input);
36
- // console.log(code);
37
- //# sourceMappingURL=extractCodeFromResponse.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extractCodeFromResponse.js","sourceRoot":"","sources":["../../../src/gen/postGen/extractCodeFromResponse.ts"],"names":[],"mappings":";;AAOA,0DAkBC;AAxBD,MAAM,SAAS,GAAG;IACd,+DAA+D;IAC/D,6BAA6B;IAC7B,yBAAyB;CAC5B,CAAC;AAEF,SAAgB,uBAAuB,CAAC,QAAgB;IACpD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,OAAO,EAAE,CAAC;IACd,CAAC;IACD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC7B,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;QAC5B,IAAI,QAAQ,GAAG,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAC;QACpB,CAAC;IACL,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7D,IAAI,WAAW,EAAE,CAAC;QACd,OAAO,EAAE,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,QAAgB,EAAE,KAAa;IACnD,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED,+qHAA+qH;AAC/qH,mCAAmC;AACnC,qBAAqB","sourcesContent":["\r\nconst regexList = [\r\n /```(?:C#|csharp|CSharp|json|mermaid)?([\\s\\S]*?)(\\n?```\\n*|$)/g,\r\n /```([\\s\\S]*?)(\\n?```\\n*|$)/g,\r\n /```C#\\s*([\\s\\S]*?)```/gi\r\n];\r\n\r\nexport function extractCodeFromResponse(response: string): string {\r\n if (!response) {\r\n return '';\r\n }\r\n const text = response.trim();\r\n for (const regex of regexList) {\r\n let testCode = getRegexResult(text, regex);\r\n if (!!testCode) {\r\n return testCode;\r\n }\r\n }\r\n\r\n const lines = text.split(/\\r?\\n/);\r\n const hasMarkdown = lines.some(line => line.startsWith('#'));\r\n if (hasMarkdown) {\r\n return '';\r\n }\r\n return text;\r\n}\r\n\r\nfunction getRegexResult(response: string, regex: RegExp): string | null {\r\n const match = regex.exec(response);\r\n if (!match || match.length < 2) {\r\n return null;\r\n }\r\n return match[1].trim();\r\n}\r\n\r\n// const input = '```C#\\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\\nusing Moq;\\nusing System;\\nusing System.Collections.Generic;\\nusing SharedSegments.Plugins.Workflows.Overview.HttpRequestParser.Utils;\\n\\nnamespace SharedSegments.Tests\\n{\\n [TestClass]\\n public class SqmidHelperTests\\n {\\n [TestMethod]\\n public void GetSqmidFromCookie_CookieWithValidBlisId_ReturnsDecodedSqmid()\\n {\\n var cookies = new Dictionary<string, string>\\n {\\n { \\\"USRLOC\\\", \\\"BID=QlJfU01JRA==\\\" }\\n };\\n\\n var result = SqmidHelper.GetSqmidFromCookie(cookies);\\n\\n Assert.AreEqual(\\\"SMID\\\", result);\\n }\\n\\n [TestMethod]\\n public void GetSqmidFromCookie_CookieWithoutBlisId_ReturnsNull()\\n {\\n var cookies = new Dictionary<string, string>\\n {\\n { \\\"USRLOC\\\", \\\"ANOTHERDATA=123\\\" }\\n };\\n\\n var result = SqmidHelper.GetSqmidFromCookie(cookies);\\n\\n Assert.IsNull(result);\\n }\\n\\n [TestMethod]\\n public void GetSqmidFromCookie_CookieWithEmptyValues_ReturnsEmptyString()\\n {\\n var cookies = new Dictionary<string, string>\\n {\\n { \\\"USRLOC\\\", \\\"BID=\\\" }\\n };\\n\\n var result = SqmidHelper.GetSqmidFromCookie(cookies);\\n\\n Assert.AreEqual(string.Empty, result);\\n }\\n\\n [TestMethod]\\n public void GetSqmidFromCookie_InvalidBase64BlisId_ThrowsArgumentException_ReturnsEmptyString()\\n {\\n var cookies = new Dictionary<string, string>\\n {\\n { \\\"USRLOC\\\", \\\"BID=InvalidBase64\\\" }\\n };\\n\\n var result = SqmidHelper.GetSqmidFromCookie(cookies);\\n\\n Assert.AreEqual(string.Empty, result);\\n }\\n\\n [TestMethod]\\n public void GetSqmidFromCookie_NoLocationCookie_ReturnsEmptyString()\\n {\\n var cookies = new Dictionary<string, string>();\\n\\n var result = SqmidHelper.GetSqmidFromCookie(cookies);\\n\\n Assert.AreEqual(string.Empty, result);\\n }\\n\\n [TestMethod]\\n public void GetSqmidFromCookie_NullCookies_ReturnsEmptyString()\\n {\\n var result = SqmidHelper.GetSqmidFromCookie(null);\\n\\n Assert.AreEqual(string.Empty, result);\\n }\\n\\n [TestMethod]\\n public void DecodeBlisId_ValidBase64_ReturnsExpectedValue()\\n {\\n var blisId = \\\"QlJfU01JRA==\\\";\\n\\n var result = InvokeDecodeBlisId(blisId);\\n\\n Assert.AreEqual(\\\"SMID\\\", result);\\n }\\n\\n [TestMethod]\\n public void DecodeBlisId_InvalidBase64_ReturnsEmptyString()\\n {\\n var blisId = \\\"InvalidBase64\\\";\\n\\n var result = InvokeDecodeBlisId(blisId);\\n\\n Assert.AreEqual(string.Empty, result);\\n }\\n\\n [TestMethod]\\n public void DecodeBlisId_EmptyBlisId_ReturnsEmptyString()\\n {\\n var blisId = string.Empty;\\n\\n var result = InvokeDecodeBlisId(blisId);\\n\\n Assert.AreEqual(string.Empty, result);\\n }\\n\\n [TestMethod]\\n public void DecodeBlisId_NullBlisId_ReturnsEmptyString()\\n {\\n var result = InvokeDecodeBlisId(null);\\n\\n Assert.AreEqual(string.Empty, result);\\n }\\n\\n private string InvokeDecodeBlisId(string blisId)\\n {\\n var method = typeof(SqmidHelper).GetMethod(\\\"DecodeBlisId\\\", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static);\\n return (string)method.Invoke(null, new object[] { blisId });\\n }\\n }\\n}\\n```';\r\n// const code = extractCode(input);\r\n// console.log(code);\r\n"]}
@@ -1 +0,0 @@
1
- export declare function postGenProcess(generatedCode: string, testFramework: string, isXapCode: boolean): string;
@@ -1,37 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.postGenProcess = postGenProcess;
4
- const extractCodeFromResponse_1 = require("./extractCodeFromResponse");
5
- const removeSingleLines_1 = require("./removeSingleLines");
6
- const removeComments_1 = require("./removeComments");
7
- const repairRequiredNameSpaces_1 = require("./repairRequiredNameSpaces");
8
- const validateTestCode_1 = require("./validateTestCode");
9
- function postGenProcess(generatedCode, testFramework, isXapCode) {
10
- if (!isValidTestCode(generatedCode)) {
11
- return undefined;
12
- }
13
- let testCode = (0, extractCodeFromResponse_1.extractCodeFromResponse)(generatedCode);
14
- testCode = (0, removeComments_1.removeTestCodeComments)(testCode);
15
- testCode = (0, removeSingleLines_1.removeCSharpOnlyLines)(testCode);
16
- testCode = (0, repairRequiredNameSpaces_1.repairRequiredNameSpaces)(testCode, testFramework);
17
- if (isXapCode) {
18
- testCode = xapCodePostGenProcess(testCode);
19
- }
20
- console.log(`Post generation process completed, code length: ${testCode.length}`);
21
- return testCode;
22
- }
23
- function xapCodePostGenProcess(testCode) {
24
- const processedCode = (0, repairRequiredNameSpaces_1.repairXapRequiredNameSpaces)(testCode);
25
- return processedCode;
26
- }
27
- function isValidTestCode(testCode) {
28
- if (!testCode || testCode.trim() === '') {
29
- return false; // Empty code is not valid
30
- }
31
- // Check if the test code contains any test attributes or using statements
32
- const isValid = (0, validateTestCode_1.validateTestCode)(testCode);
33
- return isValid;
34
- }
35
- // const code = fs.readFileSync("D:\\code\\CS.Service.Fundamental\\SharedSegments\\SharedSegments\\SharedSegments.Tests\\Workflows\\Overview\\HttpRequestParser\\Utils\\SqmidHelperTests.cs", 'utf-8');
36
- // postGenProcess(code, false);
37
- //# sourceMappingURL=postGenProcess.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"postGenProcess.js","sourceRoot":"","sources":["../../../src/gen/postGen/postGenProcess.ts"],"names":[],"mappings":";;AAMA,wCAcC;AApBD,uEAAoE;AACpE,2DAA4D;AAC5D,qDAA0D;AAC1D,yEAAmG;AACnG,yDAAsD;AAEtD,SAAgB,cAAc,CAAC,aAAqB,EAAE,aAAqB,EAAE,SAAkB;IAC3F,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE,CAAC;QAClC,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,IAAI,QAAQ,GAAG,IAAA,iDAAuB,EAAC,aAAa,CAAC,CAAC;IACtD,QAAQ,GAAG,IAAA,uCAAsB,EAAC,QAAQ,CAAC,CAAC;IAC5C,QAAQ,GAAG,IAAA,yCAAqB,EAAC,QAAQ,CAAC,CAAC;IAC3C,QAAQ,GAAG,IAAA,mDAAwB,EAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAC7D,IAAI,SAAS,EAAE,CAAC;QACZ,QAAQ,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,mDAAmD,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAClF,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,SAAS,qBAAqB,CAAC,QAAgB;IAC3C,MAAM,aAAa,GAAG,IAAA,sDAA2B,EAAC,QAAQ,CAAC,CAAC;IAC5D,OAAO,aAAa,CAAC;AACzB,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB;IACrC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC,CAAC,0BAA0B;IAC5C,CAAC;IACD,0EAA0E;IAC1E,MAAM,OAAO,GAAG,IAAA,mCAAgB,EAAC,QAAQ,CAAC,CAAC;IAC3C,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,uMAAuM;AACvM,+BAA+B","sourcesContent":["import { extractCodeFromResponse } from \"./extractCodeFromResponse\";\r\nimport { removeCSharpOnlyLines } from \"./removeSingleLines\";\r\nimport { removeTestCodeComments } from \"./removeComments\";\r\nimport { repairRequiredNameSpaces, repairXapRequiredNameSpaces } from \"./repairRequiredNameSpaces\";\r\nimport { validateTestCode } from \"./validateTestCode\";\r\n\r\nexport function postGenProcess(generatedCode: string, testFramework: string, isXapCode: boolean): string {\r\n if (!isValidTestCode(generatedCode)) {\r\n return undefined;\r\n }\r\n\r\n let testCode = extractCodeFromResponse(generatedCode);\r\n testCode = removeTestCodeComments(testCode);\r\n testCode = removeCSharpOnlyLines(testCode);\r\n testCode = repairRequiredNameSpaces(testCode, testFramework);\r\n if (isXapCode) {\r\n testCode = xapCodePostGenProcess(testCode);\r\n }\r\n console.log(`Post generation process completed, code length: ${testCode.length}`);\r\n return testCode;\r\n}\r\n\r\nfunction xapCodePostGenProcess(testCode: string): string {\r\n const processedCode = repairXapRequiredNameSpaces(testCode);\r\n return processedCode;\r\n}\r\n\r\nfunction isValidTestCode(testCode: string): boolean {\r\n if (!testCode || testCode.trim() === '') {\r\n return false; // Empty code is not valid\r\n }\r\n // Check if the test code contains any test attributes or using statements\r\n const isValid = validateTestCode(testCode);\r\n return isValid;\r\n}\r\n\r\n// const code = fs.readFileSync(\"D:\\\\code\\\\CS.Service.Fundamental\\\\SharedSegments\\\\SharedSegments\\\\SharedSegments.Tests\\\\Workflows\\\\Overview\\\\HttpRequestParser\\\\Utils\\\\SqmidHelperTests.cs\", 'utf-8');\r\n// postGenProcess(code, false);\r\n"]}
@@ -1 +0,0 @@
1
- export declare function removeTestCodeComments(code: string): string;
@@ -1,92 +0,0 @@
1
- "use strict";
2
- // todo: remove line:
3
- // C#(just contains C# in a line)
4
- Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.removeTestCodeComments = removeTestCodeComments;
6
- function removeTestCodeComments(code) {
7
- // Remove multi-line comments (/* ... */)
8
- let cleanedCode = code.replace(/\/\*[\s\S]*?\*\//g, '');
9
- // Remove single-line comments (// ...)
10
- cleanedCode = cleanedCode.replace(/\/\/.*$/gm, '');
11
- // Remove extra blank lines that might result from comment removal, only left at most one blank line
12
- // cleanedCode = cleanedCode.replace(/\n\s*\n/g, '\n');
13
- cleanedCode = cleanedCode.replace(/(\r?\n){3,}/g, '\n\n');
14
- return cleanedCode.trim();
15
- }
16
- // const code = `
17
- // using Microsoft.VisualStudio.TestTools.UnitTesting;
18
- // using SharedSegments.Plugins.Workflows.Overview.HttpRequestParser.Utils;
19
- // using System;
20
- // using System.Collections.Generic;
21
- // using System.Text;
22
- // using Moq;
23
- // namespace SharedSegments.Plugins.Tests.Workflows.Overview.HttpRequestParser.Utils
24
- // {
25
- // [TestClass]
26
- // public class SqmidHelperTests
27
- // {
28
- // [TestMethod]
29
- // public void GetSqmidFromCookie_ValidCookiesWithBlisId_ReturnsDecodedBlisId()
30
- // {
31
- // // Arrange
32
- // var cookies = new Dictionary<string, string>
33
- // {
34
- // { "USRLOC", "BID=" + Convert.ToBase64String(Encoding.UTF8.GetBytes("test_decodedBlisId_test")) }
35
- // };
36
- // // Act
37
- // var result = SqmidHelper.GetSqmidFromCookie(cookies);
38
- // // Assert
39
- // Assert.AreEqual("decodedBlisId", result);
40
- // }
41
- // [TestMethod]
42
- // public void GetSqmidFromCookie_ValidCookiesWithoutBlisId_ReturnsNull()
43
- // {
44
- // // Arrange
45
- // var cookies = new Dictionary<string, string>
46
- // {
47
- // { "USRLOC", "SomeOtherValue=123" }
48
- // };
49
- // // Act
50
- // var result = SqmidHelper.GetSqmidFromCookie(cookies);
51
- // // Assert
52
- // Assert.IsNull(result);
53
- // }
54
- // [TestMethod]
55
- // public void GetSqmidFromCookie_EmptyCookies_ReturnsEmptyString()
56
- // {
57
- // // Arrange
58
- // var cookies = new Dictionary<string, string>();
59
- // // Act
60
- // var result = SqmidHelper.GetSqmidFromCookie(cookies);
61
- // // Assert
62
- // Assert.AreEqual(string.Empty, result);
63
- // }
64
- // [TestMethod]
65
- // public void GetSqmidFromCookie_NullCookies_ReturnsEmptyString()
66
- // {
67
- // // Arrange
68
- // IDictionary<string, string> cookies = null;
69
- // // Act
70
- // var result = SqmidHelper.GetSqmidFromCookie(cookies);
71
- // // Assert
72
- // Assert.AreEqual(string.Empty, result);
73
- // }
74
- // [TestMethod]
75
- // public void GetSqmidFromCookie_UsrLocWithEmptyValue_ReturnsEmptyString()
76
- // {
77
- // // Arrange
78
- // var cookies = new Dictionary<string, string>
79
- // {
80
- // { "USRLOC", "" }
81
- // };
82
- // // Act
83
- // var result = SqmidHelper.GetSqmidFromCookie(cookies);
84
- // // Assert
85
- // Assert.AreEqual(string.Empty, result);
86
- // }
87
- // }
88
- // }
89
- // `;
90
- // const cleanedCode = removeTestCodeComments(code);
91
- // console.log(cleanedCode);
92
- //# sourceMappingURL=removeComments.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"removeComments.js","sourceRoot":"","sources":["../../../src/gen/postGen/removeComments.ts"],"names":[],"mappings":";AAAA,qBAAqB;AACrB,iCAAiC;;AAEjC,wDAYC;AAZD,SAAgB,sBAAsB,CAAC,IAAY;IAC/C,yCAAyC;IACzC,IAAI,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;IAExD,uCAAuC;IACvC,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAEnD,oGAAoG;IACpG,uDAAuD;IACvD,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAE1D,OAAO,WAAW,CAAC,IAAI,EAAE,CAAC;AAC9B,CAAC;AAED,iBAAiB;AACjB,sDAAsD;AACtD,2EAA2E;AAC3E,gBAAgB;AAChB,oCAAoC;AACpC,qBAAqB;AACrB,aAAa;AAEb,oFAAoF;AACpF,IAAI;AACJ,kBAAkB;AAClB,oCAAoC;AACpC,QAAQ;AACR,uBAAuB;AACvB,uFAAuF;AACvF,YAAY;AACZ,yBAAyB;AACzB,2DAA2D;AAC3D,gBAAgB;AAChB,mHAAmH;AACnH,iBAAiB;AAEjB,qBAAqB;AACrB,oEAAoE;AAEpE,wBAAwB;AACxB,wDAAwD;AACxD,YAAY;AAEZ,uBAAuB;AACvB,iFAAiF;AACjF,YAAY;AACZ,yBAAyB;AACzB,2DAA2D;AAC3D,gBAAgB;AAChB,qDAAqD;AACrD,iBAAiB;AAEjB,qBAAqB;AACrB,oEAAoE;AAEpE,wBAAwB;AACxB,qCAAqC;AACrC,YAAY;AAEZ,uBAAuB;AACvB,2EAA2E;AAC3E,YAAY;AACZ,yBAAyB;AACzB,8DAA8D;AAE9D,qBAAqB;AACrB,oEAAoE;AAEpE,wBAAwB;AACxB,qDAAqD;AACrD,YAAY;AAEZ,uBAAuB;AACvB,0EAA0E;AAC1E,YAAY;AACZ,yBAAyB;AACzB,0DAA0D;AAE1D,qBAAqB;AACrB,oEAAoE;AAEpE,wBAAwB;AACxB,qDAAqD;AACrD,YAAY;AAEZ,uBAAuB;AACvB,mFAAmF;AACnF,YAAY;AACZ,yBAAyB;AACzB,2DAA2D;AAC3D,gBAAgB;AAChB,mCAAmC;AACnC,iBAAiB;AAEjB,qBAAqB;AACrB,oEAAoE;AAEpE,wBAAwB;AACxB,qDAAqD;AACrD,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ,KAAK;AAEL,oDAAoD;AACpD,4BAA4B","sourcesContent":["// todo: remove line:\r\n// C#(just contains C# in a line)\r\n\r\nexport function removeTestCodeComments(code: string): string {\r\n // Remove multi-line comments (/* ... */)\r\n let cleanedCode = code.replace(/\\/\\*[\\s\\S]*?\\*\\//g, '');\r\n \r\n // Remove single-line comments (// ...)\r\n cleanedCode = cleanedCode.replace(/\\/\\/.*$/gm, '');\r\n \r\n // Remove extra blank lines that might result from comment removal, only left at most one blank line\r\n // cleanedCode = cleanedCode.replace(/\\n\\s*\\n/g, '\\n');\r\n cleanedCode = cleanedCode.replace(/(\\r?\\n){3,}/g, '\\n\\n');\r\n\r\n return cleanedCode.trim();\r\n}\r\n\r\n// const code = `\r\n// using Microsoft.VisualStudio.TestTools.UnitTesting;\r\n// using SharedSegments.Plugins.Workflows.Overview.HttpRequestParser.Utils;\r\n// using System;\r\n// using System.Collections.Generic;\r\n// using System.Text;\r\n// using Moq;\r\n\r\n// namespace SharedSegments.Plugins.Tests.Workflows.Overview.HttpRequestParser.Utils\r\n// {\r\n// [TestClass]\r\n// public class SqmidHelperTests\r\n// {\r\n// [TestMethod]\r\n// public void GetSqmidFromCookie_ValidCookiesWithBlisId_ReturnsDecodedBlisId()\r\n// {\r\n// // Arrange\r\n// var cookies = new Dictionary<string, string>\r\n// {\r\n// { \"USRLOC\", \"BID=\" + Convert.ToBase64String(Encoding.UTF8.GetBytes(\"test_decodedBlisId_test\")) }\r\n// };\r\n\r\n// // Act\r\n// var result = SqmidHelper.GetSqmidFromCookie(cookies);\r\n\r\n// // Assert\r\n// Assert.AreEqual(\"decodedBlisId\", result);\r\n// }\r\n\r\n// [TestMethod]\r\n// public void GetSqmidFromCookie_ValidCookiesWithoutBlisId_ReturnsNull()\r\n// {\r\n// // Arrange\r\n// var cookies = new Dictionary<string, string>\r\n// {\r\n// { \"USRLOC\", \"SomeOtherValue=123\" }\r\n// };\r\n\r\n// // Act\r\n// var result = SqmidHelper.GetSqmidFromCookie(cookies);\r\n\r\n// // Assert\r\n// Assert.IsNull(result);\r\n// }\r\n\r\n// [TestMethod]\r\n// public void GetSqmidFromCookie_EmptyCookies_ReturnsEmptyString()\r\n// {\r\n// // Arrange\r\n// var cookies = new Dictionary<string, string>();\r\n\r\n// // Act\r\n// var result = SqmidHelper.GetSqmidFromCookie(cookies);\r\n\r\n// // Assert\r\n// Assert.AreEqual(string.Empty, result);\r\n// }\r\n\r\n// [TestMethod]\r\n// public void GetSqmidFromCookie_NullCookies_ReturnsEmptyString()\r\n// {\r\n// // Arrange\r\n// IDictionary<string, string> cookies = null;\r\n\r\n// // Act\r\n// var result = SqmidHelper.GetSqmidFromCookie(cookies);\r\n\r\n// // Assert\r\n// Assert.AreEqual(string.Empty, result);\r\n// }\r\n\r\n// [TestMethod]\r\n// public void GetSqmidFromCookie_UsrLocWithEmptyValue_ReturnsEmptyString()\r\n// {\r\n// // Arrange\r\n// var cookies = new Dictionary<string, string>\r\n// {\r\n// { \"USRLOC\", \"\" }\r\n// };\r\n\r\n// // Act\r\n// var result = SqmidHelper.GetSqmidFromCookie(cookies);\r\n\r\n// // Assert\r\n// Assert.AreEqual(string.Empty, result);\r\n// }\r\n// }\r\n// }\r\n// `;\r\n\r\n// const cleanedCode = removeTestCodeComments(code);\r\n// console.log(cleanedCode);"]}
@@ -1 +0,0 @@
1
- export declare function removeCSharpOnlyLines(generatedCode: string): string;
@@ -1,28 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.removeCSharpOnlyLines = removeCSharpOnlyLines;
4
- const illegalSingleLines = [
5
- 'c#',
6
- 'csharp',
7
- '```',
8
- '```c#',
9
- '```csharp',
10
- ];
11
- function removeCSharpOnlyLines(generatedCode) {
12
- const lines = generatedCode.split(/\r?\n/);
13
- const filteredLines = lines.map(line => {
14
- // remove trailing spaces and tabs
15
- const trimmedLine = line.trim();
16
- if (trimmedLine.length === 0) {
17
- return trimmedLine; // keep empty lines
18
- }
19
- else {
20
- return line;
21
- }
22
- }).filter(line => {
23
- const lowerCasedLine = line.toLowerCase();
24
- return !illegalSingleLines.includes(lowerCasedLine);
25
- });
26
- return filteredLines.join('\n');
27
- }
28
- //# sourceMappingURL=removeSingleLines.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"removeSingleLines.js","sourceRoot":"","sources":["../../../src/gen/postGen/removeSingleLines.ts"],"names":[],"mappings":";;AAOA,sDAiBC;AAxBD,MAAM,kBAAkB,GAAG;IACvB,IAAI;IACJ,QAAQ;IACR,KAAK;IACL,OAAO;IACP,WAAW;CACd,CAAC;AACF,SAAgB,qBAAqB,CAAC,aAAqB;IACvD,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QAE/B,kCAAkC;QAClC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,WAAW,CAAC,CAAC,mBAAmB;QAC3C,CAAC;aAAM,CAAC;YACJ,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;QACjB,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAC1C,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC","sourcesContent":["const illegalSingleLines = [\r\n 'c#',\r\n 'csharp',\r\n '```',\r\n '```c#',\r\n '```csharp',\r\n];\r\nexport function removeCSharpOnlyLines(generatedCode: string): string {\r\n const lines = generatedCode.split(/\\r?\\n/);\r\n const filteredLines = lines.map(line => \r\n {\r\n // remove trailing spaces and tabs\r\n const trimmedLine = line.trim();\r\n if (trimmedLine.length === 0) {\r\n return trimmedLine; // keep empty lines\r\n } else {\r\n return line;\r\n }\r\n }).filter(line => {\r\n const lowerCasedLine = line.toLowerCase();\r\n return !illegalSingleLines.includes(lowerCasedLine);\r\n });\r\n\r\n return filteredLines.join('\\n');\r\n}"]}
@@ -1,2 +0,0 @@
1
- export declare function repairRequiredNameSpaces(code: string, testFramework: string): string;
2
- export declare function repairXapRequiredNameSpaces(code: string): string;