Pull merge.
[yaffs-website] / vendor / phpspec / prophecy / src / Prophecy / Argument / Token / LogicalAndToken.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 /**
15  * Logical AND token.
16  *
17  * @author Boris Mikhaylov <kaguxmail@gmail.com>
18  */
19 class LogicalAndToken implements TokenInterface
20 {
21     private $tokens = array();
22
23     /**
24      * @param array $arguments exact values or tokens
25      */
26     public function __construct(array $arguments)
27     {
28         foreach ($arguments as $argument) {
29             if (!$argument instanceof TokenInterface) {
30                 $argument = new ExactValueToken($argument);
31             }
32             $this->tokens[] = $argument;
33         }
34     }
35
36     /**
37      * Scores maximum score from scores returned by tokens for this argument if all of them score.
38      *
39      * @param $argument
40      *
41      * @return bool|int
42      */
43     public function scoreArgument($argument)
44     {
45         if (0 === count($this->tokens)) {
46             return false;
47         }
48
49         $maxScore = 0;
50         foreach ($this->tokens as $token) {
51             $score = $token->scoreArgument($argument);
52             if (false === $score) {
53                 return false;
54             }
55             $maxScore = max($score, $maxScore);
56         }
57
58         return $maxScore;
59     }
60
61     /**
62      * Returns false.
63      *
64      * @return boolean
65      */
66     public function isLast()
67     {
68         return false;
69     }
70
71     /**
72      * Returns string representation for token.
73      *
74      * @return string
75      */
76     public function __toString()
77     {
78         return sprintf('bool(%s)', implode(' AND ', $this->tokens));
79     }
80 }