### Question:
DelegatingExecutionReporter implements ExecutionReporter { @Override public ReportLevel getReportLevel() { ReportLevel leastWorstLevel = ReportLevel.FATAL; for (ExecutionReporter executionReporter : executionReporters) { if (!executionReporter.getReportLevel().isWorseThanOrEqualTo(leastWorstLevel)) { leastWorstLevel = executionReporter.getReportLevel(); } } return leastWorstLevel; } DelegatingExecutionReporter(Collection<ExecutionReporter> executionReporters); @Override ReportLevel getReportLevel(); @Override void testInputGroupGenerated(TestInputGroupContext context, List<Combination> testInputs); @Override void testInputGroupFinished(TestInputGroupContext context); @Override void faultCharacterizationStarted(TestInputGroupContext context, FaultCharacterizationAlgorithm algorithm); @Override void faultCharacterizationFinished(TestInputGroupContext context, List<Combination> failureInducingCombinations); @Override void faultCharacterizationTestInputsGenerated(TestInputGroupContext context, List<Combination> testInputs); @Override void testInputExecutionStarted(Combination testInput); @Override void testInputExecutionFinished(Combination testInput, TestResult result); @Override void report(ReportLevel level, Report report);  }### Answer:
@Test void reportLevelIsAlwaysLowestLevelOfChildReporters() { final ExecutionReporter first = Mockito.mock(ExecutionReporter.class); final ExecutionReporter second = Mockito.mock(ExecutionReporter.class); final DelegatingExecutionReporter reporter = new DelegatingExecutionReporter(Arrays.asList(first, second)); when(first.getReportLevel()).thenReturn(ReportLevel.TRACE); when(second.getReportLevel()).thenReturn(ReportLevel.DEBUG); assertEquals(ReportLevel.TRACE, reporter.getReportLevel()); when(first.getReportLevel()).thenReturn(ReportLevel.FATAL); when(second.getReportLevel()).thenReturn(ReportLevel.INFO); assertEquals(ReportLevel.INFO, reporter.getReportLevel()); }