Completed
Push — master ( ef8414...a67d49 )
by Richard
10s
created

testThatSetAssertionClassNameWillNotAcceptInvalidAssertionClasses()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
nc 1
nop 1
dl 0
loc 7
rs 9.4285
c 0
b 0
f 0
1
<?php
2
/**
3
 * Assert
4
 *
5
 * LICENSE
6
 *
7
 * This source file is subject to the MIT license that is bundled
8
 * with this package in the file LICENSE.txt.
9
 * If you did not receive a copy of the license and are unable to
10
 * obtain it through the world-wide-web, please send an email
11
 * to [email protected] so I can send you a copy immediately.
12
 */
13
14
namespace Assert\Tests;
15
16
use Assert\Assert;
17
use Assert\AssertionChain;
18
19
class AssertionChainTest extends \PHPUnit_Framework_TestCase
20
{
21
    /**
22
     * @test
23
     */
24
    public function it_chains_assertions()
0 ignored issues
show
Coding Style introduced by
Method name "AssertionChainTest::it_chains_assertions" is not in camel caps format
Loading history...
25
    {
26
        Assert::that(10)->notEmpty()->integer();
27
    }
28
29
    /**
30
     * @test
31
     */
32
    public function it_shifts_arguments_to_assertions_by_one()
0 ignored issues
show
Coding Style introduced by
Method name "AssertionChainTest::it_shifts_arguments_to_assertions_by_one" is not in camel caps format
Loading history...
33
    {
34
        Assert::that(10)->eq(10);
35
    }
36
37
    /**
38
     * @test
39
     */
40
    public function it_knowns_default_error_message()
0 ignored issues
show
Coding Style introduced by
Method name "AssertionChainTest::it_knowns_default_error_message" is not in camel caps format
Loading history...
41
    {
42
        $this->setExpectedException('Assert\InvalidArgumentException', 'Not Null and such');
43
44
        Assert::that(null, 'Not Null and such')->notEmpty();
45
    }
46
47
    /**
48
     * @test
49
     */
50
    public function it_skips_assertions_on_valid_null()
0 ignored issues
show
Coding Style introduced by
Method name "AssertionChainTest::it_skips_assertions_on_valid_null" is not in camel caps format
Loading history...
51
    {
52
        Assert::that(null)->nullOr()->integer()->eq(10);
53
    }
54
55
    /**
56
     * @test
57
     */
58
    public function it_validates_all_inputs()
0 ignored issues
show
Coding Style introduced by
Method name "AssertionChainTest::it_validates_all_inputs" is not in camel caps format
Loading history...
59
    {
60
        Assert::that(array(1, 2, 3))->all()->integer();
61
    }
62
63
    /**
64
     * @test
65
     */
66
    public function it_has_thatall_shortcut()
0 ignored issues
show
Coding Style introduced by
Method name "AssertionChainTest::it_has_thatall_shortcut" is not in camel caps format
Loading history...
67
    {
68
        Assert::thatAll(array(1, 2, 3))->integer();
69
    }
70
71
    /**
72
     * @test
73
     */
74
    public function it_has_nullor_shortcut()
0 ignored issues
show
Coding Style introduced by
Method name "AssertionChainTest::it_has_nullor_shortcut" is not in camel caps format
Loading history...
75
    {
76
        Assert::thatNullOr(null)->integer()->eq(10);
77
    }
78
79
    /**
80
     * @expectedException \RuntimeException
81
     * @expectedExceptionMessage Assertion 'unknownAssertion' does not exist.
82
     * @test
83
     */
84
    public function it_throws_exception_for_unknown_assertion()
0 ignored issues
show
Coding Style introduced by
Method name "AssertionChainTest::it_throws_exception_for_unknown_assertion" is not in camel caps format
Loading history...
85
    {
86
        Assert::that(null)->unknownAssertion();
0 ignored issues
show
Documentation Bug introduced by
The method unknownAssertion does not exist on object<Assert\AssertionChain>? Since you implemented __call, maybe consider adding a @method annotation.

If you implement __call and you know which methods are available, you can improve IDE auto-completion and static analysis by adding a @method annotation to the class.

This is often the case, when __call is implemented by a parent class and only the child class knows which methods exist:

class ParentClass {
    private $data = array();

    public function __call($method, array $args) {
        if (0 === strpos($method, 'get')) {
            return $this->data[strtolower(substr($method, 3))];
        }

        throw new \LogicException(sprintf('Unsupported method: %s', $method));
    }
}

/**
 * If this class knows which fields exist, you can specify the methods here:
 *
 * @method string getName()
 */
class SomeClass extends ParentClass { }
Loading history...
87
    }
88
89
    /**
90
     * @test
91
     */
92
    public function it_has_satisfy_shortcut()
0 ignored issues
show
Coding Style introduced by
Method name "AssertionChainTest::it_has_satisfy_shortcut" is not in camel caps format
Loading history...
93
    {
94
        Assert::that(null)->satisfy(function ($value) {
95
            return is_null($value);
96
        });
97
    }
98
99
    public function testThatCustomAssertionClassIsUsedWhenSet()
100
    {
101
        $assertionChain = new AssertionChain('foo');
102
        $assertionChain->setAssertionClassName('Assert\Tests\CustomAssertion');
103
104
        CustomAssertion::clearCalls();
105
        $message = uniqid();
106
        $assertionChain->string($message);
107
108
        $this->assertSame(array(array('string', 'foo')), CustomAssertion::getCalls());
109
    }
110
111
    /**
112
     * @dataProvider provideDataToTestThatSetAssertionClassNameWillNotAcceptInvalidAssertionClasses
113
     * @param $assertionClassName
114
     */
115
    public function testThatSetAssertionClassNameWillNotAcceptInvalidAssertionClasses($assertionClassName)
116
    {
117
        $lazyAssertion = new AssertionChain('foo');
118
119
        $this->setExpectedException('LogicException');
120
        $lazyAssertion->setAssertionClassName($assertionClassName);
121
    }
122
123
    /**
124
     * @return array
0 ignored issues
show
Documentation introduced by
Consider making the return type a bit more specific; maybe use array<string,array>.

This check looks for the generic type array as a return type and suggests a more specific type. This type is inferred from the actual code.

Loading history...
125
     */
126
    public function provideDataToTestThatSetAssertionClassNameWillNotAcceptInvalidAssertionClasses()
127
    {
128
        return array(
129
            'null' => array(null),
130
            'string' => array('foo'),
131
            'array' => array(array()),
132
            'object' => array(new \stdClass()),
133
            'other class' => array(__CLASS__),
134
        );
135
    }
136
}
137