Pull merge.
[yaffs-website] / vendor / phpspec / prophecy / src / Prophecy / Argument / Token / TypeToken.php
1 <?php
2
3 /*
4  * This file is part of the Prophecy.
5  * (c) Konstantin Kudryashov <ever.zet@gmail.com>
6  *     Marcello Duarte <marcello.duarte@gmail.com>
7  *
8  * For the full copyright and license information, please view the LICENSE
9  * file that was distributed with this source code.
10  */
11
12 namespace Prophecy\Argument\Token;
13
14 use Prophecy\Exception\InvalidArgumentException;
15
16 /**
17  * Value type token.
18  *
19  * @author Konstantin Kudryashov <ever.zet@gmail.com>
20  */
21 class TypeToken implements TokenInterface
22 {
23     private $type;
24
25     /**
26      * @param string $type
27      */
28     public function __construct($type)
29     {
30         $checker = "is_{$type}";
31         if (!function_exists($checker) && !interface_exists($type) && !class_exists($type)) {
32             throw new InvalidArgumentException(sprintf(
33                 'Type or class name expected as an argument to TypeToken, but got %s.', $type
34             ));
35         }
36
37         $this->type = $type;
38     }
39
40     /**
41      * Scores 5 if argument has the same type this token was constructed with.
42      *
43      * @param $argument
44      *
45      * @return bool|int
46      */
47     public function scoreArgument($argument)
48     {
49         $checker = "is_{$this->type}";
50         if (function_exists($checker)) {
51             return call_user_func($checker, $argument) ? 5 : false;
52         }
53
54         return $argument instanceof $this->type ? 5 : false;
55     }
56
57     /**
58      * Returns false.
59      *
60      * @return bool
61      */
62     public function isLast()
63     {
64         return false;
65     }
66
67     /**
68      * Returns string representation for token.
69      *
70      * @return string
71      */
72     public function __toString()
73     {
74         return sprintf('type(%s)', $this->type);
75     }
76 }