diff --git a/app/cli/documentation/cli-reference.mdx b/app/cli/documentation/cli-reference.mdx index b7bf68c85..20773a9c5 100755 --- a/app/cli/documentation/cli-reference.mdx +++ b/app/cli/documentation/cli-reference.mdx @@ -268,7 +268,7 @@ Options --append reserved for a future release: will control whether --policy-input and --policy-input-from-file append to (rather than replace) the contract-declared value; has no effect yet --attestation-id string Unique identifier of the in-progress attestation -h, --help help for add ---kind string kind of the material to be recorded: ["ARTIFACT" "ASYNCAPI_SPEC" "ATTESTATION" "BLACKDUCK_SCA_JSON" "CERTCC_DRANZER" "CHAINLOOP_AI_AGENT_CONFIG" "CHAINLOOP_AI_CODING_SESSION" "CHAINLOOP_PR_INFO" "CHAINLOOP_RUNNER_CONTEXT" "CHECKMARX_JSON" "COBERTURA_XML" "CONTAINER_IMAGE" "CSAF_INFORMATIONAL_ADVISORY" "CSAF_SECURITY_ADVISORY" "CSAF_SECURITY_INCIDENT_RESPONSE" "CSAF_VEX" "EVIDENCE" "GHAS_CODE_SCAN" "GHAS_DEPENDENCY_SCAN" "GHAS_SECRET_SCAN" "GITLAB_SECURITY_REPORT" "GITLEAKS_JSON" "GRAPHQL_SPEC" "HELM_CHART" "JACOCO_XML" "JUNIT_XML" "OPENAPI_SPEC" "OPENVEX" "OSSF_SCORECARD_JSON" "OVERSECURED_JSON" "RADAMSA_CRASHES" "RADAMSA_REPORT" "SARIF" "SBOM_CYCLONEDX_JSON" "SBOM_SPDX_JSON" "SLSA_PROVENANCE" "STRING" "SYSINTERNALS_ACCESSCHK" "SYSINTERNALS_SIGCHECK" "TRUFFLEHOG_JSON" "TWISTCLI_SCAN_JSON" "YELP_DETECT_SECRETS_BASELINE" "ZAP_DAST_ZIP"] +--kind string kind of the material to be recorded: ["ARTIFACT" "ASYNCAPI_SPEC" "ATTESTATION" "BLACKDUCK_SCA_JSON" "CERTCC_DRANZER" "CHAINLOOP_AI_AGENT_CONFIG" "CHAINLOOP_AI_CODING_SESSION" "CHAINLOOP_PR_INFO" "CHAINLOOP_RUNNER_CONTEXT" "CHECKMARX_JSON" "COBERTURA_XML" "CONTAINER_IMAGE" "CSAF_INFORMATIONAL_ADVISORY" "CSAF_SECURITY_ADVISORY" "CSAF_SECURITY_INCIDENT_RESPONSE" "CSAF_VEX" "EVIDENCE" "GHAS_CODE_SCAN" "GHAS_DEPENDENCY_SCAN" "GHAS_SECRET_SCAN" "GITLAB_SECURITY_REPORT" "GITLEAKS_JSON" "GRAPHQL_SPEC" "HELM_CHART" "JACOCO_XML" "JUNIT_XML" "OPENAPI_SPEC" "OPENVEX" "OSSF_SCORECARD_JSON" "OVERSECURED_JSON" "PITEST_XML" "RADAMSA_CRASHES" "RADAMSA_REPORT" "SARIF" "SBOM_CYCLONEDX_JSON" "SBOM_SPDX_JSON" "SLSA_PROVENANCE" "STRING" "SYSINTERNALS_ACCESSCHK" "SYSINTERNALS_SIGCHECK" "TRUFFLEHOG_JSON" "TWISTCLI_SCAN_JSON" "YELP_DETECT_SECRETS_BASELINE" "ZAP_DAST_ZIP"] --max-extract-entries int max number of files to extract when --value is an archive (default 10000) --max-extract-size string max total uncompressed size to extract when --value is an archive (default "1GiB") --name string name of the material as shown in the contract @@ -3046,7 +3046,7 @@ Options --annotation strings Key-value pairs of material annotations (key=value) -h, --help help for eval --input stringArray Key-value pairs of policy inputs (key=value) ---kind string Kind of the material: ["ARTIFACT" "ASYNCAPI_SPEC" "ATTESTATION" "BLACKDUCK_SCA_JSON" "CERTCC_DRANZER" "CHAINLOOP_AI_AGENT_CONFIG" "CHAINLOOP_AI_CODING_SESSION" "CHAINLOOP_PR_INFO" "CHAINLOOP_RUNNER_CONTEXT" "CHECKMARX_JSON" "COBERTURA_XML" "CONTAINER_IMAGE" "CSAF_INFORMATIONAL_ADVISORY" "CSAF_SECURITY_ADVISORY" "CSAF_SECURITY_INCIDENT_RESPONSE" "CSAF_VEX" "EVIDENCE" "GHAS_CODE_SCAN" "GHAS_DEPENDENCY_SCAN" "GHAS_SECRET_SCAN" "GITLAB_SECURITY_REPORT" "GITLEAKS_JSON" "GRAPHQL_SPEC" "HELM_CHART" "JACOCO_XML" "JUNIT_XML" "OPENAPI_SPEC" "OPENVEX" "OSSF_SCORECARD_JSON" "OVERSECURED_JSON" "RADAMSA_CRASHES" "RADAMSA_REPORT" "SARIF" "SBOM_CYCLONEDX_JSON" "SBOM_SPDX_JSON" "SLSA_PROVENANCE" "STRING" "SYSINTERNALS_ACCESSCHK" "SYSINTERNALS_SIGCHECK" "TRUFFLEHOG_JSON" "TWISTCLI_SCAN_JSON" "YELP_DETECT_SECRETS_BASELINE" "ZAP_DAST_ZIP"] +--kind string Kind of the material: ["ARTIFACT" "ASYNCAPI_SPEC" "ATTESTATION" "BLACKDUCK_SCA_JSON" "CERTCC_DRANZER" "CHAINLOOP_AI_AGENT_CONFIG" "CHAINLOOP_AI_CODING_SESSION" "CHAINLOOP_PR_INFO" "CHAINLOOP_RUNNER_CONTEXT" "CHECKMARX_JSON" "COBERTURA_XML" "CONTAINER_IMAGE" "CSAF_INFORMATIONAL_ADVISORY" "CSAF_SECURITY_ADVISORY" "CSAF_SECURITY_INCIDENT_RESPONSE" "CSAF_VEX" "EVIDENCE" "GHAS_CODE_SCAN" "GHAS_DEPENDENCY_SCAN" "GHAS_SECRET_SCAN" "GITLAB_SECURITY_REPORT" "GITLEAKS_JSON" "GRAPHQL_SPEC" "HELM_CHART" "JACOCO_XML" "JUNIT_XML" "OPENAPI_SPEC" "OPENVEX" "OSSF_SCORECARD_JSON" "OVERSECURED_JSON" "PITEST_XML" "RADAMSA_CRASHES" "RADAMSA_REPORT" "SARIF" "SBOM_CYCLONEDX_JSON" "SBOM_SPDX_JSON" "SLSA_PROVENANCE" "STRING" "SYSINTERNALS_ACCESSCHK" "SYSINTERNALS_SIGCHECK" "TRUFFLEHOG_JSON" "TWISTCLI_SCAN_JSON" "YELP_DETECT_SECRETS_BASELINE" "ZAP_DAST_ZIP"] --material string Path to material or attestation file -p, --policy string Policy reference (./my-policy.yaml, https://my-domain.com/my-policy.yaml, chainloop://my-stored-policy) (default "policy.yaml") --project string Project name to use as engine context for chainloop.* built-ins diff --git a/app/controlplane/api/gen/frontend/workflowcontract/v1/crafting_schema.ts b/app/controlplane/api/gen/frontend/workflowcontract/v1/crafting_schema.ts index 0db137e9c..5e039bc29 100644 --- a/app/controlplane/api/gen/frontend/workflowcontract/v1/crafting_schema.ts +++ b/app/controlplane/api/gen/frontend/workflowcontract/v1/crafting_schema.ts @@ -331,6 +331,11 @@ export enum CraftingSchema_Material_MaterialType { * https://docs.oversecured.com/docs/guide-exporting-reports */ OVERSECURED_JSON = 43, + /** + * PITEST_XML - PIT mutation testing report in its native XML format (mutations.xml) + * https://pitest.org/ + */ + PITEST_XML = 44, UNRECOGNIZED = -1, } @@ -468,6 +473,9 @@ export function craftingSchema_Material_MaterialTypeFromJSON(object: any): Craft case 43: case "OVERSECURED_JSON": return CraftingSchema_Material_MaterialType.OVERSECURED_JSON; + case 44: + case "PITEST_XML": + return CraftingSchema_Material_MaterialType.PITEST_XML; case -1: case "UNRECOGNIZED": default: @@ -565,6 +573,8 @@ export function craftingSchema_Material_MaterialTypeToJSON(object: CraftingSchem return "CHECKMARX_JSON"; case CraftingSchema_Material_MaterialType.OVERSECURED_JSON: return "OVERSECURED_JSON"; + case CraftingSchema_Material_MaterialType.PITEST_XML: + return "PITEST_XML"; case CraftingSchema_Material_MaterialType.UNRECOGNIZED: default: return "UNRECOGNIZED"; diff --git a/app/controlplane/api/gen/jsonschema/attestation.v1.Attestation.Material.jsonschema.json b/app/controlplane/api/gen/jsonschema/attestation.v1.Attestation.Material.jsonschema.json index de5b8934d..7d342996d 100644 --- a/app/controlplane/api/gen/jsonschema/attestation.v1.Attestation.Material.jsonschema.json +++ b/app/controlplane/api/gen/jsonschema/attestation.v1.Attestation.Material.jsonschema.json @@ -60,7 +60,8 @@ "TRUFFLEHOG_JSON", "COBERTURA_XML", "CHECKMARX_JSON", - "OVERSECURED_JSON" + "OVERSECURED_JSON", + "PITEST_XML" ], "title": "Material Type", "type": "string" @@ -156,7 +157,8 @@ "TRUFFLEHOG_JSON", "COBERTURA_XML", "CHECKMARX_JSON", - "OVERSECURED_JSON" + "OVERSECURED_JSON", + "PITEST_XML" ], "title": "Material Type", "type": "string" diff --git a/app/controlplane/api/gen/jsonschema/attestation.v1.Attestation.Material.schema.json b/app/controlplane/api/gen/jsonschema/attestation.v1.Attestation.Material.schema.json index 57fc9dab0..354dba9fc 100644 --- a/app/controlplane/api/gen/jsonschema/attestation.v1.Attestation.Material.schema.json +++ b/app/controlplane/api/gen/jsonschema/attestation.v1.Attestation.Material.schema.json @@ -60,7 +60,8 @@ "TRUFFLEHOG_JSON", "COBERTURA_XML", "CHECKMARX_JSON", - "OVERSECURED_JSON" + "OVERSECURED_JSON", + "PITEST_XML" ], "title": "Material Type", "type": "string" @@ -156,7 +157,8 @@ "TRUFFLEHOG_JSON", "COBERTURA_XML", "CHECKMARX_JSON", - "OVERSECURED_JSON" + "OVERSECURED_JSON", + "PITEST_XML" ], "title": "Material Type", "type": "string" diff --git a/app/controlplane/api/gen/jsonschema/attestation.v1.PolicyEvaluation.jsonschema.json b/app/controlplane/api/gen/jsonschema/attestation.v1.PolicyEvaluation.jsonschema.json index 90ae287bd..743aa050e 100644 --- a/app/controlplane/api/gen/jsonschema/attestation.v1.PolicyEvaluation.jsonschema.json +++ b/app/controlplane/api/gen/jsonschema/attestation.v1.PolicyEvaluation.jsonschema.json @@ -171,7 +171,8 @@ "TRUFFLEHOG_JSON", "COBERTURA_XML", "CHECKMARX_JSON", - "OVERSECURED_JSON" + "OVERSECURED_JSON", + "PITEST_XML" ], "title": "Material Type", "type": "string" diff --git a/app/controlplane/api/gen/jsonschema/attestation.v1.PolicyEvaluation.schema.json b/app/controlplane/api/gen/jsonschema/attestation.v1.PolicyEvaluation.schema.json index caf1ed28e..b188852c0 100644 --- a/app/controlplane/api/gen/jsonschema/attestation.v1.PolicyEvaluation.schema.json +++ b/app/controlplane/api/gen/jsonschema/attestation.v1.PolicyEvaluation.schema.json @@ -171,7 +171,8 @@ "TRUFFLEHOG_JSON", "COBERTURA_XML", "CHECKMARX_JSON", - "OVERSECURED_JSON" + "OVERSECURED_JSON", + "PITEST_XML" ], "title": "Material Type", "type": "string" diff --git a/app/controlplane/api/gen/jsonschema/workflowcontract.v1.CraftingSchema.Material.jsonschema.json b/app/controlplane/api/gen/jsonschema/workflowcontract.v1.CraftingSchema.Material.jsonschema.json index 9d8c4b900..b203b9530 100644 --- a/app/controlplane/api/gen/jsonschema/workflowcontract.v1.CraftingSchema.Material.jsonschema.json +++ b/app/controlplane/api/gen/jsonschema/workflowcontract.v1.CraftingSchema.Material.jsonschema.json @@ -81,7 +81,8 @@ "TRUFFLEHOG_JSON", "COBERTURA_XML", "CHECKMARX_JSON", - "OVERSECURED_JSON" + "OVERSECURED_JSON", + "PITEST_XML" ], "title": "Material Type", "type": "string" diff --git a/app/controlplane/api/gen/jsonschema/workflowcontract.v1.CraftingSchema.Material.schema.json b/app/controlplane/api/gen/jsonschema/workflowcontract.v1.CraftingSchema.Material.schema.json index 7a4f7cd56..246b7302f 100644 --- a/app/controlplane/api/gen/jsonschema/workflowcontract.v1.CraftingSchema.Material.schema.json +++ b/app/controlplane/api/gen/jsonschema/workflowcontract.v1.CraftingSchema.Material.schema.json @@ -81,7 +81,8 @@ "TRUFFLEHOG_JSON", "COBERTURA_XML", "CHECKMARX_JSON", - "OVERSECURED_JSON" + "OVERSECURED_JSON", + "PITEST_XML" ], "title": "Material Type", "type": "string" diff --git a/app/controlplane/api/gen/jsonschema/workflowcontract.v1.PolicyGroup.Material.jsonschema.json b/app/controlplane/api/gen/jsonschema/workflowcontract.v1.PolicyGroup.Material.jsonschema.json index cfc3c4bf8..0f5d1e79c 100644 --- a/app/controlplane/api/gen/jsonschema/workflowcontract.v1.PolicyGroup.Material.jsonschema.json +++ b/app/controlplane/api/gen/jsonschema/workflowcontract.v1.PolicyGroup.Material.jsonschema.json @@ -105,7 +105,8 @@ "TRUFFLEHOG_JSON", "COBERTURA_XML", "CHECKMARX_JSON", - "OVERSECURED_JSON" + "OVERSECURED_JSON", + "PITEST_XML" ], "title": "Material Type", "type": "string" diff --git a/app/controlplane/api/gen/jsonschema/workflowcontract.v1.PolicyGroup.Material.schema.json b/app/controlplane/api/gen/jsonschema/workflowcontract.v1.PolicyGroup.Material.schema.json index f0c60fb38..781a410fd 100644 --- a/app/controlplane/api/gen/jsonschema/workflowcontract.v1.PolicyGroup.Material.schema.json +++ b/app/controlplane/api/gen/jsonschema/workflowcontract.v1.PolicyGroup.Material.schema.json @@ -105,7 +105,8 @@ "TRUFFLEHOG_JSON", "COBERTURA_XML", "CHECKMARX_JSON", - "OVERSECURED_JSON" + "OVERSECURED_JSON", + "PITEST_XML" ], "title": "Material Type", "type": "string" diff --git a/app/controlplane/api/gen/jsonschema/workflowcontract.v1.PolicySpec.jsonschema.json b/app/controlplane/api/gen/jsonschema/workflowcontract.v1.PolicySpec.jsonschema.json index 303314a9d..5b97df6db 100644 --- a/app/controlplane/api/gen/jsonschema/workflowcontract.v1.PolicySpec.jsonschema.json +++ b/app/controlplane/api/gen/jsonschema/workflowcontract.v1.PolicySpec.jsonschema.json @@ -79,7 +79,8 @@ "TRUFFLEHOG_JSON", "COBERTURA_XML", "CHECKMARX_JSON", - "OVERSECURED_JSON" + "OVERSECURED_JSON", + "PITEST_XML" ], "title": "Material Type", "type": "string" diff --git a/app/controlplane/api/gen/jsonschema/workflowcontract.v1.PolicySpec.schema.json b/app/controlplane/api/gen/jsonschema/workflowcontract.v1.PolicySpec.schema.json index 1e3bfad5f..f3f357631 100644 --- a/app/controlplane/api/gen/jsonschema/workflowcontract.v1.PolicySpec.schema.json +++ b/app/controlplane/api/gen/jsonschema/workflowcontract.v1.PolicySpec.schema.json @@ -79,7 +79,8 @@ "TRUFFLEHOG_JSON", "COBERTURA_XML", "CHECKMARX_JSON", - "OVERSECURED_JSON" + "OVERSECURED_JSON", + "PITEST_XML" ], "title": "Material Type", "type": "string" diff --git a/app/controlplane/api/gen/jsonschema/workflowcontract.v1.PolicySpecV2.jsonschema.json b/app/controlplane/api/gen/jsonschema/workflowcontract.v1.PolicySpecV2.jsonschema.json index da6bd022f..f729155ed 100644 --- a/app/controlplane/api/gen/jsonschema/workflowcontract.v1.PolicySpecV2.jsonschema.json +++ b/app/controlplane/api/gen/jsonschema/workflowcontract.v1.PolicySpecV2.jsonschema.json @@ -100,7 +100,8 @@ "TRUFFLEHOG_JSON", "COBERTURA_XML", "CHECKMARX_JSON", - "OVERSECURED_JSON" + "OVERSECURED_JSON", + "PITEST_XML" ], "title": "Material Type", "type": "string" diff --git a/app/controlplane/api/gen/jsonschema/workflowcontract.v1.PolicySpecV2.schema.json b/app/controlplane/api/gen/jsonschema/workflowcontract.v1.PolicySpecV2.schema.json index 38d9edc1d..cbfbbdb9b 100644 --- a/app/controlplane/api/gen/jsonschema/workflowcontract.v1.PolicySpecV2.schema.json +++ b/app/controlplane/api/gen/jsonschema/workflowcontract.v1.PolicySpecV2.schema.json @@ -100,7 +100,8 @@ "TRUFFLEHOG_JSON", "COBERTURA_XML", "CHECKMARX_JSON", - "OVERSECURED_JSON" + "OVERSECURED_JSON", + "PITEST_XML" ], "title": "Material Type", "type": "string" diff --git a/app/controlplane/api/workflowcontract/v1/crafting_schema.pb.go b/app/controlplane/api/workflowcontract/v1/crafting_schema.pb.go index 809fa9032..e097271e7 100644 --- a/app/controlplane/api/workflowcontract/v1/crafting_schema.pb.go +++ b/app/controlplane/api/workflowcontract/v1/crafting_schema.pb.go @@ -253,6 +253,9 @@ const ( // Oversecured mobile (Android/iOS) scan report, whole-scan JSON export // https://docs.oversecured.com/docs/guide-exporting-reports CraftingSchema_Material_OVERSECURED_JSON CraftingSchema_Material_MaterialType = 43 + // PIT mutation testing report in its native XML format (mutations.xml) + // https://pitest.org/ + CraftingSchema_Material_PITEST_XML CraftingSchema_Material_MaterialType = 44 ) // Enum value maps for CraftingSchema_Material_MaterialType. @@ -302,6 +305,7 @@ var ( 41: "COBERTURA_XML", 42: "CHECKMARX_JSON", 43: "OVERSECURED_JSON", + 44: "PITEST_XML", } CraftingSchema_Material_MaterialType_value = map[string]int32{ "MATERIAL_TYPE_UNSPECIFIED": 0, @@ -348,6 +352,7 @@ var ( "COBERTURA_XML": 41, "CHECKMARX_JSON": 42, "OVERSECURED_JSON": 43, + "PITEST_XML": 44, } ) @@ -2096,7 +2101,7 @@ var File_workflowcontract_v1_crafting_schema_proto protoreflect.FileDescriptor const file_workflowcontract_v1_crafting_schema_proto_rawDesc = "" + "\n" + - ")workflowcontract/v1/crafting_schema.proto\x12\x13workflowcontract.v1\x1a\x1bbuf/validate/validate.proto\"\xe6\x12\n" + + ")workflowcontract/v1/crafting_schema.proto\x12\x13workflowcontract.v1\x1a\x1bbuf/validate/validate.proto\"\xf6\x12\n" + "\x0eCraftingSchema\x122\n" + "\x0eschema_version\x18\x01 \x01(\tB\v\xbaH\x06r\x04\n" + "\x02v1\x18\x01R\rschemaVersion\x12N\n" + @@ -2119,7 +2124,7 @@ const file_workflowcontract_v1_crafting_schema_proto_rawDesc = "" + "\x0fDAGGER_PIPELINE\x10\x06\x12\x15\n" + "\x11TEAMCITY_PIPELINE\x10\a\x12\x13\n" + "\x0fTEKTON_PIPELINE\x10\b\x12\x15\n" + - "\x11CHAINLOOP_SANDBOX\x10\t:\x02\x18\x01\x1a\xb1\f\n" + + "\x11CHAINLOOP_SANDBOX\x10\t:\x02\x18\x01\x1a\xc1\f\n" + "\bMaterial\x12[\n" + "\x04type\x18\x01 \x01(\x0e29.workflowcontract.v1.CraftingSchema.Material.MaterialTypeB\f\xbaH\a\x82\x01\x04\x10\x01 \x00\x18\x01R\x04type\x12\x99\x01\n" + "\x04name\x18\x02 \x01(\tB\x84\x01\xbaH\x7f\xba\x01|\n" + @@ -2130,7 +2135,7 @@ const file_workflowcontract_v1_crafting_schema_proto_rawDesc = "" + "\vskip_upload\x18\x06 \x01(\bR\n" + "skipUpload\x12\xaa\x01\n" + "\x05group\x18\a \x01(\tB\x93\x01\xbaH\x8f\x01\xba\x01\x8b\x01\n" + - "\x0egroup.dns-1123\x12:must contain only lowercase letters, numbers, and hyphens.\x1a=this == '' || this.matches('^[a-z0-9]([-a-z0-9]*[a-z0-9])?$')R\x05group\"\xd6\a\n" + + "\x0egroup.dns-1123\x12:must contain only lowercase letters, numbers, and hyphens.\x1a=this == '' || this.matches('^[a-z0-9]([-a-z0-9]*[a-z0-9])?$')R\x05group\"\xe6\a\n" + "\fMaterialType\x12\x1d\n" + "\x19MATERIAL_TYPE_UNSPECIFIED\x10\x00\x12\n" + "\n" + @@ -2179,7 +2184,9 @@ const file_workflowcontract_v1_crafting_schema_proto_rawDesc = "" + "\x0fTRUFFLEHOG_JSON\x10(\x12\x11\n" + "\rCOBERTURA_XML\x10)\x12\x12\n" + "\x0eCHECKMARX_JSON\x10*\x12\x14\n" + - "\x10OVERSECURED_JSON\x10+:\x02\x18\x01:\x02\x18\x01\"\xfb\x01\n" + + "\x10OVERSECURED_JSON\x10+\x12\x0e\n" + + "\n" + + "PITEST_XML\x10,:\x02\x18\x01:\x02\x18\x01\"\xfb\x01\n" + "\x10CraftingSchemaV2\x128\n" + "\vapi_version\x18\x01 \x01(\tB\x17\xbaH\x14r\x12\n" + "\x10chainloop.dev/v1R\n" + diff --git a/app/controlplane/api/workflowcontract/v1/crafting_schema.proto b/app/controlplane/api/workflowcontract/v1/crafting_schema.proto index 96f9994a1..38fd7434e 100644 --- a/app/controlplane/api/workflowcontract/v1/crafting_schema.proto +++ b/app/controlplane/api/workflowcontract/v1/crafting_schema.proto @@ -202,6 +202,9 @@ message CraftingSchema { // Oversecured mobile (Android/iOS) scan report, whole-scan JSON export // https://docs.oversecured.com/docs/guide-exporting-reports OVERSECURED_JSON = 43; + // PIT mutation testing report in its native XML format (mutations.xml) + // https://pitest.org/ + PITEST_XML = 44; } } } diff --git a/app/controlplane/api/workflowcontract/v1/crafting_schema_validations.go b/app/controlplane/api/workflowcontract/v1/crafting_schema_validations.go index 6c5dfab31..22043c66a 100644 --- a/app/controlplane/api/workflowcontract/v1/crafting_schema_validations.go +++ b/app/controlplane/api/workflowcontract/v1/crafting_schema_validations.go @@ -63,6 +63,7 @@ var CraftingMaterialInValidationOrder = []CraftingSchema_Material_MaterialType{ CraftingSchema_Material_JUNIT_XML, CraftingSchema_Material_JACOCO_XML, CraftingSchema_Material_COBERTURA_XML, + CraftingSchema_Material_PITEST_XML, CraftingSchema_Material_HELM_CHART, CraftingSchema_Material_SARIF, CraftingSchema_Material_BLACKDUCK_SCA_JSON, diff --git a/pkg/attestation/crafter/api/attestation/v1/crafting_state.go b/pkg/attestation/crafter/api/attestation/v1/crafting_state.go index e5ae4259e..cbcded7f4 100644 --- a/pkg/attestation/crafter/api/attestation/v1/crafting_state.go +++ b/pkg/attestation/crafter/api/attestation/v1/crafting_state.go @@ -31,6 +31,7 @@ import ( "github.com/chainloop-dev/chainloop/pkg/attestation/crafter/materials/dranzer" "github.com/chainloop-dev/chainloop/pkg/attestation/crafter/materials/jacoco" materialsjunit "github.com/chainloop-dev/chainloop/pkg/attestation/crafter/materials/junit" + "github.com/chainloop-dev/chainloop/pkg/attestation/crafter/materials/pitest" materialsradamsa "github.com/chainloop-dev/chainloop/pkg/attestation/crafter/materials/radamsa" "github.com/chainloop-dev/chainloop/pkg/attestation/crafter/materials/trufflehog" "github.com/chainloop-dev/chainloop/pkg/tabular" @@ -261,6 +262,12 @@ func (m *Attestation_Material) ingestMaterialToJSON(rawMaterial []byte, value st return nil, fmt.Errorf("invalid Cobertura report file: %w", err) } return json.Marshal(&report) + case v1.CraftingSchema_Material_PITEST_XML: + var report pitest.Report + if err := xml.Unmarshal(rawMaterial, &report); err != nil { + return nil, fmt.Errorf("invalid PIT report file: %w", err) + } + return json.Marshal(&report) case v1.CraftingSchema_Material_SYSINTERNALS_SIGCHECK: report, err := tabular.Parse(rawMaterial) if err != nil { diff --git a/pkg/attestation/crafter/api/attestation/v1/crafting_state_test.go b/pkg/attestation/crafter/api/attestation/v1/crafting_state_test.go index 3df00d172..b95f9e9dd 100644 --- a/pkg/attestation/crafter/api/attestation/v1/crafting_state_test.go +++ b/pkg/attestation/crafter/api/attestation/v1/crafting_state_test.go @@ -619,3 +619,115 @@ func TestTruffleHogCleanScanIsEvaluableInline(t *testing.T) { require.True(t, ok, "clean scan must project to an elements array") assert.Empty(t, elements) } + +// pitestMaterial builds an artifact material of kind PITEST_XML for +// projection tests. +func pitestMaterial() *Attestation_Material { + return &Attestation_Material{ + MaterialType: schemaapi.CraftingSchema_Material_PITEST_XML, + M: &Attestation_Material_Artifact_{ + Artifact: &Attestation_Material_Artifact{Name: "mutations", Digest: "sha256:deadbeef"}, + }, + } +} + +// pitestMutations decodes the evaluable content of a PIT report and returns +// its mutation records. +func pitestMutations(t *testing.T, path string) (map[string]any, []any) { + t.Helper() + + content, err := pitestMaterial().GetEvaluableContent(path) + require.NoError(t, err) + + var decoded map[string]any + require.NoError(t, json.NewDecoder(bytes.NewReader(content)).Decode(&decoded)) + mutations, ok := decoded["mutations"].([]any) + require.True(t, ok, "PIT report must project to a mutations array") + return decoded, mutations +} + +// TestPitestReportIsEvaluable guards the XML-to-JSON projection of a standard +// PIT report: the root partial flag is preserved and every mutation record is +// projected with its own fields. +func TestPitestReportIsEvaluable(t *testing.T) { + decoded, mutations := pitestMutations(t, "testdata/pitest.xml") + assert.Equal(t, true, decoded["partial"], "root partial attribute must be preserved") + assert.Len(t, mutations, 3, "every mutation record must be projected") +} + +// TestPitestSurvivedMutationKeepsStatus guards that a SURVIVED mutant keeps +// detected=false and status=SURVIVED along with its source location, mutator, +// indexes, blocks and description, so a policy can single out surviving +// covered mutants. +func TestPitestSurvivedMutationKeepsStatus(t *testing.T) { + _, mutations := pitestMutations(t, "testdata/pitest.xml") + + var survived map[string]any + for _, m := range mutations { + mutation := m.(map[string]any) + if mutation["status"] == "SURVIVED" { + survived = mutation + break + } + } + require.NotNil(t, survived, "fixture must contain a SURVIVED mutation") + assert.Equal(t, false, survived["detected"]) + assert.Equal(t, "SURVIVED", survived["status"]) + assert.Equal(t, "PetController.java", survived["sourceFile"]) + assert.Equal(t, "org.springframework.samples.petclinic.owner.PetController", survived["mutatedClass"]) + assert.NotEmpty(t, survived["mutatedMethod"]) + assert.NotEmpty(t, survived["methodDescription"]) + assert.NotZero(t, survived["lineNumber"]) + assert.NotEmpty(t, survived["mutator"]) + assert.NotEmpty(t, survived["indexes"]) + assert.NotEmpty(t, survived["blocks"]) + assert.NotEmpty(t, survived["description"]) +} + +// TestPitestNoCoverageKeepsStatusDistinct guards that a NO_COVERAGE mutant is +// not collapsed into the same signal as a surviving covered mutant: it keeps +// status=NO_COVERAGE and numberOfTestsRun=0. +func TestPitestNoCoverageKeepsStatusDistinct(t *testing.T) { + _, mutations := pitestMutations(t, "testdata/pitest.xml") + + var noCoverage map[string]any + for _, m := range mutations { + mutation := m.(map[string]any) + if mutation["status"] == "NO_COVERAGE" { + noCoverage = mutation + break + } + } + require.NotNil(t, noCoverage, "fixture must contain a NO_COVERAGE mutation") + assert.Equal(t, "NO_COVERAGE", noCoverage["status"]) + assert.Equal(t, false, noCoverage["detected"]) + assert.EqualValues(t, 0, noCoverage["numberOfTestsRun"]) +} + +// TestPitestFullMutationMatrixIsEvaluable guards that a report generated with +// PIT's fullMutationMatrix option preserves its killingTests, succeedingTests +// and coveringTests lists (pipe-delimited, kept unsplit) instead of the +// standard killingTest field. +func TestPitestFullMutationMatrixIsEvaluable(t *testing.T) { + _, mutations := pitestMutations(t, "testdata/pitest-full-matrix.xml") + require.Len(t, mutations, 1) + + mutation := mutations[0].(map[string]any) + assert.Equal(t, + "org.springframework.samples.petclinic.owner.PetControllerTests.processCreationFormSuccess()|org.springframework.samples.petclinic.owner.PetControllerTests.processCreationFormError()", + mutation["killingTests"]) + assert.Equal(t, + "org.springframework.samples.petclinic.owner.PetControllerTests.processUpdateForm()", + mutation["succeedingTests"]) + assert.Equal(t, + "org.springframework.samples.petclinic.owner.PetControllerTests.processCreationFormSuccess()|org.springframework.samples.petclinic.owner.PetControllerTests.processUpdateForm()", + mutation["coveringTests"]) + assert.NotContains(t, mutation, "killingTest", "full-matrix reports must not manufacture the standard killingTest field") +} + +// TestPitestInvalidReportIsNotEvaluable guards that a non-PIT XML report +// fails the projection instead of producing an empty policy input. +func TestPitestInvalidReportIsNotEvaluable(t *testing.T) { + _, err := pitestMaterial().GetEvaluableContent("testdata/cobertura.xml") + require.ErrorContains(t, err, "invalid PIT report file") +} diff --git a/pkg/attestation/crafter/api/attestation/v1/testdata/pitest-full-matrix.xml b/pkg/attestation/crafter/api/attestation/v1/testdata/pitest-full-matrix.xml new file mode 100644 index 000000000..417db62a4 --- /dev/null +++ b/pkg/attestation/crafter/api/attestation/v1/testdata/pitest-full-matrix.xml @@ -0,0 +1,4 @@ + + +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerfindOwner(I)Lorg/springframework/samples/petclinic/owner/Owner;72org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator203org.springframework.samples.petclinic.owner.PetControllerTests.processCreationFormSuccess()|org.springframework.samples.petclinic.owner.PetControllerTests.processCreationFormError()org.springframework.samples.petclinic.owner.PetControllerTests.processUpdateForm()org.springframework.samples.petclinic.owner.PetControllerTests.processCreationFormSuccess()|org.springframework.samples.petclinic.owner.PetControllerTests.processUpdateForm()replaced return value with null for org/springframework/samples/petclinic/owner/PetController::findOwner + diff --git a/pkg/attestation/crafter/api/attestation/v1/testdata/pitest.xml b/pkg/attestation/crafter/api/attestation/v1/testdata/pitest.xml new file mode 100644 index 000000000..47a580b35 --- /dev/null +++ b/pkg/attestation/crafter/api/attestation/v1/testdata/pitest.xml @@ -0,0 +1,6 @@ + + +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerfindOwner(I)Lorg/springframework/samples/petclinic/owner/Owner;72org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator203org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[method:processCreationFormSuccess()]replaced return value with null for org/springframework/samples/petclinic/owner/PetController::findOwner +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerinitCreationForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/ui/ModelMap;)Ljava/lang/String;103org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator111removed call to org/springframework/samples/petclinic/owner/Owner::addPet +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerlambda$findOwner$0(I)Ljava/lang/IllegalArgumentException;70org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator81replaced return value with null for org/springframework/samples/petclinic/owner/PetController::lambda$findOwner$0 + diff --git a/pkg/attestation/crafter/crafter_test.go b/pkg/attestation/crafter/crafter_test.go index 2b9627391..46e8decde 100644 --- a/pkg/attestation/crafter/crafter_test.go +++ b/pkg/attestation/crafter/crafter_test.go @@ -653,6 +653,11 @@ func (s *crafterSuite) TestAddMaterialsAutomatic() { materialPath: "./materials/testdata/junit.xml", expectedType: schemaapi.CraftingSchema_Material_JUNIT_XML, }, + { + name: "pitest", + materialPath: "./materials/testdata/pitest.xml", + expectedType: schemaapi.CraftingSchema_Material_PITEST_XML, + }, { name: "junit with custom material name", materialName: "custom-junit-material", diff --git a/pkg/attestation/crafter/materials/cobertura_test.go b/pkg/attestation/crafter/materials/cobertura_test.go index 04b3fdbb1..4431a4884 100644 --- a/pkg/attestation/crafter/materials/cobertura_test.go +++ b/pkg/attestation/crafter/materials/cobertura_test.go @@ -57,6 +57,11 @@ func TestCoberturaCraft(t *testing.T) { filePath: "./testdata/junit.xml", wantErr: "unexpected material type", }, + { + name: "wrong xml root (PIT mutations report)", + filePath: "./testdata/pitest.xml", + wantErr: "unexpected material type", + }, { name: "valid artifact type", filePath: "./testdata/cobertura.xml", diff --git a/pkg/attestation/crafter/materials/jacoco_test.go b/pkg/attestation/crafter/materials/jacoco_test.go index d0856fc34..7688b8108 100644 --- a/pkg/attestation/crafter/materials/jacoco_test.go +++ b/pkg/attestation/crafter/materials/jacoco_test.go @@ -52,6 +52,11 @@ func TestJacocoCraft(t *testing.T) { filePath: "./testdata/junit.xml", wantErr: "unexpected material type", }, + { + name: "invalid Jacoco file (PIT mutations report)", + filePath: "./testdata/pitest.xml", + wantErr: "unexpected material type", + }, { name: "valid artifact type", filePath: "./testdata/jacoco.xml", diff --git a/pkg/attestation/crafter/materials/materials.go b/pkg/attestation/crafter/materials/materials.go index e55931c7d..ad29a312d 100644 --- a/pkg/attestation/crafter/materials/materials.go +++ b/pkg/attestation/crafter/materials/materials.go @@ -388,6 +388,8 @@ func Craft(ctx context.Context, materialSchema *schemaapi.CraftingSchema_Materia crafter = NewJacocoCrafter(materialSchema, casBackend, logger) case schemaapi.CraftingSchema_Material_COBERTURA_XML: crafter = NewCoberturaCrafter(materialSchema, casBackend, logger) + case schemaapi.CraftingSchema_Material_PITEST_XML: + crafter = NewPitestCrafter(materialSchema, casBackend, logger) case schemaapi.CraftingSchema_Material_OPENVEX: crafter, err = NewOpenVEXCrafter(materialSchema, casBackend, logger) case schemaapi.CraftingSchema_Material_CSAF_VEX: diff --git a/pkg/attestation/crafter/materials/pitest.go b/pkg/attestation/crafter/materials/pitest.go new file mode 100644 index 000000000..5c54f88c3 --- /dev/null +++ b/pkg/attestation/crafter/materials/pitest.go @@ -0,0 +1,72 @@ +// +// Copyright 2026 The Chainloop Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package materials + +import ( + "context" + "encoding/xml" + "fmt" + "io" + "os" + + schemaapi "github.com/chainloop-dev/chainloop/app/controlplane/api/workflowcontract/v1" + api "github.com/chainloop-dev/chainloop/pkg/attestation/crafter/api/attestation/v1" + "github.com/chainloop-dev/chainloop/pkg/attestation/crafter/materials/pitest" + "github.com/chainloop-dev/chainloop/pkg/casclient" + "github.com/rs/zerolog" +) + +type PitestCrafter struct { + *crafterCommon + backend *casclient.CASBackend +} + +func NewPitestCrafter(schema *schemaapi.CraftingSchema_Material, backend *casclient.CASBackend, l *zerolog.Logger) *PitestCrafter { + return &PitestCrafter{ + crafterCommon: &crafterCommon{logger: l, input: schema}, + backend: backend, + } +} + +func (c *PitestCrafter) Craft(ctx context.Context, filePath string) (*api.Attestation_Material, error) { + f, err := os.Open(filePath) + if err != nil { + return nil, fmt.Errorf("can't open the file: %w", err) + } + defer f.Close() + + data, err := io.ReadAll(f) + if err != nil { + return nil, fmt.Errorf("can't read the file: %w", err) + } + + var report pitest.Report + // Report pins its XMLName to "mutations", so xml.Unmarshal rejects a + // mismatched root element (e.g. JaCoCo's , Cobertura's + // or JUnit's ). + if err := xml.Unmarshal(data, &report); err != nil { + return nil, fmt.Errorf("invalid PIT report file: %w", ErrInvalidMaterialType) + } + + // An empty report means no mutants were analyzed, not a 0% or + // 100% result; downstream score calculations would otherwise divide by + // zero. Reject it instead of uploading contentless evidence. + if len(report.Mutations) == 0 { + return nil, fmt.Errorf("invalid PIT report file, no mutations found: %w", ErrInvalidMaterialType) + } + + return uploadAndCraft(ctx, c.input, c.backend, filePath, c.logger) +} diff --git a/pkg/attestation/crafter/materials/pitest/pitest.go b/pkg/attestation/crafter/materials/pitest/pitest.go new file mode 100644 index 000000000..926359fbc --- /dev/null +++ b/pkg/attestation/crafter/materials/pitest/pitest.go @@ -0,0 +1,58 @@ +// +// Copyright 2026 The Chainloop Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package pitest provides the XML structs to parse PIT mutation testing +// reports (mutations.xml). See https://pitest.org/ and PIT's +// XMLReportListener for the format definition. +package pitest + +import "encoding/xml" + +// Report is the root element of a PIT report. +type Report struct { + XMLName xml.Name `xml:"mutations" json:"-"` + // Partial mirrors PIT's partial root attribute: a partial report covers + // only the mutations PIT analyzed before the run was cut short. + Partial bool `xml:"partial,attr" json:"partial"` + Mutations []Mutation `xml:"mutation" json:"mutations"` +} + +// Mutation is a single record. Status is preserved verbatim +// (KILLED, SURVIVED, NO_COVERAGE, ...) rather than validated against a closed +// enum or derived from Detected, so NO_COVERAGE stays distinguishable from +// SURVIVED and the projection stays forward-compatible with new PIT statuses. +type Mutation struct { + Detected bool `xml:"detected,attr" json:"detected"` + Status string `xml:"status,attr" json:"status"` + NumberOfTestsRun int `xml:"numberOfTestsRun,attr" json:"numberOfTestsRun"` + SourceFile string `xml:"sourceFile" json:"sourceFile"` + MutatedClass string `xml:"mutatedClass" json:"mutatedClass"` + MutatedMethod string `xml:"mutatedMethod" json:"mutatedMethod"` + MethodDescription string `xml:"methodDescription" json:"methodDescription"` + LineNumber int `xml:"lineNumber" json:"lineNumber"` + Mutator string `xml:"mutator" json:"mutator"` + Indexes []int `xml:"indexes>index" json:"indexes"` + Blocks []int `xml:"blocks>block" json:"blocks"` + // Standard reports emit KillingTest; reports generated with + // fullMutationMatrix emit KillingTests, SucceedingTests and CoveringTests + // instead, each a '|'-delimited list of test names kept unsplit. Only + // these four fields are omitempty so both report shapes keep their native + // representation without manufacturing absent fields. + KillingTest string `xml:"killingTest" json:"killingTest,omitempty"` + KillingTests string `xml:"killingTests" json:"killingTests,omitempty"` + SucceedingTests string `xml:"succeedingTests" json:"succeedingTests,omitempty"` + CoveringTests string `xml:"coveringTests" json:"coveringTests,omitempty"` + Description string `xml:"description" json:"description"` +} diff --git a/pkg/attestation/crafter/materials/pitest_test.go b/pkg/attestation/crafter/materials/pitest_test.go new file mode 100644 index 000000000..f5cb77fab --- /dev/null +++ b/pkg/attestation/crafter/materials/pitest_test.go @@ -0,0 +1,136 @@ +// +// Copyright 2026 The Chainloop Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//nolint:dupl +package materials_test + +import ( + "context" + "path/filepath" + "testing" + + contractAPI "github.com/chainloop-dev/chainloop/app/controlplane/api/workflowcontract/v1" + attestationApi "github.com/chainloop-dev/chainloop/pkg/attestation/crafter/api/attestation/v1" + "github.com/chainloop-dev/chainloop/pkg/attestation/crafter/materials" + "github.com/chainloop-dev/chainloop/pkg/casclient" + mUploader "github.com/chainloop-dev/chainloop/pkg/casclient/mocks" + "github.com/rs/zerolog" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" +) + +func TestPitestCraft(t *testing.T) { + testCases := []struct { + name string + filePath string + wantErr string + wantDigest string + }{ + { + name: "invalid path", + filePath: "./testdata/non-existing.xml", + wantErr: "no such file or directory", + }, + { + name: "invalid artifact type", + filePath: "./testdata/simple.txt", + wantErr: "unexpected material type", + }, + { + name: "wrong xml root (jacoco report)", + filePath: "./testdata/jacoco.xml", + wantErr: "unexpected material type", + }, + { + name: "wrong xml root (cobertura coverage)", + filePath: "./testdata/cobertura.xml", + wantErr: "unexpected material type", + }, + { + name: "wrong xml root (junit testsuite)", + filePath: "./testdata/junit.xml", + wantErr: "unexpected material type", + }, + { + name: "valid artifact type", + filePath: "./testdata/pitest.xml", + wantDigest: "sha256:32bce80d562307c69f3e60eadc2aaa56be2f9d47d4aff354aa35e7c4d6bb909f", + }, + { + name: "valid full mutation matrix report", + filePath: "./testdata/pitest-full-matrix.xml", + wantDigest: "sha256:ed5677f32b319ee35064e92b2fcc0d03db266cb1484e209f293fc007f8aed494", + }, + } + + assert := assert.New(t) + schema := &contractAPI.CraftingSchema_Material{ + Name: "test", + Type: contractAPI.CraftingSchema_Material_PITEST_XML, + } + l := zerolog.Nop() + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + // Mock uploader + uploader := mUploader.NewUploader(t) + if tc.wantErr == "" { + uploader.On("Upload", context.TODO(), mock.Anything, mock.Anything, mock.Anything). + Return(&casclient.UpDownStatus{ + Digest: "deadbeef", + Filename: "pitest.xml", + }, nil) + } + backend := &casclient.CASBackend{Uploader: uploader} + crafter := materials.NewPitestCrafter(schema, backend, &l) + + got, err := crafter.Craft(context.TODO(), tc.filePath) + if tc.wantErr != "" { + assert.ErrorContains(err, tc.wantErr) + return + } + + require.NoError(t, err) + assert.Equal(contractAPI.CraftingSchema_Material_PITEST_XML.String(), got.MaterialType.String()) + assert.True(got.UploadedToCas) + + // The result includes the digest reference + assert.Equal(&attestationApi.Attestation_Material_Artifact{ + Id: "test", Digest: tc.wantDigest, Name: filepath.Base(tc.filePath), + }, got.GetArtifact()) + }) + } +} + +// TestPitestCraftEmptyReport asserts that a report with a valid +// root but no records is rejected: it means no mutants were +// analyzed, not a 0% or 100% result, and downstream score calculations would +// otherwise divide by zero. The file must not be uploaded to the CAS. +func TestPitestCraftEmptyReport(t *testing.T) { + schema := &contractAPI.CraftingSchema_Material{ + Name: "test", + Type: contractAPI.CraftingSchema_Material_PITEST_XML, + } + l := zerolog.Nop() + // No Upload expectation: the mock fails the test if an upload happens. + uploader := mUploader.NewUploader(t) + backend := &casclient.CASBackend{Uploader: uploader} + crafter := materials.NewPitestCrafter(schema, backend, &l) + + _, err := crafter.Craft(context.TODO(), "./testdata/pitest-empty.xml") + require.Error(t, err) + assert.ErrorContains(t, err, "invalid PIT report file, no mutations found") + assert.ErrorIs(t, err, materials.ErrInvalidMaterialType) +} diff --git a/pkg/attestation/crafter/materials/testdata/pitest-empty.xml b/pkg/attestation/crafter/materials/testdata/pitest-empty.xml new file mode 100644 index 000000000..a4a148359 --- /dev/null +++ b/pkg/attestation/crafter/materials/testdata/pitest-empty.xml @@ -0,0 +1,3 @@ + + + diff --git a/pkg/attestation/crafter/materials/testdata/pitest-full-matrix.xml b/pkg/attestation/crafter/materials/testdata/pitest-full-matrix.xml new file mode 100644 index 000000000..417db62a4 --- /dev/null +++ b/pkg/attestation/crafter/materials/testdata/pitest-full-matrix.xml @@ -0,0 +1,4 @@ + + +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerfindOwner(I)Lorg/springframework/samples/petclinic/owner/Owner;72org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator203org.springframework.samples.petclinic.owner.PetControllerTests.processCreationFormSuccess()|org.springframework.samples.petclinic.owner.PetControllerTests.processCreationFormError()org.springframework.samples.petclinic.owner.PetControllerTests.processUpdateForm()org.springframework.samples.petclinic.owner.PetControllerTests.processCreationFormSuccess()|org.springframework.samples.petclinic.owner.PetControllerTests.processUpdateForm()replaced return value with null for org/springframework/samples/petclinic/owner/PetController::findOwner + diff --git a/pkg/attestation/crafter/materials/testdata/pitest.xml b/pkg/attestation/crafter/materials/testdata/pitest.xml new file mode 100644 index 000000000..19e6dc53b --- /dev/null +++ b/pkg/attestation/crafter/materials/testdata/pitest.xml @@ -0,0 +1,167 @@ + + +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerfindOwner(I)Lorg/springframework/samples/petclinic/owner/Owner;72org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator203org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[method:processCreationFormSuccess()]replaced return value with null for org/springframework/samples/petclinic/owner/PetController::findOwner +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerfindPet(ILjava/lang/Integer;)Lorg/springframework/samples/petclinic/owner/Pet;79org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[method:processCreationFormSuccess()]negated conditional +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerfindPet(ILjava/lang/Integer;)Lorg/springframework/samples/petclinic/owner/Pet;80org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator102org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[method:processCreationFormSuccess()]replaced return value with null for org/springframework/samples/petclinic/owner/PetController::findPet +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerfindPet(ILjava/lang/Integer;)Lorg/springframework/samples/petclinic/owner/Pet;86org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator337org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[method:processUpdateFormWithSameName()]replaced return value with null for org/springframework/samples/petclinic/owner/PetController::findPet +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerinitCreationForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/ui/ModelMap;)Ljava/lang/String;103org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator111removed call to org/springframework/samples/petclinic/owner/Owner::addPet +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerinitCreationForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/ui/ModelMap;)Ljava/lang/String;104org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator152org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[method:initCreationForm()]replaced return value with "" for org/springframework/samples/petclinic/owner/PetController::initCreationForm +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerinitOwnerBinder(Lorg/springframework/web/bind/WebDataBinder;)V91org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator140removed call to org/springframework/web/bind/WebDataBinder::setDisallowedFields +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerinitPetBinder(Lorg/springframework/web/bind/WebDataBinder;)V96org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator71org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[nested-class:ProcessCreationFormHasErrors]/[method:processCreationFormWithBlankName()]removed call to org/springframework/web/bind/WebDataBinder::setValidator +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerinitPetBinder(Lorg/springframework/web/bind/WebDataBinder;)V97org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator212removed call to org/springframework/web/bind/WebDataBinder::setDisallowedFields +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerinitUpdateForm()Ljava/lang/String;141org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator40org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[nested-class:ProcessCreationFormHasErrors]/[method:initUpdateForm()]replaced return value with "" for org/springframework/samples/petclinic/owner/PetController::initUpdateForm +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerisDuplicatePetNameViolation(Lorg/springframework/dao/DataIntegrityViolationException;)Z204org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator91org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[nested-class:ProcessCreationFormHasErrors]/[method:processCreationFormWithDataIntegrityViolation()]negated conditional +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerisDuplicatePetNameViolation(Lorg/springframework/dao/DataIntegrityViolationException;)Z204org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator144org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[nested-class:ProcessCreationFormHasErrors]/[method:processCreationFormWithDataIntegrityViolation()]negated conditional +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerisDuplicatePetNameViolation(Lorg/springframework/dao/DataIntegrityViolationException;)Z204org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator227replaced boolean return with true for org/springframework/samples/petclinic/owner/PetController::isDuplicatePetNameViolation +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerlambda$findOwner$0(I)Ljava/lang/IllegalArgumentException;70org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator81replaced return value with null for org/springframework/samples/petclinic/owner/PetController::lambda$findOwner$0 +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerlambda$findPet$1(I)Ljava/lang/IllegalArgumentException;84org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator81replaced return value with null for org/springframework/samples/petclinic/owner/PetController::lambda$findPet$1 +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerpopulatePetTypes()Ljava/util/Collection;64org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator61replaced return value with Collections.emptyList for org/springframework/samples/petclinic/owner/PetController::populatePetTypes +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerprocessCreationForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/samples/petclinic/owner/Pet;Lorg/springframework/validation/BindingResult;Lorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;111org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator62org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[nested-class:ProcessCreationFormHasErrors]/[method:processCreationFormWithDuplicateName()]negated conditional +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerprocessCreationForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/samples/petclinic/owner/Pet;Lorg/springframework/validation/BindingResult;Lorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;111org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator94org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[nested-class:ProcessCreationFormHasErrors]/[method:processCreationFormWithDuplicateName()]negated conditional +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerprocessCreationForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/samples/petclinic/owner/Pet;Lorg/springframework/validation/BindingResult;Lorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;111org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator157org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[method:processCreationFormSuccess()]negated conditional +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerprocessCreationForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/samples/petclinic/owner/Pet;Lorg/springframework/validation/BindingResult;Lorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;116org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator3211org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[nested-class:ProcessCreationFormHasErrors]/[method:processCreationFormWithInvalidBirthDate()]negated conditional +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerprocessCreationForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/samples/petclinic/owner/Pet;Lorg/springframework/validation/BindingResult;Lorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;116org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator3714org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[method:processCreationFormSuccess()]negated conditional +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerprocessCreationForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/samples/petclinic/owner/Pet;Lorg/springframework/validation/BindingResult;Lorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;120org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator4917org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[method:processCreationFormSuccess()]negated conditional +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerprocessCreationForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/samples/petclinic/owner/Pet;Lorg/springframework/validation/BindingResult;Lorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;129org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator7923org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[nested-class:ProcessCreationFormHasErrors]/[method:processCreationFormWithDataIntegrityViolation()]negated conditional +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerprocessCreationForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/samples/petclinic/owner/Pet;Lorg/springframework/validation/BindingResult;Lorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;112org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator228org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[nested-class:ProcessCreationFormHasErrors]/[method:processCreationFormWithDuplicateName()]removed call to org/springframework/validation/BindingResult::rejectValue +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerprocessCreationForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/samples/petclinic/owner/Pet;Lorg/springframework/validation/BindingResult;Lorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;117org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator4315org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[nested-class:ProcessCreationFormHasErrors]/[method:processCreationFormWithInvalidBirthDate()]removed call to org/springframework/validation/BindingResult::rejectValue +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerprocessCreationForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/samples/petclinic/owner/Pet;Lorg/springframework/validation/BindingResult;Lorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;125org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator5919removed call to org/springframework/samples/petclinic/owner/Owner::addPet +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerprocessCreationForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/samples/petclinic/owner/Pet;Lorg/springframework/validation/BindingResult;Lorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;132org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator9125org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[nested-class:ProcessCreationFormHasErrors]/[method:processCreationFormWithDataIntegrityViolation()]removed call to org/springframework/validation/BindingResult::rejectValue +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerprocessCreationForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/samples/petclinic/owner/Pet;Lorg/springframework/validation/BindingResult;Lorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;121org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator5318org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[nested-class:ProcessCreationFormHasErrors]/[method:processCreationFormWithBlankName()]replaced return value with "" for org/springframework/samples/petclinic/owner/PetController::processCreationForm +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerprocessCreationForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/samples/petclinic/owner/Pet;Lorg/springframework/validation/BindingResult;Lorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;133org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator9526org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[nested-class:ProcessCreationFormHasErrors]/[method:processCreationFormWithDataIntegrityViolation()]replaced return value with "" for org/springframework/samples/petclinic/owner/PetController::processCreationForm +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerprocessCreationForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/samples/petclinic/owner/Pet;Lorg/springframework/validation/BindingResult;Lorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;136org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator10728org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[method:processCreationFormSuccess()]replaced return value with "" for org/springframework/samples/petclinic/owner/PetController::processCreationForm +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerprocessUpdateForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/samples/petclinic/owner/Pet;Lorg/springframework/validation/BindingResult;Lorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;151org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator102org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[nested-class:ProcessUpdateFormHasErrors]/[method:processUpdateFormWithDuplicateName()]negated conditional +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerprocessUpdateForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/samples/petclinic/owner/Pet;Lorg/springframework/validation/BindingResult;Lorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;153org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator214org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[nested-class:ProcessUpdateFormHasErrors]/[method:processUpdateFormWithDuplicateName()]negated conditional +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerprocessUpdateForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/samples/petclinic/owner/Pet;Lorg/springframework/validation/BindingResult;Lorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;153org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator278org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[method:processUpdateFormWithSameName()]negated conditional +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerprocessUpdateForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/samples/petclinic/owner/Pet;Lorg/springframework/validation/BindingResult;Lorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;159org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator4412org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[nested-class:ProcessUpdateFormHasErrors]/[method:processUpdateFormWithInvalidBirthDate()]negated conditional +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerprocessUpdateForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/samples/petclinic/owner/Pet;Lorg/springframework/validation/BindingResult;Lorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;159org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator4915org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[method:processUpdateFormWithSameName()]negated conditional +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerprocessUpdateForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/samples/petclinic/owner/Pet;Lorg/springframework/validation/BindingResult;Lorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;163org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator6118org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[method:processUpdateFormWithSameName()]negated conditional +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerprocessUpdateForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/samples/petclinic/owner/Pet;Lorg/springframework/validation/BindingResult;Lorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;171org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator8523org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[nested-class:ProcessUpdateFormHasErrors]/[method:processUpdateFormWithDataIntegrityViolation()]negated conditional +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerprocessUpdateForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/samples/petclinic/owner/Pet;Lorg/springframework/validation/BindingResult;Lorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;154org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator349org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[nested-class:ProcessUpdateFormHasErrors]/[method:processUpdateFormWithDuplicateName()]removed call to org/springframework/validation/BindingResult::rejectValue +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerprocessUpdateForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/samples/petclinic/owner/Pet;Lorg/springframework/validation/BindingResult;Lorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;160org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator5516removed call to org/springframework/validation/BindingResult::rejectValue +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerprocessUpdateForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/samples/petclinic/owner/Pet;Lorg/springframework/validation/BindingResult;Lorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;168org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator7220org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[nested-class:ProcessUpdateFormHasErrors]/[method:processUpdateFormWithDataIntegrityViolation()]removed call to org/springframework/samples/petclinic/owner/PetController::updatePetDetails +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerprocessUpdateForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/samples/petclinic/owner/Pet;Lorg/springframework/validation/BindingResult;Lorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;174org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator9725org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[nested-class:ProcessUpdateFormHasErrors]/[method:processUpdateFormWithDataIntegrityViolation()]removed call to org/springframework/validation/BindingResult::rejectValue +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerprocessUpdateForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/samples/petclinic/owner/Pet;Lorg/springframework/validation/BindingResult;Lorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;164org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator6519org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[nested-class:ProcessUpdateFormHasErrors]/[method:processUpdateFormWithBlankName()]replaced return value with "" for org/springframework/samples/petclinic/owner/PetController::processUpdateForm +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerprocessUpdateForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/samples/petclinic/owner/Pet;Lorg/springframework/validation/BindingResult;Lorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;175org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator10126org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[nested-class:ProcessUpdateFormHasErrors]/[method:processUpdateFormWithDataIntegrityViolation()]replaced return value with "" for org/springframework/samples/petclinic/owner/PetController::processUpdateForm +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerprocessUpdateForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/samples/petclinic/owner/Pet;Lorg/springframework/validation/BindingResult;Lorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;178org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator11328org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[method:processUpdateFormWithSameName()]replaced return value with "" for org/springframework/samples/petclinic/owner/PetController::processUpdateForm +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerupdatePetDetails(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/samples/petclinic/owner/Pet;)V188org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator91org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[method:processUpdateFormWithSameName()]negated conditional +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerupdatePetDetails(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/samples/petclinic/owner/Pet;)V190org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator286negated conditional +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerupdatePetDetails(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/samples/petclinic/owner/Pet;)V188org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator184removed call to org/springframework/util/Assert::state +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerupdatePetDetails(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/samples/petclinic/owner/Pet;)V192org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator348removed call to org/springframework/samples/petclinic/owner/Pet::setName +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerupdatePetDetails(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/samples/petclinic/owner/Pet;)V193org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator4010removed call to org/springframework/samples/petclinic/owner/Pet::setBirthDate +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerupdatePetDetails(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/samples/petclinic/owner/Pet;)V194org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator4612removed call to org/springframework/samples/petclinic/owner/Pet::setType +PetController.javaorg.springframework.samples.petclinic.owner.PetControllerupdatePetDetails(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/samples/petclinic/owner/Pet;)V197org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator5314removed call to org/springframework/samples/petclinic/owner/Owner::addPet +OwnerController.javaorg.springframework.samples.petclinic.owner.OwnerControlleraddPaginationModel(ILorg/springframework/ui/Model;Lorg/springframework/data/domain/Page;)Ljava/lang/String;130org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator4210org.springframework.samples.petclinic.owner.OwnerControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.OwnerControllerTests]/[method:processFindFormSuccess()]replaced return value with "" for org/springframework/samples/petclinic/owner/OwnerController::addPaginationModel +OwnerController.javaorg.springframework.samples.petclinic.owner.OwnerControllerfindOwner(Ljava/lang/Integer;)Lorg/springframework/samples/petclinic/owner/Owner;66org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40org.springframework.samples.petclinic.owner.OwnerControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.OwnerControllerTests]/[method:processFindFormByLastName()]negated conditional +OwnerController.javaorg.springframework.samples.petclinic.owner.OwnerControllerfindOwner(Ljava/lang/Integer;)Lorg/springframework/samples/petclinic/owner/Owner;66org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator276org.springframework.samples.petclinic.owner.OwnerControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.OwnerControllerTests]/[method:processFindFormByLastName()]replaced return value with null for org/springframework/samples/petclinic/owner/OwnerController::findOwner +OwnerController.javaorg.springframework.samples.petclinic.owner.OwnerControllerfindPaginatedForOwnersLastName(ILjava/lang/String;)Lorg/springframework/data/domain/Page;135org.pitest.mutationtest.engine.gregor.mutators.MathMutator90Replaced integer subtraction with addition +OwnerController.javaorg.springframework.samples.petclinic.owner.OwnerControllerfindPaginatedForOwnersLastName(ILjava/lang/String;)Lorg/springframework/data/domain/Page;136org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator202org.springframework.samples.petclinic.owner.OwnerControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.OwnerControllerTests]/[method:processFindFormByLastName()]replaced return value with null for org/springframework/samples/petclinic/owner/OwnerController::findPaginatedForOwnersLastName +OwnerController.javaorg.springframework.samples.petclinic.owner.OwnerControllerinitCreationForm()Ljava/lang/String;74org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator40org.springframework.samples.petclinic.owner.OwnerControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.OwnerControllerTests]/[method:initCreationForm()]replaced return value with "" for org/springframework/samples/petclinic/owner/OwnerController::initCreationForm +OwnerController.javaorg.springframework.samples.petclinic.owner.OwnerControllerinitFindForm()Ljava/lang/String;91org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator40org.springframework.samples.petclinic.owner.OwnerControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.OwnerControllerTests]/[method:initFindForm()]replaced return value with "" for org/springframework/samples/petclinic/owner/OwnerController::initFindForm +OwnerController.javaorg.springframework.samples.petclinic.owner.OwnerControllerinitUpdateOwnerForm()Ljava/lang/String;141org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator40org.springframework.samples.petclinic.owner.OwnerControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.OwnerControllerTests]/[method:initUpdateOwnerForm()]replaced return value with "" for org/springframework/samples/petclinic/owner/OwnerController::initUpdateOwnerForm +OwnerController.javaorg.springframework.samples.petclinic.owner.OwnerControllerlambda$findOwner$0(Ljava/lang/Integer;)Ljava/lang/IllegalArgumentException;68org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator81replaced return value with null for org/springframework/samples/petclinic/owner/OwnerController::lambda$findOwner$0 +OwnerController.javaorg.springframework.samples.petclinic.owner.OwnerControllerlambda$showOwner$1(I)Ljava/lang/IllegalArgumentException;173org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator81replaced return value with null for org/springframework/samples/petclinic/owner/OwnerController::lambda$showOwner$1 +OwnerController.javaorg.springframework.samples.petclinic.owner.OwnerControllerprocessCreationForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/validation/BindingResult;Lorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;79org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator51org.springframework.samples.petclinic.owner.OwnerControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.OwnerControllerTests]/[method:processCreationFormSuccess()]negated conditional +OwnerController.javaorg.springframework.samples.petclinic.owner.OwnerControllerprocessCreationForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/validation/BindingResult;Lorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;81org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator163org.springframework.samples.petclinic.owner.OwnerControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.OwnerControllerTests]/[method:processCreationFormHasErrors()]replaced return value with "" for org/springframework/samples/petclinic/owner/OwnerController::processCreationForm +OwnerController.javaorg.springframework.samples.petclinic.owner.OwnerControllerprocessCreationForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/validation/BindingResult;Lorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;86org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator377org.springframework.samples.petclinic.owner.OwnerControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.OwnerControllerTests]/[method:processCreationFormSuccess()]replaced return value with "" for org/springframework/samples/petclinic/owner/OwnerController::processCreationForm +OwnerController.javaorg.springframework.samples.petclinic.owner.OwnerControllerprocessFindForm(ILorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/validation/BindingResult;Lorg/springframework/ui/Model;)Ljava/lang/String;99org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator91org.springframework.samples.petclinic.owner.OwnerControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.OwnerControllerTests]/[method:processFindFormByLastName()]negated conditional +OwnerController.javaorg.springframework.samples.petclinic.owner.OwnerControllerprocessFindForm(ILorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/validation/BindingResult;Lorg/springframework/ui/Model;)Ljava/lang/String;108org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator337org.springframework.samples.petclinic.owner.OwnerControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.OwnerControllerTests]/[method:processFindFormByLastName()]negated conditional +OwnerController.javaorg.springframework.samples.petclinic.owner.OwnerControllerprocessFindForm(ILorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/validation/BindingResult;Lorg/springframework/ui/Model;)Ljava/lang/String;114org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator5211org.springframework.samples.petclinic.owner.OwnerControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.OwnerControllerTests]/[method:processFindFormByLastName()]negated conditional +OwnerController.javaorg.springframework.samples.petclinic.owner.OwnerControllerprocessFindForm(ILorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/validation/BindingResult;Lorg/springframework/ui/Model;)Ljava/lang/String;110org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator408org.springframework.samples.petclinic.owner.OwnerControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.OwnerControllerTests]/[method:processFindFormNoOwnersFound()]removed call to org/springframework/validation/BindingResult::rejectValue +OwnerController.javaorg.springframework.samples.petclinic.owner.OwnerControllerprocessFindForm(ILorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/validation/BindingResult;Lorg/springframework/ui/Model;)Ljava/lang/String;111org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator449org.springframework.samples.petclinic.owner.OwnerControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.OwnerControllerTests]/[method:processFindFormNoOwnersFound()]replaced return value with "" for org/springframework/samples/petclinic/owner/OwnerController::processFindForm +OwnerController.javaorg.springframework.samples.petclinic.owner.OwnerControllerprocessFindForm(ILorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/validation/BindingResult;Lorg/springframework/ui/Model;)Ljava/lang/String;117org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator6515org.springframework.samples.petclinic.owner.OwnerControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.OwnerControllerTests]/[method:processFindFormByLastName()]replaced return value with "" for org/springframework/samples/petclinic/owner/OwnerController::processFindForm +OwnerController.javaorg.springframework.samples.petclinic.owner.OwnerControllerprocessFindForm(ILorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/validation/BindingResult;Lorg/springframework/ui/Model;)Ljava/lang/String;121org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator7417org.springframework.samples.petclinic.owner.OwnerControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.OwnerControllerTests]/[method:processFindFormSuccess()]replaced return value with "" for org/springframework/samples/petclinic/owner/OwnerController::processFindForm +OwnerController.javaorg.springframework.samples.petclinic.owner.OwnerControllerprocessUpdateOwnerForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/validation/BindingResult;ILorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;147org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator51org.springframework.samples.petclinic.owner.OwnerControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.OwnerControllerTests]/[method:processUpdateOwnerFormSuccess()]negated conditional +OwnerController.javaorg.springframework.samples.petclinic.owner.OwnerControllerprocessUpdateOwnerForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/validation/BindingResult;ILorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;152org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator257org.springframework.samples.petclinic.owner.OwnerControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.OwnerControllerTests]/[method:processUpdateOwnerFormSuccess()]negated conditional +OwnerController.javaorg.springframework.samples.petclinic.owner.OwnerControllerprocessUpdateOwnerForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/validation/BindingResult;ILorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;153org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator328removed call to org/springframework/validation/BindingResult::rejectValue +OwnerController.javaorg.springframework.samples.petclinic.owner.OwnerControllerprocessUpdateOwnerForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/validation/BindingResult;ILorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;158org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator5012removed call to org/springframework/samples/petclinic/owner/Owner::setId +OwnerController.javaorg.springframework.samples.petclinic.owner.OwnerControllerprocessUpdateOwnerForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/validation/BindingResult;ILorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;149org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator163org.springframework.samples.petclinic.owner.OwnerControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.OwnerControllerTests]/[method:processUpdateOwnerFormHasErrors()]replaced return value with "" for org/springframework/samples/petclinic/owner/OwnerController::processUpdateOwnerForm +OwnerController.javaorg.springframework.samples.petclinic.owner.OwnerControllerprocessUpdateOwnerForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/validation/BindingResult;ILorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;155org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator4310org.springframework.samples.petclinic.owner.OwnerControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.OwnerControllerTests]/[method:processUpdateOwnerFormWithIdMismatch()]replaced return value with "" for org/springframework/samples/petclinic/owner/OwnerController::processUpdateOwnerForm +OwnerController.javaorg.springframework.samples.petclinic.owner.OwnerControllerprocessUpdateOwnerForm(Lorg/springframework/samples/petclinic/owner/Owner;Lorg/springframework/validation/BindingResult;ILorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;161org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator6815org.springframework.samples.petclinic.owner.OwnerControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.OwnerControllerTests]/[method:processUpdateOwnerFormSuccess()]replaced return value with "" for org/springframework/samples/petclinic/owner/OwnerController::processUpdateOwnerForm +OwnerController.javaorg.springframework.samples.petclinic.owner.OwnerControllersetAllowedFields(Lorg/springframework/web/bind/WebDataBinder;)V61org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator140removed call to org/springframework/web/bind/WebDataBinder::setDisallowedFields +OwnerController.javaorg.springframework.samples.petclinic.owner.OwnerControllershowOwner(I)Lorg/springframework/web/servlet/ModelAndView;176org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator335org.springframework.samples.petclinic.owner.OwnerControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.OwnerControllerTests]/[method:showOwner()]replaced return value with null for org/springframework/samples/petclinic/owner/OwnerController::showOwner +Owner.javaorg.springframework.samples.petclinic.owner.OwneraddPet(Lorg/springframework/samples/petclinic/owner/Pet;)V98org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator40org.springframework.samples.petclinic.owner.OwnerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.OwnerTests]/[method:addPetDoesNotAddDuplicatePet()]negated conditional +Owner.javaorg.springframework.samples.petclinic.owner.OwneraddPet(Lorg/springframework/samples/petclinic/owner/Pet;)V101org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator154org.springframework.samples.petclinic.owner.OwnerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.OwnerTests]/[method:addPetDoesNotAddDuplicatePet()]negated conditional +Owner.javaorg.springframework.samples.petclinic.owner.OwneraddPet(Lorg/springframework/samples/petclinic/owner/Pet;)V105org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator3913negated conditional +Owner.javaorg.springframework.samples.petclinic.owner.OwneraddPet(Lorg/springframework/samples/petclinic/owner/Pet;)V105org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator4215negated conditional +Owner.javaorg.springframework.samples.petclinic.owner.OwneraddPet(Lorg/springframework/samples/petclinic/owner/Pet;)V105org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator4819negated conditional +Owner.javaorg.springframework.samples.petclinic.owner.OwneraddVisit(Ljava/lang/Integer;Lorg/springframework/samples/petclinic/owner/Visit;)V175org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator50removed call to org/springframework/util/Assert::notNull +Owner.javaorg.springframework.samples.petclinic.owner.OwneraddVisit(Ljava/lang/Integer;Lorg/springframework/samples/petclinic/owner/Visit;)V176org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator101removed call to org/springframework/util/Assert::notNull +Owner.javaorg.springframework.samples.petclinic.owner.OwneraddVisit(Ljava/lang/Integer;Lorg/springframework/samples/petclinic/owner/Visit;)V180org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator213removed call to org/springframework/util/Assert::notNull +Owner.javaorg.springframework.samples.petclinic.owner.OwneraddVisit(Ljava/lang/Integer;Lorg/springframework/samples/petclinic/owner/Visit;)V182org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator264org.springframework.samples.petclinic.service.ClinicServiceTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.service.ClinicServiceTests]/[method:shouldAddNewVisitForPet()]removed call to org/springframework/samples/petclinic/owner/Pet::addVisit +Owner.javaorg.springframework.samples.petclinic.owner.OwnergetAddress()Ljava/lang/String;70org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator50org.springframework.samples.petclinic.owner.OwnerControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.OwnerControllerTests]/[method:initUpdateOwnerForm()]replaced return value with "" for org/springframework/samples/petclinic/owner/Owner::getAddress +Owner.javaorg.springframework.samples.petclinic.owner.OwnergetCity()Ljava/lang/String;78org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator50org.springframework.samples.petclinic.owner.OwnerControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.OwnerControllerTests]/[method:initUpdateOwnerForm()]replaced return value with "" for org/springframework/samples/petclinic/owner/Owner::getCity +Owner.javaorg.springframework.samples.petclinic.owner.OwnergetPet(Ljava/lang/Integer;)Lorg/springframework/samples/petclinic/owner/Pet;128org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator207org.springframework.samples.petclinic.service.ClinicServiceTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.service.ClinicServiceTests]/[method:shouldUpdatePetName()]negated conditional +Owner.javaorg.springframework.samples.petclinic.owner.OwnergetPet(Ljava/lang/Integer;)Lorg/springframework/samples/petclinic/owner/Pet;130org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator3110org.springframework.samples.petclinic.service.ClinicServiceTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.service.ClinicServiceTests]/[method:shouldAddNewVisitForPet()]negated conditional +Owner.javaorg.springframework.samples.petclinic.owner.OwnergetPet(Ljava/lang/Integer;)Lorg/springframework/samples/petclinic/owner/Pet;131org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator3511org.springframework.samples.petclinic.service.ClinicServiceTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.service.ClinicServiceTests]/[method:shouldUpdatePetName()]replaced return value with null for org/springframework/samples/petclinic/owner/Owner::getPet +Owner.javaorg.springframework.samples.petclinic.owner.OwnergetPet(Ljava/lang/String;)Lorg/springframework/samples/petclinic/owner/Pet;118org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator71org.springframework.samples.petclinic.owner.OwnerControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.OwnerControllerTests]/[method:processFindFormByLastName()]replaced return value with null for org/springframework/samples/petclinic/owner/Owner::getPet +Owner.javaorg.springframework.samples.petclinic.owner.OwnergetPet(Ljava/lang/String;Z)Lorg/springframework/samples/petclinic/owner/Pet;147org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator247org.springframework.samples.petclinic.owner.OwnerControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.OwnerControllerTests]/[method:processFindFormByLastName()]negated conditional +Owner.javaorg.springframework.samples.petclinic.owner.OwnergetPet(Ljava/lang/String;Z)Lorg/springframework/samples/petclinic/owner/Pet;147org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator289org.springframework.samples.petclinic.owner.OwnerControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.OwnerControllerTests]/[method:processFindFormByLastName()]negated conditional +Owner.javaorg.springframework.samples.petclinic.owner.OwnergetPet(Ljava/lang/String;Z)Lorg/springframework/samples/petclinic/owner/Pet;148org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator3210negated conditional +Owner.javaorg.springframework.samples.petclinic.owner.OwnergetPet(Ljava/lang/String;Z)Lorg/springframework/samples/petclinic/owner/Pet;148org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator3512org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[nested-class:ProcessCreationFormHasErrors]/[method:processCreationFormWithDuplicateName()]negated conditional +Owner.javaorg.springframework.samples.petclinic.owner.OwnergetPet(Ljava/lang/String;Z)Lorg/springframework/samples/petclinic/owner/Pet;149org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator4013org.springframework.samples.petclinic.owner.OwnerControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.OwnerControllerTests]/[method:processFindFormByLastName()]replaced return value with null for org/springframework/samples/petclinic/owner/Owner::getPet +Owner.javaorg.springframework.samples.petclinic.owner.OwnergetPets()Ljava/util/List;94org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator50org.springframework.samples.petclinic.owner.OwnerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.OwnerTests]/[method:addPetDoesNotAddDuplicatePet()]replaced return value with Collections.emptyList for org/springframework/samples/petclinic/owner/Owner::getPets +Owner.javaorg.springframework.samples.petclinic.owner.OwnergetTelephone()Ljava/lang/String;86org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator50org.springframework.samples.petclinic.owner.OwnerControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.OwnerControllerTests]/[method:initUpdateOwnerForm()]replaced return value with "" for org/springframework/samples/petclinic/owner/Owner::getTelephone +Owner.javaorg.springframework.samples.petclinic.owner.OwnertoString()Ljava/lang/String;158org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator5213replaced return value with "" for org/springframework/samples/petclinic/owner/Owner::toString +VisitController.javaorg.springframework.samples.petclinic.owner.VisitControllerinitNewVisitForm()Ljava/lang/String;92org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator40org.springframework.samples.petclinic.owner.VisitControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.VisitControllerTests]/[method:initNewVisitForm()]replaced return value with "" for org/springframework/samples/petclinic/owner/VisitController::initNewVisitForm +VisitController.javaorg.springframework.samples.petclinic.owner.VisitControllerlambda$loadPetWithVisit$0(I)Ljava/lang/IllegalArgumentException;67org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator81replaced return value with null for org/springframework/samples/petclinic/owner/VisitController::lambda$loadPetWithVisit$0 +VisitController.javaorg.springframework.samples.petclinic.owner.VisitControllerloadPetWithVisit(IILjava/util/Map;)Lorg/springframework/samples/petclinic/owner/Visit;71org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator275org.springframework.samples.petclinic.owner.VisitControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.VisitControllerTests]/[method:processNewVisitFormSuccess()]negated conditional +VisitController.javaorg.springframework.samples.petclinic.owner.VisitControllerloadPetWithVisit(IILjava/util/Map;)Lorg/springframework/samples/petclinic/owner/Visit;79org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator6211removed call to org/springframework/samples/petclinic/owner/Pet::addVisit +VisitController.javaorg.springframework.samples.petclinic.owner.VisitControllerloadPetWithVisit(IILjava/util/Map;)Lorg/springframework/samples/petclinic/owner/Visit;80org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator6612org.springframework.samples.petclinic.owner.VisitControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.VisitControllerTests]/[method:processNewVisitFormSuccess()]replaced return value with null for org/springframework/samples/petclinic/owner/VisitController::loadPetWithVisit +VisitController.javaorg.springframework.samples.petclinic.owner.VisitControllerminVisitDate()Ljava/time/LocalDate;85org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator62replaced return value with null for org/springframework/samples/petclinic/owner/VisitController::minVisitDate +VisitController.javaorg.springframework.samples.petclinic.owner.VisitControllerprocessNewVisitForm(Lorg/springframework/samples/petclinic/owner/Owner;ILorg/springframework/samples/petclinic/owner/Visit;Lorg/springframework/validation/BindingResult;Lorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;100org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator51org.springframework.samples.petclinic.owner.VisitControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.VisitControllerTests]/[method:processNewVisitFormHasErrorsWhenVisitDateIsNotInFuture()]negated conditional +VisitController.javaorg.springframework.samples.petclinic.owner.VisitControllerprocessNewVisitForm(Lorg/springframework/samples/petclinic/owner/Owner;ILorg/springframework/samples/petclinic/owner/Visit;Lorg/springframework/validation/BindingResult;Lorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;100org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator105org.springframework.samples.petclinic.owner.VisitControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.VisitControllerTests]/[method:processNewVisitFormSuccess()]negated conditional +VisitController.javaorg.springframework.samples.petclinic.owner.VisitControllerprocessNewVisitForm(Lorg/springframework/samples/petclinic/owner/Owner;ILorg/springframework/samples/petclinic/owner/Visit;Lorg/springframework/validation/BindingResult;Lorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;104org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator228org.springframework.samples.petclinic.owner.VisitControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.VisitControllerTests]/[method:processNewVisitFormSuccess()]negated conditional +VisitController.javaorg.springframework.samples.petclinic.owner.VisitControllerprocessNewVisitForm(Lorg/springframework/samples/petclinic/owner/Owner;ILorg/springframework/samples/petclinic/owner/Visit;Lorg/springframework/validation/BindingResult;Lorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;101org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator166org.springframework.samples.petclinic.owner.VisitControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.VisitControllerTests]/[method:processNewVisitFormHasErrorsWhenVisitDateIsNotInFuture()]removed call to org/springframework/validation/BindingResult::rejectValue +VisitController.javaorg.springframework.samples.petclinic.owner.VisitControllerprocessNewVisitForm(Lorg/springframework/samples/petclinic/owner/Owner;ILorg/springframework/samples/petclinic/owner/Visit;Lorg/springframework/validation/BindingResult;Lorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;108org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator3411removed call to org/springframework/samples/petclinic/owner/Owner::addVisit +VisitController.javaorg.springframework.samples.petclinic.owner.VisitControllerprocessNewVisitForm(Lorg/springframework/samples/petclinic/owner/Owner;ILorg/springframework/samples/petclinic/owner/Visit;Lorg/springframework/validation/BindingResult;Lorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;105org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator269org.springframework.samples.petclinic.owner.VisitControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.VisitControllerTests]/[method:processNewVisitFormHasErrorsWhenVisitDateIsNotInFuture()]replaced return value with "" for org/springframework/samples/petclinic/owner/VisitController::processNewVisitForm +VisitController.javaorg.springframework.samples.petclinic.owner.VisitControllerprocessNewVisitForm(Lorg/springframework/samples/petclinic/owner/Owner;ILorg/springframework/samples/petclinic/owner/Visit;Lorg/springframework/validation/BindingResult;Lorg/springframework/web/servlet/mvc/support/RedirectAttributes;)Ljava/lang/String;111org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator5214org.springframework.samples.petclinic.owner.VisitControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.VisitControllerTests]/[method:processNewVisitFormSuccess()]replaced return value with "" for org/springframework/samples/petclinic/owner/VisitController::processNewVisitForm +VisitController.javaorg.springframework.samples.petclinic.owner.VisitControllersetAllowedFields(Lorg/springframework/web/bind/WebDataBinder;)V53org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator140removed call to org/springframework/web/bind/WebDataBinder::setDisallowedFields +PetValidator.javaorg.springframework.samples.petclinic.owner.PetValidatorsupports(Ljava/lang/Class;)Z66org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanFalseReturnValsMutator61org.springframework.samples.petclinic.owner.PetValidatorTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetValidatorTests]/[method:supportsPetClass()]replaced boolean return with false for org/springframework/samples/petclinic/owner/PetValidator::supports +PetValidator.javaorg.springframework.samples.petclinic.owner.PetValidatorsupports(Ljava/lang/Class;)Z66org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator61org.springframework.samples.petclinic.owner.PetValidatorTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetValidatorTests]/[method:doesNotSupportNonPetClass()]replaced boolean return with true for org/springframework/samples/petclinic/owner/PetValidator::supports +PetValidator.javaorg.springframework.samples.petclinic.owner.PetValidatorvalidate(Ljava/lang/Object;Lorg/springframework/validation/Errors;)V46org.pitest.mutationtest.engine.gregor.mutators.ConditionalsBoundaryMutator306changed conditional boundary +PetValidator.javaorg.springframework.samples.petclinic.owner.PetValidatorvalidate(Ljava/lang/Object;Lorg/springframework/validation/Errors;)V43org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator152org.springframework.samples.petclinic.owner.PetValidatorTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetValidatorTests]/[method:validate()]negated conditional +PetValidator.javaorg.springframework.samples.petclinic.owner.PetValidatorvalidate(Ljava/lang/Object;Lorg/springframework/validation/Errors;)V46org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator306org.springframework.samples.petclinic.owner.PetValidatorTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetValidatorTests]/[method:validate()]negated conditional +PetValidator.javaorg.springframework.samples.petclinic.owner.PetValidatorvalidate(Ljava/lang/Object;Lorg/springframework/validation/Errors;)V51org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator439org.springframework.samples.petclinic.owner.PetValidatorTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetValidatorTests]/[nested-class:ValidateHasErrors]/[method:validateWithInvalidPetType()]negated conditional +PetValidator.javaorg.springframework.samples.petclinic.owner.PetValidatorvalidate(Ljava/lang/Object;Lorg/springframework/validation/Errors;)V51org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator4611org.springframework.samples.petclinic.owner.PetValidatorTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetValidatorTests]/[method:validate()]negated conditional +PetValidator.javaorg.springframework.samples.petclinic.owner.PetValidatorvalidate(Ljava/lang/Object;Lorg/springframework/validation/Errors;)V56org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator5914org.springframework.samples.petclinic.owner.PetValidatorTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetValidatorTests]/[method:validate()]negated conditional +PetValidator.javaorg.springframework.samples.petclinic.owner.PetValidatorvalidate(Ljava/lang/Object;Lorg/springframework/validation/Errors;)V44org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator223org.springframework.samples.petclinic.owner.PetValidatorTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetValidatorTests]/[nested-class:ValidateHasErrors]/[method:validateWithInvalidPetName()]removed call to org/springframework/validation/Errors::rejectValue +PetValidator.javaorg.springframework.samples.petclinic.owner.PetValidatorvalidate(Ljava/lang/Object;Lorg/springframework/validation/Errors;)V47org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator377org.springframework.samples.petclinic.owner.PetValidatorTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetValidatorTests]/[nested-class:ValidateHasErrors]/[method:validateWithLongPetName()]removed call to org/springframework/validation/Errors::rejectValue +PetValidator.javaorg.springframework.samples.petclinic.owner.PetValidatorvalidate(Ljava/lang/Object;Lorg/springframework/validation/Errors;)V52org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator5312org.springframework.samples.petclinic.owner.PetValidatorTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetValidatorTests]/[nested-class:ValidateHasErrors]/[method:validateWithInvalidPetType()]removed call to org/springframework/validation/Errors::rejectValue +PetValidator.javaorg.springframework.samples.petclinic.owner.PetValidatorvalidate(Ljava/lang/Object;Lorg/springframework/validation/Errors;)V57org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator6615org.springframework.samples.petclinic.owner.PetValidatorTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetValidatorTests]/[nested-class:ValidateHasErrors]/[method:validateWithInvalidBirthDate()]removed call to org/springframework/validation/Errors::rejectValue +VetController.javaorg.springframework.samples.petclinic.vet.VetControlleraddPaginationModel(ILorg/springframework/data/domain/Page;Lorg/springframework/ui/Model;)Ljava/lang/String;56org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator4210org.springframework.samples.petclinic.vet.VetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.vet.VetControllerTests]/[method:showVetListHtml()]replaced return value with "" for org/springframework/samples/petclinic/vet/VetController::addPaginationModel +VetController.javaorg.springframework.samples.petclinic.vet.VetControllerfindPaginated(I)Lorg/springframework/data/domain/Page;61org.pitest.mutationtest.engine.gregor.mutators.MathMutator90Replaced integer subtraction with addition +VetController.javaorg.springframework.samples.petclinic.vet.VetControllerfindPaginated(I)Lorg/springframework/data/domain/Page;62org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator192org.springframework.samples.petclinic.vet.VetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.vet.VetControllerTests]/[method:showVetListHtml()]replaced return value with null for org/springframework/samples/petclinic/vet/VetController::findPaginated +VetController.javaorg.springframework.samples.petclinic.vet.VetControllershowResourcesVetList()Lorg/springframework/samples/petclinic/vet/Vets;71org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator194org.springframework.samples.petclinic.vet.VetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.vet.VetControllerTests]/[method:showResourcesVetList()]replaced return value with null for org/springframework/samples/petclinic/vet/VetController::showResourcesVetList +VetController.javaorg.springframework.samples.petclinic.vet.VetControllershowVetList(ILorg/springframework/ui/Model;)Ljava/lang/String;47org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator142org.springframework.samples.petclinic.vet.VetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.vet.VetControllerTests]/[method:showVetListHtml()]replaced return value with "" for org/springframework/samples/petclinic/vet/VetController::showVetList +WebConfiguration.javaorg.springframework.samples.petclinic.system.WebConfigurationlocaleChangeInterceptor()Lorg/springframework/web/servlet/i18n/LocaleChangeInterceptor;47org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator111removed call to org/springframework/web/servlet/i18n/LocaleChangeInterceptor::setParamName +WebConfiguration.javaorg.springframework.samples.petclinic.system.WebConfigurationlocaleChangeInterceptor()Lorg/springframework/web/servlet/i18n/LocaleChangeInterceptor;48org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator152replaced return value with null for org/springframework/samples/petclinic/system/WebConfiguration::localeChangeInterceptor +WebConfiguration.javaorg.springframework.samples.petclinic.system.WebConfigurationlocaleResolver()Lorg/springframework/web/servlet/LocaleResolver;35org.pitest.mutationtest.engine.gregor.mutators.VoidMethodCallMutator111removed call to org/springframework/web/servlet/i18n/SessionLocaleResolver::setDefaultLocale +WebConfiguration.javaorg.springframework.samples.petclinic.system.WebConfigurationlocaleResolver()Lorg/springframework/web/servlet/LocaleResolver;36org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator152replaced return value with null for org/springframework/samples/petclinic/system/WebConfiguration::localeResolver +Vet.javaorg.springframework.samples.petclinic.vet.VetgetNrOfSpecialties()I67org.pitest.mutationtest.engine.gregor.mutators.returns.PrimitiveReturnsMutator62org.springframework.samples.petclinic.service.ClinicServiceTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.service.ClinicServiceTests]/[method:shouldFindVets()]replaced int return with 0 for org/springframework/samples/petclinic/vet/Vet::getNrOfSpecialties +Vet.javaorg.springframework.samples.petclinic.vet.VetgetSpecialties()Ljava/util/List;61org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator186org.springframework.samples.petclinic.service.ClinicServiceTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.service.ClinicServiceTests]/[method:shouldFindVets()]replaced return value with Collections.emptyList for org/springframework/samples/petclinic/vet/Vet::getSpecialties +Vet.javaorg.springframework.samples.petclinic.vet.VetgetSpecialtiesInternal()Ljava/util/Set;53org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator50org.springframework.samples.petclinic.service.ClinicServiceTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.service.ClinicServiceTests]/[method:shouldFindVets()]negated conditional +Vet.javaorg.springframework.samples.petclinic.vet.VetgetSpecialtiesInternal()Ljava/util/Set;56org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator183org.springframework.samples.petclinic.service.ClinicServiceTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.service.ClinicServiceTests]/[method:shouldFindVets()]replaced return value with Collections.emptySet for org/springframework/samples/petclinic/vet/Vet::getSpecialtiesInternal +PetTypeFormatter.javaorg.springframework.samples.petclinic.owner.PetTypeFormatterparse(Ljava/lang/String;Ljava/util/Locale;)Lorg/springframework/samples/petclinic/owner/PetType;55org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator278org.springframework.samples.petclinic.owner.PetTypeFormatterTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetTypeFormatterTests]/[method:shouldParse()]negated conditional +PetTypeFormatter.javaorg.springframework.samples.petclinic.owner.PetTypeFormatterparse(Ljava/lang/String;Ljava/util/Locale;)Lorg/springframework/samples/petclinic/owner/PetType;56org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator319org.springframework.samples.petclinic.owner.PetTypeFormatterTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetTypeFormatterTests]/[method:shouldParse()]replaced return value with null for org/springframework/samples/petclinic/owner/PetTypeFormatter::parse +PetTypeFormatter.javaorg.springframework.samples.petclinic.owner.PetTypeFormatterprint(Lorg/springframework/samples/petclinic/owner/PetType;Ljava/util/Locale;)Ljava/lang/String;48org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator91org.springframework.samples.petclinic.owner.PetTypeFormatterTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetTypeFormatterTests]/[method:testPrint()]negated conditional +PetTypeFormatter.javaorg.springframework.samples.petclinic.owner.PetTypeFormatterprint(Lorg/springframework/samples/petclinic/owner/PetType;Ljava/util/Locale;)Ljava/lang/String;48org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator174org.springframework.samples.petclinic.owner.PetTypeFormatterTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetTypeFormatterTests]/[method:testPrint()]replaced return value with "" for org/springframework/samples/petclinic/owner/PetTypeFormatter::print +BaseEntity.javaorg.springframework.samples.petclinic.model.BaseEntitygetId()Ljava/lang/Integer;40org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator50org.springframework.samples.petclinic.service.ClinicServiceTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.service.ClinicServiceTests]/[method:shouldFindAllPetTypes()]replaced Integer return value with 0 for org/springframework/samples/petclinic/model/BaseEntity::getId +BaseEntity.javaorg.springframework.samples.petclinic.model.BaseEntityisNew()Z48org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator50org.springframework.samples.petclinic.owner.PetValidatorTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetValidatorTests]/[nested-class:ValidateHasErrors]/[method:validateWithInvalidPetType()]negated conditional +BaseEntity.javaorg.springframework.samples.petclinic.model.BaseEntityisNew()Z48org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator133org.springframework.samples.petclinic.service.ClinicServiceTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.service.ClinicServiceTests]/[method:shouldUpdatePetName()]replaced boolean return with true for org/springframework/samples/petclinic/model/BaseEntity::isNew +NamedEntity.javaorg.springframework.samples.petclinic.model.NamedEntitygetName()Ljava/lang/String;38org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator50org.springframework.samples.petclinic.owner.PetTypeFormatterTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetTypeFormatterTests]/[method:testPrint()]replaced return value with "" for org/springframework/samples/petclinic/model/NamedEntity::getName +NamedEntity.javaorg.springframework.samples.petclinic.model.NamedEntitytoString()Ljava/lang/String;48org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator91org.springframework.samples.petclinic.owner.PetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetControllerTests]/[nested-class:ProcessCreationFormHasErrors]/[method:initUpdateForm()]negated conditional +NamedEntity.javaorg.springframework.samples.petclinic.model.NamedEntitytoString()Ljava/lang/String;48org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator174replaced return value with "" for org/springframework/samples/petclinic/model/NamedEntity::toString +Pet.javaorg.springframework.samples.petclinic.owner.PetgetBirthDate()Ljava/time/LocalDate;66org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator50org.springframework.samples.petclinic.owner.PetValidatorTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetValidatorTests]/[method:validate()]replaced return value with null for org/springframework/samples/petclinic/owner/Pet::getBirthDate +Pet.javaorg.springframework.samples.petclinic.owner.PetgetType()Lorg/springframework/samples/petclinic/owner/PetType;70org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator50org.springframework.samples.petclinic.owner.PetValidatorTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.PetValidatorTests]/[method:validate()]replaced return value with null for org/springframework/samples/petclinic/owner/Pet::getType +Pet.javaorg.springframework.samples.petclinic.owner.PetgetVisits()Ljava/util/Collection;78org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator50org.springframework.samples.petclinic.service.ClinicServiceTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.service.ClinicServiceTests]/[method:shouldFindVisitsByPetId()]replaced return value with Collections.emptyList for org/springframework/samples/petclinic/owner/Pet::getVisits +Person.javaorg.springframework.samples.petclinic.model.PersongetFirstName()Ljava/lang/String;42org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator50org.springframework.samples.petclinic.owner.OwnerControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.owner.OwnerControllerTests]/[method:initUpdateOwnerForm()]replaced return value with "" for org/springframework/samples/petclinic/model/Person::getFirstName +Person.javaorg.springframework.samples.petclinic.model.PersongetLastName()Ljava/lang/String;50org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator50org.springframework.samples.petclinic.service.ClinicServiceTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.service.ClinicServiceTests]/[method:shouldFindSingleOwnerWithPet()]replaced return value with "" for org/springframework/samples/petclinic/model/Person::getLastName +CacheConfiguration.javaorg.springframework.samples.petclinic.system.CacheConfigurationcacheConfiguration()Ljavax/cache/configuration/Configuration;50org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator82replaced return value with null for org/springframework/samples/petclinic/system/CacheConfiguration::cacheConfiguration +CacheConfiguration.javaorg.springframework.samples.petclinic.system.CacheConfigurationpetclinicCacheConfigurationCustomizer()Lorg/springframework/boot/cache/autoconfigure/JCacheManagerCustomizer;37org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator50replaced return value with null for org/springframework/samples/petclinic/system/CacheConfiguration::petclinicCacheConfigurationCustomizer +Visit.javaorg.springframework.samples.petclinic.owner.VisitgetDate()Ljava/time/LocalDate;53org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator50org.springframework.samples.petclinic.service.ClinicServiceTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.service.ClinicServiceTests]/[method:shouldFindVisitsByPetId()]replaced return value with null for org/springframework/samples/petclinic/owner/Visit::getDate +Visit.javaorg.springframework.samples.petclinic.owner.VisitgetDescription()Ljava/lang/String;61org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator50replaced return value with "" for org/springframework/samples/petclinic/owner/Visit::getDescription +Vets.javaorg.springframework.samples.petclinic.vet.VetsgetVetList()Ljava/util/List;37org.pitest.mutationtest.engine.gregor.mutators.NegateConditionalsMutator50org.springframework.samples.petclinic.vet.VetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.vet.VetControllerTests]/[method:showResourcesVetList()]negated conditional +Vets.javaorg.springframework.samples.petclinic.vet.VetsgetVetList()Ljava/util/List;40org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator183org.springframework.samples.petclinic.vet.VetControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.vet.VetControllerTests]/[method:showResourcesVetList()]replaced return value with Collections.emptyList for org/springframework/samples/petclinic/vet/Vets::getVetList +WelcomeController.javaorg.springframework.samples.petclinic.system.WelcomeControllerwelcome()Ljava/lang/String;27org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator40org.springframework.samples.petclinic.system.WelcomeControllerTests.[engine:junit-jupiter]/[class:org.springframework.samples.petclinic.system.WelcomeControllerTests]/[method:welcome()]replaced return value with "" for org/springframework/samples/petclinic/system/WelcomeController::welcome +