4 * This file is part of the Behat.
5 * (c) Konstantin Kudryashov <ever.zet@gmail.com>
7 * For the full copyright and license information, please view the LICENSE
8 * file that was distributed with this source code.
11 namespace Behat\Testwork\Hook\Tester;
13 use Behat\Testwork\Environment\Environment;
14 use Behat\Testwork\Hook\HookDispatcher;
15 use Behat\Testwork\Hook\Scope\AfterSuiteScope;
16 use Behat\Testwork\Hook\Scope\BeforeSuiteScope;
17 use Behat\Testwork\Hook\Tester\Setup\HookedSetup;
18 use Behat\Testwork\Hook\Tester\Setup\HookedTeardown;
19 use Behat\Testwork\Specification\SpecificationIterator;
20 use Behat\Testwork\Tester\Result\TestResult;
21 use Behat\Testwork\Tester\SuiteTester;
24 * Suite tester which dispatches hooks during its execution.
26 * @author Konstantin Kudryashov <ever.zet@gmail.com>
28 final class HookableSuiteTester implements SuiteTester
37 private $hookDispatcher;
42 * @param SuiteTester $baseTester
43 * @param HookDispatcher $hookDispatcher
45 public function __construct(SuiteTester $baseTester, HookDispatcher $hookDispatcher)
47 $this->baseTester = $baseTester;
48 $this->hookDispatcher = $hookDispatcher;
54 public function setUp(Environment $env, SpecificationIterator $iterator, $skip)
56 $setup = $this->baseTester->setUp($env, $iterator, $skip);
62 $scope = new BeforeSuiteScope($env, $iterator);
63 $hookCallResults = $this->hookDispatcher->dispatchScopeHooks($scope);
65 return new HookedSetup($setup, $hookCallResults);
71 public function test(Environment $env, SpecificationIterator $iterator, $skip)
73 return $this->baseTester->test($env, $iterator, $skip);
79 public function tearDown(Environment $env, SpecificationIterator $iterator, $skip, TestResult $result)
81 $teardown = $this->baseTester->tearDown($env, $iterator, $skip, $result);
87 $scope = new AfterSuiteScope($env, $iterator, $result);
88 $hookCallResults = $this->hookDispatcher->dispatchScopeHooks($scope);
90 return new HookedTeardown($teardown, $hookCallResults);