Passed
Push — main ( 3fc6af...0545d9 )
by Proyecto
08:13
created

AssertsArraySubset::AssertsArrayIsASubsetOf()   A

Complexity

Conditions 6
Paths 5

Size

Total Lines 17
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 7.7305

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 10
c 1
b 0
f 0
dl 0
loc 17
ccs 7
cts 11
cp 0.6364
rs 9.2222
cc 6
nc 5
nop 3
crap 7.7305
1
<?php
2
3
namespace ProyectoTAU\TAU\Common;
4
5
trait AssertsArraySubset
6
{
7 24
    public function AssertsArrayIsASubsetOf($expected, $actual, &$message): bool
8
    {
9 24
        if (is_array($expected) && is_array($actual)) {
10 24
            foreach ($expected as $key => $value) {
11 24
                if ( ! array_key_exists($key, $actual)) {
12
                    $message = "Keys: Expected ($key) not found in Actual";
13
                    return false;
14 24
                } elseif ( ! $this->AssertsArrayIsASubsetOf($expected[$key], $actual[$key], $message)){
15
                    $message .= " with key ($key)";
16
                    return false;
17
                }
18
            }
19
20 24
            return $this->AssertsReverseArrayIsASubsetOf($actual, $expected, $message);
21
        }
22
23 24
        return $this->checkValues($expected, $actual, $message);
24
    }
25
26 24
    private function AssertsReverseArrayIsASubsetOf($actual, $expected, &$message): bool
27
    {
28 24
        if (is_array($expected) && is_array($actual)) {
29 24
            foreach ($actual as $key => $value) {
30 24
                if (!array_key_exists($key, $expected)) {
31
                    $message = "Keys: Actual ($key) unexpected";
32
                    return false;
33 24
                } elseif (!$this->AssertsReverseArrayIsASubsetOf($actual[$key], $expected[$key], $message)) {
34
                    $message .= " in key ($key)";
35
                    return false;
36
                }
37
            }
38
39 24
            return true;
40
        }
41
42 24
        return $this->checkValues($actual, $expected, $message);
43
    }
44
45 24
    private function checkValues($expected, $actual, &$message)
46
    {
47 24
        if (gettype($expected) != gettype($actual)) {
48
            $message = "Mismatched Types: Expected (gettype($expected)) != Actual (gettype($actual))";
49
            return false;
50 24
        } elseif (gettype($expected) == 'object' ) {
51 24
            if( ! $expected->equals($actual) ) {
52
                $message = "Objects: Expected ($expected) != Actual ($actual)";
53 24
                return false;
54
            }
55
        } elseif ($expected != $actual) {
56
            $message = "Values: Expected ($expected) != Actual ($actual)";
57
            return false;
58
        }
59 24
        return true;
60
    }
61
}
62