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

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 (60) hide show
  1. package/out/analyze/generateCodeDependency.js +3 -2
  2. package/out/analyze/generateCodeDependency.js.map +1 -1
  3. package/out/analyze/installAnalyzerTool.js +3 -2
  4. package/out/analyze/installAnalyzerTool.js.map +1 -1
  5. package/out/batch/generateCodeTests.d.ts +2 -2
  6. package/out/batch/generateCodeTests.js +55 -39
  7. package/out/batch/generateCodeTests.js.map +1 -1
  8. package/out/benchmark/generateBenchmarkReport.d.ts +1 -1
  9. package/out/benchmark/generateBenchmarkReport.js +2 -2
  10. package/out/benchmark/generateBenchmarkReport.js.map +1 -1
  11. package/out/codeCoverage/extractCodeCoverageInfo.js +2 -1
  12. package/out/codeCoverage/extractCodeCoverageInfo.js.map +1 -1
  13. package/out/codeCoverage/extractCoverageReportPath.js +2 -1
  14. package/out/codeCoverage/extractCoverageReportPath.js.map +1 -1
  15. package/out/codeCoverage/reportTool.js +2 -1
  16. package/out/codeCoverage/reportTool.js.map +1 -1
  17. package/out/command/index.js +3 -7
  18. package/out/command/index.js.map +1 -1
  19. package/out/command/utGenWrapper.d.ts +0 -1
  20. package/out/command/utGenWrapper.js +30 -23
  21. package/out/command/utGenWrapper.js.map +1 -1
  22. package/out/gen/autoFix.js +5 -1
  23. package/out/gen/autoFix.js.map +1 -1
  24. package/out/gen/postGen/addAiAnnotation.d.ts +1 -0
  25. package/out/gen/postGen/addAiAnnotation.js +57 -0
  26. package/out/gen/postGen/addAiAnnotation.js.map +1 -0
  27. package/out/gen/postGen/extractCodeFromResponse.js +2 -1
  28. package/out/gen/postGen/extractCodeFromResponse.js.map +1 -1
  29. package/out/gen/postGen/postGenProcess.js +2 -0
  30. package/out/gen/postGen/postGenProcess.js.map +1 -1
  31. package/out/gen/postGen/removeSingleLines.js +2 -1
  32. package/out/gen/postGen/removeSingleLines.js.map +1 -1
  33. package/out/gen/postGen/repairRequiredNameSpaces.js +2 -1
  34. package/out/gen/postGen/repairRequiredNameSpaces.js.map +1 -1
  35. package/out/gen/preGen/excludeSpecificTag.js +2 -1
  36. package/out/gen/preGen/excludeSpecificTag.js.map +1 -1
  37. package/out/gen/preGen/validateCode.js +2 -1
  38. package/out/gen/preGen/validateCode.js.map +1 -1
  39. package/out/types/constants.d.ts +4 -0
  40. package/out/types/constants.js +5 -1
  41. package/out/types/constants.js.map +1 -1
  42. package/out/utils/getTestFile.js +2 -0
  43. package/out/utils/getTestFile.js.map +1 -1
  44. package/out/utils/parseBuildResult.js +2 -1
  45. package/out/utils/parseBuildResult.js.map +1 -1
  46. package/out/utils/parseSyntaxCheckResult.js +2 -1
  47. package/out/utils/parseSyntaxCheckResult.js.map +1 -1
  48. package/out/utils/parseVstestResult.js +2 -1
  49. package/out/utils/parseVstestResult.js.map +1 -1
  50. package/out/utils/removeFailedTestMethods.js +2 -1
  51. package/out/utils/removeFailedTestMethods.js.map +1 -1
  52. package/out/utils/writeFailedVerifyResult.d.ts +1 -0
  53. package/out/utils/writeFailedVerifyResult.js +67 -0
  54. package/out/utils/writeFailedVerifyResult.js.map +1 -0
  55. package/out/utils/writeGenCode.d.ts +1 -1
  56. package/out/utils/writeGenCode.js +17 -4
  57. package/out/utils/writeGenCode.js.map +1 -1
  58. package/out/vsPlugin/stdListener.js +1 -1
  59. package/out/vsPlugin/stdListener.js.map +1 -1
  60. package/package.json +1 -1
@@ -3,15 +3,39 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generateUtCode = generateUtCode;
4
4
  exports.generateBatchUtCode = generateBatchUtCode;
5
5
  exports.generateUtBenchmark = generateUtBenchmark;
6
- exports.generateUtWithVsPlugin = generateUtWithVsPlugin;
7
6
  const stdListener_1 = require("../vsPlugin/stdListener");
8
7
  const constants_1 = require("../types/constants");
9
8
  const generateCodeTests_1 = require("../batch/generateCodeTests");
10
9
  const csharpUtGen_1 = require("../gen/csharpUtGen");
10
+ const generateBenchmarkReport_1 = require("../benchmark/generateBenchmarkReport");
11
11
  async function generateUtCode(c) {
12
12
  const autofix = c.autofix === 1;
13
13
  const keepFailedTest = c.keepFailedTest === 1;
14
- await (0, csharpUtGen_1.generateCsharpUtCode)(c.sourceCodePath, c.testCodePath, autofix, keepFailedTest, constants_1.CSHARPUTGEN, false, c.nugetPackagePath);
14
+ switch (c.source) {
15
+ case constants_1.CSVSPLUGIN:
16
+ try {
17
+ c.autofix === 1 && (0, stdListener_1.startStdListener)();
18
+ await (0, csharpUtGen_1.generateCsharpUtCode)(c.sourceCodePath, c.testCodePath, autofix, keepFailedTest, c.source, false, c.nugetPackagePath);
19
+ }
20
+ catch (error) {
21
+ console.error("Error in generateUtCode with VS Plugin:", error);
22
+ }
23
+ finally {
24
+ if (c.autofix === 1 && stdListener_1.readLineInterface) {
25
+ stdListener_1.readLineInterface.close();
26
+ }
27
+ }
28
+ break;
29
+ case constants_1.CSVSCODEPLUGIN:
30
+ await (0, csharpUtGen_1.generateCsharpUtCode)(c.sourceCodePath, c.testCodePath, autofix, keepFailedTest, constants_1.CSVSCODEPLUGIN, false, c.nugetPackagePath);
31
+ break;
32
+ case constants_1.PIPELINE:
33
+ await (0, csharpUtGen_1.generateCsharpUtCode)(c.sourceCodePath, c.testCodePath, autofix, keepFailedTest, constants_1.PIPELINE, false, c.nugetPackagePath);
34
+ break;
35
+ default:
36
+ await (0, csharpUtGen_1.generateCsharpUtCode)(c.sourceCodePath, c.testCodePath, autofix, keepFailedTest, constants_1.CSHARPUTGEN, false, c.nugetPackagePath);
37
+ break;
38
+ }
15
39
  }
16
40
  async function generateBatchUtCode(c) {
17
41
  const autofix = c.autofix === 1;
@@ -21,26 +45,9 @@ async function generateBatchUtCode(c) {
21
45
  async function generateUtBenchmark(c) {
22
46
  const autofix = c.autofix === 1;
23
47
  const keepFailedTest = c.keepFailedTest === 1;
24
- await (0, generateCodeTests_1.generateBatchTests)(c.sourceCodePath, autofix, keepFailedTest, true);
25
- }
26
- async function generateUtWithVsPlugin(c) {
27
- try {
28
- const autofix = c.autofix === 1;
29
- if (autofix) {
30
- (0, stdListener_1.startStdListener)();
31
- }
32
- const keepFailedTest = c.keepFailedTest === 1;
33
- await (0, csharpUtGen_1.generateCsharpUtCode)(c.sourceCodePath, c.testCodePath, autofix, keepFailedTest, constants_1.CSVSPLUGIN, true, c.nugetPackagePath);
34
- }
35
- catch (error) {
36
- console.error("Error generateUtWithVsPlugin:", error);
37
- }
38
- finally {
39
- // Ensure the listener is closed after processing
40
- if (c.autofix === 1 && stdListener_1.readLineInterface) {
41
- stdListener_1.readLineInterface.close();
42
- }
43
- }
48
+ await (0, generateBenchmarkReport_1.generateBenchmarkReport)(c.sourceCodePath, autofix, keepFailedTest, c.source);
44
49
  }
45
- // generateUtCode({sourceCodePath: "D:\\code\\CS.Service.Fundamental\\SharedSegments\\SharedSegments\\SharedSegments.Plugins\\Workflows\\Overview\\HttpRequestParser\\Utils\\SqmidHelper.cs", keepFailedTest: 1})
50
+ // generateUtCode({sourceCodePath: "D:\\code\\CS.Service.Fundamental\\SharedSegments\\SharedSegments\\SharedSegments.Plugins\\Workflows\\Overview\\HttpRequestParser\\Utils\\SqmidHelper.cs", keepFailedTest: 1});
51
+ // generateUtBenchmarkReport({sourceCodePath: "Q:\\MyProject\\TestTestReport\\TestTestReport\\TestTestReport.csproj", autofix: 1, keepFailedTest: 1, source: CSVSPLUGIN});
52
+ // generateUtBenchmarkReport({sourceCodePath: "Q:\\MyProject\\TestTestReport\\TestTestReport\\TestFolder", autofix: 1, keepFailedTest: 1, source: CSVSPLUGIN});
46
53
  //# sourceMappingURL=utGenWrapper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utGenWrapper.js","sourceRoot":"","sources":["../../src/command/utGenWrapper.ts"],"names":[],"mappings":";;AAMA,wCAIC;AAED,kDAIC;AAED,kDAIC;AAED,wDAgBC;AAxCD,yDAA8E;AAE9E,kDAA6D;AAC7D,kEAAgE;AAChE,oDAA0D;AAEnD,KAAK,UAAU,cAAc,CAAC,CAAC;IAClC,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC;IAChC,MAAM,cAAc,GAAG,CAAC,CAAC,cAAc,KAAK,CAAC,CAAC;IAC9C,MAAM,IAAA,kCAAoB,EAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,uBAAW,EAAE,KAAK,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC;AAClI,CAAC;AAEM,KAAK,UAAU,mBAAmB,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC;IAChC,MAAM,cAAc,GAAG,CAAC,CAAC,cAAc,KAAK,CAAC,CAAC;IAC9C,MAAM,IAAA,sCAAkB,EAAC,CAAC,CAAC,cAAc,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;AACxE,CAAC;AAEM,KAAK,UAAU,mBAAmB,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC;IAChC,MAAM,cAAc,GAAG,CAAC,CAAC,cAAc,KAAK,CAAC,CAAC;IAC9C,MAAM,IAAA,sCAAkB,EAAC,CAAC,CAAC,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;AAC9E,CAAC;AAEM,KAAK,UAAU,sBAAsB,CAAC,CAAC;IAC1C,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC;QAChC,IAAI,OAAO,EAAE,CAAC;YACV,IAAA,8BAAgB,GAAE,CAAC;QACvB,CAAC;QACD,MAAM,cAAc,GAAG,CAAC,CAAC,cAAc,KAAK,CAAC,CAAC;QAC9C,MAAM,IAAA,kCAAoB,EAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,sBAAU,EAAE,IAAI,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAChI,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;IAC1D,CAAC;YAAS,CAAC;QACP,iDAAiD;QACjD,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,IAAI,+BAAiB,EAAE,CAAC;YACvC,+BAAiB,CAAC,KAAK,EAAE,CAAC;QAC9B,CAAC;IACL,CAAC;AACL,CAAC;AAGD,iNAAiN","sourcesContent":["import { readLineInterface, startStdListener } from \"../vsPlugin/stdListener\";\r\n\r\nimport { CSHARPUTGEN, CSVSPLUGIN } from \"../types/constants\";\r\nimport { generateBatchTests } from \"../batch/generateCodeTests\";\r\nimport { generateCsharpUtCode } from \"../gen/csharpUtGen\";\r\n\r\nexport async function generateUtCode(c) {\r\n const autofix = c.autofix === 1;\r\n const keepFailedTest = c.keepFailedTest === 1;\r\n await generateCsharpUtCode(c.sourceCodePath, c.testCodePath, autofix, keepFailedTest, CSHARPUTGEN, false, c.nugetPackagePath);\r\n}\r\n\r\nexport async function generateBatchUtCode(c) {\r\n const autofix = c.autofix === 1;\r\n const keepFailedTest = c.keepFailedTest === 1;\r\n await generateBatchTests(c.sourceCodePath, autofix, keepFailedTest);\r\n}\r\n\r\nexport async function generateUtBenchmark(c) {\r\n const autofix = c.autofix === 1;\r\n const keepFailedTest = c.keepFailedTest === 1;\r\n await generateBatchTests(c.sourceCodePath, autofix, keepFailedTest, true);\r\n}\r\n\r\nexport async function generateUtWithVsPlugin(c) {\r\n try {\r\n const autofix = c.autofix === 1;\r\n if (autofix) {\r\n startStdListener();\r\n }\r\n const keepFailedTest = c.keepFailedTest === 1;\r\n await generateCsharpUtCode(c.sourceCodePath, c.testCodePath, autofix, keepFailedTest, CSVSPLUGIN, true, c.nugetPackagePath);\r\n } catch (error) {\r\n console.error(\"Error generateUtWithVsPlugin:\", error);\r\n } finally {\r\n // Ensure the listener is closed after processing\r\n if (c.autofix === 1 && readLineInterface) {\r\n readLineInterface.close();\r\n }\r\n }\r\n}\r\n\r\n\r\n// generateUtCode({sourceCodePath: \"D:\\\\code\\\\CS.Service.Fundamental\\\\SharedSegments\\\\SharedSegments\\\\SharedSegments.Plugins\\\\Workflows\\\\Overview\\\\HttpRequestParser\\\\Utils\\\\SqmidHelper.cs\", keepFailedTest: 1})"]}
1
+ {"version":3,"file":"utGenWrapper.js","sourceRoot":"","sources":["../../src/command/utGenWrapper.ts"],"names":[],"mappings":";;AAOA,wCA0BC;AAED,kDAIC;AAED,kDAIC;AA7CD,yDAA8E;AAE9E,kDAAuF;AACvF,kEAAgE;AAChE,oDAA0D;AAC1D,kFAA+E;AAExE,KAAK,UAAU,cAAc,CAAC,CAAC;IAClC,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC;IAChC,MAAM,cAAc,GAAG,CAAC,CAAC,cAAc,KAAK,CAAC,CAAC;IAC9C,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC;QACf,KAAK,sBAAU;YACX,IAAI,CAAC;gBACD,CAAC,CAAC,OAAO,KAAK,CAAC,IAAI,IAAA,8BAAgB,GAAE,CAAC;gBACtC,MAAM,IAAA,kCAAoB,EAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC;YAC/H,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAC;YACpE,CAAC;oBAAS,CAAC;gBACP,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,IAAI,+BAAiB,EAAC,CAAC;oBACtC,+BAAiB,CAAC,KAAK,EAAE,CAAC;gBAC9B,CAAC;YACL,CAAC;YACD,MAAM;QACV,KAAK,0BAAc;YACf,MAAM,IAAA,kCAAoB,EAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,0BAAc,EAAE,KAAK,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC;YACjI,MAAM;QACV,KAAK,oBAAQ;YACT,MAAM,IAAA,kCAAoB,EAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,oBAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC;YAC3H,MAAM;QACV;YACI,MAAM,IAAA,kCAAoB,EAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,uBAAW,EAAE,KAAK,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC;YAC9H,MAAM;IACd,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,mBAAmB,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC;IAChC,MAAM,cAAc,GAAG,CAAC,CAAC,cAAc,KAAK,CAAC,CAAC;IAC9C,MAAM,IAAA,sCAAkB,EAAC,CAAC,CAAC,cAAc,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;AACxE,CAAC;AAEM,KAAK,UAAU,mBAAmB,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC;IAChC,MAAM,cAAc,GAAG,CAAC,CAAC,cAAc,KAAK,CAAC,CAAC;IAC9C,MAAM,IAAA,iDAAuB,EAAC,CAAC,CAAC,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;AACvF,CAAC;AAGD,kNAAkN;AAClN,0KAA0K;AAC1K,+JAA+J","sourcesContent":["import { readLineInterface, startStdListener } from \"../vsPlugin/stdListener\";\r\n\r\nimport { CSHARPUTGEN, CSVSCODEPLUGIN, CSVSPLUGIN, PIPELINE } from \"../types/constants\";\r\nimport { generateBatchTests } from \"../batch/generateCodeTests\";\r\nimport { generateCsharpUtCode } from \"../gen/csharpUtGen\";\r\nimport { generateBenchmarkReport } from '../benchmark/generateBenchmarkReport';\r\n\r\nexport async function generateUtCode(c) {\r\n const autofix = c.autofix === 1;\r\n const keepFailedTest = c.keepFailedTest === 1;\r\n switch (c.source) {\r\n case CSVSPLUGIN:\r\n try {\r\n c.autofix === 1 && startStdListener();\r\n await generateCsharpUtCode(c.sourceCodePath, c.testCodePath, autofix, keepFailedTest, c.source, false, c.nugetPackagePath);\r\n } catch (error) {\r\n console.error(\"Error in generateUtCode with VS Plugin:\", error);\r\n } finally {\r\n if (c.autofix === 1 && readLineInterface){\r\n readLineInterface.close();\r\n }\r\n }\r\n break;\r\n case CSVSCODEPLUGIN:\r\n await generateCsharpUtCode(c.sourceCodePath, c.testCodePath, autofix, keepFailedTest, CSVSCODEPLUGIN, false, c.nugetPackagePath);\r\n break;\r\n case PIPELINE:\r\n await generateCsharpUtCode(c.sourceCodePath, c.testCodePath, autofix, keepFailedTest, PIPELINE, false, c.nugetPackagePath);\r\n break;\r\n default:\r\n await generateCsharpUtCode(c.sourceCodePath, c.testCodePath, autofix, keepFailedTest, CSHARPUTGEN, false, c.nugetPackagePath);\r\n break;\r\n }\r\n}\r\n\r\nexport async function generateBatchUtCode(c) {\r\n const autofix = c.autofix === 1;\r\n const keepFailedTest = c.keepFailedTest === 1;\r\n await generateBatchTests(c.sourceCodePath, autofix, keepFailedTest);\r\n}\r\n\r\nexport async function generateUtBenchmark(c) {\r\n const autofix = c.autofix === 1;\r\n const keepFailedTest = c.keepFailedTest === 1;\r\n await generateBenchmarkReport(c.sourceCodePath, autofix, keepFailedTest, c.source);\r\n}\r\n\r\n\r\n// generateUtCode({sourceCodePath: \"D:\\\\code\\\\CS.Service.Fundamental\\\\SharedSegments\\\\SharedSegments\\\\SharedSegments.Plugins\\\\Workflows\\\\Overview\\\\HttpRequestParser\\\\Utils\\\\SqmidHelper.cs\", keepFailedTest: 1});\r\n// generateUtBenchmarkReport({sourceCodePath: \"Q:\\\\MyProject\\\\TestTestReport\\\\TestTestReport\\\\TestTestReport.csproj\", autofix: 1, keepFailedTest: 1, source: CSVSPLUGIN});\r\n// generateUtBenchmarkReport({sourceCodePath: \"Q:\\\\MyProject\\\\TestTestReport\\\\TestTestReport\\\\TestFolder\", autofix: 1, keepFailedTest: 1, source: CSVSPLUGIN});"]}
@@ -12,6 +12,8 @@ const verifyTestCode_1 = require("../utils/verifyTestCode");
12
12
  const getVsPluginVerifyResult_1 = require("../vsPlugin/getVsPluginVerifyResult");
13
13
  const writeGenCode_1 = require("../utils/writeGenCode");
14
14
  const fileUtils_1 = require("../utils/fileUtils");
15
+ const writeFailedVerifyResult_1 = require("../utils/writeFailedVerifyResult");
16
+ const getCodeStructurePath_1 = require("../utils/getCodeStructurePath");
15
17
  async function autoFixTestCode(prompts, sourceCodePath, testCode, testProjectPath, testFilePath, testFramework, isXapCode, isVsPlugin, retryTimes = 3, isBenchmark = false) {
16
18
  const startTime = Date.now();
17
19
  let generatedCode = testCode;
@@ -20,9 +22,10 @@ async function autoFixTestCode(prompts, sourceCodePath, testCode, testProjectPat
20
22
  let errorMessage;
21
23
  let isBuildFailure = true;
22
24
  try {
25
+ const sourceCodeProjectPath = (0, getCodeStructurePath_1.getSourceFileCsprojFilePath)(sourceCodePath);
23
26
  for (let i = 0; i <= retryTimes; i++) {
24
27
  // write generated code, to review and improve code quality
25
- isBenchmark && (0, writeGenCode_1.writeGenCode)(sourceCodePath, generatedCode, i);
28
+ isBenchmark && (0, writeGenCode_1.writeGenCode)(sourceCodePath, generatedCode, i, sourceCodeProjectPath);
26
29
  // for case: generatedCode is invalid, just retry instead of auto fix process
27
30
  if (!generatedCode) {
28
31
  console.error(`Generated code is invalid, try to regenerate. \nGenerated code: \n${generatedCode}`);
@@ -58,6 +61,7 @@ async function autoFixTestCode(prompts, sourceCodePath, testCode, testProjectPat
58
61
  errorMessage = syntaxResult.message;
59
62
  console.error("Failed to check the generated UT code syntax, error:", errorMessage);
60
63
  }
64
+ isBenchmark && (0, writeFailedVerifyResult_1.writeFailedVerifyResult)(sourceCodePath, i, sourceCodeProjectPath, errorMessage, !testResult);
61
65
  // keep test failed tast cases in test file automatically
62
66
  // if (!isBuildFailure && vsTestRes.passed !== 0) {
63
67
  // console.log("remove failed test cases in test file");
@@ -1 +1 @@
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
+ {"version":3,"file":"autoFix.js","sourceRoot":"","sources":["../../src/gen/autoFix.ts"],"names":[],"mappings":";;AAcA,0CA8FC;AAkBD,kDAmBC;AAID,8CA8BC;AAjLD,gEAA6D;AAC7D,qEAAkE;AAClE,6DAA0D;AAC1D,wDAA8D;AAC9D,oFAAiF;AACjF,4DAAyD;AACzD,iFAA+E;AAC/E,wDAAqD;AACrD,kDAAmD;AACnD,8EAA2E;AAC3E,wEAA4E;AAErE,KAAK,UAAU,eAAe,CACjC,OAAc,EACd,cAAsB,EACtB,QAAgB,EAChB,eAAuB,EACvB,YAAoB,EACpB,aAAqB,EACrB,SAAkB,EAClB,UAAmB,EACnB,aAAqB,CAAC,EACtB,cAAuB,KAAK;IAE5B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,aAAa,GAAG,QAAQ,CAAC;IAC7B,IAAI,UAAU,CAAC;IACf,IAAI,WAAW,CAAC;IAChB,IAAI,YAAY,CAAC;IACjB,IAAI,cAAc,GAAG,IAAI,CAAC;IAC1B,IAAI,CAAC;QACD,MAAM,qBAAqB,GAAG,IAAA,kDAA2B,EAAC,cAAc,CAAC,CAAC;QAC1E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,2DAA2D;YAC3D,WAAW,IAAI,IAAA,2BAAY,EAAC,cAAc,EAAE,aAAa,EAAE,CAAC,EAAE,qBAAqB,CAAC,CAAC;YAErF,6EAA6E;YAC7E,IAAI,CAAC,aAAa,EAAE,CAAC;gBACjB,OAAO,CAAC,KAAK,CAAC,qEAAqE,aAAa,EAAE,CAAC,CAAC;gBACpG,aAAa,GAAG,MAAM,IAAA,+CAAsB,EAAC,OAAO,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;gBAChF,uCAAuC;gBACvC,aAAa,GAAG,IAAA,+BAAc,EAAC,aAAa,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;gBACxE,SAAS;YACb,CAAC;YAED,wFAAwF;YACxF,MAAM,YAAY,GAAG,MAAM,IAAA,iCAAe,EAAC,YAAY,CAAC,CAAC;YACzD,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;gBACvB,4EAA4E;gBAC5E,gHAAgH;gBAChH,MAAM,YAAY,GAAG,MAAM,mBAAmB,CAAC,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;gBACzG,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC;gBACpC,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC;gBACrC,WAAW,GAAG,YAAY,CAAC,WAAW,CAAC;gBACvC,cAAc,GAAG,CAAC,UAAU,CAAC;gBAE7B,6FAA6F;gBAC7F,MAAM,eAAe,GAAG,IAAA,uDAA0B,EAAC,YAAY,EAAE,WAAW,CAAC,CAAC;gBAC9E,IAAI,CAAC,eAAe,EAAE,CAAC;oBACnB,OAAO,CAAC,KAAK,CAAC,wFAAwF,CAAC,CAAC;oBACxG,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;gBACpH,CAAC;gBAED,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;oBACvB,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;oBACjD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;gBACnH,CAAC;gBAED,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,YAAY,CAAC,CAAC;YACpE,CAAC;iBAAM,CAAC;gBACJ,WAAW,GAAG,YAAY,CAAC,WAAW,CAAC;gBACvC,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC;gBACpC,OAAO,CAAC,KAAK,CAAC,sDAAsD,EAAE,YAAY,CAAC,CAAC;YACxF,CAAC;YAED,WAAW,IAAI,IAAA,iDAAuB,EAAC,cAAc,EAAE,CAAC,EAAE,qBAAqB,EAAE,YAAY,EAAE,CAAC,UAAU,CAAC,CAAC;YAC5G,yDAAyD;YACzD,mDAAmD;YACnD,4DAA4D;YAC5D,gEAAgE;YAChE,yDAAyD;YACzD,IAAI;YAEJ,IAAI,CAAC,KAAK,UAAU,EAAE,CAAC;gBACnB,OAAO,CAAC,KAAK,CAAC,oCAAoC,UAAU,YAAY,CAAC,CAAC;gBAC1E,MAAM;YACV,CAAC;YAED,wDAAwD;YACxD,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC9B,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;gBACvD,SAAS;YACb,CAAC;YAED,aAAa,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;QAC5I,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,UAAU,CAAC,CAAC;QAExE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;IACpH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;QACvD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAEhI,CAAC;AACL,CAAC;AAED,KAAK,UAAU,mBAAmB,CAC9B,aAAqB,EACrB,eAAuB,EACvB,YAAoB,EACpB,aAAsB,KAAK;IAE3B,IAAI,UAAU,EAAE,CAAC;QACb,MAAM,cAAc,GAAG,MAAM,IAAA,kDAAwB,EAAC,YAAY,CAAC,CAAC;QACpE,OAAO,cAAc,CAAC;IAC1B,CAAC;SAAM,CAAC;QACJ,gEAAgE;QAChE,MAAM,YAAY,GAAG,MAAM,IAAA,+BAAc,EAAC,aAAa,EAAE,eAAe,CAAC,CAAC;QAC1E,OAAO,YAAY,CAAC;IACxB,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,mBAAmB,CACrC,OAAc,EACd,aAAqB,EACrB,YAAoB,EACpB,cAAuB,EACvB,YAAoB,EACpB,aAAqB,EACrB,SAAkB;IAElB,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACzC,MAAM,aAAa,GAAG,IAAA,sCAAsB,EAAC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;IAEnG,8CAA8C;IAC9C,MAAM,gBAAgB,GAAG,MAAM,IAAA,+CAAsB,EAAC,aAAa,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;IAE/F,6DAA6D;IAC7D,CAAC,CAAC,gBAAgB,IAAI,IAAA,yBAAa,EAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;IAEpE,OAAO,gBAAgB,CAAC;AAC5B,CAAC;AAGD,yBAAyB;AAClB,KAAK,UAAU,iBAAiB,CACnC,OAAc,EACd,cAAsB,EACtB,QAAgB,EAChB,eAAuB,EACvB,YAAoB,EACpB,aAAqB,EACrB,SAAkB,EAClB,aAAqB,CAAC;IAEtB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,aAAa,GAAG,QAAQ,CAAC;IAC7B,IAAI,SAAS,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK,UAAU,EAAE,CAAC;YACnB,OAAO,CAAC,KAAK,CAAC,uCAAuC,UAAU,YAAY,CAAC,CAAC;YAC7E,MAAM;QACV,CAAC;QAED,MAAM,aAAa,GAAG,OAAO,CAAC;QAC9B,mCAAmC;QACnC,aAAa,GAAG,MAAM,IAAA,+CAAsB,EAAC,aAAa,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;QACtF,kCAAkC;QAClC,IAAA,yBAAa,EAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,UAAU,CAAC,CAAC;IAExE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AAClJ,CAAC","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\nimport { writeFailedVerifyResult } from \"../utils/writeFailedVerifyResult\";\r\nimport { getSourceFileCsprojFilePath } from \"../utils/getCodeStructurePath\";\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 const sourceCodeProjectPath = getSourceFileCsprojFilePath(sourceCodePath);\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, sourceCodeProjectPath);\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 isBenchmark && writeFailedVerifyResult(sourceCodePath, i, sourceCodeProjectPath, errorMessage, !testResult);\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}"]}
@@ -0,0 +1 @@
1
+ export declare function addAiAnnotation(code: string): string;
@@ -0,0 +1,57 @@
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.addAiAnnotation = addAiAnnotation;
37
+ const constants_1 = require("../../types/constants");
38
+ const util = __importStar(require("util"));
39
+ function addAiAnnotation(code) {
40
+ const lines = code.split(constants_1.LINESEPARATOR);
41
+ if (code.includes(constants_1.AICONTRIBUTED)) {
42
+ const aiAnnotationTagIndex = lines.findIndex(line => line.startsWith(constants_1.AICONTRIBUTED));
43
+ lines.splice(aiAnnotationTagIndex, 1);
44
+ }
45
+ const currentDate = new Date().toISOString().split('T')[0];
46
+ const aiAnnotationTemplate = '/* %s-%s */';
47
+ const aiAnnotation = util.format(aiAnnotationTemplate, constants_1.AICONTRIBUTED, currentDate);
48
+ const namespaceIndex = lines.findIndex(line => line.startsWith(constants_1.NAMESPACE));
49
+ if (namespaceIndex !== -1) {
50
+ lines.splice(namespaceIndex, 0, aiAnnotation);
51
+ return lines.join('\n');
52
+ }
53
+ else {
54
+ return aiAnnotation + '\n' + code;
55
+ }
56
+ }
57
+ //# sourceMappingURL=addAiAnnotation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addAiAnnotation.js","sourceRoot":"","sources":["../../../src/gen/postGen/addAiAnnotation.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,0CAmBC;AAtBD,qDAAgF;AAChF,2CAA6B;AAE7B,SAAgB,eAAe,CAAC,IAAY;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,yBAAa,CAAC,CAAC;IACxC,IAAI,IAAI,CAAC,QAAQ,CAAC,yBAAa,CAAC,EAAE,CAAC;QAC/B,MAAM,oBAAoB,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,yBAAa,CAAC,CAAC,CAAC;QACrF,KAAK,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,MAAM,oBAAoB,GAAG,aAAa,CAAC;IAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,yBAAa,EAAE,WAAW,CAAC,CAAC;IAEnF,MAAM,cAAc,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,qBAAS,CAAC,CAAC,CAAC;IAC3E,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;QAC9C,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;SACI,CAAC;QACF,OAAO,YAAY,GAAG,IAAI,GAAG,IAAI,CAAC;IACtC,CAAC;AACL,CAAC","sourcesContent":["import { LINESEPARATOR, AICONTRIBUTED, NAMESPACE } from '../../types/constants';\r\nimport * as util from 'util';\r\n\r\nexport function addAiAnnotation(code: string): string {\r\n const lines = code.split(LINESEPARATOR);\r\n if (code.includes(AICONTRIBUTED)) {\r\n const aiAnnotationTagIndex = lines.findIndex(line => line.startsWith(AICONTRIBUTED));\r\n lines.splice(aiAnnotationTagIndex, 1);\r\n }\r\n\r\n const currentDate = new Date().toISOString().split('T')[0];\r\n const aiAnnotationTemplate = '/* %s-%s */';\r\n const aiAnnotation = util.format(aiAnnotationTemplate, AICONTRIBUTED, currentDate);\r\n\r\n const namespaceIndex = lines.findIndex(line => line.startsWith(NAMESPACE));\r\n if (namespaceIndex !== -1) {\r\n lines.splice(namespaceIndex, 0, aiAnnotation);\r\n return lines.join('\\n');\r\n }\r\n else {\r\n return aiAnnotation + '\\n' + code;\r\n }\r\n}"]}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.extractCodeFromResponse = extractCodeFromResponse;
4
+ const constants_1 = require("../../types/constants");
4
5
  const regexList = [
5
6
  /```(?:C#|csharp|CSharp|json|mermaid)?([\s\S]*?)(\n?```\n*|$)/g,
6
7
  /```([\s\S]*?)(\n?```\n*|$)/g,
@@ -17,7 +18,7 @@ function extractCodeFromResponse(response) {
17
18
  return testCode;
18
19
  }
19
20
  }
20
- const lines = text.split(/\r?\n/);
21
+ const lines = text.split(constants_1.LINESEPARATOR);
21
22
  const hasMarkdown = lines.some(line => line.startsWith('#'));
22
23
  if (hasMarkdown) {
23
24
  return '';
@@ -1 +1 @@
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
+ {"version":3,"file":"extractCodeFromResponse.js","sourceRoot":"","sources":["../../../src/gen/postGen/extractCodeFromResponse.ts"],"names":[],"mappings":";;AAQA,0DAkBC;AA1BD,qDAAsD;AAEtD,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,yBAAa,CAAC,CAAC;IACxC,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":["import { LINESEPARATOR } from \"../../types/constants\";\r\n\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(LINESEPARATOR);\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"]}
@@ -6,6 +6,7 @@ const removeSingleLines_1 = require("./removeSingleLines");
6
6
  const removeComments_1 = require("./removeComments");
7
7
  const repairRequiredNameSpaces_1 = require("./repairRequiredNameSpaces");
8
8
  const validateTestCode_1 = require("./validateTestCode");
9
+ const addAiAnnotation_1 = require("./addAiAnnotation");
9
10
  function postGenProcess(generatedCode, testFramework, isXapCode) {
10
11
  if (!isValidTestCode(generatedCode)) {
11
12
  return undefined;
@@ -17,6 +18,7 @@ function postGenProcess(generatedCode, testFramework, isXapCode) {
17
18
  if (isXapCode) {
18
19
  testCode = xapCodePostGenProcess(testCode);
19
20
  }
21
+ testCode = (0, addAiAnnotation_1.addAiAnnotation)(testCode);
20
22
  console.log(`Post generation process completed, code length: ${testCode.length}`);
21
23
  return testCode;
22
24
  }
@@ -1 +1 @@
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
+ {"version":3,"file":"postGenProcess.js","sourceRoot":"","sources":["../../../src/gen/postGen/postGenProcess.ts"],"names":[],"mappings":";;AAOA,wCAiBC;AAxBD,uEAAoE;AACpE,2DAA4D;AAC5D,qDAA0D;AAC1D,yEAAmG;AACnG,yDAAsD;AACtD,uDAAoD;AAEpD,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;IAED,QAAQ,GAAG,IAAA,iCAAe,EAAC,QAAQ,CAAC,CAAC;IAErC,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\nimport { addAiAnnotation } from \"./addAiAnnotation\";\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\r\n testCode = addAiAnnotation(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,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.removeCSharpOnlyLines = removeCSharpOnlyLines;
4
+ const constants_1 = require("../../types/constants");
4
5
  const illegalSingleLines = [
5
6
  'c#',
6
7
  'csharp',
@@ -9,7 +10,7 @@ const illegalSingleLines = [
9
10
  '```csharp',
10
11
  ];
11
12
  function removeCSharpOnlyLines(generatedCode) {
12
- const lines = generatedCode.split(/\r?\n/);
13
+ const lines = generatedCode.split(constants_1.LINESEPARATOR);
13
14
  const filteredLines = lines.map(line => {
14
15
  // remove trailing spaces and tabs
15
16
  const trimmedLine = line.trim();
@@ -1 +1 @@
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
+ {"version":3,"file":"removeSingleLines.js","sourceRoot":"","sources":["../../../src/gen/postGen/removeSingleLines.ts"],"names":[],"mappings":";;AASA,sDAiBC;AA1BD,qDAAsD;AAEtD,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,yBAAa,CAAC,CAAC;IACjD,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":["import { LINESEPARATOR } from \"../../types/constants\";\r\n\r\nconst 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(LINESEPARATOR);\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}"]}
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.repairRequiredNameSpaces = repairRequiredNameSpaces;
4
4
  exports.repairXapRequiredNameSpaces = repairXapRequiredNameSpaces;
5
5
  const constants_1 = require("../../types/constants");
6
+ const constants_2 = require("../../types/constants");
6
7
  function repairRequiredNameSpaces(code, testFramework) {
7
8
  const testFrameworkUsing = getTestFrameworkNameSpaces(testFramework);
8
9
  const requiredUsings = [
@@ -32,7 +33,7 @@ function repairMissingUsings(code, requiredUsings) {
32
33
  return code;
33
34
  }
34
35
  // find the end of the using block: the first non-using line, or the end of the file
35
- const lines = code.split(/\r?\n/);
36
+ const lines = code.split(constants_2.LINESEPARATOR);
36
37
  let insertIndex = 0;
37
38
  for (let i = 0; i < lines.length; i++) {
38
39
  if (!lines[i].trim().startsWith("using") && lines[i].trim() !== "") {
@@ -1 +1 @@
1
- {"version":3,"file":"repairRequiredNameSpaces.js","sourceRoot":"","sources":["../../../src/gen/postGen/repairRequiredNameSpaces.ts"],"names":[],"mappings":"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","sourcesContent":["import { MSTESTFRAMEWORK, NUNITTESTFRAMEWORK, XUNITTESTFRAMEWORK } from '../../types/constants';\r\n\r\nexport function repairRequiredNameSpaces(code: string, testFramework: string): string {\r\n const testFrameworkUsing = getTestFrameworkNameSpaces(testFramework);\r\n const requiredUsings = [\r\n testFrameworkUsing,\r\n ];\r\n\r\n code = repairMissingUsings(code, requiredUsings);\r\n return code;\r\n}\r\n\r\nexport function repairXapRequiredNameSpaces(code: string): string {\r\n const xapUsings = [\r\n \"using System;\",\r\n \"using System.Threading.Tasks;\",\r\n \"using System.Collections.Generic;\",\r\n \"using Xap.ExecutionFramework;\",\r\n \"using Xap.PluginFramework;\",\r\n \"using EMPTY = Microsoft.Bing.Xap.Plugins.Void;\",\r\n ];\r\n\r\n code = repairMissingUsings(code, xapUsings);\r\n return code;\r\n}\r\n\r\nfunction repairMissingUsings(code: string, requiredUsings: string[]): string {\r\n // get all using lines\r\n const usingRegex = /^\\s*using\\s+[^\\r\\n;]+;/gm;\r\n const existingUsings = Array.from(code.matchAll(usingRegex)).map(match => match[0].trim());\r\n\r\n const missingUsings = requiredUsings.filter(req => !existingUsings.includes(req));\r\n\r\n if (missingUsings.length === 0) {\r\n return code;\r\n }\r\n\r\n // find the end of the using block: the first non-using line, or the end of the file\r\n const lines = code.split(/\\r?\\n/);\r\n let insertIndex = 0;\r\n\r\n for (let i = 0; i < lines.length; i++) {\r\n if (!lines[i].trim().startsWith(\"using\") && lines[i].trim() !== \"\") {\r\n insertIndex = i;\r\n break;\r\n }\r\n insertIndex = i + 1;\r\n }\r\n\r\n // build new code\r\n const newLines = [\r\n ...lines.slice(0, insertIndex),\r\n ...missingUsings,\r\n ...lines.slice(insertIndex)\r\n ];\r\n\r\n console.log(\"repaired namespaces:\", missingUsings);\r\n\r\n return newLines.join('\\n');\r\n}\r\n\r\nfunction getTestFrameworkNameSpaces(testFramework: string): string {\r\n const msTestUsing = \"using Microsoft.VisualStudio.TestTools.UnitTesting;\";\r\n\r\n if (!testFramework) {\r\n return msTestUsing;\r\n }\r\n\r\n const FRAMEWORK_USINGS = {\r\n [MSTESTFRAMEWORK]: msTestUsing,\r\n [NUNITTESTFRAMEWORK]: \"using NUnit.Framework;\",\r\n [XUNITTESTFRAMEWORK]: \"using Xunit;\"\r\n } as const;\r\n\r\n return FRAMEWORK_USINGS[testFramework] || msTestUsing;\r\n}\r\n\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 = repairRequiredNameSpaces(code);\r\n// console.log(cleanedCode);"]}
1
+ {"version":3,"file":"repairRequiredNameSpaces.js","sourceRoot":"","sources":["../../../src/gen/postGen/repairRequiredNameSpaces.ts"],"names":[],"mappings":"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","sourcesContent":["import { MSTESTFRAMEWORK, NUNITTESTFRAMEWORK, XUNITTESTFRAMEWORK } from '../../types/constants';\r\nimport fs from 'fs';\r\nimport path from 'path';\r\nimport { LINESEPARATOR } from '../../types/constants';\r\n\r\nexport function repairRequiredNameSpaces(code: string, testFramework: string): string {\r\n const testFrameworkUsing = getTestFrameworkNameSpaces(testFramework);\r\n const requiredUsings = [\r\n testFrameworkUsing,\r\n ];\r\n\r\n code = repairMissingUsings(code, requiredUsings);\r\n return code;\r\n}\r\n\r\nexport function repairXapRequiredNameSpaces(code: string): string {\r\n const xapUsings = [\r\n \"using System;\",\r\n \"using System.Threading.Tasks;\",\r\n \"using System.Collections.Generic;\",\r\n \"using Xap.ExecutionFramework;\",\r\n \"using Xap.PluginFramework;\",\r\n \"using EMPTY = Microsoft.Bing.Xap.Plugins.Void;\",\r\n ];\r\n\r\n code = repairMissingUsings(code, xapUsings);\r\n return code;\r\n}\r\n\r\nfunction repairMissingUsings(code: string, requiredUsings: string[]): string {\r\n // get all using lines\r\n const usingRegex = /^\\s*using\\s+[^\\r\\n;]+;/gm;\r\n const existingUsings = Array.from(code.matchAll(usingRegex)).map(match => match[0].trim());\r\n\r\n const missingUsings = requiredUsings.filter(req => !existingUsings.includes(req));\r\n\r\n if (missingUsings.length === 0) {\r\n return code;\r\n }\r\n\r\n // find the end of the using block: the first non-using line, or the end of the file\r\n const lines = code.split(LINESEPARATOR);\r\n let insertIndex = 0;\r\n\r\n for (let i = 0; i < lines.length; i++) {\r\n if (!lines[i].trim().startsWith(\"using\") && lines[i].trim() !== \"\") {\r\n insertIndex = i;\r\n break;\r\n }\r\n insertIndex = i + 1;\r\n }\r\n\r\n // build new code\r\n const newLines = [\r\n ...lines.slice(0, insertIndex),\r\n ...missingUsings,\r\n ...lines.slice(insertIndex)\r\n ];\r\n\r\n console.log(\"repaired namespaces:\", missingUsings);\r\n\r\n return newLines.join('\\n');\r\n}\r\n\r\nfunction getTestFrameworkNameSpaces(testFramework: string): string {\r\n const msTestUsing = \"using Microsoft.VisualStudio.TestTools.UnitTesting;\";\r\n\r\n if (!testFramework) {\r\n return msTestUsing;\r\n }\r\n\r\n const FRAMEWORK_USINGS = {\r\n [MSTESTFRAMEWORK]: msTestUsing,\r\n [NUNITTESTFRAMEWORK]: \"using NUnit.Framework;\",\r\n [XUNITTESTFRAMEWORK]: \"using Xunit;\"\r\n } as const;\r\n\r\n return FRAMEWORK_USINGS[testFramework] || msTestUsing;\r\n}\r\n\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 = repairRequiredNameSpaces(code);\r\n// console.log(cleanedCode);"]}
@@ -1,11 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.excludeSpecificTag = excludeSpecificTag;
4
+ const constants_1 = require("../../types/constants");
4
5
  const EXCLUDEDTAGS = [
5
6
  '[ExcludeFromCodeCoverage]',
6
7
  ];
7
8
  function excludeSpecificTag(sourceCode) {
8
- const lines = sourceCode.split(/\r?\n/);
9
+ const lines = sourceCode.split(constants_1.LINESEPARATOR);
9
10
  for (const line of lines) {
10
11
  const trimmedLine = line.trim();
11
12
  if (EXCLUDEDTAGS.includes(trimmedLine)) {
@@ -1 +1 @@
1
- {"version":3,"file":"excludeSpecificTag.js","sourceRoot":"","sources":["../../../src/gen/preGen/excludeSpecificTag.ts"],"names":[],"mappings":";;AAIA,gDAUC;AAdD,MAAM,YAAY,GAAG;IACjB,2BAA2B;CAC9B,CAAA;AAED,SAAgB,kBAAkB,CAAC,UAAkB;IACjD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACrC,OAAO,CAAC,KAAK,CAAC,oCAAoC,WAAW,wBAAwB,CAAC,CAAC;YACvF,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC","sourcesContent":["const EXCLUDEDTAGS = [\r\n '[ExcludeFromCodeCoverage]',\r\n]\r\n\r\nexport function excludeSpecificTag(sourceCode: string) {\r\n const lines = sourceCode.split(/\\r?\\n/);\r\n for (const line of lines) {\r\n const trimmedLine = line.trim();\r\n if (EXCLUDEDTAGS.includes(trimmedLine)) {\r\n console.error(`Code contains specific tag line: ${trimmedLine}, will skip this file.`);\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n"]}
1
+ {"version":3,"file":"excludeSpecificTag.js","sourceRoot":"","sources":["../../../src/gen/preGen/excludeSpecificTag.ts"],"names":[],"mappings":";;AAMA,gDAUC;AAhBD,qDAAsD;AAEtD,MAAM,YAAY,GAAG;IACjB,2BAA2B;CAC9B,CAAA;AAED,SAAgB,kBAAkB,CAAC,UAAkB;IACjD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,yBAAa,CAAC,CAAC;IAC9C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACrC,OAAO,CAAC,KAAK,CAAC,oCAAoC,WAAW,wBAAwB,CAAC,CAAC;YACvF,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC","sourcesContent":["import { LINESEPARATOR } from \"../../types/constants\";\r\n\r\nconst EXCLUDEDTAGS = [\r\n '[ExcludeFromCodeCoverage]',\r\n]\r\n\r\nexport function excludeSpecificTag(sourceCode: string) {\r\n const lines = sourceCode.split(LINESEPARATOR);\r\n for (const line of lines) {\r\n const trimmedLine = line.trim();\r\n if (EXCLUDEDTAGS.includes(trimmedLine)) {\r\n console.error(`Code contains specific tag line: ${trimmedLine}, will skip this file.`);\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n"]}
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.validateCode = validateCode;
4
4
  exports.validateCodeErrorHandler = validateCodeErrorHandler;
5
5
  exports.validateCodeCloseHandler = validateCodeCloseHandler;
6
+ const constants_1 = require("../../types/constants");
6
7
  const spawnExec_1 = require("../../utils/spawnExec");
7
8
  function validateCode(codePath) {
8
9
  const args = ['-m', codePath];
@@ -26,7 +27,7 @@ function validateCodeCloseHandler(code, stdout, stderr) {
26
27
  return isValid;
27
28
  }
28
29
  function parseValidateResult(stdout) {
29
- const lines = stdout.trim().split(/\r?\n/);
30
+ const lines = stdout.trim().split(constants_1.LINESEPARATOR);
30
31
  let isValid = false;
31
32
  if (lines.length > 0) {
32
33
  isValid = lines[lines.length - 1].trim() === 'true';
@@ -1 +1 @@
1
- {"version":3,"file":"validateCode.js","sourceRoot":"","sources":["../../../src/gen/preGen/validateCode.ts"],"names":[],"mappings":";;AAEA,oCAGC;AAED,4DAGC;AAED,4DAcC;AA1BD,qDAAiD;AAEjD,SAAgB,YAAY,CAAC,QAAgB;IACzC,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC9B,OAAO,IAAA,oBAAQ,EAAC,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,wBAAwB,EAAE,wBAAwB,CAAC,CAAC;AACjG,CAAC;AAED,SAAgB,wBAAwB,CAAC,KAAK;IAC1C,OAAO,CAAC,KAAK,CAAC,sCAAsC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACrE,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM;IACzD,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,8CAA8C,IAAI,aAAa,MAAM,EAAE,CAAC,CAAC;QACvF,OAAO,IAAI,CAAC,CAAC,0DAA0D;IAC3E,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,YAAY,MAAM,EAAE,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,oCAAoC,MAAM,EAAE,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAE5C,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAc;IACvC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3C,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnB,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC;IACxD,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,gCAAgC;AAChC,8BAA8B;AAC9B,qIAAqI;AACrI,kIAAkI;AAClI,+JAA+J;AAC/J,2JAA2J;AAC3J,8IAA8I;AAC9I,qJAAqJ;AACrJ,0IAA0I;AAC1I,6IAA6I;AAC7I,mJAAmJ;AACnJ,+IAA+I;AAC/I,+JAA+J;AAC/J,8JAA8J;AAC9J,kKAAkK;AAClK,iKAAiK;AACjK,sKAAsK;AACtK,sKAAsK;AACtK,wHAAwH;AACxH,SAAS;AAET,0CAA0C;AAC1C,oDAAoD;AACpD,gDAAgD;AAChD,QAAQ;AACR,IAAI;AAEJ,gBAAgB","sourcesContent":["import { runSpawn } from '../../utils/spawnExec';\r\n\r\nexport function validateCode(codePath: string): Promise<boolean> {\r\n const args = ['-m', codePath];\r\n return runSpawn(\"ccanalyzer\", args, \".\", validateCodeErrorHandler, validateCodeCloseHandler);\r\n}\r\n\r\nexport function validateCodeErrorHandler(error) {\r\n console.error(`validateCodeErrorHandler - failed: ${error.message}`);\r\n return true;\r\n}\r\n\r\nexport function validateCodeCloseHandler(code, stdout, stderr) {\r\n if (code !== 0) {\r\n console.error(`valid method analyze failed with exit code ${code}, stdout: ${stdout}`);\r\n return true; // If the command fails, we assume there are valid methods\r\n }\r\n\r\n if (stderr) {\r\n console.error(`Errors:\\n${stderr}`);\r\n return true;\r\n }\r\n console.log(`valid method analyze succeeded:\\n${stdout}`);\r\n const isValid = parseValidateResult(stdout);\r\n\r\n return isValid;\r\n}\r\n\r\nfunction parseValidateResult(stdout: string): boolean {\r\n const lines = stdout.trim().split(/\\r?\\n/);\r\n let isValid = false;\r\n if (lines.length > 0) {\r\n isValid = lines[lines.length - 1].trim() === 'true';\r\n }\r\n\r\n return isValid;\r\n}\r\n\r\n// async function testMethod() {\r\n// const testFilePaths = [\r\n// \"D:/code/CS.Service.Fundamental/SharedSegments/SharedSegments/SharedSegments.Plugins/Workflows/Eplant/EplantConstants.cs\",\r\n// \"D:/code/CS.Service.Fundamental/SharedSegments/SharedSegments/SharedSegments.Plugins/Workflows/Eplant/EplantModels.cs\",\r\n// \"D:/code/CS.Service.Fundamental/SharedSegments/SharedSegments/SharedSegments.Plugins/Workflows/Eplant/Conditions/EplantRequestCategoryCondition.cs\",\r\n// \"D:/code/CS.Service.Fundamental/SharedSegments/SharedSegments/SharedSegments.Plugins/Workflows/Eplant/Conditions/EplantRequestTypeCondition.cs\",\r\n// \"D:/code/CS.Service.Fundamental/SharedSegments/SharedSegments/SharedSegments.Plugins/Workflows/Eplant/DataModel/EplantEdgePart.cs\",\r\n// \"D:/code/CS.Service.Fundamental/SharedSegments/SharedSegments/SharedSegments.Plugins/Workflows/Eplant/DataModel/EplantPostBodyContent.cs\",\r\n// \"D:/code/CS.Service.Fundamental/SharedSegments/SharedSegments/SharedSegments.Plugins/Workflows/Eplant/DataModel/EplantRank.cs\",\r\n// \"D:/code/CS.Service.Fundamental/SharedSegments/SharedSegments/SharedSegments.Plugins/Workflows/Eplant/DataModel/EplantRankRow.cs\",\r\n// \"D:/code/CS.Service.Fundamental/SharedSegments/SharedSegments/SharedSegments.Plugins/Workflows/Eplant/DataModel/EplantTreeViewModel.cs\",\r\n// \"D:/code/CS.Service.Fundamental/SharedSegments/SharedSegments/SharedSegments.Plugins/Workflows/Eplant/DataModel/EplantViewModel.cs\",\r\n// \"D:/code/CS.Service.Fundamental/SharedSegments/SharedSegments/SharedSegments.Plugins/Workflows/Eplant/HttpRequestParser/EplantHttpRequestParser.cs\",\r\n// \"D:/code/CS.Service.Fundamental/SharedSegments/SharedSegments/SharedSegments.Plugins/Workflows/Eplant/RequestBuilders/EplantUserRequestBuilder.cs\",\r\n// \"D:/code/CS.Service.Fundamental/SharedSegments/SharedSegments/SharedSegments.Plugins/Workflows/Eplant/ResponseBuilders/EplantActionResponseBuilder.cs\",\r\n// \"D:/code/CS.Service.Fundamental/SharedSegments/SharedSegments/SharedSegments.Plugins/Workflows/Eplant/ResponseBuilders/EplantPlantResponseBuilder.cs\",\r\n// \"D:/code/CS.Service.Fundamental/SharedSegments/SharedSegments/SharedSegments.Plugins/Workflows/Eplant/ResponseBuilders/EplantTreeUpdateResponseBuilder.cs\",\r\n// \"D:/code/CS.Service.Fundamental/SharedSegments/SharedSegments/SharedSegments.Plugins/Workflows/Eplant/ResponseBuilders/EplantUserUpdateResponseBuilder.cs\",\r\n// \"D:\\\\code\\\\UCMDynamics\\\\private\\\\DynamicCode\\\\Plugin\\\\UCMDynamics.AppointmentPlugin\\\\AppointmentOperation.cs\"\r\n// ];\r\n\r\n// for (const path of testFilePaths) {\r\n// const isValid = await validateCode(path);\r\n// console.log(`${path} -> ${isValid}`);\r\n// }\r\n// }\r\n\r\n// testMethod();"]}
1
+ {"version":3,"file":"validateCode.js","sourceRoot":"","sources":["../../../src/gen/preGen/validateCode.ts"],"names":[],"mappings":";;AAGA,oCAGC;AAED,4DAGC;AAED,4DAcC;AA3BD,qDAAsD;AACtD,qDAAiD;AAEjD,SAAgB,YAAY,CAAC,QAAgB;IACzC,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC9B,OAAO,IAAA,oBAAQ,EAAC,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,wBAAwB,EAAE,wBAAwB,CAAC,CAAC;AACjG,CAAC;AAED,SAAgB,wBAAwB,CAAC,KAAK;IAC1C,OAAO,CAAC,KAAK,CAAC,sCAAsC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACrE,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM;IACzD,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,8CAA8C,IAAI,aAAa,MAAM,EAAE,CAAC,CAAC;QACvF,OAAO,IAAI,CAAC,CAAC,0DAA0D;IAC3E,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,YAAY,MAAM,EAAE,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,oCAAoC,MAAM,EAAE,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAE5C,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAc;IACvC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,yBAAa,CAAC,CAAC;IACjD,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnB,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC;IACxD,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,gCAAgC;AAChC,8BAA8B;AAC9B,qIAAqI;AACrI,kIAAkI;AAClI,+JAA+J;AAC/J,2JAA2J;AAC3J,8IAA8I;AAC9I,qJAAqJ;AACrJ,0IAA0I;AAC1I,6IAA6I;AAC7I,mJAAmJ;AACnJ,+IAA+I;AAC/I,+JAA+J;AAC/J,8JAA8J;AAC9J,kKAAkK;AAClK,iKAAiK;AACjK,sKAAsK;AACtK,sKAAsK;AACtK,wHAAwH;AACxH,SAAS;AAET,0CAA0C;AAC1C,oDAAoD;AACpD,gDAAgD;AAChD,QAAQ;AACR,IAAI;AAEJ,gBAAgB","sourcesContent":["import { LINESEPARATOR } from '../../types/constants';\r\nimport { runSpawn } from '../../utils/spawnExec';\r\n\r\nexport function validateCode(codePath: string): Promise<boolean> {\r\n const args = ['-m', codePath];\r\n return runSpawn(\"ccanalyzer\", args, \".\", validateCodeErrorHandler, validateCodeCloseHandler);\r\n}\r\n\r\nexport function validateCodeErrorHandler(error) {\r\n console.error(`validateCodeErrorHandler - failed: ${error.message}`);\r\n return true;\r\n}\r\n\r\nexport function validateCodeCloseHandler(code, stdout, stderr) {\r\n if (code !== 0) {\r\n console.error(`valid method analyze failed with exit code ${code}, stdout: ${stdout}`);\r\n return true; // If the command fails, we assume there are valid methods\r\n }\r\n\r\n if (stderr) {\r\n console.error(`Errors:\\n${stderr}`);\r\n return true;\r\n }\r\n console.log(`valid method analyze succeeded:\\n${stdout}`);\r\n const isValid = parseValidateResult(stdout);\r\n\r\n return isValid;\r\n}\r\n\r\nfunction parseValidateResult(stdout: string): boolean {\r\n const lines = stdout.trim().split(LINESEPARATOR);\r\n let isValid = false;\r\n if (lines.length > 0) {\r\n isValid = lines[lines.length - 1].trim() === 'true';\r\n }\r\n\r\n return isValid;\r\n}\r\n\r\n// async function testMethod() {\r\n// const testFilePaths = [\r\n// \"D:/code/CS.Service.Fundamental/SharedSegments/SharedSegments/SharedSegments.Plugins/Workflows/Eplant/EplantConstants.cs\",\r\n// \"D:/code/CS.Service.Fundamental/SharedSegments/SharedSegments/SharedSegments.Plugins/Workflows/Eplant/EplantModels.cs\",\r\n// \"D:/code/CS.Service.Fundamental/SharedSegments/SharedSegments/SharedSegments.Plugins/Workflows/Eplant/Conditions/EplantRequestCategoryCondition.cs\",\r\n// \"D:/code/CS.Service.Fundamental/SharedSegments/SharedSegments/SharedSegments.Plugins/Workflows/Eplant/Conditions/EplantRequestTypeCondition.cs\",\r\n// \"D:/code/CS.Service.Fundamental/SharedSegments/SharedSegments/SharedSegments.Plugins/Workflows/Eplant/DataModel/EplantEdgePart.cs\",\r\n// \"D:/code/CS.Service.Fundamental/SharedSegments/SharedSegments/SharedSegments.Plugins/Workflows/Eplant/DataModel/EplantPostBodyContent.cs\",\r\n// \"D:/code/CS.Service.Fundamental/SharedSegments/SharedSegments/SharedSegments.Plugins/Workflows/Eplant/DataModel/EplantRank.cs\",\r\n// \"D:/code/CS.Service.Fundamental/SharedSegments/SharedSegments/SharedSegments.Plugins/Workflows/Eplant/DataModel/EplantRankRow.cs\",\r\n// \"D:/code/CS.Service.Fundamental/SharedSegments/SharedSegments/SharedSegments.Plugins/Workflows/Eplant/DataModel/EplantTreeViewModel.cs\",\r\n// \"D:/code/CS.Service.Fundamental/SharedSegments/SharedSegments/SharedSegments.Plugins/Workflows/Eplant/DataModel/EplantViewModel.cs\",\r\n// \"D:/code/CS.Service.Fundamental/SharedSegments/SharedSegments/SharedSegments.Plugins/Workflows/Eplant/HttpRequestParser/EplantHttpRequestParser.cs\",\r\n// \"D:/code/CS.Service.Fundamental/SharedSegments/SharedSegments/SharedSegments.Plugins/Workflows/Eplant/RequestBuilders/EplantUserRequestBuilder.cs\",\r\n// \"D:/code/CS.Service.Fundamental/SharedSegments/SharedSegments/SharedSegments.Plugins/Workflows/Eplant/ResponseBuilders/EplantActionResponseBuilder.cs\",\r\n// \"D:/code/CS.Service.Fundamental/SharedSegments/SharedSegments/SharedSegments.Plugins/Workflows/Eplant/ResponseBuilders/EplantPlantResponseBuilder.cs\",\r\n// \"D:/code/CS.Service.Fundamental/SharedSegments/SharedSegments/SharedSegments.Plugins/Workflows/Eplant/ResponseBuilders/EplantTreeUpdateResponseBuilder.cs\",\r\n// \"D:/code/CS.Service.Fundamental/SharedSegments/SharedSegments/SharedSegments.Plugins/Workflows/Eplant/ResponseBuilders/EplantUserUpdateResponseBuilder.cs\",\r\n// \"D:\\\\code\\\\UCMDynamics\\\\private\\\\DynamicCode\\\\Plugin\\\\UCMDynamics.AppointmentPlugin\\\\AppointmentOperation.cs\"\r\n// ];\r\n\r\n// for (const path of testFilePaths) {\r\n// const isValid = await validateCode(path);\r\n// console.log(`${path} -> ${isValid}`);\r\n// }\r\n// }\r\n\r\n// testMethod();"]}
@@ -1,6 +1,10 @@
1
1
  export declare const CSVSPLUGIN = "csvsplugin";
2
2
  export declare const CSHARPUTGEN = "csharpUtGen";
3
3
  export declare const CSVSCODEPLUGIN = "csVsCodePlugin";
4
+ export declare const PIPELINE = "pipeline";
5
+ export declare const LINESEPARATOR: RegExp;
6
+ export declare const AICONTRIBUTED = "@aiContributed";
7
+ export declare const NAMESPACE = "namespace";
4
8
  export declare const MSTESTFRAMEWORK = "MSTest";
5
9
  export declare const NUNITTESTFRAMEWORK = "NUnit";
6
10
  export declare const XUNITTESTFRAMEWORK = "xUnit";
@@ -1,9 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.XUNITTESTFRAMEWORK = exports.NUNITTESTFRAMEWORK = exports.MSTESTFRAMEWORK = exports.CSVSCODEPLUGIN = exports.CSHARPUTGEN = exports.CSVSPLUGIN = void 0;
3
+ exports.XUNITTESTFRAMEWORK = exports.NUNITTESTFRAMEWORK = exports.MSTESTFRAMEWORK = exports.NAMESPACE = exports.AICONTRIBUTED = exports.LINESEPARATOR = exports.PIPELINE = exports.CSVSCODEPLUGIN = exports.CSHARPUTGEN = exports.CSVSPLUGIN = void 0;
4
4
  exports.CSVSPLUGIN = 'csvsplugin';
5
5
  exports.CSHARPUTGEN = 'csharpUtGen';
6
6
  exports.CSVSCODEPLUGIN = 'csVsCodePlugin';
7
+ exports.PIPELINE = 'pipeline';
8
+ exports.LINESEPARATOR = /\r?\n/;
9
+ exports.AICONTRIBUTED = '@aiContributed';
10
+ exports.NAMESPACE = 'namespace';
7
11
  exports.MSTESTFRAMEWORK = 'MSTest';
8
12
  exports.NUNITTESTFRAMEWORK = 'NUnit';
9
13
  exports.XUNITTESTFRAMEWORK = 'xUnit';
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/types/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,UAAU,GAAG,YAAY,CAAC;AAC1B,QAAA,WAAW,GAAG,aAAa,CAAC;AAC5B,QAAA,cAAc,GAAG,gBAAgB,CAAC;AAClC,QAAA,eAAe,GAAG,QAAQ,CAAC;AAC3B,QAAA,kBAAkB,GAAG,OAAO,CAAC;AAC7B,QAAA,kBAAkB,GAAG,OAAO,CAAC","sourcesContent":["export const CSVSPLUGIN = 'csvsplugin';\r\nexport const CSHARPUTGEN = 'csharpUtGen';\r\nexport const CSVSCODEPLUGIN = 'csVsCodePlugin';\r\nexport const MSTESTFRAMEWORK = 'MSTest';\r\nexport const NUNITTESTFRAMEWORK = 'NUnit';\r\nexport const XUNITTESTFRAMEWORK = 'xUnit';"]}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/types/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,UAAU,GAAG,YAAY,CAAC;AAC1B,QAAA,WAAW,GAAG,aAAa,CAAC;AAC5B,QAAA,cAAc,GAAG,gBAAgB,CAAC;AAClC,QAAA,QAAQ,GAAG,UAAU,CAAC;AACtB,QAAA,aAAa,GAAG,OAAO,CAAC;AACxB,QAAA,aAAa,GAAG,gBAAgB,CAAC;AACjC,QAAA,SAAS,GAAG,WAAW,CAAC;AACxB,QAAA,eAAe,GAAG,QAAQ,CAAC;AAC3B,QAAA,kBAAkB,GAAG,OAAO,CAAC;AAC7B,QAAA,kBAAkB,GAAG,OAAO,CAAC","sourcesContent":["export const CSVSPLUGIN = 'csvsplugin';\r\nexport const CSHARPUTGEN = 'csharpUtGen';\r\nexport const CSVSCODEPLUGIN = 'csVsCodePlugin';\r\nexport const PIPELINE = 'pipeline';\r\nexport const LINESEPARATOR = /\\r?\\n/;\r\nexport const AICONTRIBUTED = '@aiContributed';\r\nexport const NAMESPACE = 'namespace';\r\nexport const MSTESTFRAMEWORK = 'MSTest';\r\nexport const NUNITTESTFRAMEWORK = 'NUnit';\r\nexport const XUNITTESTFRAMEWORK = 'xUnit';\r\n"]}
@@ -110,6 +110,8 @@ function isFalconUnitTestProject(csprojPath) {
110
110
  const itemGroups = Array.isArray(project.ItemGroup) ? project.ItemGroup : [project.ItemGroup];
111
111
  let isFalconUnitTestProject = false;
112
112
  for (const group of itemGroups) {
113
+ if (!group)
114
+ continue;
113
115
  const refs = group.PackageReference;
114
116
  if (!refs)
115
117
  continue;