--- /dev/null
+<?php
+
+/*
+ * This file is part of the Behat.
+ * (c) Konstantin Kudryashov <ever.zet@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Behat\Behat;
+
+use Behat\Behat\Context\ServiceContainer\ContextExtension;
+use Behat\Behat\Definition\ServiceContainer\DefinitionExtension;
+use Behat\Behat\EventDispatcher\ServiceContainer\EventDispatcherExtension;
+use Behat\Behat\Gherkin\ServiceContainer\GherkinExtension;
+use Behat\Behat\Hook\ServiceContainer\HookExtension;
+use Behat\Behat\Output\ServiceContainer\Formatter\JUnitFormatterFactory;
+use Behat\Behat\Output\ServiceContainer\Formatter\PrettyFormatterFactory;
+use Behat\Behat\Output\ServiceContainer\Formatter\ProgressFormatterFactory;
+use Behat\Behat\HelperContainer\ServiceContainer\HelperContainerExtension;
+use Behat\Behat\Snippet\ServiceContainer\SnippetExtension;
+use Behat\Behat\Tester\ServiceContainer\TesterExtension;
+use Behat\Behat\Transformation\ServiceContainer\TransformationExtension;
+use Behat\Behat\Translator\ServiceContainer\GherkinTranslationsExtension;
+use Behat\Testwork\ApplicationFactory as BaseFactory;
+use Behat\Testwork\Argument\ServiceContainer\ArgumentExtension;
+use Behat\Testwork\Autoloader\ServiceContainer\AutoloaderExtension;
+use Behat\Testwork\Call\ServiceContainer\CallExtension;
+use Behat\Testwork\Cli\ServiceContainer\CliExtension;
+use Behat\Testwork\Environment\ServiceContainer\EnvironmentExtension;
+use Behat\Testwork\Exception\ServiceContainer\ExceptionExtension;
+use Behat\Testwork\Filesystem\ServiceContainer\FilesystemExtension;
+use Behat\Testwork\Ordering\ServiceContainer\OrderingExtension;
+use Behat\Testwork\Output\ServiceContainer\Formatter\FormatterFactory;
+use Behat\Testwork\Output\ServiceContainer\OutputExtension;
+use Behat\Testwork\ServiceContainer\ServiceProcessor;
+use Behat\Testwork\Specification\ServiceContainer\SpecificationExtension;
+use Behat\Testwork\Suite\ServiceContainer\SuiteExtension;
+use Behat\Testwork\Translator\ServiceContainer\TranslatorExtension;
+
+/**
+ * Defines the way behat is created.
+ *
+ * @author Konstantin Kudryashov <ever.zet@gmail.com>
+ */
+final class ApplicationFactory extends BaseFactory
+{
+ const VERSION = '3.4.1';
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function getName()
+ {
+ return 'behat';
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function getVersion()
+ {
+ return self::VERSION;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function getDefaultExtensions()
+ {
+ $processor = new ServiceProcessor();
+
+ return array(
+ new ArgumentExtension(),
+ new AutoloaderExtension(array('' => '%paths.base%/features/bootstrap')),
+ new SuiteExtension($processor),
+ new OutputExtension('pretty', $this->getDefaultFormatterFactories($processor), $processor),
+ new ExceptionExtension($processor),
+ new GherkinExtension($processor),
+ new CallExtension($processor),
+ new TranslatorExtension(),
+ new GherkinTranslationsExtension(),
+ new TesterExtension($processor),
+ new CliExtension($processor),
+ new EnvironmentExtension($processor),
+ new SpecificationExtension($processor),
+ new FilesystemExtension(),
+ new ContextExtension($processor),
+ new SnippetExtension($processor),
+ new DefinitionExtension($processor),
+ new EventDispatcherExtension($processor),
+ new HookExtension(),
+ new TransformationExtension($processor),
+ new OrderingExtension($processor),
+ new HelperContainerExtension($processor)
+ );
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function getEnvironmentVariableName()
+ {
+ return 'BEHAT_PARAMS';
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function getConfigPath()
+ {
+ $cwd = rtrim(getcwd(), DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR;
+ $configDir = $cwd . 'config' . DIRECTORY_SEPARATOR;
+ $paths = array(
+ $cwd . 'behat.yaml',
+ $cwd . 'behat.yml',
+ $cwd . 'behat.yaml.dist',
+ $cwd . 'behat.yml.dist',
+ $configDir . 'behat.yaml',
+ $configDir . 'behat.yml',
+ $configDir . 'behat.yaml.dist',
+ $configDir . 'behat.yml.dist',
+ );
+
+ foreach ($paths as $path) {
+ if (is_file($path)) {
+ return $path;
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Returns default formatter factories.
+ *
+ * @param ServiceProcessor $processor
+ *
+ * @return FormatterFactory[]
+ */
+ private function getDefaultFormatterFactories(ServiceProcessor $processor)
+ {
+ return array(
+ new PrettyFormatterFactory($processor),
+ new ProgressFormatterFactory($processor),
+ new JUnitFormatterFactory(),
+ );
+ }
+}