/* * Copyright 2015-2017 the original author or authors. * * All rights reserved. This program and the accompanying materials are * made available under the terms of the Eclipse Public License v1.0 which * accompanies this distribution and is available at * * http://www.eclipse.org/legal/epl-v10.html */ package org.junit.platform.runner; import static org.junit.platform.engine.TestExecutionResult.Status.ABORTED; import static org.junit.platform.engine.TestExecutionResult.Status.FAILED; import org.junit.platform.engine.TestExecutionResult; import org.junit.platform.engine.TestExecutionResult.Status; import org.junit.platform.engine.reporting.ReportEntry; import org.junit.platform.launcher.TestExecutionListener; import org.junit.platform.launcher.TestIdentifier; import org.junit.runner.Description; import org.junit.runner.notification.Failure; import org.junit.runner.notification.RunNotifier; /** * @since 1.0 */ class JUnitPlatformRunnerListener implements TestExecutionListener { private final JUnitPlatformTestTree testTree; private final RunNotifier notifier; JUnitPlatformRunnerListener(JUnitPlatformTestTree testTree, RunNotifier notifier) { this.testTree = testTree; this.notifier = notifier; } @Override public void dynamicTestRegistered(TestIdentifier testIdentifier) { String parentId = testIdentifier.getParentId().get(); testTree.addDynamicDescription(testIdentifier, parentId); } @Override public void executionSkipped(TestIdentifier testIdentifier, String reason) { if (testIdentifier.isTest()) { fireTestIgnored(testIdentifier); } else { testTree.getTestsInSubtree(testIdentifier).forEach(this::fireTestIgnored); } } private void fireTestIgnored(TestIdentifier testIdentifier) { Description description = findJUnit4Description(testIdentifier); this.notifier.fireTestIgnored(description); } @Override public void executionStarted(TestIdentifier testIdentifier) { Description description = findJUnit4Description(testIdentifier); if (description.isTest()) { this.notifier.fireTestStarted(description); } } @Override public void executionFinished(TestIdentifier testIdentifier, TestExecutionResult testExecutionResult) { Description description = findJUnit4Description(testIdentifier); Status status = testExecutionResult.getStatus(); if (status == ABORTED) { this.notifier.fireTestAssumptionFailed(toFailure(testExecutionResult, description)); } else if (status == FAILED) { this.notifier.fireTestFailure(toFailure(testExecutionResult, description)); } if (description.isTest()) { this.notifier.fireTestFinished(description); } } @Override public void reportingEntryPublished(TestIdentifier testIdentifier, ReportEntry entry) { System.out.println(entry); } private Failure toFailure(TestExecutionResult testExecutionResult, Description description) { return new Failure(description, testExecutionResult.getThrowable().orElse(null)); } private Description findJUnit4Description(TestIdentifier testIdentifier) { return this.testTree.getDescription(testIdentifier); } }