apex-mutation-testing 1.4.0 → 1.5.0-dev-99.22440267013-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -70,6 +70,26 @@ Before running mutation testing:
70
70
 
71
71
  Remember, mutation testing complements but doesn't replace good test coverage. It helps identify weaknesses in your existing tests, but only for the code they already cover.
72
72
 
73
+ ### Dry Run
74
+
75
+ Before running the full mutation testing process, you can preview the mutations that would be generated using the `--dry-run` flag:
76
+
77
+ ```sh
78
+ sf apex mutation test run --apex-class MyClass --test-class MyClassTest --dry-run
79
+ ```
80
+
81
+ This runs your test class once to collect coverage data, then lists all mutations that would be generated without deploying any of them. Use it to estimate the scope of mutation testing for your class and verify that relevant mutations are being generated for your code patterns.
82
+
83
+ In both normal and dry-run modes, the plugin displays a time estimate before starting the mutation loop, showing the estimated total duration along with a per-mutant breakdown of deployment and test execution time.
84
+
85
+ ### Compilability Verification
86
+
87
+ Before running mutation tests, the plugin deploys both the target class and its test class back to the org to verify they compile correctly. This step is necessary because Salesforce only validates compilation of the element being deployed, not its dependents. A class can exist on the org in a broken state if one of its dependencies was modified after it was last deployed.
88
+
89
+ Without this check, all mutants would result in `CompileError`, producing a misleading 100% mutation score. If either class fails to compile, the process stops early with a clear error message showing the compilation details.
90
+
91
+ This verification also serves as a baseline to measure deployment time, which is used to estimate the total mutation testing duration.
92
+
73
93
  ### Supported Mutation Operators
74
94
 
75
95
  The plugin currently supports the following mutation operators. If your code doesn't contain any of these patterns on covered lines, no mutations will be generated:
@@ -144,11 +164,12 @@ Evaluate test coverage quality by injecting mutations and measuring test detecti
144
164
 
145
165
  ```
146
166
  USAGE
147
- $ sf apex mutation test run -c <value> -t <value> -o <value> [--json] [--flags-dir <value>] [-r <value>] [--api-version
148
- <value>]
167
+ $ sf apex mutation test run -c <value> -t <value> -o <value> [--json] [--flags-dir <value>] [-r <value>] [-d]
168
+ [--api-version <value>]
149
169
 
150
170
  FLAGS
151
171
  -c, --apex-class=<value> (required) Apex class name to mutate
172
+ -d, --dry-run Preview mutations without deploying or running tests
152
173
  -o, --target-org=<value> (required) Username or alias of the target org. Not required if the `target-org`
153
174
  configuration variable is already set.
154
175
  -r, --report-dir=<value> [default: mutations] Path to the directory where mutation test reports will be generated
@@ -172,9 +193,13 @@ EXAMPLES
172
193
  Run mutation testing on a class with its test file:
173
194
 
174
195
  $ sf apex mutation test run --apex-class MyClass --test-class MyClassTest
196
+
197
+ Preview mutations without running them:
198
+
199
+ $ sf apex mutation test run --apex-class MyClass --test-class MyClassTest --dry-run
175
200
  ```
176
201
 
177
- _See code: [src/commands/apex/mutation/test/run.ts](https://github.com/scolladon/apex-mutation-testing/blob/v1.4.0/src/commands/apex/mutation/test/run.ts)_
202
+ _See code: [src/commands/apex/mutation/test/run.ts](https://github.com/scolladon/apex-mutation-testing/blob/v1.5.0-dev-99.22440267013-1/src/commands/apex/mutation/test/run.ts)_
178
203
  <!-- commandsstop -->
179
204
 
180
205
  ## Backlog
@@ -1,6 +1,6 @@
1
1
  import { SfCommand } from '@salesforce/sf-plugins-core';
2
2
  export type ApexMutationTestResult = {
3
- score: number;
3
+ score: number | null;
4
4
  };
5
5
  export default class ApexMutationTest extends SfCommand<ApexMutationTestResult> {
6
6
  static readonly summary: string;
@@ -10,6 +10,7 @@ export default class ApexMutationTest extends SfCommand<ApexMutationTestResult>
10
10
  'apex-class': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
11
11
  'test-class': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
12
12
  'report-dir': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
13
+ 'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
14
  'target-org': import("@oclif/core/interfaces").OptionFlag<import("@salesforce/core").Org, import("@oclif/core/interfaces").CustomOptions>;
14
15
  'api-version': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
16
  };
@@ -26,22 +26,26 @@ export default class ApexMutationTest extends SfCommand {
26
26
  exists: true,
27
27
  default: 'mutations',
28
28
  }),
29
+ 'dry-run': Flags.boolean({
30
+ char: 'd',
31
+ summary: messages.getMessage('flags.dry-run.summary'),
32
+ default: false,
33
+ }),
29
34
  'target-org': Flags.requiredOrg(),
30
35
  'api-version': Flags.orgApiVersion(),
31
36
  };
32
37
  async run() {
33
- // parse the provided flags
34
38
  const { flags } = await this.parse(ApexMutationTest);
35
39
  const connection = flags['target-org'].getConnection(flags['api-version']);
36
40
  const parameters = {
37
41
  apexClassName: flags['apex-class'],
38
42
  apexTestClassName: flags['test-class'],
39
43
  reportDir: flags['report-dir'],
44
+ dryRun: flags['dry-run'],
40
45
  };
41
- this.log(messages.getMessage('info.CommandIsRunning', [
42
- parameters.apexClassName,
43
- parameters.apexTestClassName,
44
- ]));
46
+ this.log(messages.getMessage(flags['dry-run']
47
+ ? 'info.DryRunCommandIsRunning'
48
+ : 'info.CommandIsRunning', [parameters.apexClassName, parameters.apexTestClassName]));
45
49
  const apexClassValidator = new ApexClassValidator(connection);
46
50
  await apexClassValidator.validate(parameters);
47
51
  const mutationTestingService = new MutationTestingService(this.progress, this.spinner, connection, parameters, messages);
@@ -49,12 +53,14 @@ export default class ApexMutationTest extends SfCommand {
49
53
  const htmlReporter = new ApexMutationHTMLReporter();
50
54
  await htmlReporter.generateReport(mutationResult, parameters.reportDir);
51
55
  this.log(messages.getMessage('info.reportGenerated', [parameters.reportDir]));
52
- const score = mutationTestingService.calculateScore(mutationResult);
53
- this.log(messages.getMessage('info.CommandSuccess', [score]));
56
+ const score = flags['dry-run']
57
+ ? null
58
+ : mutationTestingService.calculateScore(mutationResult);
59
+ if (score !== null) {
60
+ this.log(messages.getMessage('info.CommandSuccess', [score]));
61
+ }
54
62
  this.info(messages.getMessage('info.EncourageSponsorship'));
55
- return {
56
- score,
57
- };
63
+ return { score };
58
64
  }
59
65
  }
60
66
  //# sourceMappingURL=run.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../../../src/commands/apex/mutation/test/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../../../src/commands/apex/mutation/test/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAA;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAA;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAA;AAGtF,QAAQ,CAAC,kCAAkC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC5D,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CACpC,uBAAuB,EACvB,wBAAwB,CACzB,CAAA;AAMD,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,SAAiC;IACtE,MAAM,CAAmB,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;IACjE,MAAM,CAAmB,WAAW,GACzC,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,CAAA;IAC7B,MAAM,CAAmB,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;IAEpE,MAAM,CAAmB,KAAK,GAAG;QACtC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC;YACzB,IAAI,EAAE,GAAG;YACT,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,0BAA0B,CAAC;YACxD,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC;YACzB,IAAI,EAAE,GAAG;YACT,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,0BAA0B,CAAC;YACxD,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC;YAC5B,IAAI,EAAE,GAAG;YACT,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,0BAA0B,CAAC;YACxD,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,WAAW;SACrB,CAAC;QACF,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC;YACvB,IAAI,EAAE,GAAG;YACT,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,uBAAuB,CAAC;YACrD,OAAO,EAAE,KAAK;SACf,CAAC;QACF,YAAY,EAAE,KAAK,CAAC,WAAW,EAAE;QACjC,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE;KACrC,CAAA;IAEM,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAA;QACpD,MAAM,UAAU,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAA;QAE1E,MAAM,UAAU,GAA0B;YACxC,aAAa,EAAE,KAAK,CAAC,YAAY,CAAC;YAClC,iBAAiB,EAAE,KAAK,CAAC,YAAY,CAAC;YACtC,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC;YAC9B,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC;SACzB,CAAA;QAED,IAAI,CAAC,GAAG,CACN,QAAQ,CAAC,UAAU,CACjB,KAAK,CAAC,SAAS,CAAC;YACd,CAAC,CAAC,6BAA6B;YAC/B,CAAC,CAAC,uBAAuB,EAC3B,CAAC,UAAU,CAAC,aAAa,EAAE,UAAU,CAAC,iBAAiB,CAAC,CACzD,CACF,CAAA;QAED,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,CAAC,UAAU,CAAC,CAAA;QAC7D,MAAM,kBAAkB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;QAE7C,MAAM,sBAAsB,GAAG,IAAI,sBAAsB,CACvD,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,OAAO,EACZ,UAAU,EACV,UAAU,EACV,QAAQ,CACT,CAAA;QACD,MAAM,cAAc,GAAG,MAAM,sBAAsB,CAAC,OAAO,EAAE,CAAA;QAE7D,MAAM,YAAY,GAAG,IAAI,wBAAwB,EAAE,CAAA;QACnD,MAAM,YAAY,CAAC,cAAc,CAAC,cAAc,EAAE,UAAU,CAAC,SAAS,CAAC,CAAA;QACvE,IAAI,CAAC,GAAG,CACN,QAAQ,CAAC,UAAU,CAAC,sBAAsB,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CACpE,CAAA;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC;YAC5B,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,sBAAsB,CAAC,cAAc,CAAC,cAAc,CAAC,CAAA;QAEzD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAC/D,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC,CAAA;QAC3D,OAAO,EAAE,KAAK,EAAE,CAAA;IAClB,CAAC"}
@@ -2,7 +2,7 @@ import { ParserRuleContext } from 'antlr4ts';
2
2
  import { DotMethodCallContext } from 'apex-parser';
3
3
  import type { ApexType } from '../type/ApexMethod.js';
4
4
  import type { ResolvedType, TypeRegistry } from '../type/TypeRegistry.js';
5
- export interface DotMethodCallInfo {
5
+ interface DotMethodCallInfo {
6
6
  dotMethodCall: DotMethodCallContext;
7
7
  methodName: string;
8
8
  enclosingMethod: string;
@@ -12,3 +12,4 @@ export declare function getEnclosingMethodName(ctx: ParserRuleContext): string |
12
12
  export declare function resolveDotMethodCall(ctx: ParserRuleContext, typeRegistry: TypeRegistry): DotMethodCallInfo | null;
13
13
  export declare function extractArguments(methodCallCtx: ParserRuleContext): ParserRuleContext[];
14
14
  export declare function resolveExpressionApexType(text: string, enclosingMethod: string, typeRegistry: TypeRegistry): ApexType | null;
15
+ export {};
@@ -17,7 +17,11 @@ export class ApexMutationHTMLReporter {
17
17
  },
18
18
  files: {},
19
19
  };
20
- const errorStatuses = new Set(['CompileError', 'RuntimeError']);
20
+ const untestedStatuses = new Set([
21
+ 'CompileError',
22
+ 'RuntimeError',
23
+ 'Pending',
24
+ ]);
21
25
  const fileResult = {
22
26
  language: 'java',
23
27
  source: apexMutationTestResult.sourceFileContent,
@@ -28,9 +32,9 @@ export class ApexMutationHTMLReporter {
28
32
  status: mutant.status,
29
33
  statusReason: mutant.statusReason,
30
34
  static: false,
31
- coveredBy: errorStatuses.has(mutant.status) ? undefined : ['0'],
35
+ coveredBy: untestedStatuses.has(mutant.status) ? undefined : ['0'],
32
36
  killedBy: mutant.status === 'Killed' ? ['0'] : undefined,
33
- testsCompleted: errorStatuses.has(mutant.status) ? 0 : 1,
37
+ testsCompleted: untestedStatuses.has(mutant.status) ? 0 : 1,
34
38
  location: {
35
39
  start: {
36
40
  line: mutant.location.start.line,
@@ -1 +1 @@
1
- {"version":3,"file":"HTMLReporter.js","sourceRoot":"","sources":["../../src/reporter/HTMLReporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAG5B,MAAM,OAAO,wBAAwB;IACnC,KAAK,CAAC,cAAc,CAClB,sBAA8C,EAC9C,YAAoB,SAAS;QAE7B,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,CAAA;QACpE,iEAAiE;QACjE,MAAM,WAAW,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAA;QAChD,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC,CAAA;IAClE,CAAC;IAEO,oBAAoB,CAAC,sBAA8C;QACzE,MAAM,kBAAkB,GAAG;YACzB,aAAa,EAAE,OAAO;YACtB,MAAM,EAAE,EAAE,EAAE,sCAAsC;YAClD,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE;gBACR,GAAG,EAAE,EAAE;aACR;YACD,KAAK,EAAE,EAAE;SACV,CAAA;QAED,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC,CAAA;QAE/D,MAAM,UAAU,GAAG;YACjB,QAAQ,EAAE,MAAM;YAChB,MAAM,EAAE,sBAAsB,CAAC,iBAAiB;YAChD,OAAO,EAAE,sBAAsB,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACrD,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,MAAM,EAAE,KAAK;gBACb,SAAS,EAAE,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC/D,QAAQ,EAAE,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;gBACxD,cAAc,EAAE,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxD,QAAQ,EAAE;oBACR,KAAK,EAAE;wBACL,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI;wBAChC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM;qBACrC;oBACD,GAAG,EAAE;wBACH,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI;wBAC9B,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM;qBACnC;iBACF;aACF,CAAC,CAAC;SACJ,CAAA;QAED,kBAAkB,CAAC,KAAK,CAAC,GAAG,sBAAsB,CAAC,UAAU,MAAM,CAAC;YAClE,UAAU,CAAA;QAEZ,OAAO,kBAAkB,CAAA;IAC3B,CAAC;CACF;AAED,MAAM,gBAAgB,GAAG,MAAM,CAAC,EAAE;IAChC,OAAO;;;;;;;;;;;;;qBAaY,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;;;UAGjD,CAAA;AACV,CAAC,CAAA;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,IAAY;IAClC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACpC,OAAO,CAAC,CAAA;AACV,CAAC"}
1
+ {"version":3,"file":"HTMLReporter.js","sourceRoot":"","sources":["../../src/reporter/HTMLReporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAG5B,MAAM,OAAO,wBAAwB;IACnC,KAAK,CAAC,cAAc,CAClB,sBAA8C,EAC9C,YAAoB,SAAS;QAE7B,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,CAAA;QACpE,iEAAiE;QACjE,MAAM,WAAW,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAA;QAChD,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC,CAAA;IAClE,CAAC;IAEO,oBAAoB,CAAC,sBAA8C;QACzE,MAAM,kBAAkB,GAAG;YACzB,aAAa,EAAE,OAAO;YACtB,MAAM,EAAE,EAAE,EAAE,sCAAsC;YAClD,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE;gBACR,GAAG,EAAE,EAAE;aACR;YACD,KAAK,EAAE,EAAE;SACV,CAAA;QAED,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;YAC/B,cAAc;YACd,cAAc;YACd,SAAS;SACV,CAAC,CAAA;QAEF,MAAM,UAAU,GAAG;YACjB,QAAQ,EAAE,MAAM;YAChB,MAAM,EAAE,sBAAsB,CAAC,iBAAiB;YAChD,OAAO,EAAE,sBAAsB,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACrD,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,MAAM,EAAE,KAAK;gBACb,SAAS,EAAE,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBAClE,QAAQ,EAAE,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;gBACxD,cAAc,EAAE,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3D,QAAQ,EAAE;oBACR,KAAK,EAAE;wBACL,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI;wBAChC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM;qBACrC;oBACD,GAAG,EAAE;wBACH,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI;wBAC9B,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM;qBACnC;iBACF;aACF,CAAC,CAAC;SACJ,CAAA;QAED,kBAAkB,CAAC,KAAK,CAAC,GAAG,sBAAsB,CAAC,UAAU,MAAM,CAAC;YAClE,UAAU,CAAA;QAEZ,OAAO,kBAAkB,CAAA;IAC3B,CAAC;CACF;AAED,MAAM,gBAAgB,GAAG,MAAM,CAAC,EAAE;IAChC,OAAO;;;;;;;;;;;;;qBAaY,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;;;UAGjD,CAAA;AACV,CAAC,CAAA;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,IAAY;IAClC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACpC,OAAO,CAAC,CAAA;AACV,CAAC"}
@@ -9,8 +9,9 @@ export declare class MutationTestingService {
9
9
  protected readonly messages: Messages<string>;
10
10
  protected readonly apexClassName: string;
11
11
  protected readonly apexTestClassName: string;
12
+ protected readonly dryRun: boolean;
12
13
  private apexClassContent;
13
- constructor(progress: Progress, spinner: Spinner, connection: Connection, { apexClassName, apexTestClassName }: ApexMutationParameter, messages: Messages<string>);
14
+ constructor(progress: Progress, spinner: Spinner, connection: Connection, { apexClassName, apexTestClassName, dryRun }: ApexMutationParameter, messages: Messages<string>);
14
15
  process(): Promise<ApexMutationTestResult>;
15
16
  calculateScore(mutationResult: ApexMutationTestResult): number;
16
17
  private buildMutantResult;
@@ -2,6 +2,7 @@ import { ApexClassRepository } from '../adapter/apexClassRepository.js';
2
2
  import { ApexTestRunner } from '../adapter/apexTestRunner.js';
3
3
  import { SObjectDescribeRepository } from '../adapter/sObjectDescribeRepository.js';
4
4
  import { MutantGenerator } from './mutantGenerator.js';
5
+ import { formatDuration, timeExecution } from './timeUtils.js';
5
6
  import { TypeDiscoverer } from './typeDiscoverer.js';
6
7
  import { ApexClassTypeMatcher, SObjectTypeMatcher } from './typeMatcher.js';
7
8
  const errorStrategies = [
@@ -36,14 +37,16 @@ export class MutationTestingService {
36
37
  messages;
37
38
  apexClassName;
38
39
  apexTestClassName;
40
+ dryRun;
39
41
  apexClassContent = '';
40
- constructor(progress, spinner, connection, { apexClassName, apexTestClassName }, messages) {
42
+ constructor(progress, spinner, connection, { apexClassName, apexTestClassName, dryRun }, messages) {
41
43
  this.progress = progress;
42
44
  this.spinner = spinner;
43
45
  this.connection = connection;
44
46
  this.messages = messages;
45
47
  this.apexClassName = apexClassName;
46
48
  this.apexTestClassName = apexTestClassName;
49
+ this.dryRun = dryRun ?? false;
47
50
  }
48
51
  async process() {
49
52
  const apexClassRepository = new ApexClassRepository(this.connection);
@@ -75,10 +78,40 @@ export class MutationTestingService {
75
78
  .withMatcher(sObjectMatcher);
76
79
  const typeRegistry = await typeDiscoverer.analyze(apexClass.Body);
77
80
  this.spinner.stop('Done');
78
- this.spinner.start(`Testing original code"`, undefined, {
81
+ this.spinner.start(`Verifying "${this.apexClassName}" apex class compilability`, undefined, { stdout: true });
82
+ let deployTime = 0;
83
+ try {
84
+ const { durationMs } = await timeExecution(() => apexClassRepository.update(apexClass));
85
+ deployTime = durationMs;
86
+ }
87
+ catch (error) {
88
+ this.spinner.stop();
89
+ const errorMessage = error instanceof Error ? error.message : String(error);
90
+ throw new Error(this.messages.getMessage('error.compilabilityCheckFailed', [
91
+ this.apexClassName,
92
+ errorMessage,
93
+ ]));
94
+ }
95
+ this.spinner.stop('Done');
96
+ this.spinner.start(`Verifying "${this.apexTestClassName}" apex test class compilability`, undefined, { stdout: true });
97
+ try {
98
+ const apexTestClass = (await apexClassRepository.read(this.apexTestClassName));
99
+ await apexClassRepository.update(apexTestClass);
100
+ }
101
+ catch (error) {
102
+ this.spinner.stop();
103
+ const errorMessage = error instanceof Error ? error.message : String(error);
104
+ throw new Error(this.messages.getMessage('error.compilabilityCheckFailed', [
105
+ this.apexTestClassName,
106
+ errorMessage,
107
+ ]));
108
+ }
109
+ this.spinner.stop('Done');
110
+ this.spinner.start(`Executing "${this.apexTestClassName}" tests to get coverage`, undefined, {
79
111
  stdout: true,
80
112
  });
81
- const { outcome, testsRan, failing, testMethodsPerLine } = await apexTestRunner.getTestMethodsPerLines(this.apexTestClassName);
113
+ const { result: baselineResult, durationMs: testTime } = await timeExecution(() => apexTestRunner.getTestMethodsPerLines(this.apexTestClassName));
114
+ const { outcome, testsRan, failing, testMethodsPerLine } = baselineResult;
82
115
  if (outcome !== 'Passed') {
83
116
  this.spinner.stop();
84
117
  throw new Error(`Original tests failed! Cannot proceed with mutation testing.\n` +
@@ -112,18 +145,44 @@ export class MutationTestingService {
112
145
  coveredLines.size,
113
146
  ]));
114
147
  }
148
+ this.spinner.stop(`${mutations.length} mutations generated`);
149
+ const totalEstimateMs = (deployTime + testTime) * mutations.length;
150
+ this.spinner.start(this.messages.getMessage('info.timeEstimate', [
151
+ formatDuration(totalEstimateMs),
152
+ ]), undefined, { stdout: true });
153
+ this.spinner.stop(this.messages.getMessage('info.timeEstimateBreakdown', [
154
+ formatDuration(deployTime),
155
+ formatDuration(testTime),
156
+ String(mutations.length),
157
+ ]));
158
+ if (this.dryRun) {
159
+ return {
160
+ sourceFile: this.apexClassName,
161
+ sourceFileContent: apexClass.Body,
162
+ testFile: this.apexTestClassName,
163
+ mutants: mutations.map(mutation => ({
164
+ id: `${this.apexClassName}-${mutation.target.startToken.line}-${mutation.target.startToken.charPositionInLine}-${mutation.target.startToken.tokenIndex}-${Date.now()}`,
165
+ mutatorName: mutation.mutationName,
166
+ status: 'Pending',
167
+ location: this.calculateMutationPosition(mutation, apexClass.Body),
168
+ replacement: mutation.replacement,
169
+ original: this.extractMutationOriginalText(mutation),
170
+ })),
171
+ };
172
+ }
115
173
  const mutationResults = {
116
174
  sourceFile: this.apexClassName,
117
175
  sourceFileContent: apexClass.Body,
118
176
  testFile: this.apexTestClassName,
119
177
  mutants: [],
120
178
  };
121
- this.spinner.stop(`${mutations.length} mutations generated`);
122
179
  this.progress.start(mutations.length, { info: 'Starting mutation testing' }, {
123
180
  title: 'MUTATION TESTING PROGRESS',
124
181
  format: '%s | {bar} | {value}/{total} {info}',
125
182
  });
126
183
  let mutationCount = 0;
184
+ let remainingText = '';
185
+ const loopStartTime = performance.now();
127
186
  for (const mutation of mutations) {
128
187
  const mutatedVersion = mutantGenerator.mutate(mutation);
129
188
  const targetInfo = {
@@ -133,7 +192,7 @@ export class MutationTestingService {
133
192
  text: mutation.target.text,
134
193
  };
135
194
  this.progress.update(mutationCount, {
136
- info: `Deploying "${mutation.replacement}" mutation at line ${targetInfo.line}`,
195
+ info: `${remainingText}Deploying "${mutation.replacement}" mutation at line ${targetInfo.line}`,
137
196
  });
138
197
  let progressMessage;
139
198
  try {
@@ -143,7 +202,7 @@ export class MutationTestingService {
143
202
  });
144
203
  const testMethods = testMethodsPerLine.get(targetInfo.line);
145
204
  this.progress.update(mutationCount, {
146
- info: `Running ${testMethods.size} tests methods for "${mutation.replacement}" mutation at line ${targetInfo.line}`,
205
+ info: `${remainingText}Running ${testMethods.size} tests methods for "${mutation.replacement}" mutation at line ${targetInfo.line}`,
147
206
  });
148
207
  const testResult = await apexTestRunner.runTestMethods(this.apexTestClassName, testMethods);
149
208
  const mutantResult = this.buildMutantResult(mutation, testResult, targetInfo);
@@ -170,8 +229,13 @@ export class MutationTestingService {
170
229
  progressMessage = classification.progressMessage;
171
230
  }
172
231
  ++mutationCount;
232
+ const elapsed = performance.now() - loopStartTime;
233
+ const avgPerMutant = elapsed / mutationCount;
234
+ const remainingMutants = mutations.length - mutationCount;
235
+ const remainingMs = avgPerMutant * remainingMutants;
236
+ remainingText = `Remaining: ${formatDuration(remainingMs)} | `;
173
237
  this.progress.update(mutationCount, {
174
- info: progressMessage,
238
+ info: `${remainingText}${progressMessage}`,
175
239
  });
176
240
  }
177
241
  this.progress.finish({
@@ -1 +1 @@
1
- {"version":3,"file":"mutationTestingService.js","sourceRoot":"","sources":["../../src/service/mutationTestingService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mutationTestingService.js","sourceRoot":"","sources":["../../src/service/mutationTestingService.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAA;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAA;AAKnF,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAuB3E,MAAM,eAAe,GAAkC;IACrD;QACE,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,oBAAoB,CAAC;QACpD,QAAQ,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;YAC9B,MAAM,EAAE,cAAc;YACtB,YAAY,EAAE,GAAG;YACjB,eAAe,EAAE,0CAA0C,UAAU,CAAC,IAAI,EAAE;SAC7E,CAAC;KACH;IACD;QACE,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAClD,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,MAAM,EAAE,QAAQ;YAChB,eAAe,EAAE,mCAAmC,GAAG,GAAG;SAC3D,CAAC;KACH;IACD;QACE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI;QACnB,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,MAAM,EAAE,cAAc;YACtB,YAAY,EAAE,GAAG;YACjB,eAAe,EAAE,mCAAmC,GAAG,GAAG;SAC3D,CAAC;KACH;CACF,CAAA;AAED,MAAM,OAAO,sBAAsB;IAOZ;IACA;IACA;IAEA;IAVF,aAAa,CAAQ;IACrB,iBAAiB,CAAQ;IACzB,MAAM,CAAS;IAC1B,gBAAgB,GAAW,EAAE,CAAA;IAErC,YACqB,QAAkB,EAClB,OAAgB,EAChB,UAAsB,EACzC,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,EAAyB,EAChD,QAA0B;QAJ1B,aAAQ,GAAR,QAAQ,CAAU;QAClB,YAAO,GAAP,OAAO,CAAS;QAChB,eAAU,GAAV,UAAU,CAAY;QAEtB,aAAQ,GAAR,QAAQ,CAAkB;QAE7C,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;QAClC,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAA;QAC1C,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,KAAK,CAAA;IAC/B,CAAC;IAEM,KAAK,CAAC,OAAO;QAClB,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACpE,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAC1D,IAAI,CAAC,OAAO,CAAC,KAAK,CAChB,aAAa,IAAI,CAAC,aAAa,qBAAqB,EACpD,SAAS,EACT;YACE,MAAM,EAAE,IAAI;SACb,CACF,CAAA;QAED,MAAM,SAAS,GAAc,CAAC,MAAM,mBAAmB,CAAC,IAAI,CAC1D,IAAI,CAAC,aAAa,CACnB,CAAyB,CAAA;QAE1B,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC,IAAI,CAAA;QAEtC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAEzB,IAAI,CAAC,OAAO,CAAC,KAAK,CAChB,qCAAqC,IAAI,CAAC,aAAa,GAAG,EAC1D,SAAS,EACT;YACE,MAAM,EAAE,IAAI;SACb,CACF,CAAA;QACD,MAAM,YAAY,GAAG,MAAM,mBAAmB,CAAC,wBAAwB,CACrE,SAAS,CAAC,EAAY,CACvB,CAAA;QAED,MAAM,cAAc,GAAG,YAAY;aAChC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,wBAAwB,KAAK,WAAW,CAAC;aAC3D,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAA;QAE3C,MAAM,mBAAmB,GAAG,YAAY;aACrC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,wBAAwB,KAAK,gBAAgB,CAAC;aAChE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAA;QAE3C,MAAM,iBAAiB,GAAG,YAAY;aACnC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,wBAAwB,KAAK,cAAc,CAAC;aAC9D,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAA;QAE3C,MAAM,yBAAyB,GAAG,IAAI,yBAAyB,CAC7D,IAAI,CAAC,UAAU,CAChB,CAAA;QACD,MAAM,gBAAgB,GAAG,IAAI,oBAAoB,CAAC,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAA;QAC1E,MAAM,cAAc,GAAG,IAAI,kBAAkB,CAC3C,IAAI,GAAG,CAAC,CAAC,GAAG,mBAAmB,EAAE,GAAG,iBAAiB,CAAC,CAAC,EACvD,yBAAyB,CAC1B,CAAA;QAED,MAAM,cAAc,GAAG,IAAI,cAAc,EAAE;aACxC,WAAW,CAAC,gBAAgB,CAAC;aAC7B,WAAW,CAAC,cAAc,CAAC,CAAA;QAE9B,MAAM,YAAY,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QACjE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAEzB,IAAI,CAAC,OAAO,CAAC,KAAK,CAChB,cAAc,IAAI,CAAC,aAAa,4BAA4B,EAC5D,SAAS,EACT,EAAE,MAAM,EAAE,IAAI,EAAE,CACjB,CAAA;QACD,IAAI,UAAU,GAAG,CAAC,CAAA;QAClB,IAAI,CAAC;YACH,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,CAC9C,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC,CACtC,CAAA;YACD,UAAU,GAAG,UAAU,CAAA;QACzB,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;YACnB,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACxD,MAAM,IAAI,KAAK,CACb,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,gCAAgC,EAAE;gBACzD,IAAI,CAAC,aAAa;gBAClB,YAAY;aACb,CAAC,CACH,CAAA;QACH,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAEzB,IAAI,CAAC,OAAO,CAAC,KAAK,CAChB,cAAc,IAAI,CAAC,iBAAiB,iCAAiC,EACrE,SAAS,EACT,EAAE,MAAM,EAAE,IAAI,EAAE,CACjB,CAAA;QACD,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,CAAC,MAAM,mBAAmB,CAAC,IAAI,CACnD,IAAI,CAAC,iBAAiB,CACvB,CAAyB,CAAA;YAC1B,MAAM,mBAAmB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;QACjD,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;YACnB,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACxD,MAAM,IAAI,KAAK,CACb,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,gCAAgC,EAAE;gBACzD,IAAI,CAAC,iBAAiB;gBACtB,YAAY;aACb,CAAC,CACH,CAAA;QACH,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAEzB,IAAI,CAAC,OAAO,CAAC,KAAK,CAChB,cAAc,IAAI,CAAC,iBAAiB,yBAAyB,EAC7D,SAAS,EACT;YACE,MAAM,EAAE,IAAI;SACb,CACF,CAAA;QAED,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,QAAQ,EAAE,GACpD,MAAM,aAAa,CAAC,GAAG,EAAE,CACvB,cAAc,CAAC,sBAAsB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAC9D,CAAA;QACH,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,kBAAkB,EAAE,GAAG,cAAc,CAAA;QAEzE,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;YACzB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;YACnB,MAAM,IAAI,KAAK,CACb,gEAAgE;gBAC9D,iBAAiB,OAAO,IAAI;gBAC5B,kBAAkB,OAAO,IAAI,CAChC,CAAA;QACH,CAAC;QAED,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;YACnB,MAAM,IAAI,KAAK,CACb,uCAAuC;gBACrC,iBAAiB,IAAI,CAAC,iBAAiB,YAAY;gBACnD,0CAA0C;gBAC1C,mCAAmC,CACtC,CAAA;QACH,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;QAE1C,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAA;QAEvD,IAAI,YAAY,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CACb,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,kBAAkB,EAAE;gBAC3C,IAAI,CAAC,aAAa;gBAClB,IAAI,CAAC,iBAAiB;aACvB,CAAC,CACH,CAAA;QACH,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,KAAK,CAChB,2BAA2B,IAAI,CAAC,aAAa,aAAa,EAC1D,SAAS,EACT;YACE,MAAM,EAAE,IAAI;SACb,CACF,CAAA;QACD,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAA;QAC7C,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,CACvC,SAAS,CAAC,IAAI,EACd,YAAY,EACZ,YAAY,CACb,CAAA;QAED,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;YAC1C,MAAM,IAAI,KAAK,CACb,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,mBAAmB,EAAE;gBAC5C,IAAI,CAAC,aAAa;gBAClB,YAAY,CAAC,IAAI;aAClB,CAAC,CACH,CAAA;QACH,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,sBAAsB,CAAC,CAAA;QAE5D,MAAM,eAAe,GAAG,CAAC,UAAU,GAAG,QAAQ,CAAC,GAAG,SAAS,CAAC,MAAM,CAAA;QAClE,IAAI,CAAC,OAAO,CAAC,KAAK,CAChB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,mBAAmB,EAAE;YAC5C,cAAc,CAAC,eAAe,CAAC;SAChC,CAAC,EACF,SAAS,EACT,EAAE,MAAM,EAAE,IAAI,EAAE,CACjB,CAAA;QACD,IAAI,CAAC,OAAO,CAAC,IAAI,CACf,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,4BAA4B,EAAE;YACrD,cAAc,CAAC,UAAU,CAAC;YAC1B,cAAc,CAAC,QAAQ,CAAC;YACxB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;SACzB,CAAC,CACH,CAAA;QAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO;gBACL,UAAU,EAAE,IAAI,CAAC,aAAa;gBAC9B,iBAAiB,EAAE,SAAS,CAAC,IAAI;gBACjC,QAAQ,EAAE,IAAI,CAAC,iBAAiB;gBAChC,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;oBAClC,EAAE,EAAE,GAAG,IAAI,CAAC,aAAa,IAAI,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,IAAI,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,kBAAkB,IAAI,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;oBACtK,WAAW,EAAE,QAAQ,CAAC,YAAY;oBAClC,MAAM,EAAE,SAAkB;oBAC1B,QAAQ,EAAE,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC;oBAClE,WAAW,EAAE,QAAQ,CAAC,WAAW;oBACjC,QAAQ,EAAE,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC;iBACrD,CAAC,CAAC;aACJ,CAAA;QACH,CAAC;QAED,MAAM,eAAe,GAA2B;YAC9C,UAAU,EAAE,IAAI,CAAC,aAAa;YAC9B,iBAAiB,EAAE,SAAS,CAAC,IAAI;YACjC,QAAQ,EAAE,IAAI,CAAC,iBAAiB;YAChC,OAAO,EAAE,EAAE;SACZ,CAAA;QAED,IAAI,CAAC,QAAQ,CAAC,KAAK,CACjB,SAAS,CAAC,MAAM,EAChB,EAAE,IAAI,EAAE,2BAA2B,EAAE,EACrC;YACE,KAAK,EAAE,2BAA2B;YAClC,MAAM,EAAE,qCAAqC;SAC9C,CACF,CAAA;QAED,IAAI,aAAa,GAAG,CAAC,CAAA;QACrB,IAAI,aAAa,GAAG,EAAE,CAAA;QACtB,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE,CAAA;QACvC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,MAAM,cAAc,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YAEvD,MAAM,UAAU,GAAoB;gBAClC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI;gBACrC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,kBAAkB;gBACrD,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU;gBACjD,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI;aAC3B,CAAA;YAED,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE;gBAClC,IAAI,EAAE,GAAG,aAAa,cAAc,QAAQ,CAAC,WAAW,sBAAsB,UAAU,CAAC,IAAI,EAAE;aAChG,CAAC,CAAA;YAEF,IAAI,eAAe,CAAA;YACnB,IAAI,CAAC;gBACH,MAAM,mBAAmB,CAAC,MAAM,CAAC;oBAC/B,EAAE,EAAE,SAAS,CAAC,EAAY;oBAC1B,IAAI,EAAE,cAAc;iBACrB,CAAC,CAAA;gBAEF,MAAM,WAAW,GAAG,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAE,CAAA;gBAE5D,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE;oBAClC,IAAI,EAAE,GAAG,aAAa,WAAW,WAAW,CAAC,IAAI,uBAAuB,QAAQ,CAAC,WAAW,sBAAsB,UAAU,CAAC,IAAI,EAAE;iBACpI,CAAC,CAAA;gBACF,MAAM,UAAU,GAAe,MAAM,cAAc,CAAC,cAAc,CAChE,IAAI,CAAC,iBAAiB,EACtB,WAAW,CACZ,CAAA;gBAED,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CACzC,QAAQ,EACR,UAAU,EACV,UAAU,CACX,CAAA;gBACD,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;gBAE1C,eAAe,GAAG,oBAAoB,UAAU,CAAC,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,EAAE,CAAA;YAC9G,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACxB,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gBAExD,MAAM,QAAQ,GAAG,IAAI,CAAC,yBAAyB,CAC7C,QAAQ,EACR,IAAI,CAAC,gBAAgB,CACtB,CAAA;gBACD,MAAM,YAAY,GAAG,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,CAAA;gBAE/D,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAE,CAAA;gBACpE,MAAM,cAAc,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,UAAU,CAAC,CAAA;gBAElE,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC;oBAC3B,EAAE,EAAE,GAAG,IAAI,CAAC,aAAa,IAAI,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;oBAC1G,WAAW,EAAE,QAAQ,CAAC,YAAY;oBAClC,MAAM,EAAE,cAAc,CAAC,MAAM;oBAC7B,GAAG,CAAC,cAAc,CAAC,YAAY,IAAI;wBACjC,YAAY,EAAE,cAAc,CAAC,YAAY;qBAC1C,CAAC;oBACF,QAAQ;oBACR,WAAW,EAAE,QAAQ,CAAC,WAAW;oBACjC,QAAQ,EAAE,YAAY;iBACvB,CAAC,CAAA;gBACF,eAAe,GAAG,cAAc,CAAC,eAAe,CAAA;YAClD,CAAC;YACD,EAAE,aAAa,CAAA;YACf,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,aAAa,CAAA;YACjD,MAAM,YAAY,GAAG,OAAO,GAAG,aAAa,CAAA;YAC5C,MAAM,gBAAgB,GAAG,SAAS,CAAC,MAAM,GAAG,aAAa,CAAA;YACzD,MAAM,WAAW,GAAG,YAAY,GAAG,gBAAgB,CAAA;YACnD,aAAa,GAAG,cAAc,cAAc,CAAC,WAAW,CAAC,KAAK,CAAA;YAC9D,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE;gBAClC,IAAI,EAAE,GAAG,aAAa,GAAG,eAAe,EAAE;aAC3C,CAAC,CAAA;QACJ,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YACnB,IAAI,EAAE,yBAAyB;SAChC,CAAC,CAAA;QAEF,IAAI,CAAC;YACH,IAAI,CAAC,OAAO,CAAC,KAAK,CAChB,iBAAiB,IAAI,CAAC,aAAa,mCAAmC,EACtE,SAAS,EACT;gBACE,MAAM,EAAE,IAAI;aACb,CACF,CAAA;YACD,MAAM,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;YAC3C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAA;QACnE,CAAC;QAED,OAAO,eAAe,CAAA;IACxB,CAAC;IAEM,cAAc,CAAC,cAAsC;QAC1D,MAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,CAChD,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,cAAc,CAC3C,CAAA;QACD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,CAAA;QACV,CAAC;QACD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAA;QAC1D,OAAO,CACL,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;YACtE,YAAY,CAAC,MAAM,CAAC;YACtB,GAAG,CACJ,CAAA;IACH,CAAC;IAEO,iBAAiB,CACvB,QAAsB,EACtB,UAAsB,EACtB,UAA2B;QAE3B,MAAM,cAAc,GAClB,UAAU,CAAC,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAA;QAEjE,MAAM,QAAQ,GAAG,IAAI,CAAC,yBAAyB,CAC7C,QAAQ,EACR,IAAI,CAAC,gBAAgB,CACtB,CAAA;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,CAAA;QAC/D,OAAO;YACL,EAAE,EAAE,GAAG,IAAI,CAAC,aAAa,IAAI,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;YAC1G,WAAW,EAAE,QAAQ,CAAC,YAAY;YAClC,MAAM,EAAE,cAAc;YACtB,QAAQ;YACR,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,QAAQ,EAAE,YAAY;SACvB,CAAA;IACH,CAAC;IAEO,yBAAyB,CAC/B,QAAsB,EACtB,aAAqB;QAKrB,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAA;QACxC,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAA;QAEpC,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,gCAAgC,CACpD,aAAa,EACb,KAAK,CAAC,UAAU,CACjB,CAAA;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,gCAAgC,CAClD,aAAa,EACb,GAAG,CAAC,SAAS,GAAG,CAAC,CAClB,CAAA;YAED,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,CAAA;QACzC,CAAC;QAED,MAAM,IAAI,KAAK,CACb,8CAA8C,QAAQ,CAAC,YAAY,EAAE,CACtE,CAAA;IACH,CAAC;IAEO,gCAAgC,CACtC,aAAqB,EACrB,aAAqB;QAErB,MAAM,eAAe,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC,EAAE,aAAa,CAAC,CAAA;QACjE,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAEzC,OAAO;YACL,IAAI,EAAE,KAAK,CAAC,MAAM;YAClB,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;SAC3C,CAAA;IACH,CAAC;IAEO,2BAA2B,CAAC,QAAsB;QACxD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAA;QACxC,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAA;QAEpC,IACE,KAAK,CAAC,UAAU,KAAK,SAAS;YAC9B,GAAG,CAAC,SAAS,KAAK,SAAS;YAC3B,IAAI,CAAC,gBAAgB,EACrB,CAAC;YACD,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CACpC,KAAK,CAAC,UAAU,EAChB,GAAG,CAAC,SAAS,GAAG,CAAC,CAClB,CAAA;QACH,CAAC;QAED,MAAM,IAAI,KAAK,CACb,iDAAiD,QAAQ,CAAC,YAAY,EAAE,CACzE,CAAA;IACH,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ export declare const timeExecution: <T>(fn: () => Promise<T>) => Promise<{
2
+ result: T;
3
+ durationMs: number;
4
+ }>;
5
+ export declare const formatDuration: (ms: number) => string;
@@ -0,0 +1,21 @@
1
+ export const timeExecution = async (fn) => {
2
+ const start = performance.now();
3
+ const result = await fn();
4
+ const durationMs = performance.now() - start;
5
+ return { result, durationMs };
6
+ };
7
+ export const formatDuration = (ms) => {
8
+ const totalSeconds = Math.floor(ms / 1000);
9
+ const seconds = totalSeconds % 60;
10
+ const totalMinutes = Math.floor(totalSeconds / 60);
11
+ const minutes = totalMinutes % 60;
12
+ const hours = Math.floor(totalMinutes / 60);
13
+ if (hours > 0) {
14
+ return `~${hours}h ${minutes}m ${seconds}s`;
15
+ }
16
+ if (minutes > 0) {
17
+ return `~${minutes}m ${seconds}s`;
18
+ }
19
+ return `~${seconds}s`;
20
+ };
21
+ //# sourceMappingURL=timeUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeUtils.js","sourceRoot":"","sources":["../../src/service/timeUtils.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAChC,EAAoB,EACwB,EAAE;IAC9C,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAA;IAC/B,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,CAAA;IACzB,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAA;IAC5C,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAA;AAC/B,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAAU,EAAU,EAAE;IACnD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAA;IAC1C,MAAM,OAAO,GAAG,YAAY,GAAG,EAAE,CAAA;IACjC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,CAAA;IAClD,MAAM,OAAO,GAAG,YAAY,GAAG,EAAE,CAAA;IACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,CAAA;IAE3C,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,OAAO,IAAI,KAAK,KAAK,OAAO,KAAK,OAAO,GAAG,CAAA;IAC7C,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,OAAO,IAAI,OAAO,KAAK,OAAO,GAAG,CAAA;IACnC,CAAC;IACD,OAAO,IAAI,OAAO,GAAG,CAAA;AACvB,CAAC,CAAA"}
@@ -2,4 +2,5 @@ export interface ApexMutationParameter {
2
2
  apexClassName: string;
3
3
  apexTestClassName: string;
4
4
  reportDir: string;
5
+ dryRun?: boolean;
5
6
  }
@@ -5,7 +5,7 @@ export interface ApexMutationTestResult {
5
5
  mutants: {
6
6
  id: string;
7
7
  mutatorName: string;
8
- status: 'Killed' | 'Survived' | 'NoCoverage' | 'CompileError' | 'RuntimeError';
8
+ status: 'Killed' | 'Survived' | 'NoCoverage' | 'CompileError' | 'RuntimeError' | 'Pending';
9
9
  statusReason?: string;
10
10
  location: {
11
11
  start: {
@@ -26,6 +26,10 @@ Path to the directory where mutation test reports will be generated
26
26
 
27
27
  <%= config.bin %> <%= command.id %> --apex-class MyClass --test-class MyClassTest
28
28
 
29
+ - Preview mutations without running them:
30
+
31
+ <%= config.bin %> <%= command.id %> --apex-class MyClass --test-class MyClassTest --dry-run
32
+
29
33
  # info.reportGenerated
30
34
 
31
35
  Report has been generated at this location: %s
@@ -34,6 +38,10 @@ Report has been generated at this location: %s
34
38
 
35
39
  Running mutation testing for "%s" with "%s" test class
36
40
 
41
+ # info.DryRunCommandIsRunning
42
+
43
+ Running dry run mutation testing for "%s" with "%s" test class
44
+
37
45
  # info.CommandSuccess
38
46
 
39
47
  Mutation score: %s%
@@ -55,3 +63,19 @@ No test coverage found for '%s'. Ensure '%s' tests exercise the code you want to
55
63
  # error.noMutations
56
64
 
57
65
  No mutations could be generated for '%s'. %s line(s) covered but no mutable patterns found.
66
+
67
+ # flags.dry-run.summary
68
+
69
+ Preview mutations without deploying or running tests
70
+
71
+ # error.compilabilityCheckFailed
72
+
73
+ The Apex class '%s' does not compile on the target org. This can happen when a dependency was modified after the class was last deployed. Fix compilation errors before running mutation testing.\nError: %s
74
+
75
+ # info.timeEstimate
76
+
77
+ Estimated time: %s
78
+
79
+ # info.timeEstimateBreakdown
80
+
81
+ Deploy: %s/mutant | Test: %s/mutant | Mutants: %s
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "apex-mutation-testing",
3
- "version": "1.4.0",
3
+ "version": "1.5.0-dev-99.22440267013-1",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "apex-mutation-testing",
9
- "version": "1.4.0",
9
+ "version": "1.5.0-dev-99.22440267013-1",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
12
  "@oclif/core": "^4.8.1",
13
13
  "@salesforce/apex-node": "^8.4.10",
14
- "@salesforce/core": "^8.26.2",
14
+ "@salesforce/core": "^8.26.3",
15
15
  "@salesforce/sf-plugins-core": "^12.2.6",
16
16
  "@stryker-mutator/core": "^9.5.1",
17
17
  "antlr4ts": "^0.5.0-alpha.4",
@@ -5322,9 +5322,9 @@
5322
5322
  }
5323
5323
  },
5324
5324
  "node_modules/@salesforce/core": {
5325
- "version": "8.26.2",
5326
- "resolved": "https://registry.npmjs.org/@salesforce/core/-/core-8.26.2.tgz",
5327
- "integrity": "sha512-P1otybl1d+sXg5FORl3PD82TzaOOP5aH1j0UVkpGf1p4BLw6VD0mJekS4mDc0pz6UKK2iIt0CFxXAEMKa/YtBA==",
5325
+ "version": "8.26.3",
5326
+ "resolved": "https://registry.npmjs.org/@salesforce/core/-/core-8.26.3.tgz",
5327
+ "integrity": "sha512-lPNFHjHFeC4V3KuH88xuVLGhAqmtM8meUcvyejNh8bQ5w642APKRTGDZ0pOnWHJAe5SQy7cSQ1WqvO3V73ouQw==",
5328
5328
  "license": "BSD-3-Clause",
5329
5329
  "dependencies": {
5330
5330
  "@jsforce/jsforce-node": "^3.10.13",
@@ -5,7 +5,8 @@
5
5
  "args": {},
6
6
  "description": "The Apex Mutation Testing plugin helps evaluate the effectiveness of your Apex test classes by introducing mutations into your code and checking if your tests can detect these changes:\n\nThe plugin provides insights into how trustworthy your test suite is by measuring its ability to catch intentional code changes.",
7
7
  "examples": [
8
- "Run mutation testing on a class with its test file:\n<%= config.bin %> <%= command.id %> --apex-class MyClass --test-class MyClassTest"
8
+ "Run mutation testing on a class with its test file:\n<%= config.bin %> <%= command.id %> --apex-class MyClass --test-class MyClassTest",
9
+ "Preview mutations without running them:\n<%= config.bin %> <%= command.id %> --apex-class MyClass --test-class MyClassTest --dry-run"
9
10
  ],
10
11
  "flags": {
11
12
  "json": {
@@ -50,6 +51,13 @@
50
51
  "multiple": false,
51
52
  "type": "option"
52
53
  },
54
+ "dry-run": {
55
+ "char": "d",
56
+ "name": "dry-run",
57
+ "summary": "Preview mutations without deploying or running tests",
58
+ "allowNo": false,
59
+ "type": "boolean"
60
+ },
53
61
  "target-org": {
54
62
  "char": "o",
55
63
  "name": "target-org",
@@ -115,5 +123,5 @@
115
123
  ]
116
124
  }
117
125
  },
118
- "version": "1.4.0"
126
+ "version": "1.5.0-dev-99.22440267013-1"
119
127
  }
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "apex-mutation-testing",
3
3
  "description": "Apex mutation testing plugin",
4
- "version": "1.4.0",
4
+ "version": "1.5.0-dev-99.22440267013-1",
5
5
  "dependencies": {
6
6
  "@oclif/core": "^4.8.1",
7
7
  "@salesforce/apex-node": "^8.4.10",
8
- "@salesforce/core": "^8.26.2",
8
+ "@salesforce/core": "^8.26.3",
9
9
  "@salesforce/sf-plugins-core": "^12.2.6",
10
10
  "@stryker-mutator/core": "^9.5.1",
11
11
  "antlr4ts": "^0.5.0-alpha.4",
@@ -65,8 +65,9 @@
65
65
  "dependencies:upgrade": "npx npm-check-updates -u ; npm install ; npm audit fix",
66
66
  "deploy:testclasses": "sf project deploy start -d test/classes",
67
67
  "test:e2e:setup": "sf project deploy start -d test/classes -o e2e-test-org",
68
- "test:e2e:run": "sf apex mutation test run -o e2e-test-org -c Mutation -t MutationTest -r reports/e2e --json > test/e2e/snapshot.json",
69
- "test:e2e:run:local": "node ./bin/run.js apex mutation test run -o apex-mutation-testing -c Mutation -t MutationTest -r reports/e2e --json > test/e2e/snapshot.json",
68
+ "test:e2e:run": "sf apex mutation test run -o e2e-test-org -c Mutation -t MutationTest -r test/e2e && npm run test:e2e:normalize",
69
+ "test:e2e:run:local": "node ./bin/run.js apex mutation test run -o apex-mutation-testing -c Mutation -t MutationTest -r test/e2e && npm run test:e2e:normalize",
70
+ "test:e2e:normalize": "node tooling/normalize-e2e-snapshot.mjs",
70
71
  "test:e2e:validate": "git diff --quiet test/e2e/",
71
72
  "test:e2e:teardown": "sf project deploy start -d test/classes -o e2e-test-org",
72
73
  "test:e2e": "npm run test:e2e:setup && npm run test:e2e:run && npm run test:e2e:validate; npm run test:e2e:teardown",