Security update for permissions_by_term
[yaffs-website] / vendor / behat / behat / src / Behat / Behat / Hook / Tester / HookableFeatureTester.php
1 <?php
2
3 /*
4  * This file is part of the Behat.
5  * (c) Konstantin Kudryashov <ever.zet@gmail.com>
6  *
7  * For the full copyright and license information, please view the LICENSE
8  * file that was distributed with this source code.
9  */
10
11 namespace Behat\Behat\Hook\Tester;
12
13 use Behat\Behat\Hook\Scope\AfterFeatureScope;
14 use Behat\Behat\Hook\Scope\BeforeFeatureScope;
15 use Behat\Testwork\Environment\Environment;
16 use Behat\Testwork\Hook\HookDispatcher;
17 use Behat\Testwork\Hook\Tester\Setup\HookedSetup;
18 use Behat\Testwork\Hook\Tester\Setup\HookedTeardown;
19 use Behat\Testwork\Tester\Result\TestResult;
20 use Behat\Testwork\Tester\SpecificationTester;
21
22 /**
23  * Feature tester which dispatches hooks during its execution.
24  *
25  * @author Konstantin Kudryashov <ever.zet@gmail.com>
26  */
27 final class HookableFeatureTester implements SpecificationTester
28 {
29     /**
30      * @var SpecificationTester
31      */
32     private $baseTester;
33     /**
34      * @var HookDispatcher
35      */
36     private $hookDispatcher;
37
38     /**
39      * Initializes tester.
40      *
41      * @param SpecificationTester $baseTester
42      * @param HookDispatcher      $hookDispatcher
43      */
44     public function __construct(SpecificationTester $baseTester, HookDispatcher $hookDispatcher)
45     {
46         $this->baseTester = $baseTester;
47         $this->hookDispatcher = $hookDispatcher;
48     }
49
50     /**
51      * {@inheritdoc}
52      */
53     public function setUp(Environment $env, $spec, $skip)
54     {
55         $setup = $this->baseTester->setUp($env, $spec, $skip);
56
57         if ($skip) {
58             return $setup;
59         }
60
61         $scope = new BeforeFeatureScope($env, $spec);
62         $hookCallResults = $this->hookDispatcher->dispatchScopeHooks($scope);
63
64         return new HookedSetup($setup, $hookCallResults);
65     }
66
67     /**
68      * {@inheritdoc}
69      */
70     public function test(Environment $env, $spec, $skip)
71     {
72         return $this->baseTester->test($env, $spec, $skip);
73     }
74
75     /**
76      * {@inheritdoc}
77      */
78     public function tearDown(Environment $env, $spec, $skip, TestResult $result)
79     {
80         $teardown = $this->baseTester->tearDown($env, $spec, $skip, $result);
81
82         if ($skip) {
83             return $teardown;
84         }
85
86         $scope = new AfterFeatureScope($env, $spec, $result);
87         $hookCallResults = $this->hookDispatcher->dispatchScopeHooks($scope);
88
89         return new HookedTeardown($teardown, $hookCallResults);
90     }
91 }