1<?php
2
3/*
4 * This file is part of Respect/Validation.
5 *
6 * (c) Alexandre Gomes Gaigalas <alexandre@gaigalas.net>
7 *
8 * For the full copyright and license information, please view the "LICENSE.md"
9 * file that was distributed with this source code.
10 */
11
12namespace Respect\Validation\Rules;
13
14/**
15 * @group  rule
16 * @covers Respect\Validation\Rules\Cntrl
17 * @covers Respect\Validation\Exceptions\CntrlException
18 */
19class CntrlTest extends \PHPUnit_Framework_TestCase
20{
21    /**
22     * @dataProvider providerForValidCntrl
23     */
24    public function testValidDataWithCntrlShouldReturnTrue($validCntrl, $additional = '')
25    {
26        $validator = new Cntrl($additional);
27        $this->assertTrue($validator->validate($validCntrl));
28    }
29
30    /**
31     * @dataProvider providerForInvalidCntrl
32     * @expectedException Respect\Validation\Exceptions\CntrlException
33     */
34    public function testInvalidCntrlShouldFailAndThrowCntrlException($invalidCntrl, $additional = '')
35    {
36        $validator = new Cntrl($additional);
37        $this->assertFalse($validator->validate($invalidCntrl));
38        $this->assertFalse($validator->assert($invalidCntrl));
39    }
40
41    /**
42     * @dataProvider providerForInvalidParams
43     * @expectedException Respect\Validation\Exceptions\ComponentException
44     */
45    public function testInvalidConstructorParamsShouldThrowComponentExceptionUponInstantiation($additional)
46    {
47        $validator = new Cntrl($additional);
48    }
49
50    /**
51     * @dataProvider providerAdditionalChars
52     */
53    public function testAdditionalCharsShouldBeRespected($additional, $query)
54    {
55        $validator = new Cntrl($additional);
56        $this->assertTrue($validator->validate($query));
57    }
58
59    public function providerAdditionalChars()
60    {
61        return [
62            ['!@#$%^&*(){} ', '!@#$%^&*(){} '],
63            ['[]?+=/\\-_|"\',<>. ', "[]?+=/\\-_|\"',<>. \t \n"],
64        ];
65    }
66
67    public function providerForInvalidParams()
68    {
69        return [
70            [new \stdClass()],
71            [[]],
72            [0x2],
73        ];
74    }
75
76    public function providerForValidCntrl()
77    {
78        return [
79            ["\n"],
80            ["\r"],
81            ["\t"],
82            ["\n\r\t"],
83//            array("\n \n", ' '), TODO Verify this
84        ];
85    }
86
87    public function providerForInvalidCntrl()
88    {
89        return [
90            [''],
91            ['16-50'],
92            ['a'],
93            [' '],
94            ['Foo'],
95            ['12.1'],
96            ['-12'],
97            [-12],
98            ['alganet'],
99        ];
100    }
101}
102