/**
  * @param InputInterface $input
  * @param OutputInterface $output
  * @param QuestionHelper $helper
  * @param ConfigurationBuilder|null $builder
  * @return string
  */
 public function create(InputInterface $input, OutputInterface $output, QuestionHelper $helper, ConfigurationBuilder $builder = null)
 {
     if (!$builder) {
         $builder = new ConfigurationBuilder();
     }
     $bootstrap = $helper->ask($input, $output, new Question('relative path to bootstrap file? [vendor/autoload.php]: ', 'vendor/autoload.php'));
     $builder->bootstrap($bootstrap);
     if (!$helper->ask($input, $output, new Confirm('backup globals? [yes]: '))) {
         $builder->doNotBackupGlobals();
     }
     if ($helper->ask($input, $output, new Confirm('backup static attributes? [no]: ', false))) {
         $builder->backupStaticAttributes();
     }
     if ($helper->ask($input, $output, new Confirm('cache tokens? [no]: ', false))) {
         $builder->cacheTokens();
     }
     if ($helper->ask($input, $output, new Confirm('output in color? [no]: ', false))) {
         $builder->colors();
     }
     if (!$helper->ask($input, $output, new Confirm('convert errors to exceptions? [yes]: '))) {
         $builder->doNotConvertErrorsToExceptions();
     }
     if (!$helper->ask($input, $output, new Confirm('convert notices to exceptions? [yes]: '))) {
         $builder->doNotConvertNoticesToExceptions();
     }
     if (!$helper->ask($input, $output, new Confirm('convert warnings to exceptions? [yes]: '))) {
         $builder->doNotConvertWarningsToExceptions();
     }
     if ($helper->ask($input, $output, new Confirm('force @covers Annotation? [no]: ', false))) {
         $builder->forceCoversAnnotation();
     }
     if ($helper->ask($input, $output, new Confirm('map test class name to covered class name? [no]: ', false))) {
         $builder->mapTestClassNameToCoveredClassName();
     }
     if ($helper->ask($input, $output, new Confirm('run tests in process isolation? [no]: ', false))) {
         $builder->processIsolation();
     }
     if ($helper->ask($input, $output, new Confirm('stop on error? [no]: ', false))) {
         $builder->stopOnError();
     }
     if ($helper->ask($input, $output, new Confirm('stop on failure? [no]: ', false))) {
         $builder->stopOnFailure();
     }
     if ($helper->ask($input, $output, new Confirm('stop on incomplete? [no]: ', false))) {
         $builder->stopOnIncomplete();
     }
     if ($helper->ask($input, $output, new Confirm('stop on skipped? [no]: ', false))) {
         $builder->stopOnSkipped();
     }
     if ($helper->ask($input, $output, new Confirm('stop on risky? [no]: ', false))) {
         $builder->stopOnRisky();
     }
     if (($timeout = intval($helper->ask($input, $output, new Question('timeout for small tests (seconds)? [1]', 1)))) != 1) {
         $builder->timeoutForSmallTests($timeout);
     }
     if (($timeout = intval($helper->ask($input, $output, new Question('timeout for medium tests (seconds)? [10]', 10)))) != 10) {
         $builder->timeoutForMediumTests($timeout);
     }
     if (($timeout = intval($helper->ask($input, $output, new Question('timeout for large tests (seconds)? [60]', 60)))) != 60) {
         $builder->timeoutForLargeTests($timeout);
     }
     if ($helper->ask($input, $output, new Confirm('verbose? [no]: ', false))) {
         $builder->verbose();
     }
     while ($helper->ask($input, $output, new Confirm('add test suite? [yes]: '))) {
         $name = $helper->ask($input, $output, new Question('name of test suite? [unit]: ', 'unit'));
         $directory = $helper->ask($input, $output, new Question('relative path to test suite directory? [tests/unit]: ', 'tests/unit'));
         $builder->addTestSuite($name, $directory);
     }
     return $builder->__toString();
 }
 public function test_configures_stop_on_skipped()
 {
     $xml = FluidXml::load($this->sut->stopOnSkipped()->__toString());
     self::assertEquals('true', $xml->query('/phpunit/@stopOnSkipped')[0]->value);
 }