// Path: atam4j/src/main/java/me/atam/atam4j/health/AcceptanceTestsState.java
// public class AcceptanceTestsState {
// 
//     private Optional<Result> result = Optional.empty();
// 
//     public Optional<Result> getResult() {
//         return result;
//     }
// 
//     public void setResult(Result result) {
//         this.result = Optional.of(result);
//     }
// 
// }
// 
// Path: atam4j/src/main/java/me/atam/atam4j/logging/LoggingListener.java
// public class LoggingListener extends RunListener {
//     private static Logger LOGGER = LoggerFactory.getLogger(LoggingListener.class);
// 
//     @Override
//     public void testRunStarted(Description description) throws Exception {
//         LOGGER.info("Starting tests at {}", new Date());
//     }
// 
//     @Override
//     public void testRunFinished(Result result) throws Exception {
//         LOGGER.info("Tests finishes at {}", new Date());
//         LOGGER.info("Report :: total run = {}, failures = {}, in time = {} milliseconds",
//                 result.getRunCount(),
//                 result.getFailureCount(),
//                 result.getRunTime()
//         );
//     }
// 
//     @Override
//     public void testStarted(Description description) throws Exception {
//         LOGGER.debug("Starting {}", description.getDisplayName());
//     }
// 
//     @Override
//     public void testFinished(Description description) throws Exception {
//         LOGGER.debug("Finished {}", description.getDisplayName());
//     }
// 
//     @Override
//     public void testFailure(Failure failure) throws Exception {
//         LOGGER.error(
//             String.format("Test %s failed: %s",
//                 failure.getTestHeader(),
//                 failure.getDescription()
//             ),
//             failure.getException()
//         );
//     }
// 
//     @Override
//     public void testAssumptionFailure(Failure failure) {
//         LOGGER.error(
//             String.format("Test %s assumption failed: %s",
//                     failure.getTestHeader(),
//                     failure.getDescription()
//             ),
//             failure.getException()
//         );
//     }
// 
//     @Override
//     public void testIgnored(Description description) throws Exception {
//         LOGGER.debug("Test {} ignored: ", description.getDisplayName());
//     }
// }


import me.atam.atam4j.health.AcceptanceTestsState;
import me.atam.atam4j.logging.LoggingListener;
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.RunListener;
import java.util.List;
package me.atam.atam4j;



public class AcceptanceTestsRunnerTask implements Runnable {

    private final AcceptanceTestsState testsState;
    private final Class[] testClasses;
    private List<RunListener> runListeners;

// Path: atam4j/src/main/java/me/atam/atam4j/health/AcceptanceTestsState.java
// public class AcceptanceTestsState {
// 
//     private Optional<Result> result = Optional.empty();
// 
//     public Optional<Result> getResult() {
//         return result;
//     }
// 
//     public void setResult(Result result) {
//         this.result = Optional.of(result);
//     }
// 
// }
// 
// Path: atam4j/src/main/java/me/atam/atam4j/logging/LoggingListener.java
// public class LoggingListener extends RunListener {
//     private static Logger LOGGER = LoggerFactory.getLogger(LoggingListener.class);
// 
//     @Override
//     public void testRunStarted(Description description) throws Exception {
//         LOGGER.info("Starting tests at {}", new Date());
//     }
// 
//     @Override
//     public void testRunFinished(Result result) throws Exception {
//         LOGGER.info("Tests finishes at {}", new Date());
//         LOGGER.info("Report :: total run = {}, failures = {}, in time = {} milliseconds",
//                 result.getRunCount(),
//                 result.getFailureCount(),
//                 result.getRunTime()
//         );
//     }
// 
//     @Override
//     public void testStarted(Description description) throws Exception {
//         LOGGER.debug("Starting {}", description.getDisplayName());
//     }
// 
//     @Override
//     public void testFinished(Description description) throws Exception {
//         LOGGER.debug("Finished {}", description.getDisplayName());
//     }
// 
//     @Override
//     public void testFailure(Failure failure) throws Exception {
//         LOGGER.error(
//             String.format("Test %s failed: %s",
//                 failure.getTestHeader(),
//                 failure.getDescription()
//             ),
//             failure.getException()
//         );
//     }
// 
//     @Override
//     public void testAssumptionFailure(Failure failure) {
//         LOGGER.error(
//             String.format("Test %s assumption failed: %s",
//                     failure.getTestHeader(),
//                     failure.getDescription()
//             ),
//             failure.getException()
//         );
//     }
// 
//     @Override
//     public void testIgnored(Description description) throws Exception {
//         LOGGER.debug("Test {} ignored: ", description.getDisplayName());
//     }
// }


// Path: atam4j/src/main/java/me/atam/atam4j/AcceptanceTestsRunnerTask.java
import me.atam.atam4j.health.AcceptanceTestsState;
import me.atam.atam4j.logging.LoggingListener;
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.RunListener;
import java.util.List;

package me.atam.atam4j;



public class AcceptanceTestsRunnerTask implements Runnable {

    private final AcceptanceTestsState testsState;
    private final Class[] testClasses;
    private List<RunListener> runListeners;

    AcceptanceTestsRunnerTask(final AcceptanceTestsState testsState,