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
12namespace Prophecy\Argument\Token;
13
14/**
15 * Logical NOT token.
16 *
17 * @author Boris Mikhaylov <kaguxmail@gmail.com>
18 */
19class LogicalNotToken implements TokenInterface
20{
21    /** @var \Prophecy\Argument\Token\TokenInterface  */
22    private $token;
23
24    /**
25     * @param mixed $value exact value or token
26     */
27    public function __construct($value)
28    {
29        $this->token = $value instanceof TokenInterface? $value : new ExactValueToken($value);
30    }
31
32    /**
33     * Scores 4 when preset token does not match the argument.
34     *
35     * @param $argument
36     *
37     * @return bool|int
38     */
39    public function scoreArgument($argument)
40    {
41        return false === $this->token->scoreArgument($argument) ? 4 : false;
42    }
43
44    /**
45     * Returns true if preset token is last.
46     *
47     * @return bool|int
48     */
49    public function isLast()
50    {
51        return $this->token->isLast();
52    }
53
54    /**
55     * Returns originating token.
56     *
57     * @return TokenInterface
58     */
59    public function getOriginatingToken()
60    {
61        return $this->token;
62    }
63
64    /**
65     * Returns string representation for token.
66     *
67     * @return string
68     */
69    public function __toString()
70    {
71        return sprintf('not(%s)', $this->token);
72    }
73}
74