1: <?php
2:
3: /**
4: * This file is part of expect package.
5: *
6: * (c) Noritaka Horio <holy.shared.design@gmail.com>
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: use InvalidArgumentException;
15:
16:
17: /**
18: * Verify key exists.
19: *
20: * <code>
21: * $matcher = new ToHaveKey('foo');
22: * $matcher->match([ 'foo' => 1 ]); //return true
23: *
24: * $matcher->match([ 'bar' => 1 ]); //return false
25: * <code>
26: *
27: * @author Noritaka Horio <holy.shared.design@gmail.com>
28: * @copyright Noritaka Horio <holy.shared.design@gmail.com>
29: */
30: final class ToHaveKey implements ReportableMatcher
31: {
32: /**
33: * @var array
34: */
35: private $actual;
36:
37: /**
38: * @var string|int
39: */
40: private $expected;
41:
42: /**
43: * @param string|int $expected
44: */
45: public function __construct($expected)
46: {
47: $this->expected = $expected;
48: }
49:
50: /**
51: * {@inheritdoc}
52: */
53: public function match($actual)
54: {
55: if (is_array($actual) === false) {
56: throw new InvalidArgumentException("The actual value is not a array");
57: }
58:
59: $this->actual = $actual;
60:
61: return array_key_exists($this->expected, $this->actual);
62: }
63:
64: /**
65: * {@inheritdoc}
66: */
67: public function reportFailed(FailedMessage $message)
68: {
69: $message->appendText('Expected array to have the key ')
70: ->appendValue($this->expected);
71: }
72:
73: /**
74: * {@inheritdoc}
75: */
76: public function reportNegativeFailed(FailedMessage $message)
77: {
78: $message->appendText('Expected array not to have the key ')
79: ->appendValue($this->expected);
80: }
81: }
82: