Completed
Pull Request — master (#11)
by no
05:04 queued 02:15
created

ListValidatorTest::testValidate()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 11
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 11
rs 9.4285
cc 2
eloc 7
nc 2
nop 3
1
<?php
2
3
namespace ValueValidators\Tests;
4
5
use PHPUnit_Framework_TestCase;
6
use ValueValidators\Error;
7
use ValueValidators\ListValidator;
8
9
/**
10
 * @covers ValueValidators\ListValidator
11
 *
12
 * @group ValueValidators
13
 * @group DataValueExtensions
14
 *
15
 * @licence GNU GPL v2+
16
 * @author Thiemo Mättig
17
 */
18
class ListValidatorTest extends PHPUnit_Framework_TestCase {
19
20
	/**
21
	 * @dataProvider invalidRangeProvider
22
	 */
23
	public function testInvalidRange( $range ) {
24
		$validator = new ListValidator();
25
		$validator->setOptions( array( 'elementcount' => $range ) );
26
		$this->setExpectedException( 'Exception' );
27
		$validator->validate( array() );
28
	}
29
30
	public function invalidRangeProvider() {
31
		return array(
32
			array( null ),
33
			array( 0 ),
34
			array( '' ),
35
			array( array() ),
36
			array( array( 0 ) ),
37
			array( array( 0, 0, 0 ) ),
38
		);
39
	}
40
41
	/**
42
	 * @dataProvider valueProvider
43
	 */
44
	public function testValidate( $value, array $options, $expectedErrors ) {
45
		$validator = new ListValidator();
46
		$validator->setOptions( $options );
47
		$result = $validator->validate( $value );
48
49
		if ( !is_array( $expectedErrors ) ) {
50
			$expectedErrors = array( $expectedErrors );
51
		}
52
53
		$this->assertEquals( $expectedErrors, $result->getErrors() );
54
	}
55
56
	public function valueProvider() {
57
		return array(
58
			array(
59
				'value' => null,
60
				'options' => array(),
61
				'expectedErrors' => Error::newError( 'Not an array' )
62
			),
63
			array(
64
				'value' => 0,
65
				'options' => array(),
66
				'expectedErrors' => Error::newError( 'Not an array' )
67
			),
68
			array(
69
				'value' => '',
70
				'options' => array(),
71
				'expectedErrors' => Error::newError( 'Not an array' )
72
			),
73
			array(
74
				'value' => array(),
75
				'options' => array(),
76
				'expectedErrors' => array()
77
			),
78
			array(
79
				'value' => array( 1 ),
80
				'options' => array(),
81
				'expectedErrors' => array()
82
			),
83
84
			// Lower bound only
85
			array(
86
				'value' => array(),
87
				'options' => array( 'minelements' => null ),
88
				'expectedErrors' => array()
89
			),
90
			array(
91
				'value' => array(),
92
				'options' => array( 'minelements' => 0 ),
93
				'expectedErrors' => array()
94
			),
95
			array(
96
				'value' => array(),
97
				'options' => array( 'minelements' => 1 ),
98
				'expectedErrors' => Error::newError( 'Value exceeding lower bound', 'length' )
99
			),
100
			array(
101
				'value' => array( 1 ),
102
				'options' => array( 'minelements' => 1 ),
103
				'expectedErrors' => array()
104
			),
105
106
			// Upper bound only
107
			array(
108
				'value' => array(),
109
				'options' => array( 'maxelements' => null ),
110
				'expectedErrors' => array()
111
			),
112
			array(
113
				'value' => array(),
114
				'options' => array( 'maxelements' => 0 ),
115
				'expectedErrors' => array()
116
			),
117
			array(
118
				'value' => array( 1 ),
119
				'options' => array( 'maxelements' => 0 ),
120
				'expectedErrors' => Error::newError( 'Value exceeding upper bound', 'length' )
121
			),
122
			array(
123
				'value' => array( 1 ),
124
				'options' => array( 'maxelements' => 1 ),
125
				'expectedErrors' => array()
126
			),
127
128
			// Lower and upper bound
129
			array(
130
				'value' => array(),
131
				'options' => array( 'elementcount' => array( 0, 0 ) ),
132
				'expectedErrors' => array()
133
			),
134
			array(
135
				'value' => array( 1 ),
136
				'options' => array( 'elementcount' => array( 2, 2 ) ),
137
				'expectedErrors' => Error::newError( 'Value exceeding lower bound', 'length' )
138
			),
139
			array(
140
				'value' => array( 1, 2 ),
141
				'options' => array( 'elementcount' => array( 2, 2 ) ),
142
				'expectedErrors' => array()
143
			),
144
			array(
145
				'value' => array( 1 ),
146
				'options' => array( 'elementcount' => array( 0, 0 ) ),
147
				'expectedErrors' => Error::newError( 'Value exceeding upper bound', 'length' )
148
			),
149
			array(
150
				'value' => array(),
151
				'options' => array( 'elementcount' => array( 0, 0 ) ),
152
				'expectedErrors' => array()
153
			),
154
			array(
155
				'value' => array(),
156
				'options' => array( 'elementcount' => array( 2, 0 ) ),
157
				'expectedErrors' => Error::newError( 'Value exceeding lower bound', 'length' )
158
			),
159
			array(
160
				'value' => array( 1, 2 ),
161
				'options' => array( 'elementcount' => array( 2, 0 ) ),
162
				'expectedErrors' => Error::newError( 'Value exceeding upper bound', 'length' )
163
			),
164
			array(
165
				'value' => array( 1 ),
166
				'options' => array( 'elementcount' => array( 2, 0 ) ),
167
				'expectedErrors' => array(
168
					Error::newError( 'Value exceeding upper bound', 'length' ),
169
					Error::newError( 'Value exceeding lower bound', 'length' ),
170
				)
171
			),
172
			array(
173
				'value' => array( 1 ),
174
				'options' => array( 'minelements' => 2, 'maxelements' => 0 ),
175
				'expectedErrors' => array(
176
					Error::newError( 'Value exceeding upper bound', 'length' ),
177
					Error::newError( 'Value exceeding lower bound', 'length' ),
178
				)
179
			),
180
181
			// Conflicting options
182
			array(
183
				'value' => array(),
184
				'options' => array( 'elementcount' => array( 1, 1 ), 'minelements' => null ),
185
				'expectedErrors' => array()
186
			),
187
			array(
188
				'value' => array(),
189
				'options' => array( 'elementcount' => array( 1, 1 ), 'minelements' => false ),
190
				'expectedErrors' => array()
191
			),
192
			array(
193
				'value' => array(),
194
				'options' => array( 'elementcount' => array( 1, 1 ), 'minelements' => 0 ),
195
				'expectedErrors' => array()
196
			),
197
			array(
198
				'value' => array(),
199
				'options' => array( 'minelements' => 0, 'elementcount' => array( 1, 1 ) ),
200
				'expectedErrors' => array()
201
			),
202
			array(
203
				'value' => array( 1 ),
204
				'options' => array( 'elementcount' => array( 0, 0 ), 'maxelements' => false ),
205
				'expectedErrors' => array()
206
			),
207
			array(
208
				'value' => array( 1 ),
209
				'options' => array( 'elementcount' => array( 0, 0 ), 'maxelements' => 1 ),
210
				'expectedErrors' => array()
211
			),
212
			array(
213
				'value' => array( 1 ),
214
				'options' => array( 'maxelements' => 1, 'elementcount' => array( 0, 0 ) ),
215
				'expectedErrors' => array()
216
			),
217
		);
218
	}
219
220
}
221