/**
  * Creates the browser configuration.
  *
  * @param IMinkDriverFactory $factory Driver factory.
  *
  * @return BrowserConfiguration
  */
 protected function createBrowserConfiguration(IMinkDriverFactory $factory)
 {
     $di = new DIContainer();
     $event_dispatcher = m::mock('Symfony\\Component\\EventDispatcher\\EventDispatcherInterface');
     $browser_configuration = new BrowserConfiguration($event_dispatcher, $di['driver_factory_registry']);
     $browser_configuration->setDriver($factory->getDriverName());
     return $browser_configuration;
 }
 /**
  * Returns a new driver instance according to the browser configuration.
  *
  * @param BrowserConfiguration $browser The browser configuration.
  *
  * @return DriverInterface
  */
 public function createDriver(BrowserConfiguration $browser)
 {
     if (!class_exists('Behat\\Mink\\Driver\\ZombieDriver')) {
         throw new \RuntimeException('Install MinkZombieDriver in order to use zombie driver.');
     }
     $driver_options = $browser->getDriverOptions();
     return new \Behat\Mink\Driver\ZombieDriver(new \Behat\Mink\Driver\NodeJS\Server\ZombieServer($browser->getHost(), $browser->getPort(), $driver_options['node_bin'], $driver_options['server_path'], $driver_options['threshold'], $driver_options['node_modules_path']));
 }
 /**
  * Returns a new driver instance according to the browser configuration.
  *
  * @param BrowserConfiguration $browser The browser configuration.
  *
  * @return DriverInterface
  */
 public function createDriver(BrowserConfiguration $browser)
 {
     if (!class_exists('Behat\\Mink\\Driver\\SahiDriver')) {
         throw new \RuntimeException('Install MinkSahiDriver in order to use sahi driver.');
     }
     $driver_options = $browser->getDriverOptions();
     $connection = new \Behat\SahiClient\Connection($driver_options['sid'], $browser->getHost(), $browser->getPort(), $driver_options['browser'], $driver_options['limit']);
     return new \Behat\Mink\Driver\SahiDriver($browser->getBrowserName(), new \Behat\SahiClient\Client($connection));
 }
 /**
  * Returns a new driver instance according to the browser configuration.
  *
  * @param BrowserConfiguration $browser The browser configuration.
  *
  * @return DriverInterface
  */
 public function createDriver(BrowserConfiguration $browser)
 {
     if (!class_exists('Behat\\Mink\\Driver\\GoutteDriver')) {
         throw new \RuntimeException('Install MinkGoutteDriver in order to use goutte driver.');
     }
     $driver_options = $browser->getDriverOptions();
     if ($this->_isGoutte1()) {
         $guzzle_client = $this->_buildGuzzle3Client($driver_options['guzzle_parameters']);
     } else {
         $guzzle_client = $this->_buildGuzzle4Client($driver_options['guzzle_parameters']);
     }
     $goutte_client = new \Behat\Mink\Driver\Goutte\Client($driver_options['server_parameters']);
     $goutte_client->setClient($guzzle_client);
     return new \Behat\Mink\Driver\GoutteDriver($goutte_client);
 }
 /**
  * Initializes session strategy using given browser test case.
  *
  * @param BrowserConfiguration $browser Browser configuration.
  *
  * @return ISessionStrategy
  */
 public function getSessionStrategy(BrowserConfiguration $browser)
 {
     /*
      * This logic creates separate strategy for:
      * - each browser configuration in BrowserTestCase::$browsers (for isolated strategy)
      * - each browser configuration in BrowserTestCase::$browsers for each test case class (for shared strategy)
      */
     $strategy_type = $browser->getSessionStrategy();
     $strategy_hash = $browser->getSessionStrategyHash();
     if ($strategy_hash !== $this->lastUsedSessionStrategyHash) {
         $this->sessionStrategiesInUse[$strategy_hash] = $this->_sessionStrategyFactory->createStrategy($strategy_type);
     }
     $this->lastUsedSessionStrategyHash = $strategy_hash;
     return $this->sessionStrategiesInUse[$strategy_hash];
 }
 /**
  * Returns browser configuration instance.
  *
  * @param array           $config    Browser.
  * @param BrowserTestCase $test_case Test case.
  *
  * @return BrowserConfiguration
  */
 public function createBrowserConfiguration(array $config, BrowserTestCase $test_case)
 {
     $aliases = $test_case->getBrowserAliases();
     $config = BrowserConfiguration::resolveAliases($config, $aliases);
     $type = isset($config['type']) ? $config['type'] : 'default';
     unset($config['type']);
     return $this->create($type)->setAliases($aliases)->setup($config);
 }
 /**
  * Test description.
  *
  * @return void
  */
 public function testGetTestStatusShared()
 {
     $test_case = m::mock(self::TEST_CASE_CLASS);
     $test_result = m::mock('\\PHPUnit_Framework_TestResult');
     $test_result->shouldReceive('wasSuccessful')->once()->andReturn(true);
     $this->browser->setSessionStrategy(ISessionStrategyFactory::TYPE_SHARED);
     $this->assertTrue($this->browser->getTestStatus($test_case, $test_result));
 }
 /**
  * Creates API client.
  *
  * @param BrowserConfiguration $browser Browser configuration.
  *
  * @return IAPIClient
  * @throws \LogicException When unsupported browser configuration given.
  */
 public function createAPIClient(BrowserConfiguration $browser)
 {
     if ($browser instanceof SauceLabsBrowserConfiguration) {
         $sauce_rest = new SauceRest($browser->getApiUsername(), $browser->getApiKey());
         return new SauceLabsAPIClient($sauce_rest);
     } elseif ($browser instanceof BrowserStackBrowserConfiguration) {
         return new BrowserStackAPIClient($browser->getApiUsername(), $browser->getApiKey(), ServiceFactory::getInstance()->getService('service.curl'));
     }
     throw new \LogicException('Unsupported browser configuration given');
 }
 /**
  * Creates driver based on browser configuration.
  *
  * @param BrowserConfiguration $browser Browser configuration.
  *
  * @return DriverInterface
  */
 private function _createDriver(BrowserConfiguration $browser)
 {
     $browser_name = $browser->getBrowserName();
     $capabilities = $browser->getDesiredCapabilities();
     $capabilities['browserName'] = $browser_name;
     // TODO: maybe doesn't work!
     ini_set('default_socket_timeout', $browser->getTimeout());
     $driver = new Selenium2Driver($browser_name, $capabilities, 'http://' . $browser->getHost() . ':' . $browser->getPort() . '/wd/hub');
     return $driver;
 }
 /**
  * Returns a new driver instance according to the browser configuration.
  *
  * @param BrowserConfiguration $browser The browser configuration.
  *
  * @return DriverInterface
  */
 public function createDriver(BrowserConfiguration $browser)
 {
     if (!class_exists('Behat\\Mink\\Driver\\Selenium2Driver')) {
         throw new \RuntimeException('Install MinkSelenium2Driver in order to use selenium2 driver.');
     }
     $browser_name = $browser->getBrowserName();
     $capabilities = $browser->getDesiredCapabilities();
     $capabilities['browserName'] = $browser_name;
     // TODO: Maybe doesn't work!
     ini_set('default_socket_timeout', $browser->getTimeout());
     $driver = new \Behat\Mink\Driver\Selenium2Driver($browser_name, $capabilities, 'http://' . $browser->getHost() . ':' . $browser->getPort() . '/wd/hub');
     return $driver;
 }
 /**
  * Creates new session based on browser configuration.
  *
  * @param BrowserConfiguration $browser Browser configuration.
  *
  * @return Session
  */
 public function createSession(BrowserConfiguration $browser)
 {
     return new SessionProxy($browser->createDriver());
 }
 /**
  * Hook, called from "BrowserTestCase::run" method.
  *
  * @param TestEndedEvent $event Test ended event.
  *
  * @return void
  */
 public function onTestEnded(TestEndedEvent $event)
 {
     if (!$this->isEventForMe($event)) {
         return;
     }
     parent::onTestEnded($event);
     if ($event->getSession() === null) {
         // Session wasn't used in particular test.
         return;
     }
     $test_case = $event->getTestCase();
     $this->getAPIClient()->updateStatus($this->getSessionId($event->getSession()), $this->getTestStatus($test_case, $event->getTestResult()));
 }
 /**
  * Hook, called from "BrowserTestCase::run" method.
  *
  * @param TestEndedEvent $event Test ended event.
  *
  * @return void
  */
 public function onTestEnded(TestEndedEvent $event)
 {
     if (!$event->validateSubscriber($this->getTestCase())) {
         return;
     }
     parent::onTestEnded($event);
     $session = $event->getSession();
     if ($session === null || !$session->isStarted()) {
         // Session wasn't used in particular test.
         return;
     }
     $test_case = $event->getTestCase();
     $this->getAPIClient()->updateStatus($this->getSessionId($session), $this->getTestStatus($test_case, $event->getTestResult()));
 }
 /**
  * Sets browser configuration.
  *
  * @param BrowserConfiguration $browser Browser configuration.
  *
  * @return self
  */
 public function setBrowser(BrowserConfiguration $browser)
 {
     $this->_browser = $browser->attachToTestCase($this);
     // Configure session strategy.
     return $this->setSessionStrategy($this->sessionStrategyManager->getSessionStrategy($browser));
 }
 /**
  * Creates instance of browser configuration.
  *
  * @param array   $aliases        Aliases.
  * @param boolean $add_subscriber Expect addition of subscriber to event dispatcher.
  *
  * @return BrowserConfiguration
  */
 protected function createBrowserConfiguration(array $aliases = array(), $add_subscriber = false)
 {
     $browser = new BrowserConfiguration($this->eventDispatcher);
     $browser->setAliases($aliases);
     $this->eventDispatcher->shouldReceive('addSubscriber')->with($browser)->times($add_subscriber ? 1 : 0);
     return $browser;
 }