apex-mutation-testing 1.6.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +34 -3
  2. package/lib/adapter/apexClassRepository.d.ts +14 -1
  3. package/lib/adapter/apexClassRepository.js +93 -31
  4. package/lib/adapter/apexClassRepository.js.map +1 -1
  5. package/lib/commands/apex/mutation/test/run.d.ts +1 -0
  6. package/lib/commands/apex/mutation/test/run.js +4 -0
  7. package/lib/commands/apex/mutation/test/run.js.map +1 -1
  8. package/lib/mutator/experimentalSwitchMutator.d.ts +7 -0
  9. package/lib/mutator/experimentalSwitchMutator.js +18 -1
  10. package/lib/mutator/experimentalSwitchMutator.js.map +1 -1
  11. package/lib/mutator/mutationListener.d.ts +2 -0
  12. package/lib/mutator/mutationListener.js +20 -8
  13. package/lib/mutator/mutationListener.js.map +1 -1
  14. package/lib/reporter/HTMLReporter.js +68 -12
  15. package/lib/reporter/HTMLReporter.js.map +1 -1
  16. package/lib/service/configReader.js +9 -1
  17. package/lib/service/configReader.js.map +1 -1
  18. package/lib/service/exactColoring.d.ts +25 -0
  19. package/lib/service/exactColoring.js +143 -0
  20. package/lib/service/exactColoring.js.map +1 -0
  21. package/lib/service/groupExecutor.d.ts +29 -0
  22. package/lib/service/groupExecutor.js +194 -0
  23. package/lib/service/groupExecutor.js.map +1 -0
  24. package/lib/service/mutantGenerator.d.ts +14 -4
  25. package/lib/service/mutantGenerator.js +42 -13
  26. package/lib/service/mutantGenerator.js.map +1 -1
  27. package/lib/service/mutationGrouper.d.ts +22 -0
  28. package/lib/service/mutationGrouper.js +130 -0
  29. package/lib/service/mutationGrouper.js.map +1 -0
  30. package/lib/service/mutationLocation.d.ts +12 -0
  31. package/lib/service/mutationLocation.js +54 -0
  32. package/lib/service/mutationLocation.js.map +1 -0
  33. package/lib/service/mutationTestingService.d.ts +3 -7
  34. package/lib/service/mutationTestingService.js +83 -158
  35. package/lib/service/mutationTestingService.js.map +1 -1
  36. package/lib/service/timeUtils.d.ts +1 -0
  37. package/lib/service/timeUtils.js +8 -0
  38. package/lib/service/timeUtils.js.map +1 -1
  39. package/lib/service/typeDiscoverer.d.ts +12 -0
  40. package/lib/service/typeDiscoverer.js +46 -2
  41. package/lib/service/typeDiscoverer.js.map +1 -1
  42. package/lib/type/ApexMutationParameter.d.ts +1 -0
  43. package/messages/apex.mutation.test.run.md +13 -1
  44. package/npm-shrinkwrap.json +1528 -1353
  45. package/oclif.manifest.json +7 -1
  46. package/package.json +18 -17
@@ -14,6 +14,7 @@ export class ConfigReader {
14
14
  threshold: parameter.threshold ?? fileConfig?.threshold,
15
15
  skipPatterns: parameter.skipPatterns ?? fileConfig?.skipPatterns,
16
16
  lines: parameter.lines ?? fileConfig?.lines,
17
+ mutationGrouping: parameter.mutationGrouping ?? fileConfig?.mutationGrouping,
17
18
  };
18
19
  this.validate(resolved);
19
20
  return resolved;
@@ -41,12 +42,19 @@ export class ConfigReader {
41
42
  for (const range of lines) {
42
43
  if (range.includes('-')) {
43
44
  const [start, end] = range.split('-').map(Number);
45
+ if (!Number.isFinite(start) || !Number.isFinite(end) || start > end) {
46
+ throw new Error(`Invalid line range '${range}': must be a number or range (e.g., '10' or '1-10')`);
47
+ }
44
48
  for (let i = start; i <= end; i++) {
45
49
  result.add(i);
46
50
  }
47
51
  }
48
52
  else {
49
- result.add(Number(range));
53
+ const value = Number(range);
54
+ if (!Number.isFinite(value)) {
55
+ throw new Error(`Invalid line range '${range}': must be a number or range (e.g., '10' or '1-10')`);
56
+ }
57
+ result.add(value);
50
58
  }
51
59
  }
52
60
  return result;
@@ -1 +1 @@
1
- {"version":3,"file":"configReader.js","sourceRoot":"","sources":["../../src/service/configReader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"configReader.js","sourceRoot":"","sources":["../../src/service/configReader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ export declare const buildAdjacency: (tests: ReadonlyArray<Set<string>>) => number[][];
2
+ export declare const tryKColoring: (adjacency: ReadonlyArray<ReadonlyArray<number>>, n: number, k: number, witness: ReadonlyArray<number>) => number[] | null;
3
+ export type SolveColoringInput = {
4
+ adjacency: ReadonlyArray<ReadonlyArray<number>>;
5
+ n: number;
6
+ lowerBound: number;
7
+ dsaturColors: number;
8
+ witness: ReadonlyArray<number>;
9
+ dsaturColoring: ReadonlyArray<number>;
10
+ };
11
+ export type SolveColoringResult = {
12
+ coloring: ReadonlyArray<number>;
13
+ lowerBound: number;
14
+ optimal: boolean;
15
+ };
16
+ type ExactDecision = {
17
+ useGroups: 'exact';
18
+ suffix: string;
19
+ } | {
20
+ useGroups: 'dsatur';
21
+ suffix: string;
22
+ };
23
+ export declare const decideExactOutcome: (exact: SolveColoringResult, dsaturColors: number) => ExactDecision;
24
+ export declare const solveColoring: (input: SolveColoringInput) => SolveColoringResult;
25
+ export {};
@@ -0,0 +1,143 @@
1
+ // Exact graph k-coloring via DSATUR-style backtracking. Pure TypeScript,
2
+ // no external SAT solver — at our scale (n ≤ 200) the witness clique
3
+ // from D2 already fixes the most-constrained vertices, so the backtracking
4
+ // search converges fast on real Apex graphs.
5
+ // Build the conflict-graph adjacency list. Vertex i and j are adjacent iff
6
+ // `tests(i) ∩ tests(j) ≠ ∅`. Same definition as in mutationGrouper; lives
7
+ // here so the exact-coloring driver and the DSATUR driver share one source
8
+ // of truth.
9
+ export const buildAdjacency = (tests) => {
10
+ const n = tests.length;
11
+ const adjacency = Array.from({ length: n }, () => []);
12
+ for (let i = 0; i < n; ++i) {
13
+ for (let j = i + 1; j < n; ++j) {
14
+ if (intersects(tests[i], tests[j])) {
15
+ adjacency[i].push(j);
16
+ adjacency[j].push(i);
17
+ }
18
+ }
19
+ }
20
+ return adjacency;
21
+ };
22
+ const intersects = (a, b) => {
23
+ const [small, large] = a.size <= b.size ? [a, b] : [b, a];
24
+ for (const t of small) {
25
+ if (large.has(t))
26
+ return true;
27
+ }
28
+ return false;
29
+ };
30
+ // Decide whether the graph admits a valid k-coloring; return one if it does,
31
+ // `null` otherwise. Pre-colors the witness clique (whose vertices must
32
+ // receive distinct colors in any valid coloring), then runs DSATUR-style
33
+ // backtracking on the remaining vertices: at each step, pick the most
34
+ // constrained uncolored vertex (highest saturation, then highest degree,
35
+ // then lowest input index) and try the smallest available color first.
36
+ export const tryKColoring = (adjacency, n, k, witness) => {
37
+ if (k < witness.length)
38
+ return null;
39
+ const color = new Array(n).fill(-1);
40
+ for (let i = 0; i < witness.length; ++i)
41
+ color[witness[i]] = i;
42
+ const degree = adjacency.map(neighbors => neighbors.length);
43
+ return backtrack(adjacency, n, k, color, degree);
44
+ };
45
+ const backtrack = (adjacency, n, k, color, degree) => {
46
+ const v = pickMostConstrained(adjacency, color, degree);
47
+ if (v === -1)
48
+ return color.slice();
49
+ const used = neighborColors(adjacency[v], color);
50
+ if (used.size >= k)
51
+ return null;
52
+ for (let c = 0; c < k; ++c) {
53
+ if (used.has(c))
54
+ continue;
55
+ color[v] = c;
56
+ // Forward checking: skip the recurse if assigning c to v would strand
57
+ // some uncolored neighbor (no color left for it). Catches the dead end
58
+ // one level earlier, dodging an entire `pickMostConstrained` scan.
59
+ if (!wouldStrandNeighbor(adjacency, color, v, k)) {
60
+ const result = backtrack(adjacency, n, k, color, degree);
61
+ if (result !== null)
62
+ return result;
63
+ }
64
+ }
65
+ color[v] = -1;
66
+ return null;
67
+ };
68
+ // True iff some uncolored neighbor of `v` now has zero available colors —
69
+ // i.e. every color in [0, k) appears on one of its colored neighbors.
70
+ const wouldStrandNeighbor = (adjacency, color, v, k) => {
71
+ for (const u of adjacency[v]) {
72
+ if (color[u] !== -1)
73
+ continue;
74
+ if (neighborColors(adjacency[u], color).size >= k)
75
+ return true;
76
+ }
77
+ return false;
78
+ };
79
+ // DSATUR vertex selection: highest saturation (number of distinct neighbor
80
+ // colors), tiebreak on degree, tiebreak on input index. Strict `>`
81
+ // comparisons keep the lowest unprocessed index winning ties — same
82
+ // determinism contract as `mutationGrouper.pickNextVertex`.
83
+ const pickMostConstrained = (adjacency, color, degree) => {
84
+ let pick = -1;
85
+ let pickSaturation = -1;
86
+ for (let v = 0; v < color.length; ++v) {
87
+ if (color[v] !== -1)
88
+ continue;
89
+ const saturation = neighborColors(adjacency[v], color).size;
90
+ if (pick === -1 ||
91
+ saturation > pickSaturation ||
92
+ (saturation === pickSaturation && degree[v] > degree[pick])) {
93
+ pick = v;
94
+ pickSaturation = saturation;
95
+ }
96
+ }
97
+ return pick;
98
+ };
99
+ const neighborColors = (neighbors, color) => {
100
+ const used = new Set();
101
+ for (const u of neighbors) {
102
+ if (color[u] !== -1)
103
+ used.add(color[u]);
104
+ }
105
+ return used;
106
+ };
107
+ export const decideExactOutcome = (exact, dsaturColors) => {
108
+ const exactColors = exact.coloring.reduce((m, c) => (c > m ? c : m), -1) + 1;
109
+ if (exactColors < dsaturColors) {
110
+ return {
111
+ useGroups: 'exact',
112
+ suffix: ` — exact: improved by ${dsaturColors - exactColors} deploy(s)`,
113
+ };
114
+ }
115
+ return { useGroups: 'dsatur', suffix: ' — exact: confirmed optimal' };
116
+ };
117
+ // Binary search on k = chromatic number, using `tryKColoring` to certify
118
+ // or improve the DSATUR result. Runs every iteration to completion. The
119
+ // loop exits when lo == hi (provably optimal). Result is never worse than
120
+ // DSATUR alone.
121
+ export const solveColoring = (input) => {
122
+ const { adjacency, n, dsaturColors, witness, dsaturColoring } = input;
123
+ const initialLowerBound = input.lowerBound;
124
+ if (initialLowerBound < witness.length) {
125
+ throw new Error(`solveColoring: lowerBound=${initialLowerBound} is below witness size ${witness.length}`);
126
+ }
127
+ let lo = initialLowerBound;
128
+ let hi = dsaturColors;
129
+ let best = dsaturColoring.slice();
130
+ while (lo < hi) {
131
+ const k = Math.floor((lo + hi) / 2);
132
+ const coloring = tryKColoring(adjacency, n, k, witness);
133
+ if (coloring !== null) {
134
+ best = coloring;
135
+ hi = k;
136
+ }
137
+ else {
138
+ lo = k + 1;
139
+ }
140
+ }
141
+ return { coloring: best, lowerBound: lo, optimal: lo === hi };
142
+ };
143
+ //# sourceMappingURL=exactColoring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exactColoring.js","sourceRoot":"","sources":["../../src/service/exactColoring.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { Messages } from '@salesforce/core';
2
+ import { Progress } from '@salesforce/sf-plugins-core';
3
+ import type { CommonTokenStream } from 'apex-parser';
4
+ import { ApexClassRepository } from '../adapter/apexClassRepository.js';
5
+ import { ApexTestRunner } from '../adapter/apexTestRunner.js';
6
+ import { ApexClass } from '../type/ApexClass.js';
7
+ import { ApexMutationTestResult } from '../type/ApexMutationTestResult.js';
8
+ import { MutantGenerator } from './mutantGenerator.js';
9
+ import { MutationGroup } from './mutationGrouper.js';
10
+ export declare class GroupExecutor {
11
+ private readonly apexClass;
12
+ private readonly apexClassName;
13
+ private readonly apexTestClassName;
14
+ private readonly apexClassContent;
15
+ private readonly tokenStream;
16
+ private readonly testMethodsPerLine;
17
+ private readonly mutantGenerator;
18
+ private readonly apexTestRunner;
19
+ private readonly apexClassRepository;
20
+ private readonly progress;
21
+ private readonly messages;
22
+ constructor(apexClass: ApexClass, apexClassName: string, apexTestClassName: string, apexClassContent: string, tokenStream: CommonTokenStream, testMethodsPerLine: Map<number, Set<string>>, mutantGenerator: MutantGenerator, apexTestRunner: ApexTestRunner, apexClassRepository: ApexClassRepository, progress: Progress, messages: Messages<string>);
23
+ evaluate(group: MutationGroup, completedSoFar: number, loopStartTime: number, totalMutations: number): Promise<ApexMutationTestResult['mutants']>;
24
+ private announceGroup;
25
+ private evaluateGroup;
26
+ private hasCoverageGap;
27
+ private buildGroupProgressMessage;
28
+ private buildMutantResult;
29
+ }
@@ -0,0 +1,194 @@
1
+ import { calculateMutationPosition, extractMutationOriginalText, } from './mutationLocation.js';
2
+ import { formatRemainingTime } from './timeUtils.js';
3
+ // Classify a deploy/test-run error into a per-mutant outcome plus a progress
4
+ // message. The three branches match Salesforce-side failure modes: a compile
5
+ // error from the Tooling API deploy, a governor-limit kill (which is a real
6
+ // kill, not a runtime error), and any other thrown error.
7
+ const classifyError = (error, mutation) => {
8
+ const message = error instanceof Error ? error.message : String(error);
9
+ if (message.startsWith('Deployment failed:')) {
10
+ return {
11
+ status: 'CompileError',
12
+ statusReason: message,
13
+ progressMessage: `Mutation result: compile error at line ${mutation.target.startToken.line}`,
14
+ };
15
+ }
16
+ if (message.includes('LIMIT_USAGE_FOR_NS')) {
17
+ return {
18
+ status: 'Killed',
19
+ progressMessage: `Mutation result: mutant killed (${message})`,
20
+ };
21
+ }
22
+ return {
23
+ status: 'RuntimeError',
24
+ statusReason: message,
25
+ progressMessage: `Mutation result: runtime error (${message})`,
26
+ };
27
+ };
28
+ // Owns per-iteration evaluation: deploy mutated source, run union of covering
29
+ // tests, attribute outcomes per mutation. A singleton group (k=1) is the leaf
30
+ // case — error classification and status determination live here. Multi-mutation
31
+ // groups (k>1) recurse into singletons on any failure (deploy, run, missing
32
+ // outcome). All progress UI for a single iteration is emitted from this class
33
+ // so the lifecycle service stays focused on orchestration.
34
+ export class GroupExecutor {
35
+ apexClass;
36
+ apexClassName;
37
+ apexTestClassName;
38
+ apexClassContent;
39
+ tokenStream;
40
+ testMethodsPerLine;
41
+ mutantGenerator;
42
+ apexTestRunner;
43
+ apexClassRepository;
44
+ progress;
45
+ messages;
46
+ constructor(apexClass, apexClassName, apexTestClassName, apexClassContent, tokenStream, testMethodsPerLine, mutantGenerator, apexTestRunner, apexClassRepository, progress, messages) {
47
+ this.apexClass = apexClass;
48
+ this.apexClassName = apexClassName;
49
+ this.apexTestClassName = apexTestClassName;
50
+ this.apexClassContent = apexClassContent;
51
+ this.tokenStream = tokenStream;
52
+ this.testMethodsPerLine = testMethodsPerLine;
53
+ this.mutantGenerator = mutantGenerator;
54
+ this.apexTestRunner = apexTestRunner;
55
+ this.apexClassRepository = apexClassRepository;
56
+ this.progress = progress;
57
+ this.messages = messages;
58
+ }
59
+ async evaluate(group, completedSoFar, loopStartTime, totalMutations) {
60
+ const remainingText = formatRemainingTime(loopStartTime, completedSoFar, totalMutations);
61
+ this.announceGroup(group, remainingText, completedSoFar);
62
+ const { mutantResults, progressMessage } = await this.evaluateGroup(group, completedSoFar);
63
+ const newCompleted = completedSoFar + group.mutations.length;
64
+ const updatedRemainingText = formatRemainingTime(loopStartTime, newCompleted, totalMutations);
65
+ this.progress.update(newCompleted, {
66
+ info: `${updatedRemainingText}${progressMessage}`,
67
+ });
68
+ return mutantResults;
69
+ }
70
+ announceGroup(group, remainingText, completedSoFar) {
71
+ if (group.mutations.length === 1) {
72
+ const m = group.mutations[0];
73
+ this.progress.update(completedSoFar, {
74
+ info: `${remainingText}Deploying "${m.replacement}" mutation at line ${m.target.startToken.line}`,
75
+ });
76
+ const testMethods = this.testMethodsPerLine.get(m.target.startToken.line);
77
+ if (testMethods) {
78
+ this.progress.update(completedSoFar, {
79
+ info: `${remainingText}Running ${testMethods.size} tests methods for "${m.replacement}" mutation at line ${m.target.startToken.line}`,
80
+ });
81
+ }
82
+ return;
83
+ }
84
+ const lines = group.mutations
85
+ .map(m => m.target.startToken.line)
86
+ .sort((a, b) => a - b)
87
+ .join(', ');
88
+ this.progress.update(completedSoFar, {
89
+ info: `${remainingText}Evaluating ${group.mutations.length} mutations on lines ${lines}`,
90
+ });
91
+ }
92
+ async evaluateGroup(group, completedSoFar) {
93
+ const mutated = this.mutantGenerator.mutateMany(group.mutations, this.tokenStream);
94
+ let testResult;
95
+ let batchError;
96
+ try {
97
+ await this.apexClassRepository.update({
98
+ Id: this.apexClass.Id,
99
+ Body: mutated,
100
+ });
101
+ testResult = await this.apexTestRunner.runTestMethods(this.apexTestClassName, group.testMethods);
102
+ }
103
+ catch (error) {
104
+ batchError = error;
105
+ }
106
+ // For k>1, a batch error or a coverage gap (test runner did not report
107
+ // every expected method) makes attribution ambiguous. Recurse with each
108
+ // mutation as its own singleton group; each child call hits the leaf and
109
+ // either succeeds or classifies its error directly.
110
+ if (group.mutations.length > 1 &&
111
+ (batchError !== undefined ||
112
+ this.hasCoverageGap(testResult, group.testMethods))) {
113
+ this.progress.update(completedSoFar, {
114
+ info: this.messages.getMessage('info.groupingFallback', [
115
+ String(group.mutations.length),
116
+ ]),
117
+ });
118
+ const fallbackResults = [];
119
+ for (const m of group.mutations) {
120
+ const singleton = {
121
+ mutations: [m],
122
+ // extractCoveredLines guarantees the line is in the map.
123
+ testMethods: this.testMethodsPerLine.get(m.target.startToken.line),
124
+ };
125
+ const { mutantResults } = await this.evaluateGroup(singleton, completedSoFar);
126
+ fallbackResults.push(...mutantResults);
127
+ }
128
+ return {
129
+ mutantResults: fallbackResults,
130
+ progressMessage: `Fallback for group of ${group.mutations.length} complete`,
131
+ };
132
+ }
133
+ // Leaf for k=1 with caught error: classify the error directly. (k>1 with
134
+ // an error was handled above by recursing into singletons.)
135
+ if (batchError !== undefined) {
136
+ const mutation = group.mutations[0];
137
+ const c = classifyError(batchError, mutation);
138
+ return {
139
+ mutantResults: [
140
+ this.buildMutantResult(mutation, c.status, c.statusReason),
141
+ ],
142
+ progressMessage: c.progressMessage,
143
+ };
144
+ }
145
+ // Success path. Per-method outcomes when present (required for k>1
146
+ // attribution); fall back to summary-derived outcome when the test
147
+ // runner did not report per-method data (legacy behaviour for k=1).
148
+ const outcomeByMethod = new Map((testResult.tests ?? []).map(t => [t.methodName, t.outcome]));
149
+ const summaryFallback = testResult.summary.outcome === 'Passed' ? 'Pass' : 'Fail';
150
+ const mutantResults = group.mutations.map(m => {
151
+ const myMethods = this.testMethodsPerLine.get(m.target.startToken.line) ??
152
+ new Set();
153
+ // No covering tests (only possible in mocked or uncovered-line scenarios)
154
+ // → fall back to the summary outcome so behaviour matches the legacy
155
+ // evaluateMutation path.
156
+ const killed = myMethods.size === 0
157
+ ? summaryFallback !== 'Pass'
158
+ : [...myMethods].some(name => (outcomeByMethod.get(name) ?? summaryFallback) !== 'Pass');
159
+ return this.buildMutantResult(m, killed ? 'Killed' : 'Survived');
160
+ });
161
+ return {
162
+ mutantResults,
163
+ progressMessage: this.buildGroupProgressMessage(mutantResults),
164
+ };
165
+ }
166
+ hasCoverageGap(testResult, expectedMethods) {
167
+ const reported = new Set(testResult.tests.map(t => t.methodName));
168
+ for (const name of expectedMethods) {
169
+ if (!reported.has(name))
170
+ return true;
171
+ }
172
+ return false;
173
+ }
174
+ buildGroupProgressMessage(mutantResults) {
175
+ if (mutantResults.length === 1) {
176
+ return `Mutation result: ${mutantResults[0].status === 'Survived' ? 'zombie' : 'mutant killed'}`;
177
+ }
178
+ const killed = mutantResults.filter(r => r.status === 'Killed').length;
179
+ return `Group of ${mutantResults.length} evaluated: ${killed} killed, ${mutantResults.length - killed} survived`;
180
+ }
181
+ buildMutantResult(mutation, status, statusReason) {
182
+ const start = mutation.target.startToken;
183
+ return {
184
+ id: `${this.apexClassName}-${start.line}-${start.charPositionInLine}-${start.tokenIndex}-${Date.now()}`,
185
+ mutatorName: mutation.mutationName,
186
+ status,
187
+ ...(statusReason && { statusReason }),
188
+ location: calculateMutationPosition(mutation),
189
+ replacement: mutation.replacement,
190
+ original: extractMutationOriginalText(mutation, this.apexClassContent),
191
+ };
192
+ }
193
+ }
194
+ //# sourceMappingURL=groupExecutor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groupExecutor.js","sourceRoot":"","sources":["../../src/service/groupExecutor.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,25 @@
1
+ import { ParserRuleContext } from 'antlr4ts';
1
2
  import { CommonTokenStream } from 'apex-parser';
2
3
  import { ApexMutation } from '../type/ApexMutation.js';
3
4
  import { TypeRegistry } from '../type/TypeRegistry.js';
4
5
  import type { RE2Instance } from './configReader.js';
6
+ interface MutantGeneratorComputeResult {
7
+ mutations: ApexMutation[];
8
+ tokenStream: CommonTokenStream;
9
+ }
10
+ interface PreParsedInput {
11
+ tree: ParserRuleContext;
12
+ tokenStream: CommonTokenStream;
13
+ }
5
14
  export declare class MutantGenerator {
6
- private tokenStream?;
7
- getTokenStream(): CommonTokenStream | undefined;
8
15
  compute(classContent: string, coveredLines: Set<number>, typeRegistry?: TypeRegistry, mutatorFilter?: {
9
16
  include?: string[];
10
17
  exclude?: string[];
11
- }, skipPatterns?: RE2Instance[], allowedLines?: Set<number>): ApexMutation[];
12
- mutate(mutation: ApexMutation): string;
18
+ }, skipPatterns?: RE2Instance[], allowedLines?: Set<number>, preParsed?: PreParsedInput): MutantGeneratorComputeResult;
19
+ mutate(mutation: ApexMutation, tokenStream: CommonTokenStream): string;
20
+ mutateMany(mutations: ReadonlyArray<ApexMutation>, tokenStream: CommonTokenStream): string;
21
+ private assertNonOverlappingRanges;
13
22
  private filterRegistry;
14
23
  private warnUnknownMutators;
15
24
  }
25
+ export {};
@@ -162,27 +162,56 @@ const MUTATOR_REGISTRY = [
162
162
  },
163
163
  ];
164
164
  export class MutantGenerator {
165
- tokenStream;
166
- getTokenStream() {
167
- return this.tokenStream;
168
- }
169
- compute(classContent, coveredLines, typeRegistry, mutatorFilter, skipPatterns = [], allowedLines) {
170
- const lexer = new ApexLexer(new CaseInsensitiveInputStream('other', classContent));
171
- this.tokenStream = new CommonTokenStream(lexer);
172
- const parser = new ApexParser(this.tokenStream);
173
- const tree = parser.compilationUnit();
165
+ compute(classContent, coveredLines, typeRegistry, mutatorFilter, skipPatterns = [], allowedLines, preParsed) {
166
+ let tree;
167
+ let tokenStream;
168
+ if (preParsed) {
169
+ tree = preParsed.tree;
170
+ tokenStream = preParsed.tokenStream;
171
+ }
172
+ else {
173
+ const lexer = new ApexLexer(new CaseInsensitiveInputStream('other', classContent));
174
+ tokenStream = new CommonTokenStream(lexer);
175
+ const parser = new ApexParser(tokenStream);
176
+ tree = parser.compilationUnit();
177
+ }
174
178
  const filteredRegistry = this.filterRegistry(mutatorFilter);
175
179
  const mutators = filteredRegistry.map(entry => entry.create(typeRegistry));
176
180
  const sourceLines = classContent.split('\n');
177
181
  const listener = new MutationListener(mutators, coveredLines, skipPatterns, allowedLines, sourceLines);
178
182
  ParseTreeWalker.DEFAULT.walk(listener, tree);
179
- return listener.getMutations();
183
+ return { mutations: listener.getMutations(), tokenStream };
184
+ }
185
+ mutate(mutation, tokenStream) {
186
+ return this.mutateMany([mutation], tokenStream);
180
187
  }
181
- mutate(mutation) {
182
- const rewriter = new TokenStreamRewriter(this.tokenStream);
183
- rewriter.replace(mutation.target.startToken.tokenIndex, mutation.target.endToken.tokenIndex, mutation.replacement);
188
+ // Apply N non-overlapping mutations on a single rewriter, producing one
189
+ // mutated source. Used by the grouping path to deploy a batch of independent
190
+ // mutations in one Tooling-API class update.
191
+ //
192
+ // Caller guarantees mutations have non-overlapping token ranges (groupers
193
+ // enforce this naturally — same-line mutations always share covering tests
194
+ // and therefore conflict in the conflict graph). Defensively asserted.
195
+ mutateMany(mutations, tokenStream) {
196
+ this.assertNonOverlappingRanges(mutations);
197
+ const rewriter = new TokenStreamRewriter(tokenStream);
198
+ for (const mutation of mutations) {
199
+ rewriter.replace(mutation.target.startToken.tokenIndex, mutation.target.endToken.tokenIndex, mutation.replacement);
200
+ }
184
201
  return rewriter.getText();
185
202
  }
203
+ assertNonOverlappingRanges(mutations) {
204
+ if (mutations.length < 2)
205
+ return;
206
+ const sorted = [...mutations].sort((a, b) => a.target.startToken.tokenIndex - b.target.startToken.tokenIndex);
207
+ for (let i = 1; i < sorted.length; ++i) {
208
+ const prevEnd = sorted[i - 1].target.endToken.tokenIndex;
209
+ const currStart = sorted[i].target.startToken.tokenIndex;
210
+ if (currStart <= prevEnd) {
211
+ throw new Error(`mutateMany: overlapping token ranges (token ${currStart} ≤ ${prevEnd})`);
212
+ }
213
+ }
214
+ }
186
215
  filterRegistry(mutatorFilter) {
187
216
  if (!mutatorFilter) {
188
217
  return MUTATOR_REGISTRY;
@@ -1 +1 @@
1
- {"version":3,"file":"mutantGenerator.js","sourceRoot":"","sources":["../../src/service/mutantGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAC9C,OAAO,EACL,SAAS,EACT,UAAU,EAEV,0BAA0B,EAC1B,iBAAiB,EACjB,eAAe,GAChB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,0BAA0B,EAAE,MAAM,0CAA0C,CAAA;AACrF,OAAO,EAAE,iCAAiC,EAAE,MAAM,iDAAiD,CAAA;AACnG,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAA;AAEnF,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAA;AAC7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAA;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAA;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAA;AACrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAA;AACjF,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAA;AACnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAA;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAA;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAA;AAC7E,OAAO,EAAE,8BAA8B,EAAE,MAAM,8CAA8C,CAAA;AAC7F,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAA;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAA;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAA;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAA;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAA;AACnF,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAA;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAAE,6BAA6B,EAAE,MAAM,6CAA6C,CAAA;AAC3F,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAA;AAK3E,MAAM,YAAY,GAAG;IACnB,oBAAoB,EAAE,qBAAqB;IAC3C,mBAAmB,EAAE,oBAAoB;IACzC,4BAA4B,EAAE,4BAA4B;IAC1D,gBAAgB,EAAE,iBAAiB;IACnC,kBAAkB,EAAE,mBAAmB;IACvC,gBAAgB,EAAE,iBAAiB;IACnC,YAAY,EAAE,aAAa;IAC3B,kBAAkB,EAAE,mBAAmB;IACvC,mBAAmB,EAAE,oBAAoB;IACzC,YAAY,EAAE,aAAa;IAC3B,SAAS,EAAE,WAAW;IACtB,eAAe,EAAE,gBAAgB;IACjC,gBAAgB,EAAE,iBAAiB;IACnC,gBAAgB,EAAE,iBAAiB;IACnC,yBAAyB,EAAE,yBAAyB;IACpD,eAAe,EAAE,gBAAgB;IACjC,cAAc,EAAE,eAAe;IAC/B,QAAQ,EAAE,UAAU;IACpB,oBAAoB,EAAE,mBAAmB;IACzC,WAAW,EAAE,YAAY;IACzB,mBAAmB,EAAE,oBAAoB;IACzC,iBAAiB,EAAE,kBAAkB;IACrC,MAAM,EAAE,QAAQ;IAChB,WAAW,EAAE,YAAY;IACzB,wBAAwB,EAAE,wBAAwB;IAClD,gBAAgB,EAAE,gBAAgB;CAC1B,CAAA;AASV,MAAM,gBAAgB,GAA2B;IAC/C;QACE,IAAI,EAAE,YAAY,CAAC,oBAAoB;QACvC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,0BAA0B,CAAC,EAAE,CAAC;KACjD;IACD;QACE,IAAI,EAAE,YAAY,CAAC,mBAAmB;QACtC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,yBAAyB,CAAC,EAAE,CAAC;KAChD;IACD;QACE,IAAI,EAAE,YAAY,CAAC,4BAA4B;QAC/C,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,iCAAiC,CAAC,EAAE,CAAC;KACxD;IACD;QACE,IAAI,EAAE,YAAY,CAAC,gBAAgB;QACnC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,sBAAsB,EAAE;KAC3C;IACD;QACE,IAAI,EAAE,YAAY,CAAC,kBAAkB;QACrC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,wBAAwB,EAAE;KAC7C;IACD;QACE,IAAI,EAAE,YAAY,CAAC,gBAAgB;QACnC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,sBAAsB,EAAE;KAC3C;IACD;QACE,IAAI,EAAE,YAAY,CAAC,YAAY;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,kBAAkB,CAAC,EAAE,CAAC;KACzC;IACD;QACE,IAAI,EAAE,YAAY,CAAC,kBAAkB;QACrC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,wBAAwB,EAAE;KAC7C;IACD;QACE,IAAI,EAAE,YAAY,CAAC,mBAAmB;QACtC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,yBAAyB,EAAE;KAC9C;IACD;QACE,IAAI,EAAE,YAAY,CAAC,YAAY;QAC/B,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,kBAAkB,CAAC,EAAE,CAAC;KACzC;IACD;QACE,IAAI,EAAE,YAAY,CAAC,SAAS;QAC5B,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,gBAAgB,EAAE;KACrC;IACD;QACE,IAAI,EAAE,YAAY,CAAC,eAAe;QAClC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,qBAAqB,CAAC,EAAE,CAAC;KAC5C;IACD;QACE,IAAI,EAAE,YAAY,CAAC,gBAAgB;QACnC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,sBAAsB,EAAE;KAC3C;IACD;QACE,IAAI,EAAE,YAAY,CAAC,gBAAgB;QACnC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,sBAAsB,EAAE;KAC3C;IACD;QACE,IAAI,EAAE,YAAY,CAAC,yBAAyB;QAC5C,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,8BAA8B,EAAE;KACnD;IACD;QACE,IAAI,EAAE,YAAY,CAAC,eAAe;QAClC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,qBAAqB,EAAE;KAC1C;IACD;QACE,IAAI,EAAE,YAAY,CAAC,cAAc;QACjC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,oBAAoB,CAAC,EAAE,CAAC;KAC3C;IACD;QACE,IAAI,EAAE,YAAY,CAAC,QAAQ;QAC3B,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,eAAe,CAAC,EAAE,CAAC;KACtC;IACD;QACE,IAAI,EAAE,YAAY,CAAC,oBAAoB;QACvC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,wBAAwB,CAAC,EAAE,CAAC;KAC/C;IACD;QACE,IAAI,EAAE,YAAY,CAAC,WAAW;QAC9B,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,iBAAiB,CAAC,EAAE,CAAC;KACxC;IACD;QACE,IAAI,EAAE,YAAY,CAAC,mBAAmB;QACtC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,yBAAyB,EAAE;KAC9C;IACD;QACE,IAAI,EAAE,YAAY,CAAC,iBAAiB;QACpC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,uBAAuB,EAAE;KAC5C;IACD;QACE,IAAI,EAAE,YAAY,CAAC,MAAM;QACzB,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,aAAa,EAAE;KAClC;IACD;QACE,IAAI,EAAE,YAAY,CAAC,WAAW;QAC9B,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,iBAAiB,CAAC,EAAE,CAAC;KACxC;IACD;QACE,IAAI,EAAE,YAAY,CAAC,wBAAwB;QAC3C,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,6BAA6B,CAAC,EAAE,CAAC;KACpD;IACD;QACE,IAAI,EAAE,YAAY,CAAC,gBAAgB;QACnC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,qBAAqB,EAAE;KAC1C;CACF,CAAA;AAED,MAAM,OAAO,eAAe;IAClB,WAAW,CAAoB;IAEhC,cAAc;QACnB,OAAO,IAAI,CAAC,WAAW,CAAA;IACzB,CAAC;IAEM,OAAO,CACZ,YAAoB,EACpB,YAAyB,EACzB,YAA2B,EAC3B,aAA0D,EAC1D,eAA8B,EAAE,EAChC,YAA0B;QAE1B,MAAM,KAAK,GAAG,IAAI,SAAS,CACzB,IAAI,0BAA0B,CAAC,OAAO,EAAE,YAAY,CAAC,CACtD,CAAA;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAA;QAC/C,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,eAAe,EAAE,CAAA;QAErC,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAA;QAE3D,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAA;QAC1E,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAE5C,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CACnC,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,WAAW,CACZ,CAAA;QAED,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,QAA8B,EAAE,IAAI,CAAC,CAAA;QAElE,OAAO,QAAQ,CAAC,YAAY,EAAE,CAAA;IAChC,CAAC;IAEM,MAAM,CAAC,QAAsB;QAClC,MAAM,QAAQ,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,WAAY,CAAC,CAAA;QAE3D,QAAQ,CAAC,OAAO,CACd,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,EACrC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,EACnC,QAAQ,CAAC,WAAW,CACrB,CAAA;QAED,OAAO,QAAQ,CAAC,OAAO,EAAE,CAAA;IAC3B,CAAC;IAEO,cAAc,CAAC,aAGtB;QACC,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,gBAAgB,CAAA;QACzB,CAAC;QAED,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,IAAI,aAAa,CAAC,OAAO,IAAI,EAAE,CAAA;QAClE,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;QACxD,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,gBAAgB,CAAA;QACzB,CAAC;QACD,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA;QAEjC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;QAChD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;YACnD,OAAO,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;QACnC,CAAC,CAAC,CAAA;QAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAA;QACrE,CAAC;QAED,OAAO,QAAQ,CAAA;IACjB,CAAC;IAEO,mBAAmB,CAAC,cAA2B;QACrD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;QAC3E,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;YAClC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1B,OAAO,CAAC,WAAW,CAAC,0BAA0B,IAAI,cAAc,CAAC,CAAA;YACnE,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"mutantGenerator.js","sourceRoot":"","sources":["../../src/service/mutantGenerator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { ApexMutation } from '../type/ApexMutation.js';
2
+ export interface MutationGroup {
3
+ mutations: ApexMutation[];
4
+ testMethods: Set<string>;
5
+ }
6
+ export interface GroupingResult {
7
+ groups: MutationGroup[];
8
+ lowerBound: number;
9
+ }
10
+ interface GroupingInternals {
11
+ adjacency: number[][];
12
+ witness: number[];
13
+ coloring: number[];
14
+ tests: ReadonlyArray<Set<string>>;
15
+ }
16
+ type GroupingResultWithInternals = GroupingResult & {
17
+ internals: GroupingInternals;
18
+ };
19
+ export declare const groupMutations: (mutations: ReadonlyArray<ApexMutation>, testMethodsPerLine: Map<number, Set<string>>) => GroupingResult;
20
+ export declare const groupMutationsWithInternals: (mutations: ReadonlyArray<ApexMutation>, testMethodsPerLine: Map<number, Set<string>>) => GroupingResultWithInternals;
21
+ export declare const assembleGroups: (mutations: ReadonlyArray<ApexMutation>, tests: ReadonlyArray<Set<string>>, color: ReadonlyArray<number>) => MutationGroup[];
22
+ export {};