This repository has been archived by the owner on Nov 9, 2017. It is now read-only.
forked from minkphp/Mink
-
Notifications
You must be signed in to change notification settings - Fork 10
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
242 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,145 @@ | ||
<?php | ||
|
||
namespace Behat\Mink; | ||
|
||
use Behat\Mink\Driver\DriverInterface, | ||
Behat\Mink\Selector\SelectorsHandler; | ||
|
||
/* | ||
* This file is part of the Behat\Mink. | ||
* (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. | ||
*/ | ||
|
||
/** | ||
* Mink. | ||
* | ||
* @author Konstantin Kudryashov <ever.zet@gmail.com> | ||
*/ | ||
class Mink | ||
{ | ||
private $selectorsHandler; | ||
private $defaultDriverName; | ||
private $currentDriverName; | ||
private $drivers = array(); | ||
|
||
/** | ||
* Initializes mink. | ||
* | ||
* @param Behat\Mink\Selector\SelectorsHandler $selectorsHandler | ||
*/ | ||
public function __construct(SelectorsHandler $selectorsHandler = null) | ||
{ | ||
if (null === $selectorsHandler) { | ||
$selectorsHandler = new SelectorsHandler(); | ||
} | ||
|
||
$this->selectorsHandler = $selectorsHandler; | ||
} | ||
|
||
/** | ||
* Stops all started drivers. | ||
*/ | ||
public function __destruct() | ||
{ | ||
foreach ($this->drivers as $driver) { | ||
if ($driver->isStarted()) { | ||
$driver->stop(); | ||
} | ||
} | ||
} | ||
|
||
/** | ||
* Registers new driver. | ||
* | ||
* @param string $name driver alias name | ||
* @param Behat\Mink\Driver\DriverInterface $driver driver instance | ||
* @param Boolean $isDefault should this driver be the default one? | ||
*/ | ||
public function registerDriver($name, DriverInterface $driver, $isDefault = false) | ||
{ | ||
$name = strtolower($name); | ||
|
||
$this->drivers[$name] = $driver; | ||
|
||
if ($isDefault) { | ||
$this->defaultDriverName = $name; | ||
} | ||
} | ||
|
||
/** | ||
* Switches mink to specific driver. | ||
* | ||
* @param string $name driver alias name | ||
*/ | ||
public function switchToDriver($name) | ||
{ | ||
$name = strtolower($name); | ||
|
||
if (!isset($this->drivers[$name])) { | ||
throw new \InvalidArgumentException(sprintf('Driver "%s" is not registered.', $name)); | ||
} | ||
|
||
if (null !== $this->currentDriverName && $name === $this->currentDriverName) { | ||
return; | ||
} | ||
|
||
$this->currentDriverName = $name; | ||
} | ||
|
||
/** | ||
* Switches mink to default driver. | ||
*/ | ||
public function switchToDefaultDriver() | ||
{ | ||
if (null === $this->defaultDriverName) { | ||
throw new \RuntimeException('Default driver is not defined.'); | ||
} | ||
|
||
$this->switchToDriver($this->defaultDriverName); | ||
} | ||
|
||
/** | ||
* Resets driver (between tests for example). | ||
*/ | ||
public function resetDriver() | ||
{ | ||
$this->getDriver()->reset(); | ||
} | ||
|
||
/** | ||
* Returns mink session, initialized with current (or default) driver. | ||
* | ||
* @return Behat\Mink\Session | ||
*/ | ||
public function getSession() | ||
{ | ||
static $session; | ||
|
||
if (null === $session || $session->getDriver() !== $this->getDriver()) { | ||
$session = new Session($this->getDriver(), $this->selectorsHandler); | ||
} | ||
|
||
return $session; | ||
} | ||
|
||
/** | ||
* Returns current (or default) driver. | ||
* | ||
* @return Behat\Mink\Driver\DriverInterface | ||
*/ | ||
private function getDriver() | ||
{ | ||
if (null === $this->currentDriverName) { | ||
$this->switchToDefaultDriver(); | ||
} | ||
|
||
if (!$this->drivers[$this->currentDriverName]->isStarted()) { | ||
$this->drivers[$this->currentDriverName]->start(); | ||
} | ||
|
||
return $this->drivers[$this->currentDriverName]; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
<?php | ||
|
||
namespace Tests\Behat\Mink; | ||
|
||
use Behat\Mink\Mink; | ||
|
||
class MinkTest extends \PHPUnit_Framework_TestCase | ||
{ | ||
protected function setUp() | ||
{ | ||
$this->mink = new Mink(); | ||
} | ||
|
||
public function testSwitchToNotStartedDriver() | ||
{ | ||
$driver = $this->getMockBuilder('Behat\Mink\Driver\DriverInterface')->getMock(); | ||
$driver | ||
->expects($this->once()) | ||
->method('isStarted') | ||
->will($this->returnValue(false)); | ||
$driver | ||
->expects($this->once()) | ||
->method('start'); | ||
$driver | ||
->expects($this->once()) | ||
->method('reset'); | ||
|
||
$this->mink->registerDriver('everzet', $driver); | ||
$this->mink->switchToDriver('everzet'); | ||
$this->mink->resetDriver(); | ||
|
||
$this->setExpectedException('InvalidArgumentException'); | ||
$this->mink->switchToDriver('undefined'); | ||
} | ||
|
||
public function testSwitchToStartedDriver() | ||
{ | ||
$driver = $this->getMockBuilder('Behat\Mink\Driver\DriverInterface')->getMock(); | ||
$driver | ||
->expects($this->once()) | ||
->method('isStarted') | ||
->will($this->returnValue(true)); | ||
$driver | ||
->expects($this->never()) | ||
->method('start'); | ||
$driver | ||
->expects($this->once()) | ||
->method('reset'); | ||
|
||
$this->mink->registerDriver('everzet', $driver); | ||
$this->mink->switchToDriver('everzet'); | ||
$this->mink->resetDriver(); | ||
|
||
$this->setExpectedException('RuntimeException'); | ||
$this->mink->switchToDefaultDriver(); | ||
} | ||
|
||
public function testSwitchToDefaultDriver() | ||
{ | ||
$driver = $this->getMockBuilder('Behat\Mink\Driver\DriverInterface')->getMock(); | ||
$driver | ||
->expects($this->once()) | ||
->method('isStarted') | ||
->will($this->returnValue(true)); | ||
$driver | ||
->expects($this->once()) | ||
->method('reset'); | ||
|
||
$this->mink->registerDriver('everzet', $driver, true); | ||
$this->mink->resetDriver(); | ||
} | ||
|
||
public function testSessionCreation() | ||
{ | ||
$driver1 = $this->getMockBuilder('Behat\Mink\Driver\DriverInterface')->getMock(); | ||
$driver1 | ||
->expects($this->exactly(2)) | ||
->method('isStarted') | ||
->will($this->returnValue(true)); | ||
$driver2 = $this->getMockBuilder('Behat\Mink\Driver\DriverInterface')->getMock(); | ||
$driver2 | ||
->expects($this->exactly(4)) | ||
->method('isStarted') | ||
->will($this->returnValue(true)); | ||
|
||
$this->mink->registerDriver('driver1', $driver1, true); | ||
$this->mink->registerDriver('driver2', $driver2); | ||
|
||
$session = $this->mink->getSession(); | ||
$this->assertInstanceOf('Behat\Mink\Session', $session); | ||
$this->assertSame($session, $this->mink->getSession()); | ||
|
||
$this->mink->switchToDriver('driver2'); | ||
$this->assertNotSame($session, $this->mink->getSession()); | ||
$this->assertSame($this->mink->getSession(), $this->mink->getSession()); | ||
} | ||
} |