// Path: core/test/src/test/java/tech/harmonysoft/oss/traute/test/api/expectation/Expectation.java
// public interface Expectation<T> {
// 
//     /**
//      * Ensures that given data matches current expectations. Is expected to call {@link Assertions#fail(String)}
//      * in case of the mismatch.
//      *
//      * @param actual    data to match
//      */
//     void match(@NotNull T actual);
// }
// 
// Path: core/test/src/test/java/tech/harmonysoft/oss/traute/test/api/model/CompilationResult.java
// public interface CompilationResult extends Result<Collection<TestSource>> {
// 
//     /**
//      * @return      compiled classes. We use a {@link Supplier} here because there is a possible case that
//      *              compilation is failed and the test wants to check its {@code stderr}. We return a collection
//      *              of {@link ClassFile} because a single source file might result in multiple binaries after
//      *              compilation, e.g. when an inner/anonymous classes are involved
//      */
//     @NotNull
//     Supplier<Collection<ClassFile>> getCompiledClassesSupplier();
// 
//     /**
//      * @return      compiler's output generated during processing {@link #getInput() target binaries}
//      */
//     @NotNull
//     String getCompilationOutput();
// }
// 
// Path: core/test/src/test/java/tech/harmonysoft/oss/traute/test/api/model/RunResult.java
// public interface RunResult extends Result<CompilationResult> {
// 
//     @NotNull
//     Optional<Throwable> getException();
// }


import org.jetbrains.annotations.NotNull;
import tech.harmonysoft.oss.traute.test.api.expectation.Expectation;
import tech.harmonysoft.oss.traute.test.api.model.CompilationResult;
import tech.harmonysoft.oss.traute.test.api.model.RunResult;
package tech.harmonysoft.oss.traute.test.api.engine;


public interface TestRunner {

    @NotNull
    RunResult run(@NotNull CompilationResult compilationResult);

// Path: core/test/src/test/java/tech/harmonysoft/oss/traute/test/api/expectation/Expectation.java
// public interface Expectation<T> {
// 
//     /**
//      * Ensures that given data matches current expectations. Is expected to call {@link Assertions#fail(String)}
//      * in case of the mismatch.
//      *
//      * @param actual    data to match
//      */
//     void match(@NotNull T actual);
// }
// 
// Path: core/test/src/test/java/tech/harmonysoft/oss/traute/test/api/model/CompilationResult.java
// public interface CompilationResult extends Result<Collection<TestSource>> {
// 
//     /**
//      * @return      compiled classes. We use a {@link Supplier} here because there is a possible case that
//      *              compilation is failed and the test wants to check its {@code stderr}. We return a collection
//      *              of {@link ClassFile} because a single source file might result in multiple binaries after
//      *              compilation, e.g. when an inner/anonymous classes are involved
//      */
//     @NotNull
//     Supplier<Collection<ClassFile>> getCompiledClassesSupplier();
// 
//     /**
//      * @return      compiler's output generated during processing {@link #getInput() target binaries}
//      */
//     @NotNull
//     String getCompilationOutput();
// }
// 
// Path: core/test/src/test/java/tech/harmonysoft/oss/traute/test/api/model/RunResult.java
// public interface RunResult extends Result<CompilationResult> {
// 
//     @NotNull
//     Optional<Throwable> getException();
// }


// Path: core/test/src/test/java/tech/harmonysoft/oss/traute/test/api/engine/TestRunner.java
import org.jetbrains.annotations.NotNull;
import tech.harmonysoft.oss.traute.test.api.expectation.Expectation;
import tech.harmonysoft.oss.traute.test.api.model.CompilationResult;
import tech.harmonysoft.oss.traute.test.api.model.RunResult;

package tech.harmonysoft.oss.traute.test.api.engine;


public interface TestRunner {

    @NotNull
    RunResult run(@NotNull CompilationResult compilationResult);

    default void run(@NotNull CompilationResult compilationResult, @NotNull Expectation<RunResult> expectation) {