Files
werkcrappit/docs/acceptance-test-map.md
claude-code e98c594480
werkator build succeeded after 02:59
werkator/publish build succeeded after 00:18
werkator/mutation build succeeded after 00:56
Wrapped levels with room for their edges (0.26.12) (#67)
Co-authored-by: claude-code <claude-code@javagil.de>
2026-10-11 19:25:21 +02:00

58 KiB

Acceptance Test Map

The Gherkin features under features/ are verified by JUnit tests, not by a Cucumber runner. This map links every requirement ID to its tests and status. FeatureFilesTest parses the features and fails when an ID is missing here or named here without a feature.

ID Feature Tests Status
MC-001 01-metric MethodEvaluatorTest.scoreFollowsTheFormula (one case per row) passing
MC-002 01-metric MethodEvaluatorTest.onlyNonEligibleMutantsGiveNoScore passing (core); report visibility in step 5
MC-003 01-metric MethodEvaluatorTest.methodWithoutResultsIsNotShownAsWellTested passing (core); report in step 5
MC-004 01-metric MethodEvaluatorTest.negativeKilledCountIsRejected, .negativeComplexityIsRejected, .complexityZeroForAScoredMethodIsRejected passing
MC-005 02-status-policy MethodEvaluatorTest.uncoveredMutantsStayInTheDenominator passing
MC-006 02-status-policy MethodEvaluatorTest.excludedStatusesDoNotRaiseTheTestStrength (one case per row) passing
MC-007 02-status-policy MethodEvaluatorTest.ambiguousFinalResultsPreventARegularScore (one case per row) passing under strict-v1; the default timeouts-killed-v1 counts TIMED_OUT as killed (ADR 0006, TimeoutsKilledV1Test)
MC-008 03-complexity-and-identity JacocoComplexityTest.totalComplexityWithoutExecutionData, PitWalkingSkeletonTest.noExtraTestRunAndNoJacocoExecutionData passing
MC-009 03-complexity-and-identity JacocoComplexityTest.sameComplexitiesWithoutDebugInformation passing (adapter level, compiled with -g and -g:none)
MC-010 03-complexity-and-identity JacocoComplexityTest.overloadsStaySeparate, JoinTest.overloadsUseOnlyTheirOwnComplexityAndMutants passing
MC-011 03-complexity-and-identity JoinTest.resultsOfAnUnreadableClassAreComplexityUnavailable, InventoryBuilderTest.aSelectedClassWithoutClassFileMakesTheScopeIncomplete, GateTest.missingComplexityIsAnAnalysisError passing
MC-012 03-complexity-and-identity InventoryBuilderTest.everyMethodWithABodyOfASelectedClassIsInTheInventory, PitWalkingSkeletonTest.aClassWithoutAnyResultBlockStaysInTheInventory passing
MC-013 03-complexity-and-identity MutationCrapListenerTest.anExcludedMethodKeepsItsResultsButLeavesTheEvaluation, PitWalkingSkeletonTest.theOptionsFromPluginConfigurationTakeEffect, ExclusionRulesTest, GateTest.excludedMethodsTakeNoPart passing
MC-014 04-pit-lifecycle MutationCrapListenerTest.severalBlocksOfOneClassAreMerged, MutantAggregatorTest.resultsOfSeveralBlocksAddUp passing
MC-015 04-pit-lifecycle MutationCrapListenerTest.orderOfBlocksDoesNotChangeTheReport, MutantAggregatorTest.orderDoesNotMatter passing
MC-016 04-pit-lifecycle MutationCrapListenerTest.repeatedResultIsCountedOnce, MutantAggregatorTest.repeatedIdenticalResultsCountOnce passing
MC-017 04-pit-lifecycle MutationCrapListenerTest.contradictingResultsMakeTheMethodInconclusive, MutantAggregatorTest.contradictingFinalResultsAreNotLastWriteWins, MethodEvaluatorTest.contradictedMutantsMakeTheMethodInconclusive passing
MC-018 04-pit-lifecycle PitWalkingSkeletonTest: theNormalPitReportsAreWrittenAlongside, pitRanItsAnalysisOnce, noExtraTestRunAndNoJacocoExecutionData, everyMutantOfPitsOwnReportIsCountedExactlyOnce, theMarkdownReportAndTheConsoleSummaryAreWritten passing
MC-019 05-reports-and-gate GateTest.withoutLimitTheGateIsInactive, GateFunctionalTest.withoutLimitTheReportsAreWrittenAndNothingFails passing
MC-020 05-reports-and-gate GateTest.onlyARealExcessViolates (one case per row), MutationCrapTest.equalityPassesTheLimit, GateFunctionalTest.aLimitAboveTheScorePasses passing
MC-021 05-reports-and-gate GateTest.theExactValueIsCompared, MutationCrapTest.comparisonUsesTheExactValue, GateFunctionalTest.theRoundedValueAsLimitFailsAndTheReportsStay passing
MC-022 05-reports-and-gate GateTest: inconclusiveIsAnAnalysisError, missingComplexityIsAnAnalysisError, incompleteScopeIsAnAnalysisError, missingOrUnreadableReportIsAnAnalysisError, unsupportedSchemaVersionIsAnAnalysisError; GateFunctionalTest.aMissingReportIsAnAnalysisError passing
MC-023 05-reports-and-gate GateTest.emptyEvaluationFails, GateFunctionalTest.anEmptyEvaluationFails passing
MC-024 05-reports-and-gate GateTest.emptyEvaluationCanBeAllowed, GateFunctionalTest.anEmptyEvaluationCanBeAllowed passing
MC-025 05-reports-and-gate GateFunctionalTest.theRoundedValueAsLimitFailsAndTheReportsStay passing
MC-026 05-reports-and-gate MutationCrapListenerTest.theReportIsSelfDescribingAndSchemaValid, PitWalkingSkeletonTest.theReportConformsToTheShippedSchema, ReportContractTest passing
MC-027 06-gradle-integration IntegrationTestsFunctionalTest.pitUsesBothSourceSetsAndNoTestTaskRuns passing
MC-028 06-gradle-integration MultiProjectFunctionalTest.eachSubprojectGetsItsOwnReportAndContext passing
MC-029 06-gradle-integration Kotlin DSL: every functional test consumes the plugins from build/functional-test-repo; Groovy DSL: GroovyDslFunctionalTest passing
MC-030 06-gradle-integration GateFunctionalTest.aChangedLimitIsJudgedWithoutAnotherPitRun, .theRoundedValueAsLimitFailsAndTheReportsStay passing
MC-031 06-gradle-integration GateFunctionalTest.aFailedPitRunDoesNotUseAnOlderReport, MutationCrapListenerTest.runStartReplacesBothReportsWithAMarkerThatIsNoResult passing
MC-032 04-pit-lifecycle ProgressTest.aLineNamesTheEstimatedTotal, .atMostOneLineAMinute, .aClassCountsOnce, MutationCrapListenerTest.progressEstimatesTheTotalFromThePreviousReport, .progressCountsFromPitsNanoTimeStart passing
MC-033 04-pit-lifecycle ProgressTest.withoutPreviousRunNoTotal, .noTotalFromUnfinishedOrUnreadableReports, .totalOfAFinishedReport, MutationCrapListenerTest.progressWithoutTotalAfterAnUnfinishedRun passing
MC-034 04-pit-lifecycle ProgressTest.moreMutantsThanBefore passing
MC-035 04-pit-lifecycle ProgressTest.theLastLine, MutationCrapListenerTest.theConsoleGetsAFewLinesAndThePathToTheReports passing
MC-CC-001 07-codecharta BuildingsTest.oneBuildingPerTopLevelClass, CodeChartaExportTest.classesOutsideThePitRunAreGreyBuildings, CodeCityTest.packagesBecomeNestedFolders, CodeChartaFunctionalTest.aRealBuildWritesAValidCity passing
MC-CC-002 07-codecharta RealLinesTest.anEntityCountsItsAnnotationsAndFieldsButNoGeneratedCode, .commentMarkersInLiteralsAreText, .textBlockLinesAreCode, CodeChartaExportTest.theReportAndTheOriginalClassFileMakeTheCity, CodeChartaFunctionalTest.theMetricsComeFromTheReport passing
MC-CC-003 07-codecharta BuildingsTest.complexityIsTheSum, .aMissingComplexityGivesAPartialSum, CodeChartaFunctionalTest.theMetricsComeFromTheReport passing
MC-CC-004 07-codecharta BuildingsTest.mutationCrapIsTheExactMaximum, CodeCityTest.mutationCrapIsRoundedAsInTheReport, CodeChartaFunctionalTest.theMetricsComeFromTheReport passing
MC-CC-005 07-codecharta BuildingsTest.withoutScoredMethodNoMutationCrap, CodeCityTest.aMissingValueIsOmitted, CodeChartaFunctionalTest.aClassWithoutScoredMethodHasNoMutationCrap passing
MC-CC-006 07-codecharta ClassReferencesTest.signaturesAnnotationsCatchAndLiteralsAreUses, LevelizationTest.aCycleIsTwoCyclicEdgesOneOfThemUpwards, CodeChartaFunctionalTest.aRealBuildWritesAValidCity passing
MC-CC-007 07-codecharta ClassReferencesTest.distinctThingsUsedAreCounted, DependenciesTest.usesOfOnePairBecomeOneEdge passing
MC-CC-008 07-codecharta LevelizationTest.aCycleIsTwoCyclicEdgesOneOfThemUpwards, CodeChartaFunctionalTest.aRealBuildWritesAValidCity passing
MC-CC-009 07-codecharta DependenciesTest.usesOfClassesWithoutBuildingAndWithinOneBuildingAreDropped, ClassReferencesTest.theInnerClassesAttributeIsNoUse passing
MC-CC-010 07-codecharta CodeCityTest.theCommitAndTheLinksAreWritten, CodeChartaExportTest.aTemplateLinksTheBuildings, CodeChartaFunctionalTest.inAGitCheckoutTheCityNamesTheCommitAndLinksTheSources passing
MC-CC-011 07-codecharta SourceLinksTest, BuildingsTest.theLinkLineIsTheHotspot, CodeChartaExportTest.aTemplateLinksTheBuildings, .aTemplateWithoutCommitStopsTheExport, .aClassWithoutCodeIsLinkedAtLineOne, CodeChartaFunctionalTest.inAGitCheckoutTheCityNamesTheCommitAndLinksTheSources passing
MC-CC-012 07-codecharta CodeCityTest.theOrderOfTheInputDoesNotMatter, LevelizationTest.theOrderOfTheDependenciesDoesNotMatter, CodeChartaFunctionalTest.aSecondExportGivesTheSameBytes passing
MC-CC-013 07-codecharta CodeCityTest.theDocumentPassesTheViewersChecks, LevelizationTest.packagesGetLevelsAndOnlyTheFeedbackEdgePointsUpwards, .theContractCatchesWhatTheViewerRefusesOrIgnores, CodeChartaExportTest.theReportAndTheOriginalClassFileMakeTheCity, CodeChartaFunctionalTest.aRealBuildWritesAValidCity passing
MC-CC-014 07-codecharta BuildingsTest.inconclusiveMethodsAreFlagged, CodeChartaExportTest.inconclusiveMethodsAreNamedInAWarning passing
MC-CC-015 07-codecharta BuildingsTest.nestedClassesBelongToTheirTopLevelClass, .topLevelNames, CodeChartaFunctionalTest.theMetricsComeFromTheReport passing
MC-CC-016 07-codecharta CodeChartaExportTest.aChangedClassFileStopsTheExport, .aMissingClassFileStopsTheExport, CodeChartaFunctionalTest.classFilesCompiledAfterThePitRunStopTheExport passing
MC-CC-017 07-codecharta CodeCityTest.chainsOfSingleFoldersAreCompacted passing
MC-CC-018 07-codecharta CodeCityTest.maximaAreRelativeEverythingElseAbsolute passing
MC-CC-019 07-codecharta RealLinesTest.anEntityCountsItsAnnotationsAndFieldsButNoGeneratedCode passing
MC-CC-020 07-codecharta JacocoLinesTest.onlyLinesWithInstructionsCount, BuildingsTest.locCountsDistinctLinesOfCountedMethods, .withoutLineInformationLocIsMissingNotZero passing
MC-CC-021 07-codecharta CodeChartaExportTest.withoutSourceFileNoRloc passing
MC-CC-022 07-codecharta CodeChartaExportTest.classesOutsideThePitRunAreGreyBuildings, CodeCityPageTest.thePageExplainsHowUnscoredClassesTurnGrey passing
MC-CC-023 07-codecharta CodeChartaExportTest.classesOutsideThePitRunAreGreyBuildings passing
MC-CC-024 07-codecharta CodeChartaExportTest.classesOutsideThePitRunAreGreyBuildings, ExclusionRulesTest.onlyClassRulesExcludeAClassAsAWhole, CodeChartaFunctionalTest.aClassCanBeLeftOutOfTheCity passing
MC-CC-025 07-codecharta CodeCityPageTest.thePageLinksTheViewerWithTheFileAndTheMapping; the script itself was tried in a browser (PR#18) passing
MC-CC-026 07-codecharta CodeCityPageTest.byDefaultThePageLinksThePatchedViewer, .aConfiguredViewerIsLinked, .aViewerThatIsNoHttpUrlIsRefused, CodeChartaFunctionalTest.theViewerOfThePageIsConfigurable passing
MC-CC-027 07-codecharta LevelizationTest.packagesGetLevelsAndOnlyTheFeedbackEdgePointsUpwards, CodeChartaFunctionalTest.aRealBuildWritesAValidCity passing
MC-CC-028 07-codecharta LevelizationTest.withoutLevelizationTheOriginalViewerAccepts, CodeChartaFunctionalTest.withoutLevelizationTheOriginalViewerAccepts passing
MC-CC-029 07-codecharta CodeCityPageTest.theLinkShowsRedShortlyBeforeTheLimit, .withoutLimitTheLinkSetsFiveAndNine, CodeChartaFunctionalTest.aRealBuildWritesAValidCity passing
MC-CC-030 07-codecharta CodeCityPageTest.redFromCanBeSet, .aRatchetKeepsYellow, .redFromAboveTheLimitIsRefused, CodeChartaFunctionalTest.whereRedStartsIsConfigurable passing
MC-CC-031 07-codecharta CodeCityPageTest.yellowFromCanBeSet, .yellowFromAboveRedIsRefused, CodeChartaFunctionalTest.whereRedStartsIsConfigurable passing
MC-CC-032 07-codecharta CodeCityScenariosTest.oneScenarioPerView, CodeChartaFunctionalTest.aRealBuildWritesAValidCity passing
MC-CC-033 07-codecharta CodeCityScenariosTest.withoutLimitCouplingHasNoBand, CodeChartaFunctionalTest.aRealBuildWritesAValidCity passing
MC-CC-034 07-codecharta CodeCityPageTest.theLinkHandsTheViewerTheScenarios; applying the scenarios: the fork of the viewer (mihoe/scenario-url-param) passing
MC-CC-035 07-codecharta CodeCityTest.theCityShowsTheChangeRisk, CodeCityScenariosTest.changeRiskIsTheFourthScenario, CodeCityPageTest.thePageOpensTheCityByChangeRisk, CodeChartaFunctionalTest.aRealBuildWritesAValidCity passing
MC-CC-036 07-codecharta CodeCityPageTest.thePageLeadsWithTheFourViews passing
MC-CK-001 08-cohesion-coupling DesignAnalysisTest.twoIndependentPartsAreTwoGroups passing
MC-CK-002 08-cohesion-coupling DesignAnalysisTest.constructorsGeneratedAndStaticMethodsConnectNothing passing
MC-CK-003 08-cohesion-coupling DesignAnalysisTest.callsGettersAndLambdasConnect passing
MC-CK-004 08-cohesion-coupling DesignAnalysisTest.nestedClassesCountForTheirTopLevelClass passing
MC-CK-005 08-cohesion-coupling DesignAnalysisTest.couplingCountsTheOtherTopLevelClasses passing
MC-CK-006 08-cohesion-coupling MutationCrapListenerTest.theReportCarriesCohesionAndCouplingOfEveryClass, GateTest (schema version 2, since 0.22.0 3) passing
MC-CK-007 08-cohesion-coupling DesignAnalysisTest.recordComponentAccessorsAreGenerated passing
MC-CK-008 08-cohesion-coupling CodeCityTest.theCityShowsCohesionAndCoupling, CodeChartaFunctionalTest.theMetricsComeFromTheReport passing
MC-CK-009 08-cohesion-coupling CodeCityPageTest.thePageOpensTheCityByCohesionOrCoupling passing
MC-CK-010 08-cohesion-coupling DesignAnalysisTest.methodsWithoutStateDoNotCount, MutationCrapListenerTest.theReportCarriesCohesionAndCouplingOfEveryClass passing
MC-CK-011 08-cohesion-coupling GateTest.cohesionAndCouplingHaveLimitsOfTheirOwn, GateFunctionalTest.cohesionAndCouplingLimitsReachTheGate passing
MC-CK-012 08-cohesion-coupling GateTest.aDimensionWithoutALimitIsOnlyReported, .classLimitsNeedTheSectionClasses, GateFunctionalTest.cohesionAndCouplingLimitsReachTheGate passing
MC-CR-001 09-change-risk ChangeRiskTest.isMutationCrapOverTheWholeClass, ChangeRisksTest.sumsTheMethodsOfTheClass, JsonReportTest.theClassEntryCarriesTheChangeRisk passing
MC-CR-002 09-change-risk ChangeRiskTest.cohesionAndCouplingRaiseTheBase, ChangeRisksTest.takesCohesionAndCouplingOfTheClass passing
MC-CR-003 09-change-risk ChangeRisksTest.onlyScoredMethodsOfTheTopLevelClassAndItsNestedClassesCount, ChangeRiskTest.aClassWithoutLcom4CountsAsCohesive passing
MC-CR-004 09-change-risk ChangeRisksTest.anUnclearMethodVoidsTheChangeRisk, JsonReportTest.theClassEntryCarriesTheChangeRisk passing
MC-CR-005 09-change-risk GateTest.changeRiskIsNotJudged passing
MC-CR-006 09-change-risk MarkdownReportTest.theTenClassesWithTheHighestChangeRisk passing
MC-SV-001 10-structure-view StructurePageTest.thePageLoadsNothingFromElsewhere, CodeChartaFunctionalTest.theExportWritesTheStructurePage passing
MC-SV-002 10-structure-view StructurePageTest.thePageStartsAtTheTopFolder, StructurePageBrowserTest.thePageStartsAtTheTopPackage passing
MC-SV-003 10-structure-view StructurePageBrowserTest.aClickOpensAPackageAndTheBreadcrumbLeadsBack passing
MC-SV-004 10-structure-view StructurePageBrowserTest.usedByOnTopDependsOnAtTheBottom passing
MC-SV-005 10-structure-view StructurePageBrowserTest.redMeansInACycle passing
MC-SV-006 10-structure-view StructurePageBrowserTest.aPackageCycleShowsItsClasses passing
MC-SV-007 10-structure-view StructurePageBrowserTest.fillByLcom4HeightByComplexity passing
MC-SV-008 10-structure-view StructurePageBrowserTest.tooltipsExplainValuesAndColours passing
MC-SV-009 10-structure-view StructurePageBrowserTest.theStartPageListsTheCycles passing
MC-SV-010 10-structure-view StructurePageTest.theLevelsAndTheFlagsAreThoseOfLevelization, .theCyclesAreTheComponentsOfLevelization, CodeChartaExportTest.withoutLevelizationThePageStillHasTheCycles passing
MC-SV-011 10-structure-view StructurePageTest.theSameInputGivesTheSameBytes passing
MC-SV-012 10-structure-view CodeCityPageTest.theStructureButtonIsAlwaysVisible passing
MC-SV-013 10-structure-view StructurePageTest.withoutJavaScriptASentenceSaysWhy, StructurePageBrowserTest.withoutJavaScriptASentenceSaysWhy passing
MC-SV-014 10-structure-view MatrixPageTest.theMatrixLoadsNothingFromElsewhere, CodeChartaFunctionalTest.theExportWritesTheMatrixPage passing
MC-SV-015 10-structure-view MatrixPageBrowserTest.theMatrixStartsWithTheTopPackagesChildren passing
MC-SV-016 10-structure-view MatrixPageBrowserTest.aPackageOpensInPlaceAndCloses passing
MC-SV-017 10-structure-view MatrixPageBrowserTest.cellsInACycleAreRed passing
MC-SV-018 10-structure-view MatrixPageBrowserTest.theColumnHeadsNameThePackages passing
MC-SV-019 10-structure-view MatrixPageBrowserTest.theColourFieldShowsLcom4OrChangeRisk passing
MC-SV-020 10-structure-view MatrixPageBrowserTest.theOpenPackagesAreInTheUrl passing
MC-SV-021 10-structure-view MatrixPageBrowserTest.expandAllAndCollapseAll passing
MC-SV-022 10-structure-view MatrixPageTest.bothPagesHaveTheTabs, CodeCityPageTest.theMatrixButtonIsAlwaysVisible passing
MC-SV-023 10-structure-view MatrixPageTest.theSameInputGivesTheSameBytes passing
MC-SV-024 10-structure-view MatrixPageTest.withoutJavaScriptASentenceSaysWhy, MatrixPageBrowserTest.withoutJavaScriptASentenceSaysWhy passing
MC-SV-025 10-structure-view MatrixPageBrowserTest.expandAllIsOffAbove500Classes passing
MC-SV-026 10-structure-view LevelizationTest.twoSubPackagesInACycleRunAcrossTheHierarchy, .aClassCycleInsideOnePackageIsNoPackageCycle, StructurePageTest.eachEdgeNamesItsPackageCycle, StructurePageBrowserTest.everyEdgeOfAPackageCycleAcrossTheHierarchyIsRed passing
MC-SV-027 10-structure-view LevelizationTest.oneSubPackageAndItsFolderRunAlongTheHierarchy, StructurePageTest.eachEdgeNamesItsPackageCycle, StructurePageBrowserTest.aPackageCycleAlongTheHierarchyIsAmber passing
MC-SV-028 10-structure-view MatrixPageBrowserTest.cellsOfACycleAlongTheHierarchyAreAmber passing
MC-SV-029 10-structure-view StructurePageBrowserTest.theStartPageCountsBothKindsOfPackageCycles passing
MC-SV-030 10-structure-view CodeCityPageTest.thePageHasTheStyleAndTheTabsOfTheStructurePages passing
MC-SV-031 10-structure-view StructurePageBrowserTest.theLinesOfAWrappedLevelHaveRoomAndAreStaggered passing
MC-KT-001 11-kotlin-jvm KotlinBasicTest.ordinaryMethodsAndOverloadsAreScoredApart passing (optional-kotlin)
MC-KT-002 11-kotlin-jvm KotlinBasicTest.aLambdaIsScoredApartFromItsEnclosingFunction passing (optional-kotlin)
MC-KT-003 11-kotlin-jvm KotlinBasicTest.generatedMethodsAreMarkedWithTheirReason passing (optional-kotlin)
MC-KT-004 11-kotlin-jvm KotlinBasicTest.anInlineFunctionsOwnBodyIsNeverCovered passing (optional-kotlin)
MC-KT-005 11-kotlin-jvm KotlinBasicTest.aSuspendFunctionCountsTheMutantsOfItsStateMachine passing (optional-kotlin)

Unit tests live under */src/test/java/, functional tests under */src/functionalTest/java/ of werkcrappit-pit and werkcrappit-gradle-plugin.