/
TestPermutationDecorator.php
89 lines (80 loc) · 2.47 KB
/
TestPermutationDecorator.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<?php
/**
* PHP Version 5.4
*
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
*
* Licensed under The MIT License
* For full copyright and license information, please see the LICENSE.txt
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
* @link http://cakephp.org CakePHP(tm) Project
* @since 3.0.0
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
*/
namespace Cake\TestSuite;
use \PHPUnit_Extensions_TestDecorator;
use \PHPUnit_Framework_Test;
use \PHPUnit_Framework_TestResult;
/**
* A decorator class used to run a test case once for each permutation defined
* in the decorated test suite.
*
*/
class TestPermutationDecorator extends PHPUnit_Extensions_TestDecorator {
/**
* An array containing callable methods that will be executed before the test
* suite is run
*
* @var array
*/
protected $_permutations = [];
/**
* Constructor
*
* @param PHPUnit_Framework_Test $test The test or suite to decorate
* @param array $permutations An array containing callable methods that will
* be executed before the test suite is run
*/
public function __construct(PHPUnit_Framework_Test $test, array $permutations) {
parent::__construct($test);
$this->_permutations = $permutations;
}
/**
* Returns the count of single test methods that this decorator contains, taking in
* consideration the possible permutations
*
* @return void
*/
public function count() {
return count($this->_permutations) * $this->test->count();
}
/**
* Runs each of the test methods for this test suite for each of the provided
* permutations.
*
* @param PHPUnit_Framework_TestResult $result
* @param mixed $filter
* @param array $groups
* @param array $excludeGroups
* @param boolean $processIsolation
* @return PHPUnit_Framework_TestResult
*/
public function run(PHPUnit_Framework_TestResult $result = null, $filter = false, array $groups = [], array $excludeGroups = [], $processIsolation = false) {
if ($result === null) {
$result = $this->createResult();
}
foreach ($this->_permutations as $permutation) {
if ($result->shouldStop()) {
break;
}
if (is_callable($permutation)) {
$permutation($this->test);
}
$this->test->run($result, $filter, $groups, $excludeGroups, $processIsolation);
}
return $result;
}
}