Failed Conditions
Pull Request — master (#6)
by Chad
01:45
created

src/ArrayAssertsTrait.php (1 issue)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
namespace Chadicus;
4
5
/**
6
 * Trait for adding asserts for arrays
7
 */
8
trait ArrayAssertsTrait
9
{
10
    /**
11
     * Asserts the given $actual array is the same as the $expected array disregarding index order
12
     *
13
     * @param array       $expected The expected array.
14
     * @param mixed       $actual   The actual array.
15
     * @param string|null $prefix   Prefix to use with error messages. Useful for nested arrays.
16
     *
17
     * @return void
18
     */
19
    public function assertSameArray(array $expected, $actual, $prefix = null)
20
    {
21
        //assert that the actual value is an array
22
        $this->assertInternalType('array', $actual, '$actual was not an array');
23
24
        $expectedKeys = array_keys($expected);
25
        $actualKeys = array_keys($actual);
26
27
        //find any keys in the expected array that are not present in the actual array
28
        $missingExpectedKeys = array_diff($expectedKeys, $actualKeys);
29
        $this->assertCount(
30
            0,
31
            $missingExpectedKeys,
32
            sprintf(
33
                '$actual array is missing %d keys: %s',
34
                count($missingExpectedKeys),
35
                implode(', ', $missingExpectedKeys)
36
            )
37
        );
38
39
        //find any keys in the actual array that are not expected in the expected array
40
        $unexpectedKeys = array_diff($actualKeys, $expectedKeys);
41
        $this->assertCount(
42
            0,
43
            $unexpectedKeys,
44
            sprintf(
45
                '$actual array contains %d unexpected keys: %s',
46
                count($unexpectedKeys),
47
                implode(', ', $unexpectedKeys)
48
            )
49
        );
50
51
        //Assert all values are the same value and type.
52
        //Recursively call assertSameArray on array values
53
        foreach ($expected as $key => $value) {
54
            if (is_array($value)) {
55
                $this->assertSameArray($value, $actual[$key], "{$prefix}{$key}.");
56
                continue;
57
            }
58
59
            $this->assertSame(
60
                $value,
61
                $actual[$key],
62
                sprintf(
63
                    "{$prefix}{$key} value is not correct expected %s\nfound %s",
64
                    var_export($value, 1),
65
                    var_export($actual[$key], 1)
66
                )
67
            );
68
        }
69
    }
70
71
    /**
72
     * Asserts the number of elements of an array, Countable or Traversable.
73
     *
74
     * Ensures this method must be provided by classes using this trait.
75
     *
76
     * @param integer $expectedCount The expected number of items in $haystack.
77
     * @param mixed   $haystack      The array, countable or traversable object containing items.
78
     * @param string  $message       Optional error message to give upon failure.
79
     *
80
     * @return void
81
     */
82
    abstract public function assertCount($expectedCount, $haystack, $message = '');
83
84
    /**
0 ignored issues
show
Coding Style Documentation introduced by
Doc comment for parameter "$actual" missing
Loading history...
85
     * Asserts that a variable is of a given type.
86
     *
87
     * Ensures this method must be provided by classes using this trait.
88
     *
89
     * @param string $expected The expected internal type.
90
     * @param mixed  $haystack The variable to verify.
91
     * @param string $message  Optional error message to give upon failure.
92
     *
93
     * @return void
94
     */
95
    abstract public function assertInternalType($expected, $actual, $message = '');
96
}
97