BaseTestCase::combinations()   B
last analyzed

Complexity

Conditions 6
Paths 6

Size

Total Lines 24
Code Lines 13

Duplication

Lines 0
Ratio 0 %
Metric Value
dl 0
loc 24
rs 8.5126
cc 6
eloc 13
nc 6
nop 2
1
<?php
2
/*
3
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
4
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
5
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
6
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
7
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
8
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
9
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
10
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
11
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
12
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
13
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
14
 *
15
 * This software consists of voluntary contributions made by many individuals
16
 * and is licensed under the MIT license. For more information, see
17
 * <http://www.doctrine-project.org>.
18
 */
19
20
namespace BaleenTest\Cli;
21
22
use Mockery as m;
23
24
/**
25
 * Class HandlerTestCase
26
 * @author Gabriel Somoza <[email protected]>
27
 */
28
class BaseTestCase extends \PHPUnit_Framework_TestCase
29
{
30
31
    /**
32
     * tearDown - clean up Mockery
33
     */
34
    public function tearDown()
35
    {
36
        m::close();
37
    }
38
39
    /**
40
     * @param $propName
41
     * @param $instance
42
     * @return mixed
43
     */
44
    public function getPropVal($propName, $instance)
45
    {
46
        $prop = new \ReflectionProperty($instance, $propName);
47
        $prop->setAccessible(true);
48
        return $prop->getValue($instance);
49
    }
50
51
    /**
52
     * @param $propName
53
     * @param $value
54
     * @param $instance
55
     */
56
    public function setPropVal($propName, $value, $instance)
57
    {
58
        $prop = new \ReflectionProperty($instance, $propName);
59
        $prop->setAccessible(true);
60
        $prop->setValue($instance, $value);
61
    }
62
63
    /**
64
     * @param $methodName
65
     * @param $instance
66
     * @param $args
67
     * @return mixed
68
     */
69
    public function invokeMethod($methodName, $instance, $args = [])
70
    {
71
        $method = new \ReflectionMethod($instance, $methodName);
72
        $method->setAccessible(true);
73
        return $method->invokeArgs($instance, $args);
74
    }
75
76
    /**
77
     * @param $arrays
78
     * @param int $i
79
     * @return array
80
     */
81
    public function combinations($arrays, $i = 0) {
82
        if (!isset($arrays[$i])) {
83
            return array();
84
        }
85
        if ($i == count($arrays) - 1) {
86
            return $arrays[$i];
87
        }
88
89
        // get combinations from subsequent arrays
90
        $tmp = $this->combinations($arrays, $i + 1);
91
92
        $result = array();
93
94
        // concat each array from tmp with each element from $arrays[$i]
95
        foreach ($arrays[$i] as $v) {
96
            foreach ($tmp as $t) {
97
                $result[] = is_array($t) ?
98
                    array_merge(array($v), $t) :
99
                    array($v, $t);
100
            }
101
        }
102
103
        return $result;
104
    }
105
106
    /**
107
     * trueFalseProvider
108
     * @return array
109
     */
110
    public function trueFalseProvider()
111
    {
112
        return [
113
            [true],
114
            [false],
115
        ];
116
    }
117
}
118