// Path: core/src/main/java/me/gregorias/dfuntest/testrunnerbuilders/ManualTestRunnerBuilder.java
// public class ManualTestRunnerBuilder<EnvironmentT extends Environment,
//     AppT extends App<EnvironmentT>> {
//   private EnvironmentFactory<EnvironmentT> mEnvironmentFactory;
//   private EnvironmentPreparator<EnvironmentT> mEnvironmentPreparator;
//   private ApplicationFactory<EnvironmentT, AppT> mApplicationFactory;
//   private final Set<TestScript<AppT>> mTestScripts = new HashSet<>();
//   private boolean mShouldPrepareEnvironments = true;
//   private boolean mShouldCleanEnvironments = true;
//   private Path mReportPath;
// 
//   public ManualTestRunnerBuilder<EnvironmentT, AppT> addTestScript(TestScript<AppT> testScript) {
//     mTestScripts.add(testScript);
//     return this;
//   }
// 
//   public TestRunner buildRunner() {
//     if (mTestScripts.size() == 0
//         || null == mEnvironmentFactory
//         || null == mEnvironmentPreparator
//         || null == mApplicationFactory
//         || null == mReportPath) {
//       throw new IllegalStateException("One of runner's dependencies was not set.");
//     }
// 
//     return new MultiTestRunner<>(
//         mTestScripts,
//         mEnvironmentFactory,
//         mEnvironmentPreparator,
//         mApplicationFactory,
//         mShouldPrepareEnvironments,
//         mShouldCleanEnvironments,
//         mReportPath,
//         FileUtilsImpl.getFileUtilsImpl());
//   }
// 
//   public ManualTestRunnerBuilder<EnvironmentT, AppT> setApplicationFactory(
//       ApplicationFactory<EnvironmentT, AppT> applicationFactory) {
//     mApplicationFactory = applicationFactory;
//     return this;
//   }
// 
//   public ManualTestRunnerBuilder<EnvironmentT, AppT> setEnvironmentFactory(
//       EnvironmentFactory<EnvironmentT> environmentFactory) {
//     mEnvironmentFactory = environmentFactory;
//     return this;
//   }
// 
//   public ManualTestRunnerBuilder<EnvironmentT, AppT> setEnvironmentPreparator(
//       EnvironmentPreparator<EnvironmentT> environmentPreparator) {
//     mEnvironmentPreparator = environmentPreparator;
//     return this;
//   }
// 
//   public ManualTestRunnerBuilder<EnvironmentT, AppT> setReportPath(Path reportPath) {
//     mReportPath = reportPath;
//     return this;
//   }
// 
//   /**
//    * Sets whether preparator should prepare or just restore environments. True on default.
//    * @param should should runner prepare environments
//    * @return this
//    */
//   public ManualTestRunnerBuilder<EnvironmentT, AppT> setShouldPrepareEnvironments(boolean should) {
//     mShouldPrepareEnvironments = should;
//     return this;
//   }
// 
//   /**
//    * Sets whether preparator should clean environments completely. True on default.
//    * @param should should runner clean environments
//    * @return this
//    */
//   public ManualTestRunnerBuilder<EnvironmentT, AppT> setShouldCleanEnvironments(boolean should) {
//     mShouldCleanEnvironments = should;
//     return this;
//   }
// }


import me.gregorias.dfuntest.testrunnerbuilders.ManualTestRunnerBuilder;
import org.junit.Test;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
package me.gregorias.dfuntest;




@SuppressWarnings("unchecked")
public class ManualTestRunnerBuilderTest {
  private final EnvironmentFactory<Environment> mMockEnvironmentFactory = mock(
      EnvironmentFactory.class);
  private final EnvironmentPreparator<Environment> mMockEnvironmentPreparator = mock(
      EnvironmentPreparator.class);
  private final ApplicationFactory<Environment, App<Environment>> mMockApplicationFactory = mock(
      ApplicationFactory.class);
  private final TestScript<App<Environment>> mMockTestScript = mock(TestScript.class);

  private final Path mReportPath = FileSystems.getDefault().getPath("report");

  @Test
  public void buildShouldCreateMultiTestRunner() {
// Path: core/src/main/java/me/gregorias/dfuntest/testrunnerbuilders/ManualTestRunnerBuilder.java
// public class ManualTestRunnerBuilder<EnvironmentT extends Environment,
//     AppT extends App<EnvironmentT>> {
//   private EnvironmentFactory<EnvironmentT> mEnvironmentFactory;
//   private EnvironmentPreparator<EnvironmentT> mEnvironmentPreparator;
//   private ApplicationFactory<EnvironmentT, AppT> mApplicationFactory;
//   private final Set<TestScript<AppT>> mTestScripts = new HashSet<>();
//   private boolean mShouldPrepareEnvironments = true;
//   private boolean mShouldCleanEnvironments = true;
//   private Path mReportPath;
// 
//   public ManualTestRunnerBuilder<EnvironmentT, AppT> addTestScript(TestScript<AppT> testScript) {
//     mTestScripts.add(testScript);
//     return this;
//   }
// 
//   public TestRunner buildRunner() {
//     if (mTestScripts.size() == 0
//         || null == mEnvironmentFactory
//         || null == mEnvironmentPreparator
//         || null == mApplicationFactory
//         || null == mReportPath) {
//       throw new IllegalStateException("One of runner's dependencies was not set.");
//     }
// 
//     return new MultiTestRunner<>(
//         mTestScripts,
//         mEnvironmentFactory,
//         mEnvironmentPreparator,
//         mApplicationFactory,
//         mShouldPrepareEnvironments,
//         mShouldCleanEnvironments,
//         mReportPath,
//         FileUtilsImpl.getFileUtilsImpl());
//   }
// 
//   public ManualTestRunnerBuilder<EnvironmentT, AppT> setApplicationFactory(
//       ApplicationFactory<EnvironmentT, AppT> applicationFactory) {
//     mApplicationFactory = applicationFactory;
//     return this;
//   }
// 
//   public ManualTestRunnerBuilder<EnvironmentT, AppT> setEnvironmentFactory(
//       EnvironmentFactory<EnvironmentT> environmentFactory) {
//     mEnvironmentFactory = environmentFactory;
//     return this;
//   }
// 
//   public ManualTestRunnerBuilder<EnvironmentT, AppT> setEnvironmentPreparator(
//       EnvironmentPreparator<EnvironmentT> environmentPreparator) {
//     mEnvironmentPreparator = environmentPreparator;
//     return this;
//   }
// 
//   public ManualTestRunnerBuilder<EnvironmentT, AppT> setReportPath(Path reportPath) {
//     mReportPath = reportPath;
//     return this;
//   }
// 
//   /**
//    * Sets whether preparator should prepare or just restore environments. True on default.
//    * @param should should runner prepare environments
//    * @return this
//    */
//   public ManualTestRunnerBuilder<EnvironmentT, AppT> setShouldPrepareEnvironments(boolean should) {
//     mShouldPrepareEnvironments = should;
//     return this;
//   }
// 
//   /**
//    * Sets whether preparator should clean environments completely. True on default.
//    * @param should should runner clean environments
//    * @return this
//    */
//   public ManualTestRunnerBuilder<EnvironmentT, AppT> setShouldCleanEnvironments(boolean should) {
//     mShouldCleanEnvironments = should;
//     return this;
//   }
// }


// Path: core/src/test/java/me/gregorias/dfuntest/ManualTestRunnerBuilderTest.java
import me.gregorias.dfuntest.testrunnerbuilders.ManualTestRunnerBuilder;
import org.junit.Test;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;

package me.gregorias.dfuntest;




@SuppressWarnings("unchecked")
public class ManualTestRunnerBuilderTest {
  private final EnvironmentFactory<Environment> mMockEnvironmentFactory = mock(
      EnvironmentFactory.class);
  private final EnvironmentPreparator<Environment> mMockEnvironmentPreparator = mock(
      EnvironmentPreparator.class);
  private final ApplicationFactory<Environment, App<Environment>> mMockApplicationFactory = mock(
      ApplicationFactory.class);
  private final TestScript<App<Environment>> mMockTestScript = mock(TestScript.class);

  private final Path mReportPath = FileSystems.getDefault().getPath("report");

  @Test
  public void buildShouldCreateMultiTestRunner() {
    ManualTestRunnerBuilder<Environment, App<Environment>> builder =