Subversion Repositories SmartDukaan

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
16591 anikendra 1
<?php
2
/**
3
 * ValidationTest file
4
 *
5
 * CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html>
6
 * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
7
 *
8
 * Licensed under The MIT License
9
 * For full copyright and license information, please see the LICENSE.txt
10
 * Redistributions of files must retain the above copyright notice.
11
 *
12
 * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
13
 * @link          http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests
14
 * @package       Cake.Test.Case.Utility
15
 * @since         CakePHP(tm) v 1.2.0.4206
16
 * @license       http://www.opensource.org/licenses/mit-license.php MIT License
17
 */
18
 
19
App::uses('Validation', 'Utility');
20
 
21
/**
22
 * CustomValidator class
23
 *
24
 * @package       Cake.Test.Case.Utility
25
 */
26
class CustomValidator {
27
 
28
/**
29
 * Makes sure that a given $email address is valid and unique
30
 *
31
 * @param string $email
32
 * @return bool
33
 */
34
	public static function customValidate($check) {
35
		return (bool)preg_match('/^[0-9]{3}$/', $check);
36
	}
37
 
38
}
39
 
40
/**
41
 * TestNlValidation class
42
 *
43
 * Used to test pass through of Validation
44
 *
45
 * @package       Cake.Test.Case.Utility
46
 */
47
class TestNlValidation {
48
 
49
/**
50
 * postal function, for testing postal pass through.
51
 *
52
 * @param string $check
53
 * @return void
54
 */
55
	public static function postal($check) {
56
		return true;
57
	}
58
 
59
/**
60
 * ssn function for testing ssn pass through
61
 *
62
 * @return void
63
 */
64
	public static function ssn($check) {
65
		return true;
66
	}
67
 
68
}
69
 
70
/**
71
 * TestDeValidation class
72
 *
73
 * Used to test pass through of Validation
74
 *
75
 * @package       Cake.Test.Case.Utility
76
 */
77
class TestDeValidation {
78
 
79
/**
80
 * phone function, for testing phone pass through.
81
 *
82
 * @param string $check
83
 * @return void
84
 */
85
	public static function phone($check) {
86
		return true;
87
	}
88
 
89
}
90
 
91
/**
92
 * Test Case for Validation Class
93
 *
94
 * @package       Cake.Test.Case.Utility
95
 */
96
class ValidationTest extends CakeTestCase {
97
 
98
/**
99
 * setUp method
100
 *
101
 * @return void
102
 */
103
	public function setUp() {
104
		parent::setUp();
105
		$this->_appEncoding = Configure::read('App.encoding');
106
		$this->_appLocale = array();
107
		foreach (array(LC_MONETARY, LC_NUMERIC, LC_TIME) as $category) {
108
			$this->_appLocale[$category] = setlocale($category, 0);
109
			setlocale($category, 'en_US');
110
		}
111
	}
112
 
113
/**
114
 * tearDown method
115
 *
116
 * @return void
117
 */
118
	public function tearDown() {
119
		parent::tearDown();
120
		Configure::write('App.encoding', $this->_appEncoding);
121
		foreach ($this->_appLocale as $category => $locale) {
122
			setlocale($category, $locale);
123
		}
124
	}
125
 
126
/**
127
 * Test notBlank method
128
 *
129
 * @return void
130
 */
131
	public function testNotBlank() {
132
		$this->assertTrue(Validation::notBlank('abcdefg'));
133
		$this->assertTrue(Validation::notBlank('fasdf '));
134
		$this->assertTrue(Validation::notBlank('fooo' . chr(243) . 'blabla'));
135
		$this->assertTrue(Validation::notBlank('abçďĕʑʘπй'));
136
		$this->assertTrue(Validation::notBlank('José'));
137
		$this->assertTrue(Validation::notBlank('é'));
138
		$this->assertTrue(Validation::notBlank('π'));
139
		$this->assertFalse(Validation::notBlank("\t "));
140
		$this->assertFalse(Validation::notBlank(""));
141
	}
142
 
143
/**
144
 * Test notBlank method with ISO88591 encoding
145
 *
146
 * @return void
147
 */
148
	public function testNotBlankISO88591AppEncoding() {
149
		Configure::write('App.encoding', 'ISO-8859-1');
150
		$this->assertTrue(Validation::notBlank('abcdefg'));
151
		$this->assertTrue(Validation::notBlank('fasdf '));
152
		$this->assertTrue(Validation::notBlank('fooo' . chr(243) . 'blabla'));
153
		$this->assertTrue(Validation::notBlank('abçďĕʑʘπй'));
154
		$this->assertTrue(Validation::notBlank('José'));
155
		$this->assertTrue(Validation::notBlank(utf8_decode('José')));
156
		$this->assertFalse(Validation::notBlank("\t "));
157
		$this->assertFalse(Validation::notBlank(""));
158
	}
159
 
160
/**
161
 * testAlphaNumeric method
162
 *
163
 * @return void
164
 */
165
	public function testAlphaNumeric() {
166
		$this->assertTrue(Validation::alphaNumeric('frferrf'));
167
		$this->assertTrue(Validation::alphaNumeric('12234'));
168
		$this->assertTrue(Validation::alphaNumeric('1w2e2r3t4y'));
169
		$this->assertTrue(Validation::alphaNumeric('0'));
170
		$this->assertTrue(Validation::alphaNumeric('abçďĕʑʘπй'));
171
		$this->assertTrue(Validation::alphaNumeric('ˇˆๆゞ'));
172
		$this->assertTrue(Validation::alphaNumeric('אกあアꀀ豈'));
173
		$this->assertTrue(Validation::alphaNumeric('Džᾈᾨ'));
174
		$this->assertTrue(Validation::alphaNumeric('ÆΔΩЖÇ'));
175
 
176
		$this->assertFalse(Validation::alphaNumeric('12 234'));
177
		$this->assertFalse(Validation::alphaNumeric('dfd 234'));
178
		$this->assertFalse(Validation::alphaNumeric("0\n"));
179
		$this->assertFalse(Validation::alphaNumeric("\n"));
180
		$this->assertFalse(Validation::alphaNumeric("\t"));
181
		$this->assertFalse(Validation::alphaNumeric("\r"));
182
		$this->assertFalse(Validation::alphaNumeric(' '));
183
		$this->assertFalse(Validation::alphaNumeric(''));
184
	}
185
 
186
/**
187
 * testAlphaNumericPassedAsArray method
188
 *
189
 * @return void
190
 */
191
	public function testAlphaNumericPassedAsArray() {
192
		$this->assertTrue(Validation::alphaNumeric(array('check' => 'frferrf')));
193
		$this->assertTrue(Validation::alphaNumeric(array('check' => '12234')));
194
		$this->assertTrue(Validation::alphaNumeric(array('check' => '1w2e2r3t4y')));
195
		$this->assertTrue(Validation::alphaNumeric(array('check' => '0')));
196
		$this->assertFalse(Validation::alphaNumeric(array('check' => '12 234')));
197
		$this->assertFalse(Validation::alphaNumeric(array('check' => 'dfd 234')));
198
		$this->assertFalse(Validation::alphaNumeric(array('check' => "\n")));
199
		$this->assertFalse(Validation::alphaNumeric(array('check' => "\t")));
200
		$this->assertFalse(Validation::alphaNumeric(array('check' => "\r")));
201
		$this->assertFalse(Validation::alphaNumeric(array('check' => ' ')));
202
		$this->assertFalse(Validation::alphaNumeric(array('check' => '')));
203
	}
204
 
205
/**
206
 * testLengthBetween method
207
 *
208
 * @return void
209
 */
210
	public function testLengthBetween() {
211
		$this->assertTrue(Validation::lengthBetween('abcdefg', 1, 7));
212
		$this->assertTrue(Validation::lengthBetween('', 0, 7));
213
		$this->assertTrue(Validation::lengthBetween('אกあアꀀ豈', 1, 7));
214
 
215
		$this->assertFalse(Validation::lengthBetween('abcdefg', 1, 6));
216
		$this->assertFalse(Validation::lengthBetween('ÆΔΩЖÇ', 1, 3));
217
	}
218
 
219
/**
220
 * testBlank method
221
 *
222
 * @return void
223
 */
224
	public function testBlank() {
225
		$this->assertTrue(Validation::blank(''));
226
		$this->assertTrue(Validation::blank(' '));
227
		$this->assertTrue(Validation::blank("\n"));
228
		$this->assertTrue(Validation::blank("\t"));
229
		$this->assertTrue(Validation::blank("\r"));
230
		$this->assertFalse(Validation::blank('    Blank'));
231
		$this->assertFalse(Validation::blank('Blank'));
232
	}
233
 
234
/**
235
 * testBlankAsArray method
236
 *
237
 * @return void
238
 */
239
	public function testBlankAsArray() {
240
		$this->assertTrue(Validation::blank(array('check' => '')));
241
		$this->assertTrue(Validation::blank(array('check' => ' ')));
242
		$this->assertTrue(Validation::blank(array('check' => "\n")));
243
		$this->assertTrue(Validation::blank(array('check' => "\t")));
244
		$this->assertTrue(Validation::blank(array('check' => "\r")));
245
		$this->assertFalse(Validation::blank(array('check' => '    Blank')));
246
		$this->assertFalse(Validation::blank(array('check' => 'Blank')));
247
	}
248
 
249
/**
250
 * testcc method
251
 *
252
 * @return void
253
 */
254
	public function testCc() {
255
		//American Express
256
		$this->assertTrue(Validation::cc('370482756063980', array('amex')));
257
		$this->assertTrue(Validation::cc('349106433773483', array('amex')));
258
		$this->assertTrue(Validation::cc('344671486204764', array('amex')));
259
		$this->assertTrue(Validation::cc('344042544509943', array('amex')));
260
		$this->assertTrue(Validation::cc('377147515754475', array('amex')));
261
		$this->assertTrue(Validation::cc('375239372816422', array('amex')));
262
		$this->assertTrue(Validation::cc('376294341957707', array('amex')));
263
		$this->assertTrue(Validation::cc('341779292230411', array('amex')));
264
		$this->assertTrue(Validation::cc('341646919853372', array('amex')));
265
		$this->assertTrue(Validation::cc('348498616319346', array('amex')));
266
		//BankCard
267
		$this->assertTrue(Validation::cc('5610745867413420', array('bankcard')));
268
		$this->assertTrue(Validation::cc('5610376649499352', array('bankcard')));
269
		$this->assertTrue(Validation::cc('5610091936000694', array('bankcard')));
270
		$this->assertTrue(Validation::cc('5602248780118788', array('bankcard')));
271
		$this->assertTrue(Validation::cc('5610631567676765', array('bankcard')));
272
		$this->assertTrue(Validation::cc('5602238211270795', array('bankcard')));
273
		$this->assertTrue(Validation::cc('5610173951215470', array('bankcard')));
274
		$this->assertTrue(Validation::cc('5610139705753702', array('bankcard')));
275
		$this->assertTrue(Validation::cc('5602226032150551', array('bankcard')));
276
		$this->assertTrue(Validation::cc('5602223993735777', array('bankcard')));
277
		//Diners Club 14
278
		$this->assertTrue(Validation::cc('30155483651028', array('diners')));
279
		$this->assertTrue(Validation::cc('36371312803821', array('diners')));
280
		$this->assertTrue(Validation::cc('38801277489875', array('diners')));
281
		$this->assertTrue(Validation::cc('30348560464296', array('diners')));
282
		$this->assertTrue(Validation::cc('30349040317708', array('diners')));
283
		$this->assertTrue(Validation::cc('36567413559978', array('diners')));
284
		$this->assertTrue(Validation::cc('36051554732702', array('diners')));
285
		$this->assertTrue(Validation::cc('30391842198191', array('diners')));
286
		$this->assertTrue(Validation::cc('30172682197745', array('diners')));
287
		$this->assertTrue(Validation::cc('30162056566641', array('diners')));
288
		$this->assertTrue(Validation::cc('30085066927745', array('diners')));
289
		$this->assertTrue(Validation::cc('36519025221976', array('diners')));
290
		$this->assertTrue(Validation::cc('30372679371044', array('diners')));
291
		$this->assertTrue(Validation::cc('38913939150124', array('diners')));
292
		$this->assertTrue(Validation::cc('36852899094637', array('diners')));
293
		$this->assertTrue(Validation::cc('30138041971120', array('diners')));
294
		$this->assertTrue(Validation::cc('36184047836838', array('diners')));
295
		$this->assertTrue(Validation::cc('30057460264462', array('diners')));
296
		$this->assertTrue(Validation::cc('38980165212050', array('diners')));
297
		$this->assertTrue(Validation::cc('30356516881240', array('diners')));
298
		$this->assertTrue(Validation::cc('38744810033182', array('diners')));
299
		$this->assertTrue(Validation::cc('30173638706621', array('diners')));
300
		$this->assertTrue(Validation::cc('30158334709185', array('diners')));
301
		$this->assertTrue(Validation::cc('30195413721186', array('diners')));
302
		$this->assertTrue(Validation::cc('38863347694793', array('diners')));
303
		$this->assertTrue(Validation::cc('30275627009113', array('diners')));
304
		$this->assertTrue(Validation::cc('30242860404971', array('diners')));
305
		$this->assertTrue(Validation::cc('30081877595151', array('diners')));
306
		$this->assertTrue(Validation::cc('38053196067461', array('diners')));
307
		$this->assertTrue(Validation::cc('36520379984870', array('diners')));
308
		//2004 MasterCard/Diners Club Alliance International 14
309
		$this->assertTrue(Validation::cc('36747701998969', array('diners')));
310
		$this->assertTrue(Validation::cc('36427861123159', array('diners')));
311
		$this->assertTrue(Validation::cc('36150537602386', array('diners')));
312
		$this->assertTrue(Validation::cc('36582388820610', array('diners')));
313
		$this->assertTrue(Validation::cc('36729045250216', array('diners')));
314
		//2004 MasterCard/Diners Club Alliance US & Canada 16
315
		$this->assertTrue(Validation::cc('5597511346169950', array('diners')));
316
		$this->assertTrue(Validation::cc('5526443162217562', array('diners')));
317
		$this->assertTrue(Validation::cc('5577265786122391', array('diners')));
318
		$this->assertTrue(Validation::cc('5534061404676989', array('diners')));
319
		$this->assertTrue(Validation::cc('5545313588374502', array('diners')));
320
		//Discover
321
		$this->assertTrue(Validation::cc('6011802876467237', array('disc')));
322
		$this->assertTrue(Validation::cc('6506432777720955', array('disc')));
323
		$this->assertTrue(Validation::cc('6011126265283942', array('disc')));
324
		$this->assertTrue(Validation::cc('6502187151579252', array('disc')));
325
		$this->assertTrue(Validation::cc('6506600836002298', array('disc')));
326
		$this->assertTrue(Validation::cc('6504376463615189', array('disc')));
327
		$this->assertTrue(Validation::cc('6011440907005377', array('disc')));
328
		$this->assertTrue(Validation::cc('6509735979634270', array('disc')));
329
		$this->assertTrue(Validation::cc('6011422366775856', array('disc')));
330
		$this->assertTrue(Validation::cc('6500976374623323', array('disc')));
331
		//enRoute
332
		$this->assertTrue(Validation::cc('201496944158937', array('enroute')));
333
		$this->assertTrue(Validation::cc('214945833739665', array('enroute')));
334
		$this->assertTrue(Validation::cc('214982692491187', array('enroute')));
335
		$this->assertTrue(Validation::cc('214901395949424', array('enroute')));
336
		$this->assertTrue(Validation::cc('201480676269187', array('enroute')));
337
		$this->assertTrue(Validation::cc('214911922887807', array('enroute')));
338
		$this->assertTrue(Validation::cc('201485025457250', array('enroute')));
339
		$this->assertTrue(Validation::cc('201402662758866', array('enroute')));
340
		$this->assertTrue(Validation::cc('214981579370225', array('enroute')));
341
		$this->assertTrue(Validation::cc('201447595859877', array('enroute')));
342
		//JCB 15 digit
343
		$this->assertTrue(Validation::cc('210034762247893', array('jcb')));
344
		$this->assertTrue(Validation::cc('180078671678892', array('jcb')));
345
		$this->assertTrue(Validation::cc('180010559353736', array('jcb')));
346
		$this->assertTrue(Validation::cc('210095474464258', array('jcb')));
347
		$this->assertTrue(Validation::cc('210006675562188', array('jcb')));
348
		$this->assertTrue(Validation::cc('210063299662662', array('jcb')));
349
		$this->assertTrue(Validation::cc('180032506857825', array('jcb')));
350
		$this->assertTrue(Validation::cc('210057919192738', array('jcb')));
351
		$this->assertTrue(Validation::cc('180031358949367', array('jcb')));
352
		$this->assertTrue(Validation::cc('180033802147846', array('jcb')));
353
		//JCB 16 digit
354
		$this->assertTrue(Validation::cc('3096806857839939', array('jcb')));
355
		$this->assertTrue(Validation::cc('3158699503187091', array('jcb')));
356
		$this->assertTrue(Validation::cc('3112549607186579', array('jcb')));
357
		$this->assertTrue(Validation::cc('3112332922425604', array('jcb')));
358
		$this->assertTrue(Validation::cc('3112001541159239', array('jcb')));
359
		$this->assertTrue(Validation::cc('3112162495317841', array('jcb')));
360
		$this->assertTrue(Validation::cc('3337562627732768', array('jcb')));
361
		$this->assertTrue(Validation::cc('3337107161330775', array('jcb')));
362
		$this->assertTrue(Validation::cc('3528053736003621', array('jcb')));
363
		$this->assertTrue(Validation::cc('3528915255020360', array('jcb')));
364
		$this->assertTrue(Validation::cc('3096786059660921', array('jcb')));
365
		$this->assertTrue(Validation::cc('3528264799292320', array('jcb')));
366
		$this->assertTrue(Validation::cc('3096469164130136', array('jcb')));
367
		$this->assertTrue(Validation::cc('3112127443822853', array('jcb')));
368
		$this->assertTrue(Validation::cc('3096849995802328', array('jcb')));
369
		$this->assertTrue(Validation::cc('3528090735127407', array('jcb')));
370
		$this->assertTrue(Validation::cc('3112101006819234', array('jcb')));
371
		$this->assertTrue(Validation::cc('3337444428040784', array('jcb')));
372
		$this->assertTrue(Validation::cc('3088043154151061', array('jcb')));
373
		$this->assertTrue(Validation::cc('3088295969414866', array('jcb')));
374
		$this->assertTrue(Validation::cc('3158748843158575', array('jcb')));
375
		$this->assertTrue(Validation::cc('3158709206148538', array('jcb')));
376
		$this->assertTrue(Validation::cc('3158365159575324', array('jcb')));
377
		$this->assertTrue(Validation::cc('3158671691305165', array('jcb')));
378
		$this->assertTrue(Validation::cc('3528523028771093', array('jcb')));
379
		$this->assertTrue(Validation::cc('3096057126267870', array('jcb')));
380
		$this->assertTrue(Validation::cc('3158514047166834', array('jcb')));
381
		$this->assertTrue(Validation::cc('3528274546125962', array('jcb')));
382
		$this->assertTrue(Validation::cc('3528890967705733', array('jcb')));
383
		$this->assertTrue(Validation::cc('3337198811307545', array('jcb')));
384
		//Maestro (debit card)
385
		$this->assertTrue(Validation::cc('5020147409985219', array('maestro')));
386
		$this->assertTrue(Validation::cc('5020931809905616', array('maestro')));
387
		$this->assertTrue(Validation::cc('5020412965470224', array('maestro')));
388
		$this->assertTrue(Validation::cc('5020129740944022', array('maestro')));
389
		$this->assertTrue(Validation::cc('5020024696747943', array('maestro')));
390
		$this->assertTrue(Validation::cc('5020581514636509', array('maestro')));
391
		$this->assertTrue(Validation::cc('5020695008411987', array('maestro')));
392
		$this->assertTrue(Validation::cc('5020565359718977', array('maestro')));
393
		$this->assertTrue(Validation::cc('6339931536544062', array('maestro')));
394
		$this->assertTrue(Validation::cc('6465028615704406', array('maestro')));
395
		//Mastercard
396
		$this->assertTrue(Validation::cc('5580424361774366', array('mc')));
397
		$this->assertTrue(Validation::cc('5589563059318282', array('mc')));
398
		$this->assertTrue(Validation::cc('5387558333690047', array('mc')));
399
		$this->assertTrue(Validation::cc('5163919215247175', array('mc')));
400
		$this->assertTrue(Validation::cc('5386742685055055', array('mc')));
401
		$this->assertTrue(Validation::cc('5102303335960674', array('mc')));
402
		$this->assertTrue(Validation::cc('5526543403964565', array('mc')));
403
		$this->assertTrue(Validation::cc('5538725892618432', array('mc')));
404
		$this->assertTrue(Validation::cc('5119543573129778', array('mc')));
405
		$this->assertTrue(Validation::cc('5391174753915767', array('mc')));
406
		$this->assertTrue(Validation::cc('5510994113980714', array('mc')));
407
		$this->assertTrue(Validation::cc('5183720260418091', array('mc')));
408
		$this->assertTrue(Validation::cc('5488082196086704', array('mc')));
409
		$this->assertTrue(Validation::cc('5484645164161834', array('mc')));
410
		$this->assertTrue(Validation::cc('5171254350337031', array('mc')));
411
		$this->assertTrue(Validation::cc('5526987528136452', array('mc')));
412
		$this->assertTrue(Validation::cc('5504148941409358', array('mc')));
413
		$this->assertTrue(Validation::cc('5240793507243615', array('mc')));
414
		$this->assertTrue(Validation::cc('5162114693017107', array('mc')));
415
		$this->assertTrue(Validation::cc('5163104807404753', array('mc')));
416
		$this->assertTrue(Validation::cc('5590136167248365', array('mc')));
417
		$this->assertTrue(Validation::cc('5565816281038948', array('mc')));
418
		$this->assertTrue(Validation::cc('5467639122779531', array('mc')));
419
		$this->assertTrue(Validation::cc('5297350261550024', array('mc')));
420
		$this->assertTrue(Validation::cc('5162739131368058', array('mc')));
421
		//Solo 16
422
		$this->assertTrue(Validation::cc('6767432107064987', array('solo')));
423
		$this->assertTrue(Validation::cc('6334667758225411', array('solo')));
424
		$this->assertTrue(Validation::cc('6767037421954068', array('solo')));
425
		$this->assertTrue(Validation::cc('6767823306394854', array('solo')));
426
		$this->assertTrue(Validation::cc('6334768185398134', array('solo')));
427
		$this->assertTrue(Validation::cc('6767286729498589', array('solo')));
428
		$this->assertTrue(Validation::cc('6334972104431261', array('solo')));
429
		$this->assertTrue(Validation::cc('6334843427400616', array('solo')));
430
		$this->assertTrue(Validation::cc('6767493947881311', array('solo')));
431
		$this->assertTrue(Validation::cc('6767194235798817', array('solo')));
432
		//Solo 18
433
		$this->assertTrue(Validation::cc('676714834398858593', array('solo')));
434
		$this->assertTrue(Validation::cc('676751666435130857', array('solo')));
435
		$this->assertTrue(Validation::cc('676781908573924236', array('solo')));
436
		$this->assertTrue(Validation::cc('633488724644003240', array('solo')));
437
		$this->assertTrue(Validation::cc('676732252338067316', array('solo')));
438
		$this->assertTrue(Validation::cc('676747520084495821', array('solo')));
439
		$this->assertTrue(Validation::cc('633465488901381957', array('solo')));
440
		$this->assertTrue(Validation::cc('633487484858610484', array('solo')));
441
		$this->assertTrue(Validation::cc('633453764680740694', array('solo')));
442
		$this->assertTrue(Validation::cc('676768613295414451', array('solo')));
443
		//Solo 19
444
		$this->assertTrue(Validation::cc('6767838565218340113', array('solo')));
445
		$this->assertTrue(Validation::cc('6767760119829705181', array('solo')));
446
		$this->assertTrue(Validation::cc('6767265917091593668', array('solo')));
447
		$this->assertTrue(Validation::cc('6767938856947440111', array('solo')));
448
		$this->assertTrue(Validation::cc('6767501945697390076', array('solo')));
449
		$this->assertTrue(Validation::cc('6334902868716257379', array('solo')));
450
		$this->assertTrue(Validation::cc('6334922127686425532', array('solo')));
451
		$this->assertTrue(Validation::cc('6334933119080706440', array('solo')));
452
		$this->assertTrue(Validation::cc('6334647959628261714', array('solo')));
453
		$this->assertTrue(Validation::cc('6334527312384101382', array('solo')));
454
		//Switch 16
455
		$this->assertTrue(Validation::cc('5641829171515733', array('switch')));
456
		$this->assertTrue(Validation::cc('5641824852820809', array('switch')));
457
		$this->assertTrue(Validation::cc('6759129648956909', array('switch')));
458
		$this->assertTrue(Validation::cc('6759626072268156', array('switch')));
459
		$this->assertTrue(Validation::cc('5641822698388957', array('switch')));
460
		$this->assertTrue(Validation::cc('5641827123105470', array('switch')));
461
		$this->assertTrue(Validation::cc('5641823755819553', array('switch')));
462
		$this->assertTrue(Validation::cc('5641821939587682', array('switch')));
463
		$this->assertTrue(Validation::cc('4936097148079186', array('switch')));
464
		$this->assertTrue(Validation::cc('5641829739125009', array('switch')));
465
		$this->assertTrue(Validation::cc('5641822860725507', array('switch')));
466
		$this->assertTrue(Validation::cc('4936717688865831', array('switch')));
467
		$this->assertTrue(Validation::cc('6759487613615441', array('switch')));
468
		$this->assertTrue(Validation::cc('5641821346840617', array('switch')));
469
		$this->assertTrue(Validation::cc('5641825793417126', array('switch')));
470
		$this->assertTrue(Validation::cc('5641821302759595', array('switch')));
471
		$this->assertTrue(Validation::cc('6759784969918837', array('switch')));
472
		$this->assertTrue(Validation::cc('5641824910667036', array('switch')));
473
		$this->assertTrue(Validation::cc('6759139909636173', array('switch')));
474
		$this->assertTrue(Validation::cc('6333425070638022', array('switch')));
475
		$this->assertTrue(Validation::cc('5641823910382067', array('switch')));
476
		$this->assertTrue(Validation::cc('4936295218139423', array('switch')));
477
		$this->assertTrue(Validation::cc('6333031811316199', array('switch')));
478
		$this->assertTrue(Validation::cc('4936912044763198', array('switch')));
479
		$this->assertTrue(Validation::cc('4936387053303824', array('switch')));
480
		$this->assertTrue(Validation::cc('6759535838760523', array('switch')));
481
		$this->assertTrue(Validation::cc('6333427174594051', array('switch')));
482
		$this->assertTrue(Validation::cc('5641829037102700', array('switch')));
483
		$this->assertTrue(Validation::cc('5641826495463046', array('switch')));
484
		$this->assertTrue(Validation::cc('6333480852979946', array('switch')));
485
		$this->assertTrue(Validation::cc('5641827761302876', array('switch')));
486
		$this->assertTrue(Validation::cc('5641825083505317', array('switch')));
487
		$this->assertTrue(Validation::cc('6759298096003991', array('switch')));
488
		$this->assertTrue(Validation::cc('4936119165483420', array('switch')));
489
		$this->assertTrue(Validation::cc('4936190990500993', array('switch')));
490
		$this->assertTrue(Validation::cc('4903356467384927', array('switch')));
491
		$this->assertTrue(Validation::cc('6333372765092554', array('switch')));
492
		$this->assertTrue(Validation::cc('5641821330950570', array('switch')));
493
		$this->assertTrue(Validation::cc('6759841558826118', array('switch')));
494
		$this->assertTrue(Validation::cc('4936164540922452', array('switch')));
495
		//Switch 18
496
		$this->assertTrue(Validation::cc('493622764224625174', array('switch')));
497
		$this->assertTrue(Validation::cc('564182823396913535', array('switch')));
498
		$this->assertTrue(Validation::cc('675917308304801234', array('switch')));
499
		$this->assertTrue(Validation::cc('675919890024220298', array('switch')));
500
		$this->assertTrue(Validation::cc('633308376862556751', array('switch')));
501
		$this->assertTrue(Validation::cc('564182377633208779', array('switch')));
502
		$this->assertTrue(Validation::cc('564182870014926787', array('switch')));
503
		$this->assertTrue(Validation::cc('675979788553829819', array('switch')));
504
		$this->assertTrue(Validation::cc('493668394358130935', array('switch')));
505
		$this->assertTrue(Validation::cc('493637431790930965', array('switch')));
506
		$this->assertTrue(Validation::cc('633321438601941513', array('switch')));
507
		$this->assertTrue(Validation::cc('675913800898840986', array('switch')));
508
		$this->assertTrue(Validation::cc('564182592016841547', array('switch')));
509
		$this->assertTrue(Validation::cc('564182428380440899', array('switch')));
510
		$this->assertTrue(Validation::cc('493696376827623463', array('switch')));
511
		$this->assertTrue(Validation::cc('675977939286485757', array('switch')));
512
		$this->assertTrue(Validation::cc('490302699502091579', array('switch')));
513
		$this->assertTrue(Validation::cc('564182085013662230', array('switch')));
514
		$this->assertTrue(Validation::cc('493693054263310167', array('switch')));
515
		$this->assertTrue(Validation::cc('633321755966697525', array('switch')));
516
		$this->assertTrue(Validation::cc('675996851719732811', array('switch')));
517
		$this->assertTrue(Validation::cc('493699211208281028', array('switch')));
518
		$this->assertTrue(Validation::cc('493697817378356614', array('switch')));
519
		$this->assertTrue(Validation::cc('675968224161768150', array('switch')));
520
		$this->assertTrue(Validation::cc('493669416873337627', array('switch')));
521
		$this->assertTrue(Validation::cc('564182439172549714', array('switch')));
522
		$this->assertTrue(Validation::cc('675926914467673598', array('switch')));
523
		$this->assertTrue(Validation::cc('564182565231977809', array('switch')));
524
		$this->assertTrue(Validation::cc('675966282607849002', array('switch')));
525
		$this->assertTrue(Validation::cc('493691609704348548', array('switch')));
526
		$this->assertTrue(Validation::cc('675933118546065120', array('switch')));
527
		$this->assertTrue(Validation::cc('493631116677238592', array('switch')));
528
		$this->assertTrue(Validation::cc('675921142812825938', array('switch')));
529
		$this->assertTrue(Validation::cc('633338311815675113', array('switch')));
530
		$this->assertTrue(Validation::cc('633323539867338621', array('switch')));
531
		$this->assertTrue(Validation::cc('675964912740845663', array('switch')));
532
		$this->assertTrue(Validation::cc('633334008833727504', array('switch')));
533
		$this->assertTrue(Validation::cc('493631941273687169', array('switch')));
534
		$this->assertTrue(Validation::cc('564182971729706785', array('switch')));
535
		$this->assertTrue(Validation::cc('633303461188963496', array('switch')));
536
		//Switch 19
537
		$this->assertTrue(Validation::cc('6759603460617628716', array('switch')));
538
		$this->assertTrue(Validation::cc('4936705825268647681', array('switch')));
539
		$this->assertTrue(Validation::cc('5641829846600479183', array('switch')));
540
		$this->assertTrue(Validation::cc('6759389846573792530', array('switch')));
541
		$this->assertTrue(Validation::cc('4936189558712637603', array('switch')));
542
		$this->assertTrue(Validation::cc('5641822217393868189', array('switch')));
543
		$this->assertTrue(Validation::cc('4903075563780057152', array('switch')));
544
		$this->assertTrue(Validation::cc('4936510653566569547', array('switch')));
545
		$this->assertTrue(Validation::cc('4936503083627303364', array('switch')));
546
		$this->assertTrue(Validation::cc('4936777334398116272', array('switch')));
547
		$this->assertTrue(Validation::cc('5641823876900554860', array('switch')));
548
		$this->assertTrue(Validation::cc('6759619236903407276', array('switch')));
549
		$this->assertTrue(Validation::cc('6759011470269978117', array('switch')));
550
		$this->assertTrue(Validation::cc('6333175833997062502', array('switch')));
551
		$this->assertTrue(Validation::cc('6759498728789080439', array('switch')));
552
		$this->assertTrue(Validation::cc('4903020404168157841', array('switch')));
553
		$this->assertTrue(Validation::cc('6759354334874804313', array('switch')));
554
		$this->assertTrue(Validation::cc('6759900856420875115', array('switch')));
555
		$this->assertTrue(Validation::cc('5641827269346868860', array('switch')));
556
		$this->assertTrue(Validation::cc('5641828995047453870', array('switch')));
557
		$this->assertTrue(Validation::cc('6333321884754806543', array('switch')));
558
		$this->assertTrue(Validation::cc('6333108246283715901', array('switch')));
559
		$this->assertTrue(Validation::cc('6759572372800700102', array('switch')));
560
		$this->assertTrue(Validation::cc('4903095096797974933', array('switch')));
561
		$this->assertTrue(Validation::cc('6333354315797920215', array('switch')));
562
		$this->assertTrue(Validation::cc('6759163746089433755', array('switch')));
563
		$this->assertTrue(Validation::cc('6759871666634807647', array('switch')));
564
		$this->assertTrue(Validation::cc('5641827883728575248', array('switch')));
565
		$this->assertTrue(Validation::cc('4936527975051407847', array('switch')));
566
		$this->assertTrue(Validation::cc('5641823318396882141', array('switch')));
567
		$this->assertTrue(Validation::cc('6759123772311123708', array('switch')));
568
		$this->assertTrue(Validation::cc('4903054736148271088', array('switch')));
569
		$this->assertTrue(Validation::cc('4936477526808883952', array('switch')));
570
		$this->assertTrue(Validation::cc('4936433964890967966', array('switch')));
571
		$this->assertTrue(Validation::cc('6333245128906049344', array('switch')));
572
		$this->assertTrue(Validation::cc('4936321036970553134', array('switch')));
573
		$this->assertTrue(Validation::cc('4936111816358702773', array('switch')));
574
		$this->assertTrue(Validation::cc('4936196077254804290', array('switch')));
575
		$this->assertTrue(Validation::cc('6759558831206830183', array('switch')));
576
		$this->assertTrue(Validation::cc('5641827998830403137', array('switch')));
577
		//VISA 13 digit
578
		$this->assertTrue(Validation::cc('4024007174754', array('visa')));
579
		$this->assertTrue(Validation::cc('4104816460717', array('visa')));
580
		$this->assertTrue(Validation::cc('4716229700437', array('visa')));
581
		$this->assertTrue(Validation::cc('4539305400213', array('visa')));
582
		$this->assertTrue(Validation::cc('4728260558665', array('visa')));
583
		$this->assertTrue(Validation::cc('4929100131792', array('visa')));
584
		$this->assertTrue(Validation::cc('4024007117308', array('visa')));
585
		$this->assertTrue(Validation::cc('4539915491024', array('visa')));
586
		$this->assertTrue(Validation::cc('4539790901139', array('visa')));
587
		$this->assertTrue(Validation::cc('4485284914909', array('visa')));
588
		$this->assertTrue(Validation::cc('4782793022350', array('visa')));
589
		$this->assertTrue(Validation::cc('4556899290685', array('visa')));
590
		$this->assertTrue(Validation::cc('4024007134774', array('visa')));
591
		$this->assertTrue(Validation::cc('4333412341316', array('visa')));
592
		$this->assertTrue(Validation::cc('4539534204543', array('visa')));
593
		$this->assertTrue(Validation::cc('4485640373626', array('visa')));
594
		$this->assertTrue(Validation::cc('4929911445746', array('visa')));
595
		$this->assertTrue(Validation::cc('4539292550806', array('visa')));
596
		$this->assertTrue(Validation::cc('4716523014030', array('visa')));
597
		$this->assertTrue(Validation::cc('4024007125152', array('visa')));
598
		$this->assertTrue(Validation::cc('4539758883311', array('visa')));
599
		$this->assertTrue(Validation::cc('4024007103258', array('visa')));
600
		$this->assertTrue(Validation::cc('4916933155767', array('visa')));
601
		$this->assertTrue(Validation::cc('4024007159672', array('visa')));
602
		$this->assertTrue(Validation::cc('4716935544871', array('visa')));
603
		$this->assertTrue(Validation::cc('4929415177779', array('visa')));
604
		$this->assertTrue(Validation::cc('4929748547896', array('visa')));
605
		$this->assertTrue(Validation::cc('4929153468612', array('visa')));
606
		$this->assertTrue(Validation::cc('4539397132104', array('visa')));
607
		$this->assertTrue(Validation::cc('4485293435540', array('visa')));
608
		$this->assertTrue(Validation::cc('4485799412720', array('visa')));
609
		$this->assertTrue(Validation::cc('4916744757686', array('visa')));
610
		$this->assertTrue(Validation::cc('4556475655426', array('visa')));
611
		$this->assertTrue(Validation::cc('4539400441625', array('visa')));
612
		$this->assertTrue(Validation::cc('4485437129173', array('visa')));
613
		$this->assertTrue(Validation::cc('4716253605320', array('visa')));
614
		$this->assertTrue(Validation::cc('4539366156589', array('visa')));
615
		$this->assertTrue(Validation::cc('4916498061392', array('visa')));
616
		$this->assertTrue(Validation::cc('4716127163779', array('visa')));
617
		$this->assertTrue(Validation::cc('4024007183078', array('visa')));
618
		$this->assertTrue(Validation::cc('4041553279654', array('visa')));
619
		$this->assertTrue(Validation::cc('4532380121960', array('visa')));
620
		$this->assertTrue(Validation::cc('4485906062491', array('visa')));
621
		$this->assertTrue(Validation::cc('4539365115149', array('visa')));
622
		$this->assertTrue(Validation::cc('4485146516702', array('visa')));
623
		//VISA 16 digit
624
		$this->assertTrue(Validation::cc('4916375389940009', array('visa')));
625
		$this->assertTrue(Validation::cc('4929167481032610', array('visa')));
626
		$this->assertTrue(Validation::cc('4485029969061519', array('visa')));
627
		$this->assertTrue(Validation::cc('4485573845281759', array('visa')));
628
		$this->assertTrue(Validation::cc('4485669810383529', array('visa')));
629
		$this->assertTrue(Validation::cc('4929615806560327', array('visa')));
630
		$this->assertTrue(Validation::cc('4556807505609535', array('visa')));
631
		$this->assertTrue(Validation::cc('4532611336232890', array('visa')));
632
		$this->assertTrue(Validation::cc('4532201952422387', array('visa')));
633
		$this->assertTrue(Validation::cc('4485073797976290', array('visa')));
634
		$this->assertTrue(Validation::cc('4024007157580969', array('visa')));
635
		$this->assertTrue(Validation::cc('4053740470212274', array('visa')));
636
		$this->assertTrue(Validation::cc('4716265831525676', array('visa')));
637
		$this->assertTrue(Validation::cc('4024007100222966', array('visa')));
638
		$this->assertTrue(Validation::cc('4539556148303244', array('visa')));
639
		$this->assertTrue(Validation::cc('4532449879689709', array('visa')));
640
		$this->assertTrue(Validation::cc('4916805467840986', array('visa')));
641
		$this->assertTrue(Validation::cc('4532155644440233', array('visa')));
642
		$this->assertTrue(Validation::cc('4467977802223781', array('visa')));
643
		$this->assertTrue(Validation::cc('4539224637000686', array('visa')));
644
		$this->assertTrue(Validation::cc('4556629187064965', array('visa')));
645
		$this->assertTrue(Validation::cc('4532970205932943', array('visa')));
646
		$this->assertTrue(Validation::cc('4821470132041850', array('visa')));
647
		$this->assertTrue(Validation::cc('4916214267894485', array('visa')));
648
		$this->assertTrue(Validation::cc('4024007169073284', array('visa')));
649
		$this->assertTrue(Validation::cc('4716783351296122', array('visa')));
650
		$this->assertTrue(Validation::cc('4556480171913795', array('visa')));
651
		$this->assertTrue(Validation::cc('4929678411034997', array('visa')));
652
		$this->assertTrue(Validation::cc('4682061913519392', array('visa')));
653
		$this->assertTrue(Validation::cc('4916495481746474', array('visa')));
654
		$this->assertTrue(Validation::cc('4929007108460499', array('visa')));
655
		$this->assertTrue(Validation::cc('4539951357838586', array('visa')));
656
		$this->assertTrue(Validation::cc('4716482691051558', array('visa')));
657
		$this->assertTrue(Validation::cc('4916385069917516', array('visa')));
658
		$this->assertTrue(Validation::cc('4929020289494641', array('visa')));
659
		$this->assertTrue(Validation::cc('4532176245263774', array('visa')));
660
		$this->assertTrue(Validation::cc('4556242273553949', array('visa')));
661
		$this->assertTrue(Validation::cc('4481007485188614', array('visa')));
662
		$this->assertTrue(Validation::cc('4716533372139623', array('visa')));
663
		$this->assertTrue(Validation::cc('4929152038152632', array('visa')));
664
		$this->assertTrue(Validation::cc('4539404037310550', array('visa')));
665
		$this->assertTrue(Validation::cc('4532800925229140', array('visa')));
666
		$this->assertTrue(Validation::cc('4916845885268360', array('visa')));
667
		$this->assertTrue(Validation::cc('4394514669078434', array('visa')));
668
		$this->assertTrue(Validation::cc('4485611378115042', array('visa')));
669
		//Visa Electron
670
		$this->assertTrue(Validation::cc('4175003346287100', array('electron')));
671
		$this->assertTrue(Validation::cc('4913042516577228', array('electron')));
672
		$this->assertTrue(Validation::cc('4917592325659381', array('electron')));
673
		$this->assertTrue(Validation::cc('4917084924450511', array('electron')));
674
		$this->assertTrue(Validation::cc('4917994610643999', array('electron')));
675
		$this->assertTrue(Validation::cc('4175005933743585', array('electron')));
676
		$this->assertTrue(Validation::cc('4175008373425044', array('electron')));
677
		$this->assertTrue(Validation::cc('4913119763664154', array('electron')));
678
		$this->assertTrue(Validation::cc('4913189017481812', array('electron')));
679
		$this->assertTrue(Validation::cc('4913085104968622', array('electron')));
680
		$this->assertTrue(Validation::cc('4175008803122021', array('electron')));
681
		$this->assertTrue(Validation::cc('4913294453962489', array('electron')));
682
		$this->assertTrue(Validation::cc('4175009797419290', array('electron')));
683
		$this->assertTrue(Validation::cc('4175005028142917', array('electron')));
684
		$this->assertTrue(Validation::cc('4913940802385364', array('electron')));
685
		//Voyager
686
		$this->assertTrue(Validation::cc('869940697287073', array('voyager')));
687
		$this->assertTrue(Validation::cc('869934523596112', array('voyager')));
688
		$this->assertTrue(Validation::cc('869958670174621', array('voyager')));
689
		$this->assertTrue(Validation::cc('869921250068209', array('voyager')));
690
		$this->assertTrue(Validation::cc('869972521242198', array('voyager')));
691
	}
692
 
693
/**
694
 * testLuhn method
695
 *
696
 * @return void
697
 */
698
	public function testLuhn() {
699
		//American Express
700
		$this->assertTrue(Validation::luhn('370482756063980', true));
701
		//BankCard
702
		$this->assertTrue(Validation::luhn('5610745867413420', true));
703
		//Diners Club 14
704
		$this->assertTrue(Validation::luhn('30155483651028', true));
705
		//2004 MasterCard/Diners Club Alliance International 14
706
		$this->assertTrue(Validation::luhn('36747701998969', true));
707
		//2004 MasterCard/Diners Club Alliance US & Canada 16
708
		$this->assertTrue(Validation::luhn('5597511346169950', true));
709
		//Discover
710
		$this->assertTrue(Validation::luhn('6011802876467237', true));
711
		//enRoute
712
		$this->assertTrue(Validation::luhn('201496944158937', true));
713
		//JCB 15 digit
714
		$this->assertTrue(Validation::luhn('210034762247893', true));
715
		//JCB 16 digit
716
		$this->assertTrue(Validation::luhn('3096806857839939', true));
717
		//Maestro (debit card)
718
		$this->assertTrue(Validation::luhn('5020147409985219', true));
719
		//Mastercard
720
		$this->assertTrue(Validation::luhn('5580424361774366', true));
721
		//Solo 16
722
		$this->assertTrue(Validation::luhn('6767432107064987', true));
723
		//Solo 18
724
		$this->assertTrue(Validation::luhn('676714834398858593', true));
725
		//Solo 19
726
		$this->assertTrue(Validation::luhn('6767838565218340113', true));
727
		//Switch 16
728
		$this->assertTrue(Validation::luhn('5641829171515733', true));
729
		//Switch 18
730
		$this->assertTrue(Validation::luhn('493622764224625174', true));
731
		//Switch 19
732
		$this->assertTrue(Validation::luhn('6759603460617628716', true));
733
		//VISA 13 digit
734
		$this->assertTrue(Validation::luhn('4024007174754', true));
735
		//VISA 16 digit
736
		$this->assertTrue(Validation::luhn('4916375389940009', true));
737
		//Visa Electron
738
		$this->assertTrue(Validation::luhn('4175003346287100', true));
739
		//Voyager
740
		$this->assertTrue(Validation::luhn('869940697287073', true));
741
 
742
		$this->assertFalse(Validation::luhn('0000000000000000', true));
743
 
744
		$this->assertFalse(Validation::luhn('869940697287173', true));
745
	}
746
 
747
/**
748
 * testCustomRegexForCc method
749
 *
750
 * @return void
751
 */
752
	public function testCustomRegexForCc() {
753
		$this->assertTrue(Validation::cc('12332105933743585', null, null, '/123321\\d{11}/'));
754
		$this->assertFalse(Validation::cc('1233210593374358', null, null, '/123321\\d{11}/'));
755
		$this->assertFalse(Validation::cc('12312305933743585', null, null, '/123321\\d{11}/'));
756
	}
757
 
758
/**
759
 * testCustomRegexForCcWithLuhnCheck method
760
 *
761
 * @return void
762
 */
763
	public function testCustomRegexForCcWithLuhnCheck() {
764
		$this->assertTrue(Validation::cc('12332110426226941', null, true, '/123321\\d{11}/'));
765
		$this->assertFalse(Validation::cc('12332105933743585', null, true, '/123321\\d{11}/'));
766
		$this->assertFalse(Validation::cc('12332105933743587', null, true, '/123321\\d{11}/'));
767
		$this->assertFalse(Validation::cc('12312305933743585', null, true, '/123321\\d{11}/'));
768
	}
769
 
770
/**
771
 * testFastCc method
772
 *
773
 * @return void
774
 */
775
	public function testFastCc() {
776
		// too short
777
		$this->assertFalse(Validation::cc('123456789012'));
778
		//American Express
779
		$this->assertTrue(Validation::cc('370482756063980'));
780
		//Diners Club 14
781
		$this->assertTrue(Validation::cc('30155483651028'));
782
		//2004 MasterCard/Diners Club Alliance International 14
783
		$this->assertTrue(Validation::cc('36747701998969'));
784
		//2004 MasterCard/Diners Club Alliance US & Canada 16
785
		$this->assertTrue(Validation::cc('5597511346169950'));
786
		//Discover
787
		$this->assertTrue(Validation::cc('6011802876467237'));
788
		//Mastercard
789
		$this->assertTrue(Validation::cc('5580424361774366'));
790
		//VISA 13 digit
791
		$this->assertTrue(Validation::cc('4024007174754'));
792
		//VISA 16 digit
793
		$this->assertTrue(Validation::cc('4916375389940009'));
794
		//Visa Electron
795
		$this->assertTrue(Validation::cc('4175003346287100'));
796
	}
797
 
798
/**
799
 * testAllCc method
800
 *
801
 * @return void
802
 */
803
	public function testAllCc() {
804
		//American Express
805
		$this->assertTrue(Validation::cc('370482756063980', 'all'));
806
		//BankCard
807
		$this->assertTrue(Validation::cc('5610745867413420', 'all'));
808
		//Diners Club 14
809
		$this->assertTrue(Validation::cc('30155483651028', 'all'));
810
		//2004 MasterCard/Diners Club Alliance International 14
811
		$this->assertTrue(Validation::cc('36747701998969', 'all'));
812
		//2004 MasterCard/Diners Club Alliance US & Canada 16
813
		$this->assertTrue(Validation::cc('5597511346169950', 'all'));
814
		//Discover
815
		$this->assertTrue(Validation::cc('6011802876467237', 'all'));
816
		//enRoute
817
		$this->assertTrue(Validation::cc('201496944158937', 'all'));
818
		//JCB 15 digit
819
		$this->assertTrue(Validation::cc('210034762247893', 'all'));
820
		//JCB 16 digit
821
		$this->assertTrue(Validation::cc('3096806857839939', 'all'));
822
		//Maestro (debit card)
823
		$this->assertTrue(Validation::cc('5020147409985219', 'all'));
824
		//Mastercard
825
		$this->assertTrue(Validation::cc('5580424361774366', 'all'));
826
		//Solo 16
827
		$this->assertTrue(Validation::cc('6767432107064987', 'all'));
828
		//Solo 18
829
		$this->assertTrue(Validation::cc('676714834398858593', 'all'));
830
		//Solo 19
831
		$this->assertTrue(Validation::cc('6767838565218340113', 'all'));
832
		//Switch 16
833
		$this->assertTrue(Validation::cc('5641829171515733', 'all'));
834
		//Switch 18
835
		$this->assertTrue(Validation::cc('493622764224625174', 'all'));
836
		//Switch 19
837
		$this->assertTrue(Validation::cc('6759603460617628716', 'all'));
838
		//VISA 13 digit
839
		$this->assertTrue(Validation::cc('4024007174754', 'all'));
840
		//VISA 16 digit
841
		$this->assertTrue(Validation::cc('4916375389940009', 'all'));
842
		//Visa Electron
843
		$this->assertTrue(Validation::cc('4175003346287100', 'all'));
844
		//Voyager
845
		$this->assertTrue(Validation::cc('869940697287073', 'all'));
846
	}
847
 
848
/**
849
 * testAllCcDeep method
850
 *
851
 * @return void
852
 */
853
	public function testAllCcDeep() {
854
		//American Express
855
		$this->assertTrue(Validation::cc('370482756063980', 'all', true));
856
		//BankCard
857
		$this->assertTrue(Validation::cc('5610745867413420', 'all', true));
858
		//Diners Club 14
859
		$this->assertTrue(Validation::cc('30155483651028', 'all', true));
860
		//2004 MasterCard/Diners Club Alliance International 14
861
		$this->assertTrue(Validation::cc('36747701998969', 'all', true));
862
		//2004 MasterCard/Diners Club Alliance US & Canada 16
863
		$this->assertTrue(Validation::cc('5597511346169950', 'all', true));
864
		//Discover
865
		$this->assertTrue(Validation::cc('6011802876467237', 'all', true));
866
		//enRoute
867
		$this->assertTrue(Validation::cc('201496944158937', 'all', true));
868
		//JCB 15 digit
869
		$this->assertTrue(Validation::cc('210034762247893', 'all', true));
870
		//JCB 16 digit
871
		$this->assertTrue(Validation::cc('3096806857839939', 'all', true));
872
		//Maestro (debit card)
873
		$this->assertTrue(Validation::cc('5020147409985219', 'all', true));
874
		//Mastercard
875
		$this->assertTrue(Validation::cc('5580424361774366', 'all', true));
876
		//Solo 16
877
		$this->assertTrue(Validation::cc('6767432107064987', 'all', true));
878
		//Solo 18
879
		$this->assertTrue(Validation::cc('676714834398858593', 'all', true));
880
		//Solo 19
881
		$this->assertTrue(Validation::cc('6767838565218340113', 'all', true));
882
		//Switch 16
883
		$this->assertTrue(Validation::cc('5641829171515733', 'all', true));
884
		//Switch 18
885
		$this->assertTrue(Validation::cc('493622764224625174', 'all', true));
886
		//Switch 19
887
		$this->assertTrue(Validation::cc('6759603460617628716', 'all', true));
888
		//VISA 13 digit
889
		$this->assertTrue(Validation::cc('4024007174754', 'all', true));
890
		//VISA 16 digit
891
		$this->assertTrue(Validation::cc('4916375389940009', 'all', true));
892
		//Visa Electron
893
		$this->assertTrue(Validation::cc('4175003346287100', 'all', true));
894
		//Voyager
895
		$this->assertTrue(Validation::cc('869940697287073', 'all', true));
896
	}
897
 
898
/**
899
 * testComparison method
900
 *
901
 * @return void
902
 */
903
	public function testComparison() {
904
		$this->assertFalse(Validation::comparison(7, null, 6));
905
		$this->assertTrue(Validation::comparison(7, 'is greater', 6));
906
		$this->assertTrue(Validation::comparison(7, '>', 6));
907
		$this->assertTrue(Validation::comparison(6, 'is less', 7));
908
		$this->assertTrue(Validation::comparison(6, '<', 7));
909
		$this->assertTrue(Validation::comparison(7, 'greater or equal', 7));
910
		$this->assertTrue(Validation::comparison(7, '>=', 7));
911
		$this->assertTrue(Validation::comparison(7, 'greater or equal', 6));
912
		$this->assertTrue(Validation::comparison(7, '>=', 6));
913
		$this->assertTrue(Validation::comparison(6, 'less or equal', 7));
914
		$this->assertTrue(Validation::comparison(6, '<=', 7));
915
		$this->assertTrue(Validation::comparison(7, 'equal to', 7));
916
		$this->assertTrue(Validation::comparison(7, '==', 7));
917
		$this->assertTrue(Validation::comparison(7, 'not equal', 6));
918
		$this->assertTrue(Validation::comparison(7, '!=', 6));
919
		$this->assertFalse(Validation::comparison(6, 'is greater', 7));
920
		$this->assertFalse(Validation::comparison(6, '>', 7));
921
		$this->assertFalse(Validation::comparison(7, 'is less', 6));
922
		$this->assertFalse(Validation::comparison(7, '<', 6));
923
		$this->assertFalse(Validation::comparison(6, 'greater or equal', 7));
924
		$this->assertFalse(Validation::comparison(6, '>=', 7));
925
		$this->assertFalse(Validation::comparison(6, 'greater or equal', 7));
926
		$this->assertFalse(Validation::comparison(6, '>=', 7));
927
		$this->assertFalse(Validation::comparison(7, 'less or equal', 6));
928
		$this->assertFalse(Validation::comparison(7, '<=', 6));
929
		$this->assertFalse(Validation::comparison(7, 'equal to', 6));
930
		$this->assertFalse(Validation::comparison(7, '==', 6));
931
		$this->assertFalse(Validation::comparison(7, 'not equal', 7));
932
		$this->assertFalse(Validation::comparison(7, '!=', 7));
933
 
934
		$this->assertTrue(Validation::comparison('6.5', '!=', 6));
935
		$this->assertTrue(Validation::comparison('6.5', '<', 7));
936
	}
937
 
938
/**
939
 * Test comparison casting values before comparisons.
940
 *
941
 * @return void
942
 */
943
	public function testComparisonTypeChecks() {
944
		$this->assertFalse(Validation::comparison('\x028', '>=', 1), 'hexish encoding fails');
945
		$this->assertFalse(Validation::comparison('0b010', '>=', 1), 'binary string data fails');
946
		$this->assertFalse(Validation::comparison('0x01', '>=', 1), 'hex string data fails');
947
		$this->assertFalse(Validation::comparison('0x1', '>=', 1), 'hex string data fails');
948
 
949
		$this->assertFalse(Validation::comparison('\x028', '>=', 1.5), 'hexish encoding fails');
950
		$this->assertFalse(Validation::comparison('0b010', '>=', 1.5), 'binary string data fails');
951
		$this->assertFalse(Validation::comparison('0x02', '>=', 1.5), 'hex string data fails');
952
	}
953
 
954
/**
955
 * testComparisonAsArray method
956
 *
957
 * @return void
958
 */
959
	public function testComparisonAsArray() {
960
		$this->assertTrue(Validation::comparison(array('check1' => 7, 'operator' => 'is greater', 'check2' => 6)));
961
		$this->assertTrue(Validation::comparison(array('check1' => 7, 'operator' => '>', 'check2' => 6)));
962
		$this->assertTrue(Validation::comparison(array('check1' => 6, 'operator' => 'is less', 'check2' => 7)));
963
		$this->assertTrue(Validation::comparison(array('check1' => 6, 'operator' => '<', 'check2' => 7)));
964
		$this->assertTrue(Validation::comparison(array('check1' => 7, 'operator' => 'greater or equal', 'check2' => 7)));
965
		$this->assertTrue(Validation::comparison(array('check1' => 7, 'operator' => '>=', 'check2' => 7)));
966
		$this->assertTrue(Validation::comparison(array('check1' => 7, 'operator' => 'greater or equal', 'check2' => 6)));
967
		$this->assertTrue(Validation::comparison(array('check1' => 7, 'operator' => '>=', 'check2' => 6)));
968
		$this->assertTrue(Validation::comparison(array('check1' => 6, 'operator' => 'less or equal', 'check2' => 7)));
969
		$this->assertTrue(Validation::comparison(array('check1' => 6, 'operator' => '<=', 'check2' => 7)));
970
		$this->assertTrue(Validation::comparison(array('check1' => 7, 'operator' => 'equal to', 'check2' => 7)));
971
		$this->assertTrue(Validation::comparison(array('check1' => 7, 'operator' => '==', 'check2' => 7)));
972
		$this->assertTrue(Validation::comparison(array('check1' => 7, 'operator' => 'not equal', 'check2' => 6)));
973
		$this->assertTrue(Validation::comparison(array('check1' => 7, 'operator' => '!=', 'check2' => 6)));
974
		$this->assertFalse(Validation::comparison(array('check1' => 6, 'operator' => 'is greater', 'check2' => 7)));
975
		$this->assertFalse(Validation::comparison(array('check1' => 6, 'operator' => '>', 'check2' => 7)));
976
		$this->assertFalse(Validation::comparison(array('check1' => 7, 'operator' => 'is less', 'check2' => 6)));
977
		$this->assertFalse(Validation::comparison(array('check1' => 7, 'operator' => '<', 'check2' => 6)));
978
		$this->assertFalse(Validation::comparison(array('check1' => 6, 'operator' => 'greater or equal', 'check2' => 7)));
979
		$this->assertFalse(Validation::comparison(array('check1' => 6, 'operator' => '>=', 'check2' => 7)));
980
		$this->assertFalse(Validation::comparison(array('check1' => 6, 'operator' => 'greater or equal', 'check2' => 7)));
981
		$this->assertFalse(Validation::comparison(array('check1' => 6, 'operator' => '>=', 'check2' => 7)));
982
		$this->assertFalse(Validation::comparison(array('check1' => 7, 'operator' => 'less or equal', 'check2' => 6)));
983
		$this->assertFalse(Validation::comparison(array('check1' => 7, 'operator' => '<=', 'check2' => 6)));
984
		$this->assertFalse(Validation::comparison(array('check1' => 7, 'operator' => 'equal to', 'check2' => 6)));
985
		$this->assertFalse(Validation::comparison(array('check1' => 7, 'operator' => '==', 'check2' => 6)));
986
		$this->assertFalse(Validation::comparison(array('check1' => 7, 'operator' => 'not equal', 'check2' => 7)));
987
		$this->assertFalse(Validation::comparison(array('check1' => 7, 'operator' => '!=', 'check2' => 7)));
988
	}
989
 
990
/**
991
 * testCustom method
992
 *
993
 * @return void
994
 */
995
	public function testCustom() {
996
		$this->assertTrue(Validation::custom('12345', '/(?<!\\S)\\d++(?!\\S)/'));
997
		$this->assertFalse(Validation::custom('Text', '/(?<!\\S)\\d++(?!\\S)/'));
998
		$this->assertFalse(Validation::custom('123.45', '/(?<!\\S)\\d++(?!\\S)/'));
999
		$this->assertFalse(Validation::custom('missing regex'));
1000
	}
1001
 
1002
/**
1003
 * testCustomAsArray method
1004
 *
1005
 * @return void
1006
 */
1007
	public function testCustomAsArray() {
1008
		$this->assertTrue(Validation::custom(array('check' => '12345', 'regex' => '/(?<!\\S)\\d++(?!\\S)/')));
1009
		$this->assertFalse(Validation::custom(array('check' => 'Text', 'regex' => '/(?<!\\S)\\d++(?!\\S)/')));
1010
		$this->assertFalse(Validation::custom(array('check' => '123.45', 'regex' => '/(?<!\\S)\\d++(?!\\S)/')));
1011
	}
1012
 
1013
/**
1014
 * testDateDdmmyyyy method
1015
 *
1016
 * @return void
1017
 */
1018
	public function testDateDdmmyyyy() {
1019
		$this->assertTrue(Validation::date('27-12-2006', array('dmy')));
1020
		$this->assertTrue(Validation::date('27.12.2006', array('dmy')));
1021
		$this->assertTrue(Validation::date('27/12/2006', array('dmy')));
1022
		$this->assertTrue(Validation::date('27 12 2006', array('dmy')));
1023
		$this->assertFalse(Validation::date('00-00-0000', array('dmy')));
1024
		$this->assertFalse(Validation::date('00.00.0000', array('dmy')));
1025
		$this->assertFalse(Validation::date('00/00/0000', array('dmy')));
1026
		$this->assertFalse(Validation::date('00 00 0000', array('dmy')));
1027
		$this->assertFalse(Validation::date('31-11-2006', array('dmy')));
1028
		$this->assertFalse(Validation::date('31.11.2006', array('dmy')));
1029
		$this->assertFalse(Validation::date('31/11/2006', array('dmy')));
1030
		$this->assertFalse(Validation::date('31 11 2006', array('dmy')));
1031
	}
1032
 
1033
/**
1034
 * testDateDdmmyyyyLeapYear method
1035
 *
1036
 * @return void
1037
 */
1038
	public function testDateDdmmyyyyLeapYear() {
1039
		$this->assertTrue(Validation::date('29-02-2004', array('dmy')));
1040
		$this->assertTrue(Validation::date('29.02.2004', array('dmy')));
1041
		$this->assertTrue(Validation::date('29/02/2004', array('dmy')));
1042
		$this->assertTrue(Validation::date('29 02 2004', array('dmy')));
1043
		$this->assertFalse(Validation::date('29-02-2006', array('dmy')));
1044
		$this->assertFalse(Validation::date('29.02.2006', array('dmy')));
1045
		$this->assertFalse(Validation::date('29/02/2006', array('dmy')));
1046
		$this->assertFalse(Validation::date('29 02 2006', array('dmy')));
1047
	}
1048
 
1049
/**
1050
 * testDateDdmmyy method
1051
 *
1052
 * @return void
1053
 */
1054
	public function testDateDdmmyy() {
1055
		$this->assertTrue(Validation::date('27-12-06', array('dmy')));
1056
		$this->assertTrue(Validation::date('27.12.06', array('dmy')));
1057
		$this->assertTrue(Validation::date('27/12/06', array('dmy')));
1058
		$this->assertTrue(Validation::date('27 12 06', array('dmy')));
1059
		$this->assertFalse(Validation::date('00-00-00', array('dmy')));
1060
		$this->assertFalse(Validation::date('00.00.00', array('dmy')));
1061
		$this->assertFalse(Validation::date('00/00/00', array('dmy')));
1062
		$this->assertFalse(Validation::date('00 00 00', array('dmy')));
1063
		$this->assertFalse(Validation::date('31-11-06', array('dmy')));
1064
		$this->assertFalse(Validation::date('31.11.06', array('dmy')));
1065
		$this->assertFalse(Validation::date('31/11/06', array('dmy')));
1066
		$this->assertFalse(Validation::date('31 11 06', array('dmy')));
1067
	}
1068
 
1069
/**
1070
 * testDateDdmmyyLeapYear method
1071
 *
1072
 * @return void
1073
 */
1074
	public function testDateDdmmyyLeapYear() {
1075
		$this->assertTrue(Validation::date('29-02-04', array('dmy')));
1076
		$this->assertTrue(Validation::date('29.02.04', array('dmy')));
1077
		$this->assertTrue(Validation::date('29/02/04', array('dmy')));
1078
		$this->assertTrue(Validation::date('29 02 04', array('dmy')));
1079
		$this->assertFalse(Validation::date('29-02-06', array('dmy')));
1080
		$this->assertFalse(Validation::date('29.02.06', array('dmy')));
1081
		$this->assertFalse(Validation::date('29/02/06', array('dmy')));
1082
		$this->assertFalse(Validation::date('29 02 06', array('dmy')));
1083
	}
1084
 
1085
/**
1086
 * testDateDmyy method
1087
 *
1088
 * @return void
1089
 */
1090
	public function testDateDmyy() {
1091
		$this->assertTrue(Validation::date('7-2-06', array('dmy')));
1092
		$this->assertTrue(Validation::date('7.2.06', array('dmy')));
1093
		$this->assertTrue(Validation::date('7/2/06', array('dmy')));
1094
		$this->assertTrue(Validation::date('7 2 06', array('dmy')));
1095
		$this->assertFalse(Validation::date('0-0-00', array('dmy')));
1096
		$this->assertFalse(Validation::date('0.0.00', array('dmy')));
1097
		$this->assertFalse(Validation::date('0/0/00', array('dmy')));
1098
		$this->assertFalse(Validation::date('0 0 00', array('dmy')));
1099
		$this->assertFalse(Validation::date('32-2-06', array('dmy')));
1100
		$this->assertFalse(Validation::date('32.2.06', array('dmy')));
1101
		$this->assertFalse(Validation::date('32/2/06', array('dmy')));
1102
		$this->assertFalse(Validation::date('32 2 06', array('dmy')));
1103
	}
1104
 
1105
/**
1106
 * testDateDmyyLeapYear method
1107
 *
1108
 * @return void
1109
 */
1110
	public function testDateDmyyLeapYear() {
1111
		$this->assertTrue(Validation::date('29-2-04', array('dmy')));
1112
		$this->assertTrue(Validation::date('29.2.04', array('dmy')));
1113
		$this->assertTrue(Validation::date('29/2/04', array('dmy')));
1114
		$this->assertTrue(Validation::date('29 2 04', array('dmy')));
1115
		$this->assertFalse(Validation::date('29-2-06', array('dmy')));
1116
		$this->assertFalse(Validation::date('29.2.06', array('dmy')));
1117
		$this->assertFalse(Validation::date('29/2/06', array('dmy')));
1118
		$this->assertFalse(Validation::date('29 2 06', array('dmy')));
1119
	}
1120
 
1121
/**
1122
 * testDateDmyyyy method
1123
 *
1124
 * @return void
1125
 */
1126
	public function testDateDmyyyy() {
1127
		$this->assertTrue(Validation::date('7-2-2006', array('dmy')));
1128
		$this->assertTrue(Validation::date('7.2.2006', array('dmy')));
1129
		$this->assertTrue(Validation::date('7/2/2006', array('dmy')));
1130
		$this->assertTrue(Validation::date('7 2 2006', array('dmy')));
1131
		$this->assertFalse(Validation::date('0-0-0000', array('dmy')));
1132
		$this->assertFalse(Validation::date('0.0.0000', array('dmy')));
1133
		$this->assertFalse(Validation::date('0/0/0000', array('dmy')));
1134
		$this->assertFalse(Validation::date('0 0 0000', array('dmy')));
1135
		$this->assertFalse(Validation::date('32-2-2006', array('dmy')));
1136
		$this->assertFalse(Validation::date('32.2.2006', array('dmy')));
1137
		$this->assertFalse(Validation::date('32/2/2006', array('dmy')));
1138
		$this->assertFalse(Validation::date('32 2 2006', array('dmy')));
1139
	}
1140
 
1141
/**
1142
 * testDateDmyyyyLeapYear method
1143
 *
1144
 * @return void
1145
 */
1146
	public function testDateDmyyyyLeapYear() {
1147
		$this->assertTrue(Validation::date('29-2-2004', array('dmy')));
1148
		$this->assertTrue(Validation::date('29.2.2004', array('dmy')));
1149
		$this->assertTrue(Validation::date('29/2/2004', array('dmy')));
1150
		$this->assertTrue(Validation::date('29 2 2004', array('dmy')));
1151
		$this->assertFalse(Validation::date('29-2-2006', array('dmy')));
1152
		$this->assertFalse(Validation::date('29.2.2006', array('dmy')));
1153
		$this->assertFalse(Validation::date('29/2/2006', array('dmy')));
1154
		$this->assertFalse(Validation::date('29 2 2006', array('dmy')));
1155
	}
1156
 
1157
/**
1158
 * testDateMmddyyyy method
1159
 *
1160
 * @return void
1161
 */
1162
	public function testDateMmddyyyy() {
1163
		$this->assertTrue(Validation::date('12-27-2006', array('mdy')));
1164
		$this->assertTrue(Validation::date('12.27.2006', array('mdy')));
1165
		$this->assertTrue(Validation::date('12/27/2006', array('mdy')));
1166
		$this->assertTrue(Validation::date('12 27 2006', array('mdy')));
1167
		$this->assertFalse(Validation::date('00-00-0000', array('mdy')));
1168
		$this->assertFalse(Validation::date('00.00.0000', array('mdy')));
1169
		$this->assertFalse(Validation::date('00/00/0000', array('mdy')));
1170
		$this->assertFalse(Validation::date('00 00 0000', array('mdy')));
1171
		$this->assertFalse(Validation::date('11-31-2006', array('mdy')));
1172
		$this->assertFalse(Validation::date('11.31.2006', array('mdy')));
1173
		$this->assertFalse(Validation::date('11/31/2006', array('mdy')));
1174
		$this->assertFalse(Validation::date('11 31 2006', array('mdy')));
1175
	}
1176
 
1177
/**
1178
 * testDateMmddyyyyLeapYear method
1179
 *
1180
 * @return void
1181
 */
1182
	public function testDateMmddyyyyLeapYear() {
1183
		$this->assertTrue(Validation::date('02-29-2004', array('mdy')));
1184
		$this->assertTrue(Validation::date('02.29.2004', array('mdy')));
1185
		$this->assertTrue(Validation::date('02/29/2004', array('mdy')));
1186
		$this->assertTrue(Validation::date('02 29 2004', array('mdy')));
1187
		$this->assertFalse(Validation::date('02-29-2006', array('mdy')));
1188
		$this->assertFalse(Validation::date('02.29.2006', array('mdy')));
1189
		$this->assertFalse(Validation::date('02/29/2006', array('mdy')));
1190
		$this->assertFalse(Validation::date('02 29 2006', array('mdy')));
1191
	}
1192
 
1193
/**
1194
 * testDateMmddyy method
1195
 *
1196
 * @return void
1197
 */
1198
	public function testDateMmddyy() {
1199
		$this->assertTrue(Validation::date('12-27-06', array('mdy')));
1200
		$this->assertTrue(Validation::date('12.27.06', array('mdy')));
1201
		$this->assertTrue(Validation::date('12/27/06', array('mdy')));
1202
		$this->assertTrue(Validation::date('12 27 06', array('mdy')));
1203
		$this->assertFalse(Validation::date('00-00-00', array('mdy')));
1204
		$this->assertFalse(Validation::date('00.00.00', array('mdy')));
1205
		$this->assertFalse(Validation::date('00/00/00', array('mdy')));
1206
		$this->assertFalse(Validation::date('00 00 00', array('mdy')));
1207
		$this->assertFalse(Validation::date('11-31-06', array('mdy')));
1208
		$this->assertFalse(Validation::date('11.31.06', array('mdy')));
1209
		$this->assertFalse(Validation::date('11/31/06', array('mdy')));
1210
		$this->assertFalse(Validation::date('11 31 06', array('mdy')));
1211
	}
1212
 
1213
/**
1214
 * testDateMmddyyLeapYear method
1215
 *
1216
 * @return void
1217
 */
1218
	public function testDateMmddyyLeapYear() {
1219
		$this->assertTrue(Validation::date('02-29-04', array('mdy')));
1220
		$this->assertTrue(Validation::date('02.29.04', array('mdy')));
1221
		$this->assertTrue(Validation::date('02/29/04', array('mdy')));
1222
		$this->assertTrue(Validation::date('02 29 04', array('mdy')));
1223
		$this->assertFalse(Validation::date('02-29-06', array('mdy')));
1224
		$this->assertFalse(Validation::date('02.29.06', array('mdy')));
1225
		$this->assertFalse(Validation::date('02/29/06', array('mdy')));
1226
		$this->assertFalse(Validation::date('02 29 06', array('mdy')));
1227
	}
1228
 
1229
/**
1230
 * testDateMdyy method
1231
 *
1232
 * @return void
1233
 */
1234
	public function testDateMdyy() {
1235
		$this->assertTrue(Validation::date('2-7-06', array('mdy')));
1236
		$this->assertTrue(Validation::date('2.7.06', array('mdy')));
1237
		$this->assertTrue(Validation::date('2/7/06', array('mdy')));
1238
		$this->assertTrue(Validation::date('2 7 06', array('mdy')));
1239
		$this->assertFalse(Validation::date('0-0-00', array('mdy')));
1240
		$this->assertFalse(Validation::date('0.0.00', array('mdy')));
1241
		$this->assertFalse(Validation::date('0/0/00', array('mdy')));
1242
		$this->assertFalse(Validation::date('0 0 00', array('mdy')));
1243
		$this->assertFalse(Validation::date('2-32-06', array('mdy')));
1244
		$this->assertFalse(Validation::date('2.32.06', array('mdy')));
1245
		$this->assertFalse(Validation::date('2/32/06', array('mdy')));
1246
		$this->assertFalse(Validation::date('2 32 06', array('mdy')));
1247
	}
1248
 
1249
/**
1250
 * testDateMdyyLeapYear method
1251
 *
1252
 * @return void
1253
 */
1254
	public function testDateMdyyLeapYear() {
1255
		$this->assertTrue(Validation::date('2-29-04', array('mdy')));
1256
		$this->assertTrue(Validation::date('2.29.04', array('mdy')));
1257
		$this->assertTrue(Validation::date('2/29/04', array('mdy')));
1258
		$this->assertTrue(Validation::date('2 29 04', array('mdy')));
1259
		$this->assertFalse(Validation::date('2-29-06', array('mdy')));
1260
		$this->assertFalse(Validation::date('2.29.06', array('mdy')));
1261
		$this->assertFalse(Validation::date('2/29/06', array('mdy')));
1262
		$this->assertFalse(Validation::date('2 29 06', array('mdy')));
1263
	}
1264
 
1265
/**
1266
 * testDateMdyyyy method
1267
 *
1268
 * @return void
1269
 */
1270
	public function testDateMdyyyy() {
1271
		$this->assertTrue(Validation::date('2-7-2006', array('mdy')));
1272
		$this->assertTrue(Validation::date('2.7.2006', array('mdy')));
1273
		$this->assertTrue(Validation::date('2/7/2006', array('mdy')));
1274
		$this->assertTrue(Validation::date('2 7 2006', array('mdy')));
1275
		$this->assertFalse(Validation::date('0-0-0000', array('mdy')));
1276
		$this->assertFalse(Validation::date('0.0.0000', array('mdy')));
1277
		$this->assertFalse(Validation::date('0/0/0000', array('mdy')));
1278
		$this->assertFalse(Validation::date('0 0 0000', array('mdy')));
1279
		$this->assertFalse(Validation::date('2-32-2006', array('mdy')));
1280
		$this->assertFalse(Validation::date('2.32.2006', array('mdy')));
1281
		$this->assertFalse(Validation::date('2/32/2006', array('mdy')));
1282
		$this->assertFalse(Validation::date('2 32 2006', array('mdy')));
1283
	}
1284
 
1285
/**
1286
 * testDateMdyyyyLeapYear method
1287
 *
1288
 * @return void
1289
 */
1290
	public function testDateMdyyyyLeapYear() {
1291
		$this->assertTrue(Validation::date('2-29-2004', array('mdy')));
1292
		$this->assertTrue(Validation::date('2.29.2004', array('mdy')));
1293
		$this->assertTrue(Validation::date('2/29/2004', array('mdy')));
1294
		$this->assertTrue(Validation::date('2 29 2004', array('mdy')));
1295
		$this->assertFalse(Validation::date('2-29-2006', array('mdy')));
1296
		$this->assertFalse(Validation::date('2.29.2006', array('mdy')));
1297
		$this->assertFalse(Validation::date('2/29/2006', array('mdy')));
1298
		$this->assertFalse(Validation::date('2 29 2006', array('mdy')));
1299
	}
1300
 
1301
/**
1302
 * testDateYyyymmdd method
1303
 *
1304
 * @return void
1305
 */
1306
	public function testDateYyyymmdd() {
1307
		$this->assertTrue(Validation::date('2006-12-27', array('ymd')));
1308
		$this->assertTrue(Validation::date('2006.12.27', array('ymd')));
1309
		$this->assertTrue(Validation::date('2006/12/27', array('ymd')));
1310
		$this->assertTrue(Validation::date('2006 12 27', array('ymd')));
1311
		$this->assertFalse(Validation::date('2006-11-31', array('ymd')));
1312
		$this->assertFalse(Validation::date('2006.11.31', array('ymd')));
1313
		$this->assertFalse(Validation::date('2006/11/31', array('ymd')));
1314
		$this->assertFalse(Validation::date('2006 11 31', array('ymd')));
1315
	}
1316
 
1317
/**
1318
 * testDateYyyymmddLeapYear method
1319
 *
1320
 * @return void
1321
 */
1322
	public function testDateYyyymmddLeapYear() {
1323
		$this->assertTrue(Validation::date('2004-02-29', array('ymd')));
1324
		$this->assertTrue(Validation::date('2004.02.29', array('ymd')));
1325
		$this->assertTrue(Validation::date('2004/02/29', array('ymd')));
1326
		$this->assertTrue(Validation::date('2004 02 29', array('ymd')));
1327
		$this->assertFalse(Validation::date('2006-02-29', array('ymd')));
1328
		$this->assertFalse(Validation::date('2006.02.29', array('ymd')));
1329
		$this->assertFalse(Validation::date('2006/02/29', array('ymd')));
1330
		$this->assertFalse(Validation::date('2006 02 29', array('ymd')));
1331
	}
1332
 
1333
/**
1334
 * testDateYymmdd method
1335
 *
1336
 * @return void
1337
 */
1338
	public function testDateYymmdd() {
1339
		$this->assertTrue(Validation::date('06-12-27', array('ymd')));
1340
		$this->assertTrue(Validation::date('06.12.27', array('ymd')));
1341
		$this->assertTrue(Validation::date('06/12/27', array('ymd')));
1342
		$this->assertTrue(Validation::date('06 12 27', array('ymd')));
1343
		$this->assertFalse(Validation::date('12/27/2600', array('ymd')));
1344
		$this->assertFalse(Validation::date('12.27.2600', array('ymd')));
1345
		$this->assertFalse(Validation::date('12/27/2600', array('ymd')));
1346
		$this->assertFalse(Validation::date('12 27 2600', array('ymd')));
1347
		$this->assertFalse(Validation::date('06-11-31', array('ymd')));
1348
		$this->assertFalse(Validation::date('06.11.31', array('ymd')));
1349
		$this->assertFalse(Validation::date('06/11/31', array('ymd')));
1350
		$this->assertFalse(Validation::date('06 11 31', array('ymd')));
1351
	}
1352
 
1353
/**
1354
 * testDateYymmddLeapYear method
1355
 *
1356
 * @return void
1357
 */
1358
	public function testDateYymmddLeapYear() {
1359
		$this->assertTrue(Validation::date('2004-02-29', array('ymd')));
1360
		$this->assertTrue(Validation::date('2004.02.29', array('ymd')));
1361
		$this->assertTrue(Validation::date('2004/02/29', array('ymd')));
1362
		$this->assertTrue(Validation::date('2004 02 29', array('ymd')));
1363
		$this->assertFalse(Validation::date('2006-02-29', array('ymd')));
1364
		$this->assertFalse(Validation::date('2006.02.29', array('ymd')));
1365
		$this->assertFalse(Validation::date('2006/02/29', array('ymd')));
1366
		$this->assertFalse(Validation::date('2006 02 29', array('ymd')));
1367
	}
1368
 
1369
/**
1370
 * testDateDdMMMMyyyy method
1371
 *
1372
 * @return void
1373
 */
1374
	public function testDateDdMMMMyyyy() {
1375
		$this->assertTrue(Validation::date('27 December 2006', array('dMy')));
1376
		$this->assertTrue(Validation::date('27 Dec 2006', array('dMy')));
1377
		$this->assertFalse(Validation::date('2006 Dec 27', array('dMy')));
1378
		$this->assertFalse(Validation::date('2006 December 27', array('dMy')));
1379
	}
1380
 
1381
/**
1382
 * testDateDdMMMMyyyyLeapYear method
1383
 *
1384
 * @return void
1385
 */
1386
	public function testDateDdMMMMyyyyLeapYear() {
1387
		$this->assertTrue(Validation::date('29 February 2004', array('dMy')));
1388
		$this->assertFalse(Validation::date('29 February 2006', array('dMy')));
1389
	}
1390
 
1391
/**
1392
 * testDateMmmmDdyyyy method
1393
 *
1394
 * @return void
1395
 */
1396
	public function testDateMmmmDdyyyy() {
1397
		$this->assertTrue(Validation::date('December 27, 2006', array('Mdy')));
1398
		$this->assertTrue(Validation::date('Dec 27, 2006', array('Mdy')));
1399
		$this->assertTrue(Validation::date('December 27 2006', array('Mdy')));
1400
		$this->assertTrue(Validation::date('Dec 27 2006', array('Mdy')));
1401
		$this->assertFalse(Validation::date('27 Dec 2006', array('Mdy')));
1402
		$this->assertFalse(Validation::date('2006 December 27', array('Mdy')));
1403
		$this->assertTrue(Validation::date('Sep 12, 2011', array('Mdy')));
1404
	}
1405
 
1406
/**
1407
 * testDateMmmmDdyyyyLeapYear method
1408
 *
1409
 * @return void
1410
 */
1411
	public function testDateMmmmDdyyyyLeapYear() {
1412
		$this->assertTrue(Validation::date('February 29, 2004', array('Mdy')));
1413
		$this->assertTrue(Validation::date('Feb 29, 2004', array('Mdy')));
1414
		$this->assertTrue(Validation::date('February 29 2004', array('Mdy')));
1415
		$this->assertTrue(Validation::date('Feb 29 2004', array('Mdy')));
1416
		$this->assertFalse(Validation::date('February 29, 2006', array('Mdy')));
1417
	}
1418
 
1419
/**
1420
 * testDateMy method
1421
 *
1422
 * @return void
1423
 */
1424
	public function testDateMy() {
1425
		$this->assertTrue(Validation::date('December 2006', array('My')));
1426
		$this->assertTrue(Validation::date('Dec 2006', array('My')));
1427
		$this->assertTrue(Validation::date('December/2006', array('My')));
1428
		$this->assertTrue(Validation::date('Dec/2006', array('My')));
1429
	}
1430
 
1431
/**
1432
 * testDateMyNumeric method
1433
 *
1434
 * @return void
1435
 */
1436
	public function testDateMyNumeric() {
1437
		$this->assertTrue(Validation::date('01/2006', array('my')));
1438
		$this->assertTrue(Validation::date('12-2006', array('my')));
1439
		$this->assertTrue(Validation::date('12.2006', array('my')));
1440
		$this->assertTrue(Validation::date('12 2006', array('my')));
1441
		$this->assertTrue(Validation::date('01/06', array('my')));
1442
		$this->assertTrue(Validation::date('12-06', array('my')));
1443
		$this->assertTrue(Validation::date('12.06', array('my')));
1444
		$this->assertTrue(Validation::date('12 06', array('my')));
1445
		$this->assertFalse(Validation::date('13 06', array('my')));
1446
		$this->assertFalse(Validation::date('13 2006', array('my')));
1447
	}
1448
 
1449
/**
1450
 * testDateYmNumeric method
1451
 *
1452
 * @return void
1453
 */
1454
	public function testDateYmNumeric() {
1455
		$this->assertTrue(Validation::date('2006/12', array('ym')));
1456
		$this->assertTrue(Validation::date('2006-12', array('ym')));
1457
		$this->assertTrue(Validation::date('2006-12', array('ym')));
1458
		$this->assertTrue(Validation::date('2006 12', array('ym')));
1459
		$this->assertTrue(Validation::date('2006 12', array('ym')));
1460
		$this->assertTrue(Validation::date('1900-01', array('ym')));
1461
		$this->assertTrue(Validation::date('2153-01', array('ym')));
1462
		$this->assertTrue(Validation::date('06/12', array('ym')));
1463
		$this->assertTrue(Validation::date('06-12', array('ym')));
1464
		$this->assertTrue(Validation::date('06-12', array('ym')));
1465
		$this->assertTrue(Validation::date('06 12', array('ym')));
1466
		$this->assertFalse(Validation::date('2006/12 ', array('ym')));
1467
		$this->assertFalse(Validation::date('2006/12/', array('ym')));
1468
		$this->assertFalse(Validation::date('06/12 ', array('ym')));
1469
		$this->assertFalse(Validation::date('06/13 ', array('ym')));
1470
	}
1471
 
1472
/**
1473
 * testDateY method
1474
 *
1475
 * @return void
1476
 */
1477
	public function testDateY() {
1478
		$this->assertTrue(Validation::date('1900', array('y')));
1479
		$this->assertTrue(Validation::date('1984', array('y')));
1480
		$this->assertTrue(Validation::date('2006', array('y')));
1481
		$this->assertTrue(Validation::date('2008', array('y')));
1482
		$this->assertTrue(Validation::date('2013', array('y')));
1483
		$this->assertTrue(Validation::date('2104', array('y')));
1484
		$this->assertTrue(Validation::date('1899', array('y')));
1485
		$this->assertFalse(Validation::date('20009', array('y')));
1486
		$this->assertFalse(Validation::date(' 2012', array('y')));
1487
		$this->assertFalse(Validation::date('3000', array('y')));
1488
		$this->assertFalse(Validation::date('1799', array('y')));
1489
	}
1490
 
1491
/**
1492
 * Test validating dates with multiple formats
1493
 *
1494
 * @return void
1495
 */
1496
	public function testDateMultiple() {
1497
		$this->assertTrue(Validation::date('2011-12-31', array('ymd', 'dmy')));
1498
		$this->assertTrue(Validation::date('31-12-2011', array('ymd', 'dmy')));
1499
	}
1500
 
1501
/**
1502
 * testTime method
1503
 *
1504
 * @return void
1505
 */
1506
	public function testTime() {
1507
		$this->assertTrue(Validation::time('00:00'));
1508
		$this->assertTrue(Validation::time('23:59'));
1509
		$this->assertFalse(Validation::time('24:00'));
1510
		$this->assertTrue(Validation::time('12:00'));
1511
		$this->assertTrue(Validation::time('12:01'));
1512
		$this->assertTrue(Validation::time('12:01am'));
1513
		$this->assertTrue(Validation::time('12:01pm'));
1514
		$this->assertTrue(Validation::time('1pm'));
1515
		$this->assertTrue(Validation::time('1 pm'));
1516
		$this->assertTrue(Validation::time('1 PM'));
1517
		$this->assertTrue(Validation::time('01:00'));
1518
		$this->assertFalse(Validation::time('1:00'));
1519
		$this->assertTrue(Validation::time('1:00pm'));
1520
		$this->assertFalse(Validation::time('13:00pm'));
1521
		$this->assertFalse(Validation::time('9:00'));
1522
	}
1523
 
1524
/**
1525
 * testBoolean method
1526
 *
1527
 * @return void
1528
 */
1529
	public function testBoolean() {
1530
		$this->assertTrue(Validation::boolean('0'));
1531
		$this->assertTrue(Validation::boolean('1'));
1532
		$this->assertTrue(Validation::boolean(0));
1533
		$this->assertTrue(Validation::boolean(1));
1534
		$this->assertTrue(Validation::boolean(true));
1535
		$this->assertTrue(Validation::boolean(false));
1536
		$this->assertFalse(Validation::boolean('true'));
1537
		$this->assertFalse(Validation::boolean('false'));
1538
		$this->assertFalse(Validation::boolean('-1'));
1539
		$this->assertFalse(Validation::boolean('2'));
1540
		$this->assertFalse(Validation::boolean('Boo!'));
1541
	}
1542
 
1543
/**
1544
 * testDateCustomRegx method
1545
 *
1546
 * @return void
1547
 */
1548
	public function testDateCustomRegx() {
1549
		$this->assertTrue(Validation::date('2006-12-27', null, '%^(19|20)[0-9]{2}[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])$%'));
1550
		$this->assertFalse(Validation::date('12-27-2006', null, '%^(19|20)[0-9]{2}[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])$%'));
1551
	}
1552
 
1553
/**
1554
 * Test numbers with any number of decimal places, including none.
1555
 *
1556
 * @return void
1557
 */
1558
	public function testDecimalWithPlacesNull() {
1559
		$this->assertTrue(Validation::decimal('+1234.54321', null));
1560
		$this->assertTrue(Validation::decimal('-1234.54321', null));
1561
		$this->assertTrue(Validation::decimal('1234.54321', null));
1562
		$this->assertTrue(Validation::decimal('+0123.45e6', null));
1563
		$this->assertTrue(Validation::decimal('-0123.45e6', null));
1564
		$this->assertTrue(Validation::decimal('0123.45e6', null));
1565
		$this->assertTrue(Validation::decimal(1234.56, null));
1566
		$this->assertTrue(Validation::decimal(1234.00, null));
1567
		$this->assertTrue(Validation::decimal(1234., null));
1568
		$this->assertTrue(Validation::decimal('1234.00', null));
1569
		$this->assertTrue(Validation::decimal(.0, null));
1570
		$this->assertTrue(Validation::decimal(.00, null));
1571
		$this->assertTrue(Validation::decimal('.00', null));
1572
		$this->assertTrue(Validation::decimal(.01, null));
1573
		$this->assertTrue(Validation::decimal('.01', null));
1574
		$this->assertTrue(Validation::decimal('1234', null));
1575
		$this->assertTrue(Validation::decimal('-1234', null));
1576
		$this->assertTrue(Validation::decimal('+1234', null));
1577
		$this->assertTrue(Validation::decimal((float)1234, null));
1578
		$this->assertTrue(Validation::decimal((double)1234, null));
1579
		$this->assertTrue(Validation::decimal((int)1234, null));
1580
 
1581
		$this->assertFalse(Validation::decimal('', null));
1582
		$this->assertFalse(Validation::decimal('string', null));
1583
		$this->assertFalse(Validation::decimal('1234.', null));
1584
	}
1585
 
1586
/**
1587
 * Test numbers with any number of decimal places greater than 0, or a float|double.
1588
 *
1589
 * @return void
1590
 */
1591
	public function testDecimalWithPlacesTrue() {
1592
		$this->assertTrue(Validation::decimal('+1234.54321', true));
1593
		$this->assertTrue(Validation::decimal('-1234.54321', true));
1594
		$this->assertTrue(Validation::decimal('1234.54321', true));
1595
		$this->assertTrue(Validation::decimal('+0123.45e6', true));
1596
		$this->assertTrue(Validation::decimal('-0123.45e6', true));
1597
		$this->assertTrue(Validation::decimal('0123.45e6', true));
1598
		$this->assertTrue(Validation::decimal(1234.56, true));
1599
		$this->assertTrue(Validation::decimal(1234.00, true));
1600
		$this->assertTrue(Validation::decimal(1234., true));
1601
		$this->assertTrue(Validation::decimal('1234.00', true));
1602
		$this->assertTrue(Validation::decimal(.0, true));
1603
		$this->assertTrue(Validation::decimal(.00, true));
1604
		$this->assertTrue(Validation::decimal('.00', true));
1605
		$this->assertTrue(Validation::decimal(.01, true));
1606
		$this->assertTrue(Validation::decimal('.01', true));
1607
		$this->assertTrue(Validation::decimal((float)1234, true));
1608
		$this->assertTrue(Validation::decimal((double)1234, true));
1609
 
1610
		$this->assertFalse(Validation::decimal('', true));
1611
		$this->assertFalse(Validation::decimal('string', true));
1612
		$this->assertFalse(Validation::decimal('1234.', true));
1613
		$this->assertFalse(Validation::decimal((int)1234, true));
1614
		$this->assertFalse(Validation::decimal('1234', true));
1615
		$this->assertFalse(Validation::decimal('-1234', true));
1616
		$this->assertFalse(Validation::decimal('+1234', true));
1617
	}
1618
 
1619
/**
1620
 * Test numbers with exactly that many number of decimal places.
1621
 *
1622
 * @return void
1623
 */
1624
	public function testDecimalWithPlacesNumeric() {
1625
		$this->assertTrue(Validation::decimal('.27', '2'));
1626
		$this->assertTrue(Validation::decimal(0.27, 2));
1627
		$this->assertTrue(Validation::decimal(-0.27, 2));
1628
		$this->assertTrue(Validation::decimal(0.27, 2));
1629
		$this->assertTrue(Validation::decimal('0.277', '3'));
1630
		$this->assertTrue(Validation::decimal(0.277, 3));
1631
		$this->assertTrue(Validation::decimal(-0.277, 3));
1632
		$this->assertTrue(Validation::decimal(0.277, 3));
1633
		$this->assertTrue(Validation::decimal('1234.5678', '4'));
1634
		$this->assertTrue(Validation::decimal(1234.5678, 4));
1635
		$this->assertTrue(Validation::decimal(-1234.5678, 4));
1636
		$this->assertTrue(Validation::decimal(1234.5678, 4));
1637
		$this->assertTrue(Validation::decimal('.00', 2));
1638
		$this->assertTrue(Validation::decimal(.01, 2));
1639
		$this->assertTrue(Validation::decimal('.01', 2));
1640
 
1641
		$this->assertFalse(Validation::decimal('', 1));
1642
		$this->assertFalse(Validation::decimal('string', 1));
1643
		$this->assertFalse(Validation::decimal(1234., 1));
1644
		$this->assertFalse(Validation::decimal('1234.', 1));
1645
		$this->assertFalse(Validation::decimal(.0, 1));
1646
		$this->assertFalse(Validation::decimal(.00, 2));
1647
		$this->assertFalse(Validation::decimal((float)1234, 1));
1648
		$this->assertFalse(Validation::decimal((double)1234, 1));
1649
		$this->assertFalse(Validation::decimal((int)1234, 1));
1650
		$this->assertFalse(Validation::decimal('1234.5678', '3'));
1651
		$this->assertFalse(Validation::decimal(1234.5678, 3));
1652
		$this->assertFalse(Validation::decimal(-1234.5678, 3));
1653
		$this->assertFalse(Validation::decimal(1234.5678, 3));
1654
	}
1655
 
1656
/**
1657
 * Test decimal() with invalid places parameter.
1658
 *
1659
 * @return void
1660
 */
1661
	public function testDecimalWithInvalidPlaces() {
1662
		$this->assertFalse(Validation::decimal('.27', 'string'));
1663
		$this->assertFalse(Validation::decimal(1234.5678, (array)true));
1664
		$this->assertFalse(Validation::decimal(-1234.5678, (object)true));
1665
	}
1666
 
1667
/**
1668
 * testDecimalCustomRegex method
1669
 *
1670
 * @return void
1671
 */
1672
	public function testDecimalCustomRegex() {
1673
		$this->assertTrue(Validation::decimal('1.54321', null, '/^[-+]?[0-9]+(\\.[0-9]+)?$/s'));
1674
		$this->assertFalse(Validation::decimal('.54321', null, '/^[-+]?[0-9]+(\\.[0-9]+)?$/s'));
1675
	}
1676
 
1677
/**
1678
 * Test localized floats with decimal.
1679
 *
1680
 * @return void
1681
 */
1682
	public function testDecimalLocaleSet() {
1683
		$this->skipIf(DS === '\\', 'The locale is not supported in Windows and affects other tests.');
1684
		$restore = setlocale(LC_NUMERIC, 0);
1685
		$this->skipIf(setlocale(LC_NUMERIC, 'da_DK') === false, "The Danish locale isn't available.");
1686
 
1687
		$this->assertTrue(Validation::decimal(1.54), '1.54 should be considered a valid float');
1688
		$this->assertTrue(Validation::decimal('1.54'), '"1.54" should be considered a valid float');
1689
 
1690
		$this->assertTrue(Validation::decimal(12345.67), '12345.67 should be considered a valid float');
1691
		$this->assertTrue(Validation::decimal('12,345.67'), '"12,345.67" should be considered a valid float');
1692
 
1693
		setlocale(LC_NUMERIC, $restore);
1694
	}
1695
 
1696
/**
1697
 * testEmail method
1698
 *
1699
 * @return void
1700
 */
1701
	public function testEmail() {
1702
		$this->assertTrue(Validation::email('abc.efg@domain.com'));
1703
		$this->assertTrue(Validation::email('efg@domain.com'));
1704
		$this->assertTrue(Validation::email('abc-efg@domain.com'));
1705
		$this->assertTrue(Validation::email('abc_efg@domain.com'));
1706
		$this->assertTrue(Validation::email('raw@test.ra.ru'));
1707
		$this->assertTrue(Validation::email('abc-efg@domain-hyphened.com'));
1708
		$this->assertTrue(Validation::email("p.o'malley@domain.com"));
1709
		$this->assertTrue(Validation::email('abc+efg@domain.com'));
1710
		$this->assertTrue(Validation::email('abc&efg@domain.com'));
1711
		$this->assertTrue(Validation::email('abc.efg@12345.com'));
1712
		$this->assertTrue(Validation::email('abc.efg@12345.co.jp'));
1713
		$this->assertTrue(Validation::email('abc@g.cn'));
1714
		$this->assertTrue(Validation::email('abc@x.com'));
1715
		$this->assertTrue(Validation::email('henrik@sbcglobal.net'));
1716
		$this->assertTrue(Validation::email('sani@sbcglobal.net'));
1717
 
1718
		// all ICANN TLDs
1719
		$this->assertTrue(Validation::email('abc@example.aero'));
1720
		$this->assertTrue(Validation::email('abc@example.asia'));
1721
		$this->assertTrue(Validation::email('abc@example.biz'));
1722
		$this->assertTrue(Validation::email('abc@example.cat'));
1723
		$this->assertTrue(Validation::email('abc@example.com'));
1724
		$this->assertTrue(Validation::email('abc@example.coop'));
1725
		$this->assertTrue(Validation::email('abc@example.edu'));
1726
		$this->assertTrue(Validation::email('abc@example.gov'));
1727
		$this->assertTrue(Validation::email('abc@example.info'));
1728
		$this->assertTrue(Validation::email('abc@example.int'));
1729
		$this->assertTrue(Validation::email('abc@example.jobs'));
1730
		$this->assertTrue(Validation::email('abc@example.mil'));
1731
		$this->assertTrue(Validation::email('abc@example.mobi'));
1732
		$this->assertTrue(Validation::email('abc@example.museum'));
1733
		$this->assertTrue(Validation::email('abc@example.name'));
1734
		$this->assertTrue(Validation::email('abc@example.net'));
1735
		$this->assertTrue(Validation::email('abc@example.org'));
1736
		$this->assertTrue(Validation::email('abc@example.pro'));
1737
		$this->assertTrue(Validation::email('abc@example.tel'));
1738
		$this->assertTrue(Validation::email('abc@example.travel'));
1739
		$this->assertTrue(Validation::email('someone@st.t-com.hr'));
1740
 
1741
		// gTLD's
1742
		$this->assertTrue(Validation::email('example@host.local'));
1743
		$this->assertTrue(Validation::email('example@x.org'));
1744
		$this->assertTrue(Validation::email('example@host.xxx'));
1745
 
1746
		// strange, but technically valid email addresses
1747
		$this->assertTrue(Validation::email('S=postmaster/OU=rz/P=uni-frankfurt/A=d400/C=de@gateway.d400.de'));
1748
		$this->assertTrue(Validation::email('customer/department=shipping@example.com'));
1749
		$this->assertTrue(Validation::email('$A12345@example.com'));
1750
		$this->assertTrue(Validation::email('!def!xyz%abc@example.com'));
1751
		$this->assertTrue(Validation::email('_somename@example.com'));
1752
 
1753
		/// Unicode
1754
		$this->assertTrue(Validation::email('some@eräume.foo'));
1755
		$this->assertTrue(Validation::email('äu@öe.eräume.foo'));
1756
		$this->assertTrue(Validation::email('Nyrée.surname@example.com'));
1757
 
1758
		// invalid addresses
1759
		$this->assertFalse(Validation::email('abc@example'));
1760
		$this->assertFalse(Validation::email('abc@example.c'));
1761
		$this->assertFalse(Validation::email('abc@example.com.'));
1762
		$this->assertFalse(Validation::email('abc.@example.com'));
1763
		$this->assertFalse(Validation::email('abc@example..com'));
1764
		$this->assertFalse(Validation::email('abc@example.com.a'));
1765
		$this->assertFalse(Validation::email('abc;@example.com'));
1766
		$this->assertFalse(Validation::email('abc@example.com;'));
1767
		$this->assertFalse(Validation::email('abc@efg@example.com'));
1768
		$this->assertFalse(Validation::email('abc@@example.com'));
1769
		$this->assertFalse(Validation::email('abc efg@example.com'));
1770
		$this->assertFalse(Validation::email('abc,efg@example.com'));
1771
		$this->assertFalse(Validation::email('abc@sub,example.com'));
1772
		$this->assertFalse(Validation::email("abc@sub'example.com"));
1773
		$this->assertFalse(Validation::email('abc@sub/example.com'));
1774
		$this->assertFalse(Validation::email('abc@yahoo!.com'));
1775
		$this->assertFalse(Validation::email('abc@example_underscored.com'));
1776
		$this->assertFalse(Validation::email('raw@test.ra.ru....com'));
1777
	}
1778
 
1779
/**
1780
 * testEmailDeep method
1781
 *
1782
 * @return void
1783
 */
1784
	public function testEmailDeep() {
1785
		$this->skipIf(gethostbynamel('example.abcd'), 'Your DNS service responds for non-existant domains, skipping deep email checks.');
1786
 
1787
		$this->assertTrue(Validation::email('abc.efg@cakephp.org', true));
1788
		$this->assertFalse(Validation::email('abc.efg@caphpkeinvalid.com', true));
1789
	}
1790
 
1791
/**
1792
 * testEmailCustomRegex method
1793
 *
1794
 * @return void
1795
 */
1796
	public function testEmailCustomRegex() {
1797
		$this->assertTrue(Validation::email('abc.efg@cakephp.org', null, '/^[A-Z0-9._%-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i'));
1798
		$this->assertFalse(Validation::email('abc.efg@com.caphpkeinvalid', null, '/^[A-Z0-9._%-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i'));
1799
	}
1800
 
1801
/**
1802
 * testEqualTo method
1803
 *
1804
 * @return void
1805
 */
1806
	public function testEqualTo() {
1807
		$this->assertTrue(Validation::equalTo("1", "1"));
1808
		$this->assertFalse(Validation::equalTo(1, "1"));
1809
		$this->assertFalse(Validation::equalTo("", null));
1810
		$this->assertFalse(Validation::equalTo("", false));
1811
		$this->assertFalse(Validation::equalTo(0, false));
1812
		$this->assertFalse(Validation::equalTo(null, false));
1813
	}
1814
 
1815
/**
1816
 * testIpV4 method
1817
 *
1818
 * @return void
1819
 */
1820
	public function testIpV4() {
1821
		$this->assertTrue(Validation::ip('0.0.0.0', 'ipv4'));
1822
		$this->assertTrue(Validation::ip('192.168.1.156'));
1823
		$this->assertTrue(Validation::ip('255.255.255.255'));
1824
		$this->assertFalse(Validation::ip('127.0.0'));
1825
		$this->assertFalse(Validation::ip('127.0.0.a'));
1826
		$this->assertFalse(Validation::ip('127.0.0.256'));
1827
		$this->assertFalse(Validation::ip('2001:0db8:85a3:0000:0000:8a2e:0370:7334', 'ipv4'), 'IPv6 is not valid IPv4');
1828
	}
1829
 
1830
/**
1831
 * testIp v6
1832
 *
1833
 * @return void
1834
 */
1835
	public function testIpv6() {
1836
		$this->assertTrue(Validation::ip('2001:0db8:85a3:0000:0000:8a2e:0370:7334', 'IPv6'));
1837
		$this->assertTrue(Validation::ip('2001:db8:85a3:0:0:8a2e:370:7334', 'IPv6'));
1838
		$this->assertTrue(Validation::ip('2001:db8:85a3::8a2e:370:7334', 'IPv6'));
1839
		$this->assertTrue(Validation::ip('2001:0db8:0000:0000:0000:0000:1428:57ab', 'IPv6'));
1840
		$this->assertTrue(Validation::ip('2001:0db8:0000:0000:0000::1428:57ab', 'IPv6'));
1841
		$this->assertTrue(Validation::ip('2001:0db8:0:0:0:0:1428:57ab', 'IPv6'));
1842
		$this->assertTrue(Validation::ip('2001:0db8:0:0::1428:57ab', 'IPv6'));
1843
		$this->assertTrue(Validation::ip('2001:0db8::1428:57ab', 'IPv6'));
1844
		$this->assertTrue(Validation::ip('2001:db8::1428:57ab', 'IPv6'));
1845
		$this->assertTrue(Validation::ip('0000:0000:0000:0000:0000:0000:0000:0001', 'IPv6'));
1846
		$this->assertTrue(Validation::ip('::1', 'IPv6'));
1847
		$this->assertTrue(Validation::ip('::ffff:12.34.56.78', 'IPv6'));
1848
		$this->assertTrue(Validation::ip('::ffff:0c22:384e', 'IPv6'));
1849
		$this->assertTrue(Validation::ip('2001:0db8:1234:0000:0000:0000:0000:0000', 'IPv6'));
1850
		$this->assertTrue(Validation::ip('2001:0db8:1234:ffff:ffff:ffff:ffff:ffff', 'IPv6'));
1851
		$this->assertTrue(Validation::ip('2001:db8:a::123', 'IPv6'));
1852
		$this->assertTrue(Validation::ip('fe80::', 'IPv6'));
1853
		$this->assertTrue(Validation::ip('::ffff:192.0.2.128', 'IPv6'));
1854
		$this->assertTrue(Validation::ip('::ffff:c000:280', 'IPv6'));
1855
 
1856
		$this->assertFalse(Validation::ip('123', 'IPv6'));
1857
		$this->assertFalse(Validation::ip('ldkfj', 'IPv6'));
1858
		$this->assertFalse(Validation::ip('2001::FFD3::57ab', 'IPv6'));
1859
		$this->assertFalse(Validation::ip('2001:db8:85a3::8a2e:37023:7334', 'IPv6'));
1860
		$this->assertFalse(Validation::ip('2001:db8:85a3::8a2e:370k:7334', 'IPv6'));
1861
		$this->assertFalse(Validation::ip('1:2:3:4:5:6:7:8:9', 'IPv6'));
1862
		$this->assertFalse(Validation::ip('1::2::3', 'IPv6'));
1863
		$this->assertFalse(Validation::ip('1:::3:4:5', 'IPv6'));
1864
		$this->assertFalse(Validation::ip('1:2:3::4:5:6:7:8:9', 'IPv6'));
1865
		$this->assertFalse(Validation::ip('::ffff:2.3.4', 'IPv6'));
1866
		$this->assertFalse(Validation::ip('::ffff:257.1.2.3', 'IPv6'));
1867
		$this->assertFalse(Validation::ip('255.255.255.255', 'ipv6'), 'IPv4 is not valid IPv6');
1868
	}
1869
 
1870
/**
1871
 * testMaxLength method
1872
 *
1873
 * @return void
1874
 */
1875
	public function testMaxLength() {
1876
		$this->assertTrue(Validation::maxLength('ab', 3));
1877
		$this->assertTrue(Validation::maxLength('abc', 3));
1878
		$this->assertTrue(Validation::maxLength('ÆΔΩЖÇ', 10));
1879
 
1880
		$this->assertFalse(Validation::maxLength('abcd', 3));
1881
		$this->assertFalse(Validation::maxLength('ÆΔΩЖÇ', 3));
1882
	}
1883
 
1884
/**
1885
 * testMinLength method
1886
 *
1887
 * @return void
1888
 */
1889
	public function testMinLength() {
1890
		$this->assertFalse(Validation::minLength('ab', 3));
1891
		$this->assertFalse(Validation::minLength('ÆΔΩЖÇ', 10));
1892
 
1893
		$this->assertTrue(Validation::minLength('abc', 3));
1894
		$this->assertTrue(Validation::minLength('abcd', 3));
1895
		$this->assertTrue(Validation::minLength('ÆΔΩЖÇ', 2));
1896
	}
1897
 
1898
/**
1899
 * testUrl method
1900
 *
1901
 * @return void
1902
 */
1903
	public function testUrl() {
1904
		$this->assertTrue(Validation::url('http://www.cakephp.org'));
1905
		$this->assertTrue(Validation::url('http://cakephp.org'));
1906
		$this->assertTrue(Validation::url('http://www.cakephp.org/somewhere#anchor'));
1907
		$this->assertTrue(Validation::url('http://192.168.0.1'));
1908
		$this->assertTrue(Validation::url('https://www.cakephp.org'));
1909
		$this->assertTrue(Validation::url('https://cakephp.org'));
1910
		$this->assertTrue(Validation::url('https://www.cakephp.org/somewhere#anchor'));
1911
		$this->assertTrue(Validation::url('https://192.168.0.1'));
1912
		$this->assertTrue(Validation::url('ftps://www.cakephp.org/pub/cake'));
1913
		$this->assertTrue(Validation::url('ftps://cakephp.org/pub/cake'));
1914
		$this->assertTrue(Validation::url('ftps://192.168.0.1/pub/cake'));
1915
		$this->assertTrue(Validation::url('ftp://www.cakephp.org/pub/cake'));
1916
		$this->assertTrue(Validation::url('ftp://cakephp.org/pub/cake'));
1917
		$this->assertTrue(Validation::url('ftp://192.168.0.1/pub/cake'));
1918
		$this->assertTrue(Validation::url('sftp://192.168.0.1/pub/cake'));
1919
		$this->assertTrue(Validation::url('https://my.domain.com/gizmo/app?class=MySip;proc=start'));
1920
		$this->assertTrue(Validation::url('www.domain.tld'));
1921
		$this->assertTrue(Validation::url('http://123456789112345678921234567893123456789412345678951234567896123.com'));
1922
		$this->assertTrue(Validation::url('http://www.domain.com/blogs/index.php?blog=6&tempskin=_rss2'));
1923
		$this->assertTrue(Validation::url('http://www.domain.com/blogs/parenth()eses.php'));
1924
		$this->assertTrue(Validation::url('http://www.domain.com/index.php?get=params&amp;get2=params'));
1925
		$this->assertTrue(Validation::url('http://www.domain.com/ndex.php?get=params&amp;get2=params#anchor'));
1926
		$this->assertTrue(Validation::url('http://www.domain.com/real%20url%20encodeing'));
1927
		$this->assertTrue(Validation::url('http://en.wikipedia.org/wiki/Architectural_pattern_(computer_science)'));
1928
		$this->assertTrue(Validation::url('http://www.cakephp.org', true));
1929
		$this->assertTrue(Validation::url('http://example.com/~userdir/'));
1930
		$this->assertTrue(Validation::url('http://underscore_subdomain.example.org'));
1931
		$this->assertTrue(Validation::url('http://_jabber._tcp.gmail.com'));
1932
		$this->assertTrue(Validation::url('http://www.domain.longttldnotallowed'));
1933
		$this->assertFalse(Validation::url('ftps://256.168.0.1/pub/cake'));
1934
		$this->assertFalse(Validation::url('ftp://256.168.0.1/pub/cake'));
1935
		$this->assertFalse(Validation::url('http://w_w.domain.co_m'));
1936
		$this->assertFalse(Validation::url('http://www.domain.12com'));
1937
		$this->assertFalse(Validation::url('http://www.-invaliddomain.tld'));
1938
		$this->assertFalse(Validation::url('http://www.domain.-invalidtld'));
1939
		$this->assertFalse(Validation::url('http://this-domain-is-too-loooooong-by-icann-rules-maximum-length-is-63.com'));
1940
		$this->assertFalse(Validation::url('http://www.underscore_domain.org'));
1941
		$this->assertFalse(Validation::url('http://_jabber._tcp.g_mail.com'));
1942
		$this->assertFalse(Validation::url('http://en.(wikipedia).org/'));
1943
		$this->assertFalse(Validation::url('http://www.domain.com/fakeenco%ode'));
1944
		$this->assertFalse(Validation::url('--.example.com'));
1945
		$this->assertFalse(Validation::url('www.cakephp.org', true));
1946
 
1947
		$this->assertTrue(Validation::url('http://example.com/~userdir/subdir/index.html'));
1948
		$this->assertTrue(Validation::url('http://www.zwischenraume.de'));
1949
		$this->assertTrue(Validation::url('http://www.zwischenraume.cz'));
1950
		$this->assertTrue(Validation::url('http://www.last.fm/music/浜崎あゆみ'), 'utf8 path failed');
1951
		$this->assertTrue(Validation::url('http://www.electrohome.ro/images/239537750-284232-215_300[1].jpg'));
1952
		$this->assertTrue(Validation::url('http://www.eräume.foo'));
1953
		$this->assertTrue(Validation::url('http://äüö.eräume.foo'));
1954
 
1955
		$this->assertTrue(Validation::url('http://cakephp.org:80'));
1956
		$this->assertTrue(Validation::url('http://cakephp.org:443'));
1957
		$this->assertTrue(Validation::url('http://cakephp.org:2000'));
1958
		$this->assertTrue(Validation::url('http://cakephp.org:27000'));
1959
		$this->assertTrue(Validation::url('http://cakephp.org:65000'));
1960
 
1961
		$this->assertTrue(Validation::url('[2001:0db8::1428:57ab]'));
1962
		$this->assertTrue(Validation::url('[::1]'));
1963
		$this->assertTrue(Validation::url('[2001:0db8::1428:57ab]:80'));
1964
		$this->assertTrue(Validation::url('[::1]:80'));
1965
		$this->assertTrue(Validation::url('http://[2001:0db8::1428:57ab]'));
1966
		$this->assertTrue(Validation::url('http://[::1]'));
1967
		$this->assertTrue(Validation::url('http://[2001:0db8::1428:57ab]:80'));
1968
		$this->assertTrue(Validation::url('http://[::1]:80'));
1969
 
1970
		$this->assertFalse(Validation::url('[1::2::3]'));
1971
	}
1972
 
1973
	public function testUuid() {
1974
		$this->assertTrue(Validation::uuid('00000000-0000-0000-0000-000000000000'));
1975
		$this->assertTrue(Validation::uuid('550e8400-e29b-11d4-a716-446655440000'));
1976
		$this->assertFalse(Validation::uuid('BRAP-e29b-11d4-a716-446655440000'));
1977
		$this->assertTrue(Validation::uuid('550E8400-e29b-11D4-A716-446655440000'));
1978
		$this->assertFalse(Validation::uuid('550e8400-e29b11d4-a716-446655440000'));
1979
		$this->assertFalse(Validation::uuid('550e8400-e29b-11d4-a716-4466440000'));
1980
		$this->assertFalse(Validation::uuid('550e8400-e29b-11d4-a71-446655440000'));
1981
		$this->assertFalse(Validation::uuid('550e8400-e29b-11d-a716-446655440000'));
1982
		$this->assertFalse(Validation::uuid('550e8400-e29-11d4-a716-446655440000'));
1983
	}
1984
 
1985
/**
1986
 * testInList method
1987
 *
1988
 * @return void
1989
 */
1990
	public function testInList() {
1991
		$this->assertTrue(Validation::inList('one', array('one', 'two')));
1992
		$this->assertTrue(Validation::inList('two', array('one', 'two')));
1993
		$this->assertFalse(Validation::inList('three', array('one', 'two')));
1994
		$this->assertFalse(Validation::inList('1one', array(0, 1, 2, 3)));
1995
		$this->assertFalse(Validation::inList('one', array(0, 1, 2, 3)));
1996
		$this->assertTrue(Validation::inList('2', array(1, 2, 3)));
1997
		$this->assertFalse(Validation::inList('2x', array(1, 2, 3)));
1998
		$this->assertFalse(Validation::inList(2, array('1', '2x', '3')));
1999
		$this->assertFalse(Validation::inList('One', array('one', 'two')));
2000
 
2001
		// No hexadecimal for numbers.
2002
		$this->assertFalse(Validation::inList('0x7B', array('ABC', '123')));
2003
		$this->assertFalse(Validation::inList('0x7B', array('ABC', 123)));
2004
 
2005
		// case insensitive
2006
		$this->assertTrue(Validation::inList('one', array('One', 'Two'), true));
2007
		$this->assertTrue(Validation::inList('Two', array('one', 'two'), true));
2008
		$this->assertFalse(Validation::inList('three', array('one', 'two'), true));
2009
	}
2010
 
2011
/**
2012
 * testRange method
2013
 *
2014
 * @return void
2015
 */
2016
	public function testRange() {
2017
		$this->assertFalse(Validation::range(20, 100, 1));
2018
		$this->assertTrue(Validation::range(20, 1, 100));
2019
		$this->assertFalse(Validation::range(.5, 1, 100));
2020
		$this->assertTrue(Validation::range(.5, 0, 100));
2021
		$this->assertTrue(Validation::range(5));
2022
		$this->assertTrue(Validation::range(-5, -10, 1));
2023
		$this->assertFalse(Validation::range('word'));
2024
	}
2025
 
2026
/**
2027
 * Test range type checks
2028
 *
2029
 * @return void
2030
 */
2031
	public function testRangeTypeChecks() {
2032
		$this->assertFalse(Validation::range('\x028', 1, 5), 'hexish encoding fails');
2033
		$this->assertFalse(Validation::range('0b010', 1, 5), 'binary string data fails');
2034
		$this->assertFalse(Validation::range('0x01', 1, 5), 'hex string data fails');
2035
		$this->assertFalse(Validation::range('0x1', 1, 5), 'hex string data fails');
2036
 
2037
		$this->assertFalse(Validation::range('\x028', 1, 5), 'hexish encoding fails');
2038
		$this->assertFalse(Validation::range('0b010', 1, 5), 'binary string data fails');
2039
		$this->assertFalse(Validation::range('0x02', 1, 5), 'hex string data fails');
2040
	}
2041
 
2042
/**
2043
 * testExtension method
2044
 *
2045
 * @return void
2046
 */
2047
	public function testExtension() {
2048
		$this->assertTrue(Validation::extension('extension.jpeg'));
2049
		$this->assertTrue(Validation::extension('extension.JPEG'));
2050
		$this->assertTrue(Validation::extension('extension.gif'));
2051
		$this->assertTrue(Validation::extension('extension.GIF'));
2052
		$this->assertTrue(Validation::extension('extension.png'));
2053
		$this->assertTrue(Validation::extension('extension.jpg'));
2054
		$this->assertTrue(Validation::extension('extension.JPG'));
2055
		$this->assertFalse(Validation::extension('noextension'));
2056
		$this->assertTrue(Validation::extension('extension.pdf', array('PDF')));
2057
		$this->assertFalse(Validation::extension('extension.jpg', array('GIF')));
2058
		$this->assertTrue(Validation::extension(array('extension.JPG', 'extension.gif', 'extension.png')));
2059
		$this->assertTrue(Validation::extension(array('file' => array('name' => 'file.jpg'))));
2060
		$this->assertTrue(Validation::extension(array('file1' => array('name' => 'file.jpg'),
2061
												'file2' => array('name' => 'file.jpg'),
2062
												'file3' => array('name' => 'file.jpg'))));
2063
		$this->assertFalse(Validation::extension(array('file1' => array('name' => 'file.jpg'),
2064
												'file2' => array('name' => 'file.jpg'),
2065
												'file3' => array('name' => 'file.jpg')), array('gif')));
2066
 
2067
		$this->assertFalse(Validation::extension(array('noextension', 'extension.JPG', 'extension.gif', 'extension.png')));
2068
		$this->assertFalse(Validation::extension(array('extension.pdf', 'extension.JPG', 'extension.gif', 'extension.png')));
2069
	}
2070
 
2071
/**
2072
 * testMoney method
2073
 *
2074
 * @return void
2075
 */
2076
	public function testMoney() {
2077
		$this->assertTrue(Validation::money('100'));
2078
		$this->assertTrue(Validation::money('100.11'));
2079
		$this->assertTrue(Validation::money('100.112'));
2080
		$this->assertTrue(Validation::money('100.1'));
2081
		$this->assertTrue(Validation::money('100.111,1'));
2082
		$this->assertTrue(Validation::money('100.111,11'));
2083
		$this->assertFalse(Validation::money('100.111,111'));
2084
 
2085
		$this->assertTrue(Validation::money('$100'));
2086
		$this->assertTrue(Validation::money('$100.11'));
2087
		$this->assertTrue(Validation::money('$100.112'));
2088
		$this->assertTrue(Validation::money('$100.1'));
2089
		$this->assertFalse(Validation::money('$100.1111'));
2090
		$this->assertFalse(Validation::money('text'));
2091
 
2092
		$this->assertTrue(Validation::money('100', 'right'));
2093
		$this->assertTrue(Validation::money('100.11$', 'right'));
2094
		$this->assertTrue(Validation::money('100.112$', 'right'));
2095
		$this->assertTrue(Validation::money('100.1$', 'right'));
2096
		$this->assertFalse(Validation::money('100.1111$', 'right'));
2097
 
2098
		$this->assertTrue(Validation::money('€100'));
2099
		$this->assertTrue(Validation::money('€100.11'));
2100
		$this->assertTrue(Validation::money('€100.112'));
2101
		$this->assertTrue(Validation::money('€100.1'));
2102
		$this->assertFalse(Validation::money('€100.1111'));
2103
 
2104
		$this->assertTrue(Validation::money('100', 'right'));
2105
		$this->assertTrue(Validation::money('100.11€', 'right'));
2106
		$this->assertTrue(Validation::money('100.112€', 'right'));
2107
		$this->assertTrue(Validation::money('100.1€', 'right'));
2108
		$this->assertFalse(Validation::money('100.1111€', 'right'));
2109
	}
2110
 
2111
/**
2112
 * Test Multiple Select Validation
2113
 *
2114
 * @return void
2115
 */
2116
	public function testMultiple() {
2117
		$this->assertTrue(Validation::multiple(array(0, 1, 2, 3)));
2118
		$this->assertTrue(Validation::multiple(array(50, 32, 22, 0)));
2119
		$this->assertTrue(Validation::multiple(array('str', 'var', 'enum', 0)));
2120
		$this->assertFalse(Validation::multiple(''));
2121
		$this->assertFalse(Validation::multiple(null));
2122
		$this->assertFalse(Validation::multiple(array()));
2123
		$this->assertTrue(Validation::multiple(array(0)));
2124
		$this->assertTrue(Validation::multiple(array('0')));
2125
		$this->assertFalse(Validation::multiple(array('')));
2126
 
2127
		$this->assertTrue(Validation::multiple(array(0, 3, 4, 5), array('in' => range(0, 10))));
2128
		$this->assertFalse(Validation::multiple(array(0, 15, 20, 5), array('in' => range(0, 10))));
2129
		$this->assertFalse(Validation::multiple(array(0, 5, 10, 11), array('in' => range(0, 10))));
2130
		$this->assertFalse(Validation::multiple(array('boo', 'foo', 'bar'), array('in' => array('foo', 'bar', 'baz'))));
2131
		$this->assertFalse(Validation::multiple(array('foo', '1bar'), array('in' => range(0, 10))));
2132
 
2133
		$this->assertFalse(Validation::multiple(array(1, 5, 10, 11), array('max' => 3)));
2134
		$this->assertTrue(Validation::multiple(array(0, 5, 10, 11), array('max' => 4)));
2135
		$this->assertFalse(Validation::multiple(array(0, 5, 10, 11, 55), array('max' => 4)));
2136
		$this->assertTrue(Validation::multiple(array('foo', 'bar', 'baz'), array('max' => 3)));
2137
		$this->assertFalse(Validation::multiple(array('foo', 'bar', 'baz', 'squirrel'), array('max' => 3)));
2138
 
2139
		$this->assertTrue(Validation::multiple(array(0, 5, 10, 11), array('min' => 3)));
2140
		$this->assertTrue(Validation::multiple(array(0, 5, 10, 11, 55), array('min' => 3)));
2141
		$this->assertFalse(Validation::multiple(array('foo', 'bar', 'baz'), array('min' => 5)));
2142
		$this->assertFalse(Validation::multiple(array('foo', 'bar', 'baz', 'squirrel'), array('min' => 10)));
2143
 
2144
		$this->assertTrue(Validation::multiple(array(0, 5, 9), array('in' => range(0, 10), 'max' => 5)));
2145
		$this->assertTrue(Validation::multiple(array('0', '5', '9'), array('in' => range(0, 10), 'max' => 5)));
2146
 
2147
		$this->assertFalse(Validation::multiple(array(0, 5, 9, 8, 6, 2, 1), array('in' => range(0, 10), 'max' => 5)));
2148
		$this->assertFalse(Validation::multiple(array(0, 5, 9, 8, 11), array('in' => range(0, 10), 'max' => 5)));
2149
 
2150
		$this->assertFalse(Validation::multiple(array(-1, 5, 9), array('in' => range(0, 10), 'max' => 5, 'min' => 3)));
2151
		$this->assertFalse(Validation::multiple(array(-1, 5, 9, 8, 6, 2, 1), array('in' => range(0, 10), 'max' => 5, 'min' => 2)));
2152
		$this->assertFalse(Validation::multiple(array(0, 5, 9, 8, 11), array('in' => range(0, 10), 'max' => 5, 'min' => 2)));
2153
 
2154
		$this->assertFalse(Validation::multiple(array('2x', '3x'), array('in' => array(1, 2, 3, 4, 5))));
2155
		$this->assertFalse(Validation::multiple(array(2, 3), array('in' => array('1x', '2x', '3x', '4x'))));
2156
		$this->assertFalse(Validation::multiple(array('one'), array('in' => array('One', 'Two'))));
2157
		$this->assertFalse(Validation::multiple(array('Two'), array('in' => array('one', 'two'))));
2158
 
2159
		// case insensitive
2160
		$this->assertTrue(Validation::multiple(array('one'), array('in' => array('One', 'Two')), true));
2161
		$this->assertTrue(Validation::multiple(array('Two'), array('in' => array('one', 'two')), true));
2162
		$this->assertFalse(Validation::multiple(array('three'), array('in' => array('one', 'two')), true));
2163
	}
2164
 
2165
/**
2166
 * testNumeric method
2167
 *
2168
 * @return void
2169
 */
2170
	public function testNumeric() {
2171
		$this->assertFalse(Validation::numeric('teststring'));
2172
		$this->assertFalse(Validation::numeric('1.1test'));
2173
		$this->assertFalse(Validation::numeric('2test'));
2174
 
2175
		$this->assertTrue(Validation::numeric('2'));
2176
		$this->assertTrue(Validation::numeric(2));
2177
		$this->assertTrue(Validation::numeric(2.2));
2178
		$this->assertTrue(Validation::numeric('2.2'));
2179
	}
2180
 
2181
/**
2182
 * testNaturalNumber method
2183
 *
2184
 * @return void
2185
 */
2186
	public function testNaturalNumber() {
2187
		$this->assertFalse(Validation::naturalNumber('teststring'));
2188
		$this->assertFalse(Validation::naturalNumber('5.4'));
2189
		$this->assertFalse(Validation::naturalNumber(99.004));
2190
		$this->assertFalse(Validation::naturalNumber('0,05'));
2191
		$this->assertFalse(Validation::naturalNumber('-2'));
2192
		$this->assertFalse(Validation::naturalNumber(-2));
2193
		$this->assertFalse(Validation::naturalNumber('0'));
2194
		$this->assertFalse(Validation::naturalNumber('050'));
2195
 
2196
		$this->assertTrue(Validation::naturalNumber('2'));
2197
		$this->assertTrue(Validation::naturalNumber(49));
2198
		$this->assertTrue(Validation::naturalNumber('0', true));
2199
		$this->assertTrue(Validation::naturalNumber(0, true));
2200
	}
2201
 
2202
/**
2203
 * testPhone method
2204
 *
2205
 * @return void
2206
 */
2207
	public function testPhone() {
2208
		$this->assertFalse(Validation::phone('teststring'));
2209
		$this->assertFalse(Validation::phone('1-(33)-(333)-(4444)'));
2210
		$this->assertFalse(Validation::phone('1-(33)-3333-4444'));
2211
		$this->assertFalse(Validation::phone('1-(33)-33-4444'));
2212
		$this->assertFalse(Validation::phone('1-(33)-3-44444'));
2213
		$this->assertFalse(Validation::phone('1-(33)-3-444'));
2214
		$this->assertFalse(Validation::phone('1-(33)-3-44'));
2215
 
2216
		$this->assertFalse(Validation::phone('(055) 999-9999'));
2217
		$this->assertFalse(Validation::phone('(155) 999-9999'));
2218
		$this->assertFalse(Validation::phone('(595) 999-9999'));
2219
		$this->assertFalse(Validation::phone('(213) 099-9999'));
2220
		$this->assertFalse(Validation::phone('(213) 199-9999'));
2221
 
2222
		// invalid area-codes
2223
		$this->assertFalse(Validation::phone('1-(511)-999-9999'));
2224
		$this->assertFalse(Validation::phone('1-(555)-999-9999'));
2225
 
2226
		// invalid exhange
2227
		$this->assertFalse(Validation::phone('1-(222)-511-9999'));
2228
 
2229
		// invalid phone number
2230
		$this->assertFalse(Validation::phone('1-(222)-555-0199'));
2231
		$this->assertFalse(Validation::phone('1-(222)-555-0122'));
2232
 
2233
		// valid phone numbers
2234
		$this->assertTrue(Validation::phone('416-428-1234'));
2235
		$this->assertTrue(Validation::phone('1-(369)-333-4444'));
2236
		$this->assertTrue(Validation::phone('1-(973)-333-4444'));
2237
		$this->assertTrue(Validation::phone('1-(313)-555-9999'));
2238
		$this->assertTrue(Validation::phone('1-(222)-555-0299'));
2239
		$this->assertTrue(Validation::phone('508-428-1234'));
2240
		$this->assertTrue(Validation::phone('1-(508)-232-9651'));
2241
 
2242
		$this->assertTrue(Validation::phone('1 (222) 333 4444'));
2243
		$this->assertTrue(Validation::phone('+1 (222) 333 4444'));
2244
		$this->assertTrue(Validation::phone('(222) 333 4444'));
2245
 
2246
		$this->assertTrue(Validation::phone('1-(333)-333-4444'));
2247
		$this->assertTrue(Validation::phone('1.(333)-333-4444'));
2248
		$this->assertTrue(Validation::phone('1.(333).333-4444'));
2249
		$this->assertTrue(Validation::phone('1.(333).333.4444'));
2250
		$this->assertTrue(Validation::phone('1-333-333-4444'));
2251
	}
2252
 
2253
/**
2254
 * testPostal method
2255
 *
2256
 * @return void
2257
 */
2258
	public function testPostal() {
2259
		$this->assertFalse(Validation::postal('111', null, 'de'));
2260
		$this->assertFalse(Validation::postal('1111', null, 'de'));
2261
		$this->assertTrue(Validation::postal('13089', null, 'de'));
2262
 
2263
		$this->assertFalse(Validation::postal('111', null, 'be'));
2264
		$this->assertFalse(Validation::postal('0123', null, 'be'));
2265
		$this->assertTrue(Validation::postal('1204', null, 'be'));
2266
 
2267
		$this->assertFalse(Validation::postal('111', null, 'it'));
2268
		$this->assertFalse(Validation::postal('1111', null, 'it'));
2269
		$this->assertTrue(Validation::postal('13089', null, 'it'));
2270
 
2271
		$this->assertFalse(Validation::postal('111', null, 'uk'));
2272
		$this->assertFalse(Validation::postal('1111', null, 'uk'));
2273
		$this->assertFalse(Validation::postal('AZA 0AB', null, 'uk'));
2274
		$this->assertFalse(Validation::postal('X0A 0ABC', null, 'uk'));
2275
		$this->assertTrue(Validation::postal('X0A 0AB', null, 'uk'));
2276
		$this->assertTrue(Validation::postal('AZ0A 0AA', null, 'uk'));
2277
		$this->assertTrue(Validation::postal('A89 2DD', null, 'uk'));
2278
 
2279
		$this->assertFalse(Validation::postal('111', null, 'ca'));
2280
		$this->assertFalse(Validation::postal('1111', null, 'ca'));
2281
		$this->assertFalse(Validation::postal('D2A 0A0', null, 'ca'));
2282
		$this->assertFalse(Validation::postal('BAA 0ABC', null, 'ca'));
2283
		$this->assertFalse(Validation::postal('B2A AABC', null, 'ca'));
2284
		$this->assertFalse(Validation::postal('B2A 2AB', null, 'ca'));
2285
		$this->assertFalse(Validation::postal('K1A 1D1', null, 'ca'));
2286
		$this->assertFalse(Validation::postal('K1O 1Q1', null, 'ca'));
2287
		$this->assertFalse(Validation::postal('A1A 1U1', null, 'ca'));
2288
		$this->assertFalse(Validation::postal('A1F 1B1', null, 'ca'));
2289
		$this->assertTrue(Validation::postal('X0A 0A2', null, 'ca'));
2290
		$this->assertTrue(Validation::postal('G4V 4C3', null, 'ca'));
2291
 
2292
		$this->assertFalse(Validation::postal('111', null, 'us'));
2293
		$this->assertFalse(Validation::postal('1111', null, 'us'));
2294
		$this->assertFalse(Validation::postal('130896', null, 'us'));
2295
		$this->assertFalse(Validation::postal('13089-33333', null, 'us'));
2296
		$this->assertFalse(Validation::postal('13089-333', null, 'us'));
2297
		$this->assertFalse(Validation::postal('13A89-4333', null, 'us'));
2298
		$this->assertTrue(Validation::postal('13089-3333', null, 'us'));
2299
 
2300
		$this->assertFalse(Validation::postal('111'));
2301
		$this->assertFalse(Validation::postal('1111'));
2302
		$this->assertFalse(Validation::postal('130896'));
2303
		$this->assertFalse(Validation::postal('13089-33333'));
2304
		$this->assertFalse(Validation::postal('13089-333'));
2305
		$this->assertFalse(Validation::postal('13A89-4333'));
2306
		$this->assertTrue(Validation::postal('13089-3333'));
2307
	}
2308
 
2309
/**
2310
 * test that phone and postal pass to other classes.
2311
 *
2312
 * @return void
2313
 */
2314
	public function testPhonePostalSsnPass() {
2315
		$this->assertTrue(Validation::postal('text', null, 'testNl'));
2316
		$this->assertTrue(Validation::phone('text', null, 'testDe'));
2317
		$this->assertTrue(Validation::ssn('text', null, 'testNl'));
2318
	}
2319
 
2320
/**
2321
 * test pass through failure on postal
2322
 *
2323
 * @expectedException PHPUnit_Framework_Error
2324
 * @return void
2325
 */
2326
	public function testPassThroughMethodFailure() {
2327
		Validation::phone('text', null, 'testNl');
2328
	}
2329
 
2330
/**
2331
 * test the pass through calling of an alternate locale with postal()
2332
 *
2333
 * @expectedException PHPUnit_Framework_Error
2334
 * @return void
2335
 */
2336
	public function testPassThroughClassFailure() {
2337
		Validation::postal('text', null, 'AUTOFAIL');
2338
	}
2339
 
2340
/**
2341
 * test pass through method
2342
 *
2343
 * @return void
2344
 */
2345
	public function testPassThroughMethod() {
2346
		$this->assertTrue(Validation::postal('text', null, 'testNl'));
2347
	}
2348
 
2349
/**
2350
 * testSsn method
2351
 *
2352
 * @return void
2353
 */
2354
	public function testSsn() {
2355
		$this->assertFalse(Validation::ssn('111-333', null, 'dk'));
2356
		$this->assertFalse(Validation::ssn('111111-333', null, 'dk'));
2357
		$this->assertTrue(Validation::ssn('111111-3334', null, 'dk'));
2358
 
2359
		$this->assertFalse(Validation::ssn('1118333', null, 'nl'));
2360
		$this->assertFalse(Validation::ssn('1234567890', null, 'nl'));
2361
		$this->assertFalse(Validation::ssn('12345A789', null, 'nl'));
2362
		$this->assertTrue(Validation::ssn('123456789', null, 'nl'));
2363
 
2364
		$this->assertFalse(Validation::ssn('11-33-4333', null, 'us'));
2365
		$this->assertFalse(Validation::ssn('113-3-4333', null, 'us'));
2366
		$this->assertFalse(Validation::ssn('111-33-333', null, 'us'));
2367
		$this->assertTrue(Validation::ssn('111-33-4333', null, 'us'));
2368
	}
2369
 
2370
/**
2371
 * testUserDefined method
2372
 *
2373
 * @return void
2374
 */
2375
	public function testUserDefined() {
2376
		$validator = new CustomValidator;
2377
		$this->assertFalse(Validation::userDefined('33', $validator, 'customValidate'));
2378
		$this->assertFalse(Validation::userDefined('3333', $validator, 'customValidate'));
2379
		$this->assertTrue(Validation::userDefined('333', $validator, 'customValidate'));
2380
	}
2381
 
2382
/**
2383
 * testDatetime method
2384
 *
2385
 * @return void
2386
 */
2387
	public function testDatetime() {
2388
		$this->assertTrue(Validation::datetime('27-12-2006 01:00', 'dmy'));
2389
		$this->assertTrue(Validation::datetime('27-12-2006 01:00', array('dmy')));
2390
		$this->assertFalse(Validation::datetime('27-12-2006 1:00', 'dmy'));
2391
 
2392
		$this->assertTrue(Validation::datetime('27.12.2006 1:00pm', 'dmy'));
2393
		$this->assertFalse(Validation::datetime('27.12.2006 13:00pm', 'dmy'));
2394
 
2395
		$this->assertTrue(Validation::datetime('27/12/2006 1:00pm', 'dmy'));
2396
		$this->assertFalse(Validation::datetime('27/12/2006 9:00', 'dmy'));
2397
 
2398
		$this->assertTrue(Validation::datetime('27 12 2006 1:00pm', 'dmy'));
2399
		$this->assertFalse(Validation::datetime('27 12 2006 24:00', 'dmy'));
2400
 
2401
		$this->assertFalse(Validation::datetime('00-00-0000 1:00pm', 'dmy'));
2402
		$this->assertFalse(Validation::datetime('00.00.0000 1:00pm', 'dmy'));
2403
		$this->assertFalse(Validation::datetime('00/00/0000 1:00pm', 'dmy'));
2404
		$this->assertFalse(Validation::datetime('00 00 0000 1:00pm', 'dmy'));
2405
		$this->assertFalse(Validation::datetime('31-11-2006 1:00pm', 'dmy'));
2406
		$this->assertFalse(Validation::datetime('31.11.2006 1:00pm', 'dmy'));
2407
		$this->assertFalse(Validation::datetime('31/11/2006 1:00pm', 'dmy'));
2408
		$this->assertFalse(Validation::datetime('31 11 2006 1:00pm', 'dmy'));
2409
	}
2410
 
2411
/**
2412
 * testMimeType method
2413
 *
2414
 * @return void
2415
 */
2416
	public function testMimeType() {
2417
		$image = CORE_PATH . 'Cake' . DS . 'Test' . DS . 'test_app' . DS . 'webroot' . DS . 'img' . DS . 'cake.power.gif';
2418
		$File = new File($image, false);
2419
 
2420
		$this->skipIf(!$File->mime(), 'Cannot determine mimeType');
2421
 
2422
		$this->assertTrue(Validation::mimeType($image, array('image/gif')));
2423
		$this->assertTrue(Validation::mimeType(array('tmp_name' => $image), array('image/gif')));
2424
		$this->assertTrue(Validation::mimeType(array('tmp_name' => $image), '#image/.+#'));
2425
		$this->assertTrue(Validation::mimeType($image, array('image/GIF')));
2426
 
2427
		$this->assertFalse(Validation::mimeType($image, array('image/png')));
2428
		$this->assertFalse(Validation::mimeType(array('tmp_name' => $image), array('image/png')));
2429
	}
2430
 
2431
/**
2432
 * testMimeTypeFalse method
2433
 *
2434
 * @expectedException CakeException
2435
 * @return void
2436
 */
2437
	public function testMimeTypeFalse() {
2438
		$image = CORE_PATH . 'Cake' . DS . 'Test' . DS . 'test_app' . DS . 'webroot' . DS . 'img' . DS . 'cake.power.gif';
2439
		$File = new File($image, false);
2440
		$this->skipIf($File->mime(), 'mimeType can be determined, no Exception will be thrown');
2441
		Validation::mimeType($image, array('image/gif'));
2442
	}
2443
 
2444
/**
2445
 * testUploadError method
2446
 *
2447
 * @return void
2448
 */
2449
	public function testUploadError() {
2450
		$this->assertTrue(Validation::uploadError(0));
2451
		$this->assertTrue(Validation::uploadError(array('error' => 0)));
2452
		$this->assertTrue(Validation::uploadError(array('error' => '0')));
2453
 
2454
		$this->assertFalse(Validation::uploadError(2));
2455
		$this->assertFalse(Validation::uploadError(array('error' => 2)));
2456
		$this->assertFalse(Validation::uploadError(array('error' => '2')));
2457
	}
2458
 
2459
/**
2460
 * testFileSize method
2461
 *
2462
 * @return void
2463
 */
2464
	public function testFileSize() {
2465
		$image = CORE_PATH . 'Cake' . DS . 'Test' . DS . 'test_app' . DS . 'webroot' . DS . 'img' . DS . 'cake.power.gif';
2466
		$this->assertTrue(Validation::fileSize($image, '<', 1024));
2467
		$this->assertTrue(Validation::fileSize(array('tmp_name' => $image), 'isless', 1024));
2468
		$this->assertTrue(Validation::fileSize($image, '<', '1KB'));
2469
		$this->assertTrue(Validation::fileSize($image, '>=', 200));
2470
		$this->assertTrue(Validation::fileSize($image, '==', 201));
2471
		$this->assertTrue(Validation::fileSize($image, '==', '201B'));
2472
 
2473
		$this->assertFalse(Validation::fileSize($image, 'isgreater', 1024));
2474
		$this->assertFalse(Validation::fileSize(array('tmp_name' => $image), '>', '1KB'));
2475
	}
2476
 
2477
}