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

src/ArrayAssertsTrait.php (1 issue)

Checks function comment missing param tag

Coding Style Documentation Informational

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