probatio 0.1.3 → 0.3.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.
- package/README.md +93 -8
- package/dist/cli.js +136 -6
- package/dist/contract.js +2 -1
- package/dist/golden/record.js +395 -0
- package/dist/golden/recorder.mjs +78 -0
- package/dist/ledger/build.js +21 -0
- package/dist/ledger/check.js +133 -0
- package/dist/mcp.js +76 -27
- package/dist/mutate/child-lines.mjs +23 -18
- package/dist/mutate/fail-reporter.mjs +21 -0
- package/dist/mutate/find.js +3 -3
- package/dist/mutate/generate.js +5 -2
- package/dist/mutate/load-failure.mjs +40 -0
- package/dist/mutate/mocha-coverage.cjs +7 -1
- package/dist/mutate/node-batch-loader.mjs +15 -1
- package/dist/mutate/node-batch.mjs +40 -3
- package/dist/mutate/node-coverage.mjs +7 -32
- package/dist/mutate/operators.js +60 -1
- package/dist/mutate/patch.js +2 -1
- package/dist/mutate/precise-lines.mjs +147 -31
- package/dist/mutate/probatio-jacoco-run.java +2 -2
- package/dist/mutate/project-config.js +58 -0
- package/dist/mutate/run.js +100 -19
- package/dist/mutate/sealed.js +54 -0
- package/dist/mutate/suite-decision.js +2 -1
- package/dist/mutate/suites.js +87 -155
- package/dist/mutate/tally.js +54 -26
- package/dist/mutate/text-operators.js +92 -2
- package/dist/swarm/check-kill.js +14 -7
- package/dist/verify/change.js +1 -1
- package/package.json +8 -4
- package/schemas/check-kill.schema.json +93 -0
- package/schemas/findings.add.schema.json +53 -0
- package/schemas/gap.fix.schema.json +53 -0
- package/schemas/gap.revert.schema.json +53 -0
- package/schemas/golden.check.schema.json +89 -0
- package/schemas/golden.compare.schema.json +151 -0
- package/schemas/golden.record.schema.json +126 -0
- package/schemas/guard.check.schema.json +53 -0
- package/schemas/ledger.build.schema.json +132 -0
- package/schemas/ledger.check.schema.json +143 -0
- package/schemas/matrix.report.schema.json +129 -0
- package/schemas/mcp.schema.json +53 -0
- package/schemas/mutate.generate.schema.json +127 -0
- package/schemas/mutate.help.schema.json +53 -0
- package/schemas/mutate.run.schema.json +272 -0
- package/schemas/mutate.sealed.schema.json +53 -0
- package/schemas/mutate.tally.schema.json +137 -0
- package/schemas/queue.claim.schema.json +53 -0
- package/schemas/queue.reap.schema.json +71 -0
- package/schemas/queue.seed.schema.json +71 -0
- package/schemas/schema.schema.json +74 -0
- package/schemas/seal.schema.json +69 -0
- package/schemas/status.schema.json +103 -0
- package/schemas/verify-change.schema.json +222 -0
package/dist/swarm/check-kill.js
CHANGED
|
@@ -4,8 +4,8 @@ import { SCHEMA_VERSION } from "../contract.js";
|
|
|
4
4
|
import { directImporters } from "../mutate/affected.js";
|
|
5
5
|
import { filesInDiff } from "../mutate/patch.js";
|
|
6
6
|
import { killLabel } from "../mutate/kill-label.js";
|
|
7
|
-
import { runMutants } from "../mutate/run.js";
|
|
8
|
-
import { campaignSummary } from "../mutate/suite-decision.js";
|
|
7
|
+
import { normalizeResult, runMutants } from "../mutate/run.js";
|
|
8
|
+
import { campaignSummary, UNVIABLE_NEXT } from "../mutate/suite-decision.js";
|
|
9
9
|
/** The gap is done only when this mutant is killed and the baseline suite is green. */
|
|
10
10
|
export async function checkKill(id, options) {
|
|
11
11
|
const importers = importersOf(id, options);
|
|
@@ -48,18 +48,24 @@ export async function checkKill(id, options) {
|
|
|
48
48
|
let outcome = null;
|
|
49
49
|
let killedBy = [];
|
|
50
50
|
if (existsSync(resultFile)) {
|
|
51
|
-
const result = JSON.parse(readFileSync(resultFile, "utf8"));
|
|
51
|
+
const result = normalizeResult(JSON.parse(readFileSync(resultFile, "utf8")));
|
|
52
52
|
outcome = result.outcome ?? null;
|
|
53
53
|
killedBy = Array.isArray(result.killedBy) ? result.killedBy : [];
|
|
54
54
|
}
|
|
55
|
-
|
|
56
|
-
const
|
|
55
|
+
// A mutant that does not build needs no test. The task is closed, and it is not called a kill.
|
|
56
|
+
const unviableMutant = suiteGreen && outcome === "unviable";
|
|
57
|
+
const done = (suiteGreen && outcome === "killed") || unviableMutant;
|
|
58
|
+
const label = unviableMutant ? { cause: "build", next: UNVIABLE_NEXT } : done ? killLabel(killedBy) : null;
|
|
57
59
|
const head = checkHead(report);
|
|
58
60
|
return {
|
|
59
61
|
schemaVersion: SCHEMA_VERSION,
|
|
60
62
|
ok: done,
|
|
61
63
|
command: "check-kill",
|
|
62
|
-
summary:
|
|
64
|
+
summary: unviableMutant
|
|
65
|
+
? `${head} ${id} does not build. No test is needed.`
|
|
66
|
+
: done
|
|
67
|
+
? `${head} ${id} is dead and the suite is green.`
|
|
68
|
+
: `${head} ${id} is not done.`,
|
|
63
69
|
next: label?.next ?? (done ? "The gap-fixing task is done." : "The task is not done."),
|
|
64
70
|
nextCall: null,
|
|
65
71
|
done,
|
|
@@ -78,11 +84,12 @@ function importersOf(id, options) {
|
|
|
78
84
|
return directImporters(options.packageDir, rels, options.testsDir);
|
|
79
85
|
}
|
|
80
86
|
function checkHead(report) {
|
|
81
|
-
const finished = report.killed + report.survived + report.flaky + report.timeouts + report.errors + report.noCoverage;
|
|
87
|
+
const finished = report.killed + report.unviable + report.survived + report.flaky + report.timeouts + report.errors + report.noCoverage;
|
|
82
88
|
return campaignSummary({
|
|
83
89
|
noCoverage: report.noCoverage,
|
|
84
90
|
survived: report.survived,
|
|
85
91
|
killed: report.killed,
|
|
92
|
+
unviable: report.unviable,
|
|
86
93
|
flaky: report.flaky,
|
|
87
94
|
timeouts: report.timeouts,
|
|
88
95
|
errors: report.errors,
|
package/dist/verify/change.js
CHANGED
|
@@ -40,7 +40,7 @@ export async function verifyChange(options) {
|
|
|
40
40
|
const text = showFile(repo, options.commit, file);
|
|
41
41
|
if (!text)
|
|
42
42
|
continue;
|
|
43
|
-
const found = findInSource(rel, text);
|
|
43
|
+
const found = findInSource(rel, text, options.operators ?? "core");
|
|
44
44
|
const lineSet = new Set(lines);
|
|
45
45
|
for (const point of found.points) {
|
|
46
46
|
if (!lineSet.has(point.line))
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "probatio",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Mutation runner for AI agents. Scores a test suite by the bugs it catches.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
"probatio-mcp": "dist/mcp.js"
|
|
9
9
|
},
|
|
10
10
|
"files": [
|
|
11
|
-
"dist"
|
|
11
|
+
"dist",
|
|
12
|
+
"schemas"
|
|
12
13
|
],
|
|
13
14
|
"repository": {
|
|
14
15
|
"type": "git",
|
|
@@ -20,10 +21,12 @@
|
|
|
20
21
|
"url": "https://github.com/IronAdamant/Probatio/issues"
|
|
21
22
|
},
|
|
22
23
|
"scripts": {
|
|
23
|
-
"build": "tsc -p tsconfig.json && mkdir -p dist/mutate && cp src/mutate/fail-reporter.mjs src/mutate/node-coverage.mjs src/mutate/precise-lines.mjs src/mutate/child-lines.mjs src/mutate/mocha-coverage.cjs src/mutate/node-batch.mjs src/mutate/node-batch-loader.mjs src/mutate/py-reporter.py src/mutate/py-pytest-reporter.py src/mutate/probatio-jacoco-run.java dist/mutate/",
|
|
24
|
+
"build": "tsc -p tsconfig.json && mkdir -p dist/mutate && cp src/mutate/fail-reporter.mjs src/mutate/node-coverage.mjs src/mutate/precise-lines.mjs src/mutate/child-lines.mjs src/mutate/mocha-coverage.cjs src/mutate/node-batch.mjs src/mutate/node-batch-loader.mjs src/mutate/load-failure.mjs src/mutate/py-reporter.py src/mutate/py-pytest-reporter.py src/mutate/probatio-jacoco-run.java dist/mutate/ && mkdir -p dist/golden && cp src/golden/recorder.mjs dist/golden/",
|
|
24
25
|
"prepack": "npm run build",
|
|
25
26
|
"test": "tsx --test tests/*.test.ts",
|
|
26
|
-
"probatio": "tsx src/cli.ts"
|
|
27
|
+
"probatio": "tsx src/cli.ts",
|
|
28
|
+
"prepublishOnly": "node scripts/release-check.mjs",
|
|
29
|
+
"release:check": "node scripts/release-check.mjs"
|
|
27
30
|
},
|
|
28
31
|
"engines": {
|
|
29
32
|
"node": ">=22.6"
|
|
@@ -33,6 +36,7 @@
|
|
|
33
36
|
},
|
|
34
37
|
"devDependencies": {
|
|
35
38
|
"@types/node": "^22.10.2",
|
|
39
|
+
"ajv": "^8.17.1",
|
|
36
40
|
"tsx": "^4.19.2"
|
|
37
41
|
}
|
|
38
42
|
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://github.com/IronAdamant/Probatio/blob/main/schemas/check-kill.schema.json",
|
|
4
|
+
"title": "probatio check-kill",
|
|
5
|
+
"description": "Done only when the mutant is killed (or does not build) and the suite is still green. Every command prints one JSON object. schemaVersion changes when a field is renamed, removed, or changes meaning. A new field does not change it.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"schemaVersion",
|
|
9
|
+
"ok",
|
|
10
|
+
"command",
|
|
11
|
+
"summary",
|
|
12
|
+
"next",
|
|
13
|
+
"nextCall"
|
|
14
|
+
],
|
|
15
|
+
"properties": {
|
|
16
|
+
"schemaVersion": {
|
|
17
|
+
"const": 2
|
|
18
|
+
},
|
|
19
|
+
"ok": {
|
|
20
|
+
"type": "boolean"
|
|
21
|
+
},
|
|
22
|
+
"command": {
|
|
23
|
+
"const": "check-kill"
|
|
24
|
+
},
|
|
25
|
+
"summary": {
|
|
26
|
+
"type": "string"
|
|
27
|
+
},
|
|
28
|
+
"next": {
|
|
29
|
+
"type": "string"
|
|
30
|
+
},
|
|
31
|
+
"nextCall": {
|
|
32
|
+
"oneOf": [
|
|
33
|
+
{
|
|
34
|
+
"type": "null"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"type": "object",
|
|
38
|
+
"properties": {
|
|
39
|
+
"argv": {
|
|
40
|
+
"type": "array",
|
|
41
|
+
"items": {
|
|
42
|
+
"type": "string"
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"required": [
|
|
47
|
+
"argv"
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
]
|
|
51
|
+
},
|
|
52
|
+
"done": {
|
|
53
|
+
"type": "boolean"
|
|
54
|
+
},
|
|
55
|
+
"outcome": {
|
|
56
|
+
"type": [
|
|
57
|
+
"string",
|
|
58
|
+
"null"
|
|
59
|
+
]
|
|
60
|
+
},
|
|
61
|
+
"cause": {
|
|
62
|
+
"enum": [
|
|
63
|
+
null,
|
|
64
|
+
"test",
|
|
65
|
+
"build"
|
|
66
|
+
]
|
|
67
|
+
},
|
|
68
|
+
"killedBy": {
|
|
69
|
+
"type": "array",
|
|
70
|
+
"items": {
|
|
71
|
+
"type": "string"
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
"suiteGreen": {
|
|
75
|
+
"type": "boolean"
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
"if": {
|
|
79
|
+
"properties": {
|
|
80
|
+
"ok": {
|
|
81
|
+
"const": true
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
"then": {
|
|
86
|
+
"required": [
|
|
87
|
+
"done",
|
|
88
|
+
"outcome",
|
|
89
|
+
"killedBy",
|
|
90
|
+
"suiteGreen"
|
|
91
|
+
]
|
|
92
|
+
}
|
|
93
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://github.com/IronAdamant/Probatio/blob/main/schemas/findings.add.schema.json",
|
|
4
|
+
"title": "probatio findings.add",
|
|
5
|
+
"description": "Appends a decision to the findings log. Every command prints one JSON object. schemaVersion changes when a field is renamed, removed, or changes meaning. A new field does not change it.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"schemaVersion",
|
|
9
|
+
"ok",
|
|
10
|
+
"command",
|
|
11
|
+
"summary",
|
|
12
|
+
"next",
|
|
13
|
+
"nextCall"
|
|
14
|
+
],
|
|
15
|
+
"properties": {
|
|
16
|
+
"schemaVersion": {
|
|
17
|
+
"const": 2
|
|
18
|
+
},
|
|
19
|
+
"ok": {
|
|
20
|
+
"type": "boolean"
|
|
21
|
+
},
|
|
22
|
+
"command": {
|
|
23
|
+
"const": "findings.add"
|
|
24
|
+
},
|
|
25
|
+
"summary": {
|
|
26
|
+
"type": "string"
|
|
27
|
+
},
|
|
28
|
+
"next": {
|
|
29
|
+
"type": "string"
|
|
30
|
+
},
|
|
31
|
+
"nextCall": {
|
|
32
|
+
"oneOf": [
|
|
33
|
+
{
|
|
34
|
+
"type": "null"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"type": "object",
|
|
38
|
+
"properties": {
|
|
39
|
+
"argv": {
|
|
40
|
+
"type": "array",
|
|
41
|
+
"items": {
|
|
42
|
+
"type": "string"
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"required": [
|
|
47
|
+
"argv"
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
]
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://github.com/IronAdamant/Probatio/blob/main/schemas/gap.fix.schema.json",
|
|
4
|
+
"title": "probatio gap.fix",
|
|
5
|
+
"description": "Records a gap as fixed, with the guard that now catches it. Every command prints one JSON object. schemaVersion changes when a field is renamed, removed, or changes meaning. A new field does not change it.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"schemaVersion",
|
|
9
|
+
"ok",
|
|
10
|
+
"command",
|
|
11
|
+
"summary",
|
|
12
|
+
"next",
|
|
13
|
+
"nextCall"
|
|
14
|
+
],
|
|
15
|
+
"properties": {
|
|
16
|
+
"schemaVersion": {
|
|
17
|
+
"const": 2
|
|
18
|
+
},
|
|
19
|
+
"ok": {
|
|
20
|
+
"type": "boolean"
|
|
21
|
+
},
|
|
22
|
+
"command": {
|
|
23
|
+
"const": "gap.fix"
|
|
24
|
+
},
|
|
25
|
+
"summary": {
|
|
26
|
+
"type": "string"
|
|
27
|
+
},
|
|
28
|
+
"next": {
|
|
29
|
+
"type": "string"
|
|
30
|
+
},
|
|
31
|
+
"nextCall": {
|
|
32
|
+
"oneOf": [
|
|
33
|
+
{
|
|
34
|
+
"type": "null"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"type": "object",
|
|
38
|
+
"properties": {
|
|
39
|
+
"argv": {
|
|
40
|
+
"type": "array",
|
|
41
|
+
"items": {
|
|
42
|
+
"type": "string"
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"required": [
|
|
47
|
+
"argv"
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
]
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://github.com/IronAdamant/Probatio/blob/main/schemas/gap.revert.schema.json",
|
|
4
|
+
"title": "probatio gap.revert",
|
|
5
|
+
"description": "Reports a fixed gap that came back, naming the original fix and guard. Every command prints one JSON object. schemaVersion changes when a field is renamed, removed, or changes meaning. A new field does not change it.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"schemaVersion",
|
|
9
|
+
"ok",
|
|
10
|
+
"command",
|
|
11
|
+
"summary",
|
|
12
|
+
"next",
|
|
13
|
+
"nextCall"
|
|
14
|
+
],
|
|
15
|
+
"properties": {
|
|
16
|
+
"schemaVersion": {
|
|
17
|
+
"const": 2
|
|
18
|
+
},
|
|
19
|
+
"ok": {
|
|
20
|
+
"type": "boolean"
|
|
21
|
+
},
|
|
22
|
+
"command": {
|
|
23
|
+
"const": "gap.revert"
|
|
24
|
+
},
|
|
25
|
+
"summary": {
|
|
26
|
+
"type": "string"
|
|
27
|
+
},
|
|
28
|
+
"next": {
|
|
29
|
+
"type": "string"
|
|
30
|
+
},
|
|
31
|
+
"nextCall": {
|
|
32
|
+
"oneOf": [
|
|
33
|
+
{
|
|
34
|
+
"type": "null"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"type": "object",
|
|
38
|
+
"properties": {
|
|
39
|
+
"argv": {
|
|
40
|
+
"type": "array",
|
|
41
|
+
"items": {
|
|
42
|
+
"type": "string"
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"required": [
|
|
47
|
+
"argv"
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
]
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://github.com/IronAdamant/Probatio/blob/main/schemas/golden.check.schema.json",
|
|
4
|
+
"title": "probatio golden.check",
|
|
5
|
+
"description": "Compares a recorded golden table with a new one. Contract changes need a Golden-Change trailer. Every command prints one JSON object. schemaVersion changes when a field is renamed, removed, or changes meaning. A new field does not change it.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"schemaVersion",
|
|
9
|
+
"ok",
|
|
10
|
+
"command",
|
|
11
|
+
"summary",
|
|
12
|
+
"next",
|
|
13
|
+
"nextCall"
|
|
14
|
+
],
|
|
15
|
+
"properties": {
|
|
16
|
+
"schemaVersion": {
|
|
17
|
+
"const": 2
|
|
18
|
+
},
|
|
19
|
+
"ok": {
|
|
20
|
+
"type": "boolean"
|
|
21
|
+
},
|
|
22
|
+
"command": {
|
|
23
|
+
"const": "golden.check"
|
|
24
|
+
},
|
|
25
|
+
"summary": {
|
|
26
|
+
"type": "string"
|
|
27
|
+
},
|
|
28
|
+
"next": {
|
|
29
|
+
"type": "string"
|
|
30
|
+
},
|
|
31
|
+
"nextCall": {
|
|
32
|
+
"oneOf": [
|
|
33
|
+
{
|
|
34
|
+
"type": "null"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"type": "object",
|
|
38
|
+
"properties": {
|
|
39
|
+
"argv": {
|
|
40
|
+
"type": "array",
|
|
41
|
+
"items": {
|
|
42
|
+
"type": "string"
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"required": [
|
|
47
|
+
"argv"
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
]
|
|
51
|
+
},
|
|
52
|
+
"wording": {
|
|
53
|
+
"type": "array",
|
|
54
|
+
"items": {
|
|
55
|
+
"type": "string"
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
"contract": {
|
|
59
|
+
"type": "array",
|
|
60
|
+
"items": {
|
|
61
|
+
"type": "string"
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
"invariant": {
|
|
65
|
+
"type": "array",
|
|
66
|
+
"items": {
|
|
67
|
+
"type": "string"
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
"updated": {
|
|
71
|
+
"type": "boolean"
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
"if": {
|
|
75
|
+
"properties": {
|
|
76
|
+
"ok": {
|
|
77
|
+
"const": true
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
"then": {
|
|
82
|
+
"required": [
|
|
83
|
+
"wording",
|
|
84
|
+
"contract",
|
|
85
|
+
"invariant",
|
|
86
|
+
"updated"
|
|
87
|
+
]
|
|
88
|
+
}
|
|
89
|
+
}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://github.com/IronAdamant/Probatio/blob/main/schemas/golden.compare.schema.json",
|
|
4
|
+
"title": "probatio golden.compare",
|
|
5
|
+
"description": "Scores the same mutants with only the unit tests and with only the golden replay. Nothing is deleted. Every command prints one JSON object. schemaVersion changes when a field is renamed, removed, or changes meaning. A new field does not change it.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"schemaVersion",
|
|
9
|
+
"ok",
|
|
10
|
+
"command",
|
|
11
|
+
"summary",
|
|
12
|
+
"next",
|
|
13
|
+
"nextCall"
|
|
14
|
+
],
|
|
15
|
+
"properties": {
|
|
16
|
+
"schemaVersion": {
|
|
17
|
+
"const": 2
|
|
18
|
+
},
|
|
19
|
+
"ok": {
|
|
20
|
+
"type": "boolean"
|
|
21
|
+
},
|
|
22
|
+
"command": {
|
|
23
|
+
"const": "golden.compare"
|
|
24
|
+
},
|
|
25
|
+
"summary": {
|
|
26
|
+
"type": "string"
|
|
27
|
+
},
|
|
28
|
+
"next": {
|
|
29
|
+
"type": "string"
|
|
30
|
+
},
|
|
31
|
+
"nextCall": {
|
|
32
|
+
"oneOf": [
|
|
33
|
+
{
|
|
34
|
+
"type": "null"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"type": "object",
|
|
38
|
+
"properties": {
|
|
39
|
+
"argv": {
|
|
40
|
+
"type": "array",
|
|
41
|
+
"items": {
|
|
42
|
+
"type": "string"
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"required": [
|
|
47
|
+
"argv"
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
]
|
|
51
|
+
},
|
|
52
|
+
"operators": {
|
|
53
|
+
"enum": [
|
|
54
|
+
"core",
|
|
55
|
+
"wide"
|
|
56
|
+
]
|
|
57
|
+
},
|
|
58
|
+
"unitKills": {
|
|
59
|
+
"type": "integer",
|
|
60
|
+
"minimum": 0
|
|
61
|
+
},
|
|
62
|
+
"goldenKills": {
|
|
63
|
+
"type": "integer",
|
|
64
|
+
"minimum": 0
|
|
65
|
+
},
|
|
66
|
+
"both": {
|
|
67
|
+
"type": "integer",
|
|
68
|
+
"minimum": 0
|
|
69
|
+
},
|
|
70
|
+
"unitOnly": {
|
|
71
|
+
"type": "array",
|
|
72
|
+
"items": {
|
|
73
|
+
"type": "string"
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
"goldenOnly": {
|
|
77
|
+
"type": "array",
|
|
78
|
+
"items": {
|
|
79
|
+
"type": "string"
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
"rest": {
|
|
83
|
+
"type": "integer",
|
|
84
|
+
"minimum": 0
|
|
85
|
+
},
|
|
86
|
+
"unit": {
|
|
87
|
+
"type": "object",
|
|
88
|
+
"properties": {
|
|
89
|
+
"summary": {
|
|
90
|
+
"type": "string"
|
|
91
|
+
},
|
|
92
|
+
"full": {
|
|
93
|
+
"type": "string"
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
"required": [
|
|
97
|
+
"summary"
|
|
98
|
+
]
|
|
99
|
+
},
|
|
100
|
+
"golden": {
|
|
101
|
+
"type": "object",
|
|
102
|
+
"properties": {
|
|
103
|
+
"summary": {
|
|
104
|
+
"type": "string"
|
|
105
|
+
},
|
|
106
|
+
"full": {
|
|
107
|
+
"type": "string"
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
"required": [
|
|
111
|
+
"summary"
|
|
112
|
+
]
|
|
113
|
+
},
|
|
114
|
+
"pruning": {
|
|
115
|
+
"type": "object",
|
|
116
|
+
"properties": {
|
|
117
|
+
"mode": {
|
|
118
|
+
"const": "advisory"
|
|
119
|
+
},
|
|
120
|
+
"deletedTests": {
|
|
121
|
+
"const": 0
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
"required": [
|
|
125
|
+
"mode",
|
|
126
|
+
"deletedTests"
|
|
127
|
+
]
|
|
128
|
+
}
|
|
129
|
+
},
|
|
130
|
+
"if": {
|
|
131
|
+
"properties": {
|
|
132
|
+
"ok": {
|
|
133
|
+
"const": true
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
"then": {
|
|
138
|
+
"required": [
|
|
139
|
+
"operators",
|
|
140
|
+
"unitKills",
|
|
141
|
+
"goldenKills",
|
|
142
|
+
"both",
|
|
143
|
+
"unitOnly",
|
|
144
|
+
"goldenOnly",
|
|
145
|
+
"rest",
|
|
146
|
+
"unit",
|
|
147
|
+
"golden",
|
|
148
|
+
"pruning"
|
|
149
|
+
]
|
|
150
|
+
}
|
|
151
|
+
}
|