ArgumentsWildcardSpec.php 5.4 KB
Newer Older
jhon committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
<?php

namespace spec\Prophecy\Argument;

use PhpSpec\ObjectBehavior;
use Prophecy\Argument\Token\TokenInterface;

class ArgumentsWildcardSpec extends ObjectBehavior
{
    /**
     * @param \stdClass $object
     */
    function it_wraps_non_token_arguments_into_ExactValueToken($object)
    {
        $this->beConstructedWith(array(42, 'zet', $object));

        $class = get_class($object->getWrappedObject());
        $hash  = spl_object_hash($object->getWrappedObject());

        $this->__toString()->shouldReturn("exact(42), exact(\"zet\"), exact($class:$hash Object (\n    'objectProphecy' => Prophecy\Prophecy\ObjectProphecy Object (*Prophecy*)\n))");
    }

    /**
     * @param \Prophecy\Argument\Token\TokenInterface $token1
     * @param \Prophecy\Argument\Token\TokenInterface $token2
     * @param \Prophecy\Argument\Token\TokenInterface $token3
     */
    function it_generates_string_representation_from_all_tokens_imploded($token1, $token2, $token3)
    {
        $token1->__toString()->willReturn('token_1');
        $token2->__toString()->willReturn('token_2');
        $token3->__toString()->willReturn('token_3');

        $this->beConstructedWith(array($token1, $token2, $token3));
        $this->__toString()->shouldReturn('token_1, token_2, token_3');
    }

    /**
     * @param \Prophecy\Argument\Token\TokenInterface $token
     */
    function it_exposes_list_of_tokens($token)
    {
        $this->beConstructedWith(array($token));

        $this->getTokens()->shouldReturn(array($token));
    }

    function it_returns_score_of_1_if_there_are_no_tokens_and_arguments()
    {
        $this->beConstructedWith(array());

        $this->scoreArguments(array())->shouldReturn(1);
    }

    /**
     * @param \Prophecy\Argument\Token\TokenInterface $token1
     * @param \Prophecy\Argument\Token\TokenInterface $token2
     * @param \Prophecy\Argument\Token\TokenInterface $token3
     */
    function it_should_return_match_score_based_on_all_tokens_score($token1, $token2, $token3)
    {
        $token1->scoreArgument('one')->willReturn(3);
        $token1->isLast()->willReturn(false);
        $token2->scoreArgument(2)->willReturn(5);
        $token2->isLast()->willReturn(false);
        $token3->scoreArgument($obj = new \stdClass())->willReturn(10);
        $token3->isLast()->willReturn(false);

        $this->beConstructedWith(array($token1, $token2, $token3));
        $this->scoreArguments(array('one', 2, $obj))->shouldReturn(18);
    }

    /**
     * @param \Prophecy\Argument\Token\TokenInterface $token1
     * @param \Prophecy\Argument\Token\TokenInterface $token2
     * @param \Prophecy\Argument\Token\TokenInterface $token3
     */
    function it_returns_false_if_there_is_less_arguments_than_tokens($token1, $token2, $token3)
    {
        $token1->scoreArgument('one')->willReturn(3);
        $token1->isLast()->willReturn(false);
        $token2->scoreArgument(2)->willReturn(5);
        $token2->isLast()->willReturn(false);
        $token3->scoreArgument(null)->willReturn(false);
        $token3->isLast()->willReturn(false);

        $this->beConstructedWith(array($token1, $token2, $token3));
        $this->scoreArguments(array('one', 2))->shouldReturn(false);
    }

    /**
     * @param \Prophecy\Argument\Token\TokenInterface $token1
     * @param \Prophecy\Argument\Token\TokenInterface $token2
     * @param \Prophecy\Argument\Token\TokenInterface $token3
     */
    function it_returns_false_if_there_is_less_tokens_than_arguments($token1, $token2, $token3)
    {
        $token1->scoreArgument('one')->willReturn(3);
        $token1->isLast()->willReturn(false);
        $token2->scoreArgument(2)->willReturn(5);
        $token2->isLast()->willReturn(false);
        $token3->scoreArgument($obj = new \stdClass())->willReturn(10);
        $token3->isLast()->willReturn(false);

        $this->beConstructedWith(array($token1, $token2, $token3));
        $this->scoreArguments(array('one', 2, $obj, 4))->shouldReturn(false);
    }

    /**
     * @param \Prophecy\Argument\Token\TokenInterface $token1
     * @param \Prophecy\Argument\Token\TokenInterface $token2
     * @param \Prophecy\Argument\Token\TokenInterface $token3
     */
    function it_should_return_false_if_one_of_the_tokens_returns_false($token1, $token2, $token3)
    {
        $token1->scoreArgument('one')->willReturn(3);
        $token1->isLast()->willReturn(false);
        $token2->scoreArgument(2)->willReturn(false);
        $token2->isLast()->willReturn(false);
        $token3->scoreArgument($obj = new \stdClass())->willReturn(10);
        $token3->isLast()->willReturn(false);

        $this->beConstructedWith(array($token1, $token2, $token3));
        $this->scoreArguments(array('one', 2, $obj))->shouldReturn(false);
    }

    /**
     * @param \Prophecy\Argument\Token\TokenInterface $token1
     * @param \Prophecy\Argument\Token\TokenInterface $token2
     * @param \Prophecy\Argument\Token\TokenInterface $token3
     */
    function it_should_calculate_score_until_last_token($token1, $token2, $token3)
    {
        $token1->scoreArgument('one')->willReturn(3);
        $token1->isLast()->willReturn(false);

        $token2->scoreArgument(2)->willReturn(7);
        $token2->isLast()->willReturn(true);

        $token3->scoreArgument($obj = new \stdClass())->willReturn(10);
        $token3->isLast()->willReturn(false);

        $this->beConstructedWith(array($token1, $token2, $token3));
        $this->scoreArguments(array('one', 2, $obj))->shouldReturn(10);
    }
}