ToBeAn   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 87
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Importance

Changes 5
Bugs 1 Features 0
Metric Value
wmc 6
c 5
b 1
f 0
lcom 1
cbo 1
dl 0
loc 87
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A reportFailed() 0 13 1
A reportNegativeFailed() 0 13 1
A match() 0 7 1
A detectType() 0 7 2
1
<?php
2
3
/**
4
 * This file is part of expect package.
5
 *
6
 * (c) Noritaka Horio <[email protected]>
7
 *
8
 * This source file is subject to the MIT license that is bundled
9
 * with this source code in the file LICENSE.
10
 */
11
namespace expect\matcher;
12
13
use expect\FailedMessage;
14
15
/**
16
 * Verify whether the value is of a type that expect.
17
 *
18
 * <code>
19
 * $matcher = new ToBeAn('string');
20
 * $matcher->match('foo'); //return true
21
 *
22
 * $matcher->match(1); //return false
23
 * </code>
24
 *
25
 * @author Noritaka Horio <[email protected]>
26
 * @copyright Noritaka Horio <[email protected]>
27
 */
28
final class ToBeAn implements ReportableMatcher
29
{
30
    /**
31
     * @var mixed
32
     */
33
    private $actual;
34
35
    /**
36
     * @var string
37
     */
38
    private $expected;
39
40
    /**
41
     * type of value.
42
     *
43
     * @var string
44
     */
45
    private $actualType;
46
47
    /**
48
     * Create a new matcher.
49
     *
50
     * @param $expected expected value
51
     */
52
    public function __construct($expected)
53
    {
54
        $this->expected = $expected;
55
    }
56
57
    /**
58
     * {@inheritdoc}
59
     */
60
    public function match($actual)
61
    {
62
        $this->actual = $actual;
63
        $this->actualType = $this->detectType($this->actual);
64
65
        return $this->actualType === $this->expected;
66
    }
67
68
    /**
69
     * {@inheritdoc}
70
     */
71
    public function reportFailed(FailedMessage $message)
72
    {
73
        $message->appendText('Expected ')
74
            ->appendValue($this->actual)
75
            ->appendText(' to be an ')
76
            ->appendText($this->expected)
77
            ->appendText("\n\n")
78
            ->appendText('    expected: ')
79
            ->appendText($this->expected)
80
            ->appendText("\n")
81
            ->appendText('         got: ')
82
            ->appendText($this->actualType);
83
    }
84
85
    /**
86
     * {@inheritdoc}
87
     */
88
    public function reportNegativeFailed(FailedMessage $message)
89
    {
90
        $message->appendText('Expected ')
91
            ->appendValue($this->actual)
92
            ->appendText(' not to be an ')
93
            ->appendText($this->expected)
94
            ->appendText("\n\n")
95
            ->appendText('    expected not: ')
96
            ->appendText($this->expected)
97
            ->appendText("\n")
98
            ->appendText('             got: ')
99
            ->appendText($this->actualType);
100
    }
101
102
    /**
103
     * @param mixed $value
104
     *
105
     * @return string type name
106
     */
107
    private function detectType($value)
108
    {
109
        $detectType = gettype($value);
110
        $detectType = ($detectType === 'double') ? 'float' : $detectType;
111
112
        return $detectType;
113
    }
114
}
115