Subversion Repositories SmartDukaan

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
12345 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
 * testNotEmpty method
128
 *
129
 * @return void
130
 */
131
	public function testNotEmpty() {
132
		$this->assertTrue(Validation::notEmpty('abcdefg'));
133
		$this->assertTrue(Validation::notEmpty('fasdf '));
134
		$this->assertTrue(Validation::notEmpty('fooo' . chr(243) . 'blabla'));
135
		$this->assertTrue(Validation::notEmpty('abçďĕʑʘπй'));
136
		$this->assertTrue(Validation::notEmpty('José'));
137
		$this->assertTrue(Validation::notEmpty('é'));
138
		$this->assertTrue(Validation::notEmpty('π'));
139
		$this->assertFalse(Validation::notEmpty("\t "));
140
		$this->assertFalse(Validation::notEmpty(""));
141
	}
142
 
143
/**
144
 * testNotEmptyISO88591Encoding method
145
 *
146
 * @return void
147
 */
148
	public function testNotEmptyISO88591AppEncoding() {
149
		Configure::write('App.encoding', 'ISO-8859-1');
150
		$this->assertTrue(Validation::notEmpty('abcdefg'));
151
		$this->assertTrue(Validation::notEmpty('fasdf '));
152
		$this->assertTrue(Validation::notEmpty('fooo' . chr(243) . 'blabla'));
153
		$this->assertTrue(Validation::notEmpty('abçďĕʑʘπй'));
154
		$this->assertTrue(Validation::notEmpty('José'));
155
		$this->assertTrue(Validation::notEmpty(utf8_decode('José')));
156
		$this->assertFalse(Validation::notEmpty("\t "));
157
		$this->assertFalse(Validation::notEmpty(""));
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
 * testBetween method
207
 *
208
 * @return void
209
 */
210
	public function testBetween() {
211
		$this->assertTrue(Validation::between('abcdefg', 1, 7));
212
		$this->assertTrue(Validation::between('', 0, 7));
213
		$this->assertTrue(Validation::between('אกあアꀀ豈', 1, 7));
214
 
215
		$this->assertFalse(Validation::between('abcdefg', 1, 6));
216
		$this->assertFalse(Validation::between('ÆΔΩЖÇ', 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
 
935
/**
936
 * testComparisonAsArray method
937
 *
938
 * @return void
939
 */
940
	public function testComparisonAsArray() {
941
		$this->assertTrue(Validation::comparison(array('check1' => 7, 'operator' => 'is greater', 'check2' => 6)));
942
		$this->assertTrue(Validation::comparison(array('check1' => 7, 'operator' => '>', 'check2' => 6)));
943
		$this->assertTrue(Validation::comparison(array('check1' => 6, 'operator' => 'is less', 'check2' => 7)));
944
		$this->assertTrue(Validation::comparison(array('check1' => 6, 'operator' => '<', 'check2' => 7)));
945
		$this->assertTrue(Validation::comparison(array('check1' => 7, 'operator' => 'greater or equal', 'check2' => 7)));
946
		$this->assertTrue(Validation::comparison(array('check1' => 7, 'operator' => '>=', 'check2' => 7)));
947
		$this->assertTrue(Validation::comparison(array('check1' => 7, 'operator' => 'greater or equal', 'check2' => 6)));
948
		$this->assertTrue(Validation::comparison(array('check1' => 7, 'operator' => '>=', 'check2' => 6)));
949
		$this->assertTrue(Validation::comparison(array('check1' => 6, 'operator' => 'less or equal', 'check2' => 7)));
950
		$this->assertTrue(Validation::comparison(array('check1' => 6, 'operator' => '<=', 'check2' => 7)));
951
		$this->assertTrue(Validation::comparison(array('check1' => 7, 'operator' => 'equal to', 'check2' => 7)));
952
		$this->assertTrue(Validation::comparison(array('check1' => 7, 'operator' => '==', 'check2' => 7)));
953
		$this->assertTrue(Validation::comparison(array('check1' => 7, 'operator' => 'not equal', 'check2' => 6)));
954
		$this->assertTrue(Validation::comparison(array('check1' => 7, 'operator' => '!=', 'check2' => 6)));
955
		$this->assertFalse(Validation::comparison(array('check1' => 6, 'operator' => 'is greater', 'check2' => 7)));
956
		$this->assertFalse(Validation::comparison(array('check1' => 6, 'operator' => '>', 'check2' => 7)));
957
		$this->assertFalse(Validation::comparison(array('check1' => 7, 'operator' => 'is less', 'check2' => 6)));
958
		$this->assertFalse(Validation::comparison(array('check1' => 7, 'operator' => '<', 'check2' => 6)));
959
		$this->assertFalse(Validation::comparison(array('check1' => 6, 'operator' => 'greater or equal', 'check2' => 7)));
960
		$this->assertFalse(Validation::comparison(array('check1' => 6, 'operator' => '>=', 'check2' => 7)));
961
		$this->assertFalse(Validation::comparison(array('check1' => 6, 'operator' => 'greater or equal', 'check2' => 7)));
962
		$this->assertFalse(Validation::comparison(array('check1' => 6, 'operator' => '>=', 'check2' => 7)));
963
		$this->assertFalse(Validation::comparison(array('check1' => 7, 'operator' => 'less or equal', 'check2' => 6)));
964
		$this->assertFalse(Validation::comparison(array('check1' => 7, 'operator' => '<=', 'check2' => 6)));
965
		$this->assertFalse(Validation::comparison(array('check1' => 7, 'operator' => 'equal to', 'check2' => 6)));
966
		$this->assertFalse(Validation::comparison(array('check1' => 7, 'operator' => '==', 'check2' => 6)));
967
		$this->assertFalse(Validation::comparison(array('check1' => 7, 'operator' => 'not equal', 'check2' => 7)));
968
		$this->assertFalse(Validation::comparison(array('check1' => 7, 'operator' => '!=', 'check2' => 7)));
969
	}
970
 
971
/**
972
 * testCustom method
973
 *
974
 * @return void
975
 */
976
	public function testCustom() {
977
		$this->assertTrue(Validation::custom('12345', '/(?<!\\S)\\d++(?!\\S)/'));
978
		$this->assertFalse(Validation::custom('Text', '/(?<!\\S)\\d++(?!\\S)/'));
979
		$this->assertFalse(Validation::custom('123.45', '/(?<!\\S)\\d++(?!\\S)/'));
980
		$this->assertFalse(Validation::custom('missing regex'));
981
	}
982
 
983
/**
984
 * testCustomAsArray method
985
 *
986
 * @return void
987
 */
988
	public function testCustomAsArray() {
989
		$this->assertTrue(Validation::custom(array('check' => '12345', 'regex' => '/(?<!\\S)\\d++(?!\\S)/')));
990
		$this->assertFalse(Validation::custom(array('check' => 'Text', 'regex' => '/(?<!\\S)\\d++(?!\\S)/')));
991
		$this->assertFalse(Validation::custom(array('check' => '123.45', 'regex' => '/(?<!\\S)\\d++(?!\\S)/')));
992
	}
993
 
994
/**
995
 * testDateDdmmyyyy method
996
 *
997
 * @return void
998
 */
999
	public function testDateDdmmyyyy() {
1000
		$this->assertTrue(Validation::date('27-12-2006', array('dmy')));
1001
		$this->assertTrue(Validation::date('27.12.2006', array('dmy')));
1002
		$this->assertTrue(Validation::date('27/12/2006', array('dmy')));
1003
		$this->assertTrue(Validation::date('27 12 2006', array('dmy')));
1004
		$this->assertFalse(Validation::date('00-00-0000', array('dmy')));
1005
		$this->assertFalse(Validation::date('00.00.0000', array('dmy')));
1006
		$this->assertFalse(Validation::date('00/00/0000', array('dmy')));
1007
		$this->assertFalse(Validation::date('00 00 0000', array('dmy')));
1008
		$this->assertFalse(Validation::date('31-11-2006', array('dmy')));
1009
		$this->assertFalse(Validation::date('31.11.2006', array('dmy')));
1010
		$this->assertFalse(Validation::date('31/11/2006', array('dmy')));
1011
		$this->assertFalse(Validation::date('31 11 2006', array('dmy')));
1012
	}
1013
 
1014
/**
1015
 * testDateDdmmyyyyLeapYear method
1016
 *
1017
 * @return void
1018
 */
1019
	public function testDateDdmmyyyyLeapYear() {
1020
		$this->assertTrue(Validation::date('29-02-2004', array('dmy')));
1021
		$this->assertTrue(Validation::date('29.02.2004', array('dmy')));
1022
		$this->assertTrue(Validation::date('29/02/2004', array('dmy')));
1023
		$this->assertTrue(Validation::date('29 02 2004', array('dmy')));
1024
		$this->assertFalse(Validation::date('29-02-2006', array('dmy')));
1025
		$this->assertFalse(Validation::date('29.02.2006', array('dmy')));
1026
		$this->assertFalse(Validation::date('29/02/2006', array('dmy')));
1027
		$this->assertFalse(Validation::date('29 02 2006', array('dmy')));
1028
	}
1029
 
1030
/**
1031
 * testDateDdmmyy method
1032
 *
1033
 * @return void
1034
 */
1035
	public function testDateDdmmyy() {
1036
		$this->assertTrue(Validation::date('27-12-06', array('dmy')));
1037
		$this->assertTrue(Validation::date('27.12.06', array('dmy')));
1038
		$this->assertTrue(Validation::date('27/12/06', array('dmy')));
1039
		$this->assertTrue(Validation::date('27 12 06', array('dmy')));
1040
		$this->assertFalse(Validation::date('00-00-00', array('dmy')));
1041
		$this->assertFalse(Validation::date('00.00.00', array('dmy')));
1042
		$this->assertFalse(Validation::date('00/00/00', array('dmy')));
1043
		$this->assertFalse(Validation::date('00 00 00', array('dmy')));
1044
		$this->assertFalse(Validation::date('31-11-06', array('dmy')));
1045
		$this->assertFalse(Validation::date('31.11.06', array('dmy')));
1046
		$this->assertFalse(Validation::date('31/11/06', array('dmy')));
1047
		$this->assertFalse(Validation::date('31 11 06', array('dmy')));
1048
	}
1049
 
1050
/**
1051
 * testDateDdmmyyLeapYear method
1052
 *
1053
 * @return void
1054
 */
1055
	public function testDateDdmmyyLeapYear() {
1056
		$this->assertTrue(Validation::date('29-02-04', array('dmy')));
1057
		$this->assertTrue(Validation::date('29.02.04', array('dmy')));
1058
		$this->assertTrue(Validation::date('29/02/04', array('dmy')));
1059
		$this->assertTrue(Validation::date('29 02 04', array('dmy')));
1060
		$this->assertFalse(Validation::date('29-02-06', array('dmy')));
1061
		$this->assertFalse(Validation::date('29.02.06', array('dmy')));
1062
		$this->assertFalse(Validation::date('29/02/06', array('dmy')));
1063
		$this->assertFalse(Validation::date('29 02 06', array('dmy')));
1064
	}
1065
 
1066
/**
1067
 * testDateDmyy method
1068
 *
1069
 * @return void
1070
 */
1071
	public function testDateDmyy() {
1072
		$this->assertTrue(Validation::date('7-2-06', array('dmy')));
1073
		$this->assertTrue(Validation::date('7.2.06', array('dmy')));
1074
		$this->assertTrue(Validation::date('7/2/06', array('dmy')));
1075
		$this->assertTrue(Validation::date('7 2 06', array('dmy')));
1076
		$this->assertFalse(Validation::date('0-0-00', array('dmy')));
1077
		$this->assertFalse(Validation::date('0.0.00', array('dmy')));
1078
		$this->assertFalse(Validation::date('0/0/00', array('dmy')));
1079
		$this->assertFalse(Validation::date('0 0 00', array('dmy')));
1080
		$this->assertFalse(Validation::date('32-2-06', array('dmy')));
1081
		$this->assertFalse(Validation::date('32.2.06', array('dmy')));
1082
		$this->assertFalse(Validation::date('32/2/06', array('dmy')));
1083
		$this->assertFalse(Validation::date('32 2 06', array('dmy')));
1084
	}
1085
 
1086
/**
1087
 * testDateDmyyLeapYear method
1088
 *
1089
 * @return void
1090
 */
1091
	public function testDateDmyyLeapYear() {
1092
		$this->assertTrue(Validation::date('29-2-04', array('dmy')));
1093
		$this->assertTrue(Validation::date('29.2.04', array('dmy')));
1094
		$this->assertTrue(Validation::date('29/2/04', array('dmy')));
1095
		$this->assertTrue(Validation::date('29 2 04', array('dmy')));
1096
		$this->assertFalse(Validation::date('29-2-06', array('dmy')));
1097
		$this->assertFalse(Validation::date('29.2.06', array('dmy')));
1098
		$this->assertFalse(Validation::date('29/2/06', array('dmy')));
1099
		$this->assertFalse(Validation::date('29 2 06', array('dmy')));
1100
	}
1101
 
1102
/**
1103
 * testDateDmyyyy method
1104
 *
1105
 * @return void
1106
 */
1107
	public function testDateDmyyyy() {
1108
		$this->assertTrue(Validation::date('7-2-2006', array('dmy')));
1109
		$this->assertTrue(Validation::date('7.2.2006', array('dmy')));
1110
		$this->assertTrue(Validation::date('7/2/2006', array('dmy')));
1111
		$this->assertTrue(Validation::date('7 2 2006', array('dmy')));
1112
		$this->assertFalse(Validation::date('0-0-0000', array('dmy')));
1113
		$this->assertFalse(Validation::date('0.0.0000', array('dmy')));
1114
		$this->assertFalse(Validation::date('0/0/0000', array('dmy')));
1115
		$this->assertFalse(Validation::date('0 0 0000', array('dmy')));
1116
		$this->assertFalse(Validation::date('32-2-2006', array('dmy')));
1117
		$this->assertFalse(Validation::date('32.2.2006', array('dmy')));
1118
		$this->assertFalse(Validation::date('32/2/2006', array('dmy')));
1119
		$this->assertFalse(Validation::date('32 2 2006', array('dmy')));
1120
	}
1121
 
1122
/**
1123
 * testDateDmyyyyLeapYear method
1124
 *
1125
 * @return void
1126
 */
1127
	public function testDateDmyyyyLeapYear() {
1128
		$this->assertTrue(Validation::date('29-2-2004', array('dmy')));
1129
		$this->assertTrue(Validation::date('29.2.2004', array('dmy')));
1130
		$this->assertTrue(Validation::date('29/2/2004', array('dmy')));
1131
		$this->assertTrue(Validation::date('29 2 2004', array('dmy')));
1132
		$this->assertFalse(Validation::date('29-2-2006', array('dmy')));
1133
		$this->assertFalse(Validation::date('29.2.2006', array('dmy')));
1134
		$this->assertFalse(Validation::date('29/2/2006', array('dmy')));
1135
		$this->assertFalse(Validation::date('29 2 2006', array('dmy')));
1136
	}
1137
 
1138
/**
1139
 * testDateMmddyyyy method
1140
 *
1141
 * @return void
1142
 */
1143
	public function testDateMmddyyyy() {
1144
		$this->assertTrue(Validation::date('12-27-2006', array('mdy')));
1145
		$this->assertTrue(Validation::date('12.27.2006', array('mdy')));
1146
		$this->assertTrue(Validation::date('12/27/2006', array('mdy')));
1147
		$this->assertTrue(Validation::date('12 27 2006', array('mdy')));
1148
		$this->assertFalse(Validation::date('00-00-0000', array('mdy')));
1149
		$this->assertFalse(Validation::date('00.00.0000', array('mdy')));
1150
		$this->assertFalse(Validation::date('00/00/0000', array('mdy')));
1151
		$this->assertFalse(Validation::date('00 00 0000', array('mdy')));
1152
		$this->assertFalse(Validation::date('11-31-2006', array('mdy')));
1153
		$this->assertFalse(Validation::date('11.31.2006', array('mdy')));
1154
		$this->assertFalse(Validation::date('11/31/2006', array('mdy')));
1155
		$this->assertFalse(Validation::date('11 31 2006', array('mdy')));
1156
	}
1157
 
1158
/**
1159
 * testDateMmddyyyyLeapYear method
1160
 *
1161
 * @return void
1162
 */
1163
	public function testDateMmddyyyyLeapYear() {
1164
		$this->assertTrue(Validation::date('02-29-2004', array('mdy')));
1165
		$this->assertTrue(Validation::date('02.29.2004', array('mdy')));
1166
		$this->assertTrue(Validation::date('02/29/2004', array('mdy')));
1167
		$this->assertTrue(Validation::date('02 29 2004', array('mdy')));
1168
		$this->assertFalse(Validation::date('02-29-2006', array('mdy')));
1169
		$this->assertFalse(Validation::date('02.29.2006', array('mdy')));
1170
		$this->assertFalse(Validation::date('02/29/2006', array('mdy')));
1171
		$this->assertFalse(Validation::date('02 29 2006', array('mdy')));
1172
	}
1173
 
1174
/**
1175
 * testDateMmddyy method
1176
 *
1177
 * @return void
1178
 */
1179
	public function testDateMmddyy() {
1180
		$this->assertTrue(Validation::date('12-27-06', array('mdy')));
1181
		$this->assertTrue(Validation::date('12.27.06', array('mdy')));
1182
		$this->assertTrue(Validation::date('12/27/06', array('mdy')));
1183
		$this->assertTrue(Validation::date('12 27 06', array('mdy')));
1184
		$this->assertFalse(Validation::date('00-00-00', array('mdy')));
1185
		$this->assertFalse(Validation::date('00.00.00', array('mdy')));
1186
		$this->assertFalse(Validation::date('00/00/00', array('mdy')));
1187
		$this->assertFalse(Validation::date('00 00 00', array('mdy')));
1188
		$this->assertFalse(Validation::date('11-31-06', array('mdy')));
1189
		$this->assertFalse(Validation::date('11.31.06', array('mdy')));
1190
		$this->assertFalse(Validation::date('11/31/06', array('mdy')));
1191
		$this->assertFalse(Validation::date('11 31 06', array('mdy')));
1192
	}
1193
 
1194
/**
1195
 * testDateMmddyyLeapYear method
1196
 *
1197
 * @return void
1198
 */
1199
	public function testDateMmddyyLeapYear() {
1200
		$this->assertTrue(Validation::date('02-29-04', array('mdy')));
1201
		$this->assertTrue(Validation::date('02.29.04', array('mdy')));
1202
		$this->assertTrue(Validation::date('02/29/04', array('mdy')));
1203
		$this->assertTrue(Validation::date('02 29 04', array('mdy')));
1204
		$this->assertFalse(Validation::date('02-29-06', array('mdy')));
1205
		$this->assertFalse(Validation::date('02.29.06', array('mdy')));
1206
		$this->assertFalse(Validation::date('02/29/06', array('mdy')));
1207
		$this->assertFalse(Validation::date('02 29 06', array('mdy')));
1208
	}
1209
 
1210
/**
1211
 * testDateMdyy method
1212
 *
1213
 * @return void
1214
 */
1215
	public function testDateMdyy() {
1216
		$this->assertTrue(Validation::date('2-7-06', array('mdy')));
1217
		$this->assertTrue(Validation::date('2.7.06', array('mdy')));
1218
		$this->assertTrue(Validation::date('2/7/06', array('mdy')));
1219
		$this->assertTrue(Validation::date('2 7 06', array('mdy')));
1220
		$this->assertFalse(Validation::date('0-0-00', array('mdy')));
1221
		$this->assertFalse(Validation::date('0.0.00', array('mdy')));
1222
		$this->assertFalse(Validation::date('0/0/00', array('mdy')));
1223
		$this->assertFalse(Validation::date('0 0 00', array('mdy')));
1224
		$this->assertFalse(Validation::date('2-32-06', array('mdy')));
1225
		$this->assertFalse(Validation::date('2.32.06', array('mdy')));
1226
		$this->assertFalse(Validation::date('2/32/06', array('mdy')));
1227
		$this->assertFalse(Validation::date('2 32 06', array('mdy')));
1228
	}
1229
 
1230
/**
1231
 * testDateMdyyLeapYear method
1232
 *
1233
 * @return void
1234
 */
1235
	public function testDateMdyyLeapYear() {
1236
		$this->assertTrue(Validation::date('2-29-04', array('mdy')));
1237
		$this->assertTrue(Validation::date('2.29.04', array('mdy')));
1238
		$this->assertTrue(Validation::date('2/29/04', array('mdy')));
1239
		$this->assertTrue(Validation::date('2 29 04', array('mdy')));
1240
		$this->assertFalse(Validation::date('2-29-06', array('mdy')));
1241
		$this->assertFalse(Validation::date('2.29.06', array('mdy')));
1242
		$this->assertFalse(Validation::date('2/29/06', array('mdy')));
1243
		$this->assertFalse(Validation::date('2 29 06', array('mdy')));
1244
	}
1245
 
1246
/**
1247
 * testDateMdyyyy method
1248
 *
1249
 * @return void
1250
 */
1251
	public function testDateMdyyyy() {
1252
		$this->assertTrue(Validation::date('2-7-2006', array('mdy')));
1253
		$this->assertTrue(Validation::date('2.7.2006', array('mdy')));
1254
		$this->assertTrue(Validation::date('2/7/2006', array('mdy')));
1255
		$this->assertTrue(Validation::date('2 7 2006', array('mdy')));
1256
		$this->assertFalse(Validation::date('0-0-0000', array('mdy')));
1257
		$this->assertFalse(Validation::date('0.0.0000', array('mdy')));
1258
		$this->assertFalse(Validation::date('0/0/0000', array('mdy')));
1259
		$this->assertFalse(Validation::date('0 0 0000', array('mdy')));
1260
		$this->assertFalse(Validation::date('2-32-2006', array('mdy')));
1261
		$this->assertFalse(Validation::date('2.32.2006', array('mdy')));
1262
		$this->assertFalse(Validation::date('2/32/2006', array('mdy')));
1263
		$this->assertFalse(Validation::date('2 32 2006', array('mdy')));
1264
	}
1265
 
1266
/**
1267
 * testDateMdyyyyLeapYear method
1268
 *
1269
 * @return void
1270
 */
1271
	public function testDateMdyyyyLeapYear() {
1272
		$this->assertTrue(Validation::date('2-29-2004', array('mdy')));
1273
		$this->assertTrue(Validation::date('2.29.2004', array('mdy')));
1274
		$this->assertTrue(Validation::date('2/29/2004', array('mdy')));
1275
		$this->assertTrue(Validation::date('2 29 2004', array('mdy')));
1276
		$this->assertFalse(Validation::date('2-29-2006', array('mdy')));
1277
		$this->assertFalse(Validation::date('2.29.2006', array('mdy')));
1278
		$this->assertFalse(Validation::date('2/29/2006', array('mdy')));
1279
		$this->assertFalse(Validation::date('2 29 2006', array('mdy')));
1280
	}
1281
 
1282
/**
1283
 * testDateYyyymmdd method
1284
 *
1285
 * @return void
1286
 */
1287
	public function testDateYyyymmdd() {
1288
		$this->assertTrue(Validation::date('2006-12-27', array('ymd')));
1289
		$this->assertTrue(Validation::date('2006.12.27', array('ymd')));
1290
		$this->assertTrue(Validation::date('2006/12/27', array('ymd')));
1291
		$this->assertTrue(Validation::date('2006 12 27', array('ymd')));
1292
		$this->assertFalse(Validation::date('2006-11-31', array('ymd')));
1293
		$this->assertFalse(Validation::date('2006.11.31', array('ymd')));
1294
		$this->assertFalse(Validation::date('2006/11/31', array('ymd')));
1295
		$this->assertFalse(Validation::date('2006 11 31', array('ymd')));
1296
	}
1297
 
1298
/**
1299
 * testDateYyyymmddLeapYear method
1300
 *
1301
 * @return void
1302
 */
1303
	public function testDateYyyymmddLeapYear() {
1304
		$this->assertTrue(Validation::date('2004-02-29', array('ymd')));
1305
		$this->assertTrue(Validation::date('2004.02.29', array('ymd')));
1306
		$this->assertTrue(Validation::date('2004/02/29', array('ymd')));
1307
		$this->assertTrue(Validation::date('2004 02 29', array('ymd')));
1308
		$this->assertFalse(Validation::date('2006-02-29', array('ymd')));
1309
		$this->assertFalse(Validation::date('2006.02.29', array('ymd')));
1310
		$this->assertFalse(Validation::date('2006/02/29', array('ymd')));
1311
		$this->assertFalse(Validation::date('2006 02 29', array('ymd')));
1312
	}
1313
 
1314
/**
1315
 * testDateYymmdd method
1316
 *
1317
 * @return void
1318
 */
1319
	public function testDateYymmdd() {
1320
		$this->assertTrue(Validation::date('06-12-27', array('ymd')));
1321
		$this->assertTrue(Validation::date('06.12.27', array('ymd')));
1322
		$this->assertTrue(Validation::date('06/12/27', array('ymd')));
1323
		$this->assertTrue(Validation::date('06 12 27', array('ymd')));
1324
		$this->assertFalse(Validation::date('12/27/2600', array('ymd')));
1325
		$this->assertFalse(Validation::date('12.27.2600', array('ymd')));
1326
		$this->assertFalse(Validation::date('12/27/2600', array('ymd')));
1327
		$this->assertFalse(Validation::date('12 27 2600', array('ymd')));
1328
		$this->assertFalse(Validation::date('06-11-31', array('ymd')));
1329
		$this->assertFalse(Validation::date('06.11.31', array('ymd')));
1330
		$this->assertFalse(Validation::date('06/11/31', array('ymd')));
1331
		$this->assertFalse(Validation::date('06 11 31', array('ymd')));
1332
	}
1333
 
1334
/**
1335
 * testDateYymmddLeapYear method
1336
 *
1337
 * @return void
1338
 */
1339
	public function testDateYymmddLeapYear() {
1340
		$this->assertTrue(Validation::date('2004-02-29', array('ymd')));
1341
		$this->assertTrue(Validation::date('2004.02.29', array('ymd')));
1342
		$this->assertTrue(Validation::date('2004/02/29', array('ymd')));
1343
		$this->assertTrue(Validation::date('2004 02 29', array('ymd')));
1344
		$this->assertFalse(Validation::date('2006-02-29', array('ymd')));
1345
		$this->assertFalse(Validation::date('2006.02.29', array('ymd')));
1346
		$this->assertFalse(Validation::date('2006/02/29', array('ymd')));
1347
		$this->assertFalse(Validation::date('2006 02 29', array('ymd')));
1348
	}
1349
 
1350
/**
1351
 * testDateDdMMMMyyyy method
1352
 *
1353
 * @return void
1354
 */
1355
	public function testDateDdMMMMyyyy() {
1356
		$this->assertTrue(Validation::date('27 December 2006', array('dMy')));
1357
		$this->assertTrue(Validation::date('27 Dec 2006', array('dMy')));
1358
		$this->assertFalse(Validation::date('2006 Dec 27', array('dMy')));
1359
		$this->assertFalse(Validation::date('2006 December 27', array('dMy')));
1360
	}
1361
 
1362
/**
1363
 * testDateDdMMMMyyyyLeapYear method
1364
 *
1365
 * @return void
1366
 */
1367
	public function testDateDdMMMMyyyyLeapYear() {
1368
		$this->assertTrue(Validation::date('29 February 2004', array('dMy')));
1369
		$this->assertFalse(Validation::date('29 February 2006', array('dMy')));
1370
	}
1371
 
1372
/**
1373
 * testDateMmmmDdyyyy method
1374
 *
1375
 * @return void
1376
 */
1377
	public function testDateMmmmDdyyyy() {
1378
		$this->assertTrue(Validation::date('December 27, 2006', array('Mdy')));
1379
		$this->assertTrue(Validation::date('Dec 27, 2006', array('Mdy')));
1380
		$this->assertTrue(Validation::date('December 27 2006', array('Mdy')));
1381
		$this->assertTrue(Validation::date('Dec 27 2006', array('Mdy')));
1382
		$this->assertFalse(Validation::date('27 Dec 2006', array('Mdy')));
1383
		$this->assertFalse(Validation::date('2006 December 27', array('Mdy')));
1384
		$this->assertTrue(Validation::date('Sep 12, 2011', array('Mdy')));
1385
	}
1386
 
1387
/**
1388
 * testDateMmmmDdyyyyLeapYear method
1389
 *
1390
 * @return void
1391
 */
1392
	public function testDateMmmmDdyyyyLeapYear() {
1393
		$this->assertTrue(Validation::date('February 29, 2004', array('Mdy')));
1394
		$this->assertTrue(Validation::date('Feb 29, 2004', array('Mdy')));
1395
		$this->assertTrue(Validation::date('February 29 2004', array('Mdy')));
1396
		$this->assertTrue(Validation::date('Feb 29 2004', array('Mdy')));
1397
		$this->assertFalse(Validation::date('February 29, 2006', array('Mdy')));
1398
	}
1399
 
1400
/**
1401
 * testDateMy method
1402
 *
1403
 * @return void
1404
 */
1405
	public function testDateMy() {
1406
		$this->assertTrue(Validation::date('December 2006', array('My')));
1407
		$this->assertTrue(Validation::date('Dec 2006', array('My')));
1408
		$this->assertTrue(Validation::date('December/2006', array('My')));
1409
		$this->assertTrue(Validation::date('Dec/2006', array('My')));
1410
	}
1411
 
1412
/**
1413
 * testDateMyNumeric method
1414
 *
1415
 * @return void
1416
 */
1417
	public function testDateMyNumeric() {
1418
		$this->assertTrue(Validation::date('01/2006', array('my')));
1419
		$this->assertTrue(Validation::date('12-2006', array('my')));
1420
		$this->assertTrue(Validation::date('12.2006', array('my')));
1421
		$this->assertTrue(Validation::date('12 2006', array('my')));
1422
		$this->assertTrue(Validation::date('01/06', array('my')));
1423
		$this->assertTrue(Validation::date('12-06', array('my')));
1424
		$this->assertTrue(Validation::date('12.06', array('my')));
1425
		$this->assertTrue(Validation::date('12 06', array('my')));
1426
		$this->assertFalse(Validation::date('13 06', array('my')));
1427
		$this->assertFalse(Validation::date('13 2006', array('my')));
1428
	}
1429
 
1430
/**
1431
 * testDateYmNumeric method
1432
 *
1433
 * @return void
1434
 */
1435
	public function testDateYmNumeric() {
1436
		$this->assertTrue(Validation::date('2006/12', array('ym')));
1437
		$this->assertTrue(Validation::date('2006-12', array('ym')));
1438
		$this->assertTrue(Validation::date('2006-12', array('ym')));
1439
		$this->assertTrue(Validation::date('2006 12', array('ym')));
1440
		$this->assertTrue(Validation::date('2006 12', array('ym')));
1441
		$this->assertTrue(Validation::date('1900-01', array('ym')));
1442
		$this->assertTrue(Validation::date('2153-01', array('ym')));
1443
		$this->assertTrue(Validation::date('06/12', array('ym')));
1444
		$this->assertTrue(Validation::date('06-12', array('ym')));
1445
		$this->assertTrue(Validation::date('06-12', array('ym')));
1446
		$this->assertTrue(Validation::date('06 12', array('ym')));
1447
		$this->assertFalse(Validation::date('2006/12 ', array('ym')));
1448
		$this->assertFalse(Validation::date('2006/12/', array('ym')));
1449
		$this->assertFalse(Validation::date('06/12 ', array('ym')));
1450
		$this->assertFalse(Validation::date('06/13 ', array('ym')));
1451
	}
1452
 
1453
/**
1454
 * testDateY method
1455
 *
1456
 * @return void
1457
 */
1458
	public function testDateY() {
1459
		$this->assertTrue(Validation::date('1900', array('y')));
1460
		$this->assertTrue(Validation::date('1984', array('y')));
1461
		$this->assertTrue(Validation::date('2006', array('y')));
1462
		$this->assertTrue(Validation::date('2008', array('y')));
1463
		$this->assertTrue(Validation::date('2013', array('y')));
1464
		$this->assertTrue(Validation::date('2104', array('y')));
1465
		$this->assertFalse(Validation::date('20009', array('y')));
1466
		$this->assertFalse(Validation::date(' 2012', array('y')));
1467
		$this->assertFalse(Validation::date('3000', array('y')));
1468
		$this->assertFalse(Validation::date('1899', array('y')));
1469
	}
1470
 
1471
/**
1472
 * Test validating dates with multiple formats
1473
 *
1474
 * @return void
1475
 */
1476
	public function testDateMultiple() {
1477
		$this->assertTrue(Validation::date('2011-12-31', array('ymd', 'dmy')));
1478
		$this->assertTrue(Validation::date('31-12-2011', array('ymd', 'dmy')));
1479
	}
1480
 
1481
/**
1482
 * testTime method
1483
 *
1484
 * @return void
1485
 */
1486
	public function testTime() {
1487
		$this->assertTrue(Validation::time('00:00'));
1488
		$this->assertTrue(Validation::time('23:59'));
1489
		$this->assertFalse(Validation::time('24:00'));
1490
		$this->assertTrue(Validation::time('12:00'));
1491
		$this->assertTrue(Validation::time('12:01'));
1492
		$this->assertTrue(Validation::time('12:01am'));
1493
		$this->assertTrue(Validation::time('12:01pm'));
1494
		$this->assertTrue(Validation::time('1pm'));
1495
		$this->assertTrue(Validation::time('1 pm'));
1496
		$this->assertTrue(Validation::time('1 PM'));
1497
		$this->assertTrue(Validation::time('01:00'));
1498
		$this->assertFalse(Validation::time('1:00'));
1499
		$this->assertTrue(Validation::time('1:00pm'));
1500
		$this->assertFalse(Validation::time('13:00pm'));
1501
		$this->assertFalse(Validation::time('9:00'));
1502
	}
1503
 
1504
/**
1505
 * testBoolean method
1506
 *
1507
 * @return void
1508
 */
1509
	public function testBoolean() {
1510
		$this->assertTrue(Validation::boolean('0'));
1511
		$this->assertTrue(Validation::boolean('1'));
1512
		$this->assertTrue(Validation::boolean(0));
1513
		$this->assertTrue(Validation::boolean(1));
1514
		$this->assertTrue(Validation::boolean(true));
1515
		$this->assertTrue(Validation::boolean(false));
1516
		$this->assertFalse(Validation::boolean('true'));
1517
		$this->assertFalse(Validation::boolean('false'));
1518
		$this->assertFalse(Validation::boolean('-1'));
1519
		$this->assertFalse(Validation::boolean('2'));
1520
		$this->assertFalse(Validation::boolean('Boo!'));
1521
	}
1522
 
1523
/**
1524
 * testDateCustomRegx method
1525
 *
1526
 * @return void
1527
 */
1528
	public function testDateCustomRegx() {
1529
		$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])$%'));
1530
		$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])$%'));
1531
	}
1532
 
1533
/**
1534
 * Test numbers with any number of decimal places, including none.
1535
 *
1536
 * @return void
1537
 */
1538
	public function testDecimalWithPlacesNull() {
1539
		$this->assertTrue(Validation::decimal('+1234.54321', null));
1540
		$this->assertTrue(Validation::decimal('-1234.54321', null));
1541
		$this->assertTrue(Validation::decimal('1234.54321', null));
1542
		$this->assertTrue(Validation::decimal('+0123.45e6', null));
1543
		$this->assertTrue(Validation::decimal('-0123.45e6', null));
1544
		$this->assertTrue(Validation::decimal('0123.45e6', null));
1545
		$this->assertTrue(Validation::decimal(1234.56, null));
1546
		$this->assertTrue(Validation::decimal(1234.00, null));
1547
		$this->assertTrue(Validation::decimal(1234., null));
1548
		$this->assertTrue(Validation::decimal('1234.00', null));
1549
		$this->assertTrue(Validation::decimal(.0, null));
1550
		$this->assertTrue(Validation::decimal(.00, null));
1551
		$this->assertTrue(Validation::decimal('.00', null));
1552
		$this->assertTrue(Validation::decimal(.01, null));
1553
		$this->assertTrue(Validation::decimal('.01', null));
1554
		$this->assertTrue(Validation::decimal('1234', null));
1555
		$this->assertTrue(Validation::decimal('-1234', null));
1556
		$this->assertTrue(Validation::decimal('+1234', null));
1557
		$this->assertTrue(Validation::decimal((float)1234, null));
1558
		$this->assertTrue(Validation::decimal((double)1234, null));
1559
		$this->assertTrue(Validation::decimal((int)1234, null));
1560
 
1561
		$this->assertFalse(Validation::decimal('', null));
1562
		$this->assertFalse(Validation::decimal('string', null));
1563
		$this->assertFalse(Validation::decimal('1234.', null));
1564
	}
1565
 
1566
/**
1567
 * Test numbers with any number of decimal places greater than 0, or a float|double.
1568
 *
1569
 * @return void
1570
 */
1571
	public function testDecimalWithPlacesTrue() {
1572
		$this->assertTrue(Validation::decimal('+1234.54321', true));
1573
		$this->assertTrue(Validation::decimal('-1234.54321', true));
1574
		$this->assertTrue(Validation::decimal('1234.54321', true));
1575
		$this->assertTrue(Validation::decimal('+0123.45e6', true));
1576
		$this->assertTrue(Validation::decimal('-0123.45e6', true));
1577
		$this->assertTrue(Validation::decimal('0123.45e6', true));
1578
		$this->assertTrue(Validation::decimal(1234.56, true));
1579
		$this->assertTrue(Validation::decimal(1234.00, true));
1580
		$this->assertTrue(Validation::decimal(1234., true));
1581
		$this->assertTrue(Validation::decimal('1234.00', true));
1582
		$this->assertTrue(Validation::decimal(.0, true));
1583
		$this->assertTrue(Validation::decimal(.00, true));
1584
		$this->assertTrue(Validation::decimal('.00', true));
1585
		$this->assertTrue(Validation::decimal(.01, true));
1586
		$this->assertTrue(Validation::decimal('.01', true));
1587
		$this->assertTrue(Validation::decimal((float)1234, true));
1588
		$this->assertTrue(Validation::decimal((double)1234, true));
1589
 
1590
		$this->assertFalse(Validation::decimal('', true));
1591
		$this->assertFalse(Validation::decimal('string', true));
1592
		$this->assertFalse(Validation::decimal('1234.', true));
1593
		$this->assertFalse(Validation::decimal((int)1234, true));
1594
		$this->assertFalse(Validation::decimal('1234', true));
1595
		$this->assertFalse(Validation::decimal('-1234', true));
1596
		$this->assertFalse(Validation::decimal('+1234', true));
1597
	}
1598
 
1599
/**
1600
 * Test numbers with exactly that many number of decimal places.
1601
 *
1602
 * @return void
1603
 */
1604
	public function testDecimalWithPlacesNumeric() {
1605
		$this->assertTrue(Validation::decimal('.27', '2'));
1606
		$this->assertTrue(Validation::decimal(0.27, 2));
1607
		$this->assertTrue(Validation::decimal(-0.27, 2));
1608
		$this->assertTrue(Validation::decimal(0.27, 2));
1609
		$this->assertTrue(Validation::decimal('0.277', '3'));
1610
		$this->assertTrue(Validation::decimal(0.277, 3));
1611
		$this->assertTrue(Validation::decimal(-0.277, 3));
1612
		$this->assertTrue(Validation::decimal(0.277, 3));
1613
		$this->assertTrue(Validation::decimal('1234.5678', '4'));
1614
		$this->assertTrue(Validation::decimal(1234.5678, 4));
1615
		$this->assertTrue(Validation::decimal(-1234.5678, 4));
1616
		$this->assertTrue(Validation::decimal(1234.5678, 4));
1617
		$this->assertTrue(Validation::decimal('.00', 2));
1618
		$this->assertTrue(Validation::decimal(.01, 2));
1619
		$this->assertTrue(Validation::decimal('.01', 2));
1620
 
1621
		$this->assertFalse(Validation::decimal('', 1));
1622
		$this->assertFalse(Validation::decimal('string', 1));
1623
		$this->assertFalse(Validation::decimal(1234., 1));
1624
		$this->assertFalse(Validation::decimal('1234.', 1));
1625
		$this->assertFalse(Validation::decimal(.0, 1));
1626
		$this->assertFalse(Validation::decimal(.00, 2));
1627
		$this->assertFalse(Validation::decimal((float)1234, 1));
1628
		$this->assertFalse(Validation::decimal((double)1234, 1));
1629
		$this->assertFalse(Validation::decimal((int)1234, 1));
1630
		$this->assertFalse(Validation::decimal('1234.5678', '3'));
1631
		$this->assertFalse(Validation::decimal(1234.5678, 3));
1632
		$this->assertFalse(Validation::decimal(-1234.5678, 3));
1633
		$this->assertFalse(Validation::decimal(1234.5678, 3));
1634
	}
1635
 
1636
/**
1637
 * Test decimal() with invalid places parameter.
1638
 *
1639
 * @return void
1640
 */
1641
	public function testDecimalWithInvalidPlaces() {
1642
		$this->assertFalse(Validation::decimal('.27', 'string'));
1643
		$this->assertFalse(Validation::decimal(1234.5678, (array)true));
1644
		$this->assertFalse(Validation::decimal(-1234.5678, (object)true));
1645
	}
1646
 
1647
/**
1648
 * testDecimalCustomRegex method
1649
 *
1650
 * @return void
1651
 */
1652
	public function testDecimalCustomRegex() {
1653
		$this->assertTrue(Validation::decimal('1.54321', null, '/^[-+]?[0-9]+(\\.[0-9]+)?$/s'));
1654
		$this->assertFalse(Validation::decimal('.54321', null, '/^[-+]?[0-9]+(\\.[0-9]+)?$/s'));
1655
	}
1656
 
1657
/**
1658
 * Test localized floats with decimal.
1659
 *
1660
 * @return void
1661
 */
1662
	public function testDecimalLocaleSet() {
1663
		$this->skipIf(DS === '\\', 'The locale is not supported in Windows and affects other tests.');
1664
		$restore = setlocale(LC_NUMERIC, 0);
1665
		$this->skipIf(setlocale(LC_NUMERIC, 'da_DK') === false, "The Danish locale isn't available.");
1666
 
1667
		$this->assertTrue(Validation::decimal(1.54), '1.54 should be considered a valid float');
1668
		$this->assertTrue(Validation::decimal('1.54'), '"1.54" should be considered a valid float');
1669
 
1670
		$this->assertTrue(Validation::decimal(12345.67), '12345.67 should be considered a valid float');
1671
		$this->assertTrue(Validation::decimal('12,345.67'), '"12,345.67" should be considered a valid float');
1672
 
1673
		setlocale(LC_NUMERIC, $restore);
1674
	}
1675
 
1676
/**
1677
 * testEmail method
1678
 *
1679
 * @return void
1680
 */
1681
	public function testEmail() {
1682
		$this->assertTrue(Validation::email('abc.efg@domain.com'));
1683
		$this->assertTrue(Validation::email('efg@domain.com'));
1684
		$this->assertTrue(Validation::email('abc-efg@domain.com'));
1685
		$this->assertTrue(Validation::email('abc_efg@domain.com'));
1686
		$this->assertTrue(Validation::email('raw@test.ra.ru'));
1687
		$this->assertTrue(Validation::email('abc-efg@domain-hyphened.com'));
1688
		$this->assertTrue(Validation::email("p.o'malley@domain.com"));
1689
		$this->assertTrue(Validation::email('abc+efg@domain.com'));
1690
		$this->assertTrue(Validation::email('abc&efg@domain.com'));
1691
		$this->assertTrue(Validation::email('abc.efg@12345.com'));
1692
		$this->assertTrue(Validation::email('abc.efg@12345.co.jp'));
1693
		$this->assertTrue(Validation::email('abc@g.cn'));
1694
		$this->assertTrue(Validation::email('abc@x.com'));
1695
		$this->assertTrue(Validation::email('henrik@sbcglobal.net'));
1696
		$this->assertTrue(Validation::email('sani@sbcglobal.net'));
1697
 
1698
		// all ICANN TLDs
1699
		$this->assertTrue(Validation::email('abc@example.aero'));
1700
		$this->assertTrue(Validation::email('abc@example.asia'));
1701
		$this->assertTrue(Validation::email('abc@example.biz'));
1702
		$this->assertTrue(Validation::email('abc@example.cat'));
1703
		$this->assertTrue(Validation::email('abc@example.com'));
1704
		$this->assertTrue(Validation::email('abc@example.coop'));
1705
		$this->assertTrue(Validation::email('abc@example.edu'));
1706
		$this->assertTrue(Validation::email('abc@example.gov'));
1707
		$this->assertTrue(Validation::email('abc@example.info'));
1708
		$this->assertTrue(Validation::email('abc@example.int'));
1709
		$this->assertTrue(Validation::email('abc@example.jobs'));
1710
		$this->assertTrue(Validation::email('abc@example.mil'));
1711
		$this->assertTrue(Validation::email('abc@example.mobi'));
1712
		$this->assertTrue(Validation::email('abc@example.museum'));
1713
		$this->assertTrue(Validation::email('abc@example.name'));
1714
		$this->assertTrue(Validation::email('abc@example.net'));
1715
		$this->assertTrue(Validation::email('abc@example.org'));
1716
		$this->assertTrue(Validation::email('abc@example.pro'));
1717
		$this->assertTrue(Validation::email('abc@example.tel'));
1718
		$this->assertTrue(Validation::email('abc@example.travel'));
1719
		$this->assertTrue(Validation::email('someone@st.t-com.hr'));
1720
 
1721
		// gTLD's
1722
		$this->assertTrue(Validation::email('example@host.local'));
1723
		$this->assertTrue(Validation::email('example@x.org'));
1724
		$this->assertTrue(Validation::email('example@host.xxx'));
1725
 
1726
		// strange, but technically valid email addresses
1727
		$this->assertTrue(Validation::email('S=postmaster/OU=rz/P=uni-frankfurt/A=d400/C=de@gateway.d400.de'));
1728
		$this->assertTrue(Validation::email('customer/department=shipping@example.com'));
1729
		$this->assertTrue(Validation::email('$A12345@example.com'));
1730
		$this->assertTrue(Validation::email('!def!xyz%abc@example.com'));
1731
		$this->assertTrue(Validation::email('_somename@example.com'));
1732
 
1733
		/// Unicode
1734
		$this->assertTrue(Validation::email('some@eräume.foo'));
1735
		$this->assertTrue(Validation::email('äu@öe.eräume.foo'));
1736
		$this->assertTrue(Validation::email('Nyrée.surname@example.com'));
1737
 
1738
		// invalid addresses
1739
		$this->assertFalse(Validation::email('abc@example'));
1740
		$this->assertFalse(Validation::email('abc@example.c'));
1741
		$this->assertFalse(Validation::email('abc@example.com.'));
1742
		$this->assertFalse(Validation::email('abc.@example.com'));
1743
		$this->assertFalse(Validation::email('abc@example..com'));
1744
		$this->assertFalse(Validation::email('abc@example.com.a'));
1745
		$this->assertFalse(Validation::email('abc;@example.com'));
1746
		$this->assertFalse(Validation::email('abc@example.com;'));
1747
		$this->assertFalse(Validation::email('abc@efg@example.com'));
1748
		$this->assertFalse(Validation::email('abc@@example.com'));
1749
		$this->assertFalse(Validation::email('abc efg@example.com'));
1750
		$this->assertFalse(Validation::email('abc,efg@example.com'));
1751
		$this->assertFalse(Validation::email('abc@sub,example.com'));
1752
		$this->assertFalse(Validation::email("abc@sub'example.com"));
1753
		$this->assertFalse(Validation::email('abc@sub/example.com'));
1754
		$this->assertFalse(Validation::email('abc@yahoo!.com'));
1755
		$this->assertFalse(Validation::email('abc@example_underscored.com'));
1756
		$this->assertFalse(Validation::email('raw@test.ra.ru....com'));
1757
	}
1758
 
1759
/**
1760
 * testEmailDeep method
1761
 *
1762
 * @return void
1763
 */
1764
	public function testEmailDeep() {
1765
		$this->skipIf(gethostbynamel('example.abcd'), 'Your DNS service responds for non-existant domains, skipping deep email checks.');
1766
 
1767
		$this->assertTrue(Validation::email('abc.efg@cakephp.org', true));
1768
		$this->assertFalse(Validation::email('abc.efg@caphpkeinvalid.com', true));
1769
	}
1770
 
1771
/**
1772
 * testEmailCustomRegex method
1773
 *
1774
 * @return void
1775
 */
1776
	public function testEmailCustomRegex() {
1777
		$this->assertTrue(Validation::email('abc.efg@cakephp.org', null, '/^[A-Z0-9._%-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i'));
1778
		$this->assertFalse(Validation::email('abc.efg@com.caphpkeinvalid', null, '/^[A-Z0-9._%-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i'));
1779
	}
1780
 
1781
/**
1782
 * testEqualTo method
1783
 *
1784
 * @return void
1785
 */
1786
	public function testEqualTo() {
1787
		$this->assertTrue(Validation::equalTo("1", "1"));
1788
		$this->assertFalse(Validation::equalTo(1, "1"));
1789
		$this->assertFalse(Validation::equalTo("", null));
1790
		$this->assertFalse(Validation::equalTo("", false));
1791
		$this->assertFalse(Validation::equalTo(0, false));
1792
		$this->assertFalse(Validation::equalTo(null, false));
1793
	}
1794
 
1795
/**
1796
 * testIpV4 method
1797
 *
1798
 * @return void
1799
 */
1800
	public function testIpV4() {
1801
		$this->assertTrue(Validation::ip('0.0.0.0', 'ipv4'));
1802
		$this->assertTrue(Validation::ip('192.168.1.156'));
1803
		$this->assertTrue(Validation::ip('255.255.255.255'));
1804
		$this->assertFalse(Validation::ip('127.0.0'));
1805
		$this->assertFalse(Validation::ip('127.0.0.a'));
1806
		$this->assertFalse(Validation::ip('127.0.0.256'));
1807
		$this->assertFalse(Validation::ip('2001:0db8:85a3:0000:0000:8a2e:0370:7334', 'ipv4'), 'IPv6 is not valid IPv4');
1808
	}
1809
 
1810
/**
1811
 * testIp v6
1812
 *
1813
 * @return void
1814
 */
1815
	public function testIpv6() {
1816
		$this->assertTrue(Validation::ip('2001:0db8:85a3:0000:0000:8a2e:0370:7334', 'IPv6'));
1817
		$this->assertTrue(Validation::ip('2001:db8:85a3:0:0:8a2e:370:7334', 'IPv6'));
1818
		$this->assertTrue(Validation::ip('2001:db8:85a3::8a2e:370:7334', 'IPv6'));
1819
		$this->assertTrue(Validation::ip('2001:0db8:0000:0000:0000:0000:1428:57ab', 'IPv6'));
1820
		$this->assertTrue(Validation::ip('2001:0db8:0000:0000:0000::1428:57ab', 'IPv6'));
1821
		$this->assertTrue(Validation::ip('2001:0db8:0:0:0:0:1428:57ab', 'IPv6'));
1822
		$this->assertTrue(Validation::ip('2001:0db8:0:0::1428:57ab', 'IPv6'));
1823
		$this->assertTrue(Validation::ip('2001:0db8::1428:57ab', 'IPv6'));
1824
		$this->assertTrue(Validation::ip('2001:db8::1428:57ab', 'IPv6'));
1825
		$this->assertTrue(Validation::ip('0000:0000:0000:0000:0000:0000:0000:0001', 'IPv6'));
1826
		$this->assertTrue(Validation::ip('::1', 'IPv6'));
1827
		$this->assertTrue(Validation::ip('::ffff:12.34.56.78', 'IPv6'));
1828
		$this->assertTrue(Validation::ip('::ffff:0c22:384e', 'IPv6'));
1829
		$this->assertTrue(Validation::ip('2001:0db8:1234:0000:0000:0000:0000:0000', 'IPv6'));
1830
		$this->assertTrue(Validation::ip('2001:0db8:1234:ffff:ffff:ffff:ffff:ffff', 'IPv6'));
1831
		$this->assertTrue(Validation::ip('2001:db8:a::123', 'IPv6'));
1832
		$this->assertTrue(Validation::ip('fe80::', 'IPv6'));
1833
		$this->assertTrue(Validation::ip('::ffff:192.0.2.128', 'IPv6'));
1834
		$this->assertTrue(Validation::ip('::ffff:c000:280', 'IPv6'));
1835
 
1836
		$this->assertFalse(Validation::ip('123', 'IPv6'));
1837
		$this->assertFalse(Validation::ip('ldkfj', 'IPv6'));
1838
		$this->assertFalse(Validation::ip('2001::FFD3::57ab', 'IPv6'));
1839
		$this->assertFalse(Validation::ip('2001:db8:85a3::8a2e:37023:7334', 'IPv6'));
1840
		$this->assertFalse(Validation::ip('2001:db8:85a3::8a2e:370k:7334', 'IPv6'));
1841
		$this->assertFalse(Validation::ip('1:2:3:4:5:6:7:8:9', 'IPv6'));
1842
		$this->assertFalse(Validation::ip('1::2::3', 'IPv6'));
1843
		$this->assertFalse(Validation::ip('1:::3:4:5', 'IPv6'));
1844
		$this->assertFalse(Validation::ip('1:2:3::4:5:6:7:8:9', 'IPv6'));
1845
		$this->assertFalse(Validation::ip('::ffff:2.3.4', 'IPv6'));
1846
		$this->assertFalse(Validation::ip('::ffff:257.1.2.3', 'IPv6'));
1847
		$this->assertFalse(Validation::ip('255.255.255.255', 'ipv6'), 'IPv4 is not valid IPv6');
1848
	}
1849
 
1850
/**
1851
 * testMaxLength method
1852
 *
1853
 * @return void
1854
 */
1855
	public function testMaxLength() {
1856
		$this->assertTrue(Validation::maxLength('ab', 3));
1857
		$this->assertTrue(Validation::maxLength('abc', 3));
1858
		$this->assertTrue(Validation::maxLength('ÆΔΩЖÇ', 10));
1859
 
1860
		$this->assertFalse(Validation::maxLength('abcd', 3));
1861
		$this->assertFalse(Validation::maxLength('ÆΔΩЖÇ', 3));
1862
	}
1863
 
1864
/**
1865
 * testMinLength method
1866
 *
1867
 * @return void
1868
 */
1869
	public function testMinLength() {
1870
		$this->assertFalse(Validation::minLength('ab', 3));
1871
		$this->assertFalse(Validation::minLength('ÆΔΩЖÇ', 10));
1872
 
1873
		$this->assertTrue(Validation::minLength('abc', 3));
1874
		$this->assertTrue(Validation::minLength('abcd', 3));
1875
		$this->assertTrue(Validation::minLength('ÆΔΩЖÇ', 2));
1876
	}
1877
 
1878
/**
1879
 * testUrl method
1880
 *
1881
 * @return void
1882
 */
1883
	public function testUrl() {
1884
		$this->assertTrue(Validation::url('http://www.cakephp.org'));
1885
		$this->assertTrue(Validation::url('http://cakephp.org'));
1886
		$this->assertTrue(Validation::url('http://www.cakephp.org/somewhere#anchor'));
1887
		$this->assertTrue(Validation::url('http://192.168.0.1'));
1888
		$this->assertTrue(Validation::url('https://www.cakephp.org'));
1889
		$this->assertTrue(Validation::url('https://cakephp.org'));
1890
		$this->assertTrue(Validation::url('https://www.cakephp.org/somewhere#anchor'));
1891
		$this->assertTrue(Validation::url('https://192.168.0.1'));
1892
		$this->assertTrue(Validation::url('ftps://www.cakephp.org/pub/cake'));
1893
		$this->assertTrue(Validation::url('ftps://cakephp.org/pub/cake'));
1894
		$this->assertTrue(Validation::url('ftps://192.168.0.1/pub/cake'));
1895
		$this->assertTrue(Validation::url('ftp://www.cakephp.org/pub/cake'));
1896
		$this->assertTrue(Validation::url('ftp://cakephp.org/pub/cake'));
1897
		$this->assertTrue(Validation::url('ftp://192.168.0.1/pub/cake'));
1898
		$this->assertTrue(Validation::url('sftp://192.168.0.1/pub/cake'));
1899
		$this->assertTrue(Validation::url('https://my.domain.com/gizmo/app?class=MySip;proc=start'));
1900
		$this->assertTrue(Validation::url('www.domain.tld'));
1901
		$this->assertTrue(Validation::url('http://123456789112345678921234567893123456789412345678951234567896123.com'));
1902
		$this->assertTrue(Validation::url('http://www.domain.com/blogs/index.php?blog=6&tempskin=_rss2'));
1903
		$this->assertTrue(Validation::url('http://www.domain.com/blogs/parenth()eses.php'));
1904
		$this->assertTrue(Validation::url('http://www.domain.com/index.php?get=params&amp;get2=params'));
1905
		$this->assertTrue(Validation::url('http://www.domain.com/ndex.php?get=params&amp;get2=params#anchor'));
1906
		$this->assertTrue(Validation::url('http://www.domain.com/real%20url%20encodeing'));
1907
		$this->assertTrue(Validation::url('http://en.wikipedia.org/wiki/Architectural_pattern_(computer_science)'));
1908
		$this->assertTrue(Validation::url('http://www.cakephp.org', true));
1909
		$this->assertTrue(Validation::url('http://example.com/~userdir/'));
1910
		$this->assertTrue(Validation::url('http://underscore_subdomain.example.org'));
1911
		$this->assertTrue(Validation::url('http://_jabber._tcp.gmail.com'));
1912
		$this->assertTrue(Validation::url('http://www.domain.longttldnotallowed'));
1913
		$this->assertFalse(Validation::url('ftps://256.168.0.1/pub/cake'));
1914
		$this->assertFalse(Validation::url('ftp://256.168.0.1/pub/cake'));
1915
		$this->assertFalse(Validation::url('http://w_w.domain.co_m'));
1916
		$this->assertFalse(Validation::url('http://www.domain.12com'));
1917
		$this->assertFalse(Validation::url('http://www.-invaliddomain.tld'));
1918
		$this->assertFalse(Validation::url('http://www.domain.-invalidtld'));
1919
		$this->assertFalse(Validation::url('http://this-domain-is-too-loooooong-by-icann-rules-maximum-length-is-63.com'));
1920
		$this->assertFalse(Validation::url('http://www.underscore_domain.org'));
1921
		$this->assertFalse(Validation::url('http://_jabber._tcp.g_mail.com'));
1922
		$this->assertFalse(Validation::url('http://en.(wikipedia).org/'));
1923
		$this->assertFalse(Validation::url('http://www.domain.com/fakeenco%ode'));
1924
		$this->assertFalse(Validation::url('--.example.com'));
1925
		$this->assertFalse(Validation::url('www.cakephp.org', true));
1926
 
1927
		$this->assertTrue(Validation::url('http://example.com/~userdir/subdir/index.html'));
1928
		$this->assertTrue(Validation::url('http://www.zwischenraume.de'));
1929
		$this->assertTrue(Validation::url('http://www.zwischenraume.cz'));
1930
		$this->assertTrue(Validation::url('http://www.last.fm/music/浜崎あゆみ'), 'utf8 path failed');
1931
		$this->assertTrue(Validation::url('http://www.electrohome.ro/images/239537750-284232-215_300[1].jpg'));
1932
		$this->assertTrue(Validation::url('http://www.eräume.foo'));
1933
		$this->assertTrue(Validation::url('http://äüö.eräume.foo'));
1934
 
1935
		$this->assertTrue(Validation::url('http://cakephp.org:80'));
1936
		$this->assertTrue(Validation::url('http://cakephp.org:443'));
1937
		$this->assertTrue(Validation::url('http://cakephp.org:2000'));
1938
		$this->assertTrue(Validation::url('http://cakephp.org:27000'));
1939
		$this->assertTrue(Validation::url('http://cakephp.org:65000'));
1940
 
1941
		$this->assertTrue(Validation::url('[2001:0db8::1428:57ab]'));
1942
		$this->assertTrue(Validation::url('[::1]'));
1943
		$this->assertTrue(Validation::url('[2001:0db8::1428:57ab]:80'));
1944
		$this->assertTrue(Validation::url('[::1]:80'));
1945
		$this->assertTrue(Validation::url('http://[2001:0db8::1428:57ab]'));
1946
		$this->assertTrue(Validation::url('http://[::1]'));
1947
		$this->assertTrue(Validation::url('http://[2001:0db8::1428:57ab]:80'));
1948
		$this->assertTrue(Validation::url('http://[::1]:80'));
1949
 
1950
		$this->assertFalse(Validation::url('[1::2::3]'));
1951
	}
1952
 
1953
	public function testUuid() {
1954
		$this->assertTrue(Validation::uuid('00000000-0000-0000-0000-000000000000'));
1955
		$this->assertTrue(Validation::uuid('550e8400-e29b-11d4-a716-446655440000'));
1956
		$this->assertFalse(Validation::uuid('BRAP-e29b-11d4-a716-446655440000'));
1957
		$this->assertTrue(Validation::uuid('550E8400-e29b-11D4-A716-446655440000'));
1958
		$this->assertFalse(Validation::uuid('550e8400-e29b11d4-a716-446655440000'));
1959
		$this->assertFalse(Validation::uuid('550e8400-e29b-11d4-a716-4466440000'));
1960
		$this->assertFalse(Validation::uuid('550e8400-e29b-11d4-a71-446655440000'));
1961
		$this->assertFalse(Validation::uuid('550e8400-e29b-11d-a716-446655440000'));
1962
		$this->assertFalse(Validation::uuid('550e8400-e29-11d4-a716-446655440000'));
1963
	}
1964
 
1965
/**
1966
 * testInList method
1967
 *
1968
 * @return void
1969
 */
1970
	public function testInList() {
1971
		$this->assertTrue(Validation::inList('one', array('one', 'two')));
1972
		$this->assertTrue(Validation::inList('two', array('one', 'two')));
1973
		$this->assertFalse(Validation::inList('three', array('one', 'two')));
1974
		$this->assertFalse(Validation::inList('1one', array(0, 1, 2, 3)));
1975
		$this->assertFalse(Validation::inList('one', array(0, 1, 2, 3)));
1976
		$this->assertTrue(Validation::inList('2', array(1, 2, 3)));
1977
		$this->assertFalse(Validation::inList('2x', array(1, 2, 3)));
1978
		$this->assertFalse(Validation::inList(2, array('1', '2x', '3')));
1979
		$this->assertFalse(Validation::inList('One', array('one', 'two')));
1980
 
1981
		// No hexadecimal for numbers.
1982
		$this->assertFalse(Validation::inList('0x7B', array('ABC', '123')));
1983
		$this->assertFalse(Validation::inList('0x7B', array('ABC', 123)));
1984
 
1985
		// case insensitive
1986
		$this->assertTrue(Validation::inList('one', array('One', 'Two'), true));
1987
		$this->assertTrue(Validation::inList('Two', array('one', 'two'), true));
1988
		$this->assertFalse(Validation::inList('three', array('one', 'two'), true));
1989
	}
1990
 
1991
/**
1992
 * testRange method
1993
 *
1994
 * @return void
1995
 */
1996
	public function testRange() {
1997
		$this->assertFalse(Validation::range(20, 100, 1));
1998
		$this->assertTrue(Validation::range(20, 1, 100));
1999
		$this->assertFalse(Validation::range(.5, 1, 100));
2000
		$this->assertTrue(Validation::range(.5, 0, 100));
2001
		$this->assertTrue(Validation::range(5));
2002
		$this->assertTrue(Validation::range(-5, -10, 1));
2003
		$this->assertFalse(Validation::range('word'));
2004
	}
2005
 
2006
/**
2007
 * testExtension method
2008
 *
2009
 * @return void
2010
 */
2011
	public function testExtension() {
2012
		$this->assertTrue(Validation::extension('extension.jpeg'));
2013
		$this->assertTrue(Validation::extension('extension.JPEG'));
2014
		$this->assertTrue(Validation::extension('extension.gif'));
2015
		$this->assertTrue(Validation::extension('extension.GIF'));
2016
		$this->assertTrue(Validation::extension('extension.png'));
2017
		$this->assertTrue(Validation::extension('extension.jpg'));
2018
		$this->assertTrue(Validation::extension('extension.JPG'));
2019
		$this->assertFalse(Validation::extension('noextension'));
2020
		$this->assertTrue(Validation::extension('extension.pdf', array('PDF')));
2021
		$this->assertFalse(Validation::extension('extension.jpg', array('GIF')));
2022
		$this->assertTrue(Validation::extension(array('extension.JPG', 'extension.gif', 'extension.png')));
2023
		$this->assertTrue(Validation::extension(array('file' => array('name' => 'file.jpg'))));
2024
		$this->assertTrue(Validation::extension(array('file1' => array('name' => 'file.jpg'),
2025
												'file2' => array('name' => 'file.jpg'),
2026
												'file3' => array('name' => 'file.jpg'))));
2027
		$this->assertFalse(Validation::extension(array('file1' => array('name' => 'file.jpg'),
2028
												'file2' => array('name' => 'file.jpg'),
2029
												'file3' => array('name' => 'file.jpg')), array('gif')));
2030
 
2031
		$this->assertFalse(Validation::extension(array('noextension', 'extension.JPG', 'extension.gif', 'extension.png')));
2032
		$this->assertFalse(Validation::extension(array('extension.pdf', 'extension.JPG', 'extension.gif', 'extension.png')));
2033
	}
2034
 
2035
/**
2036
 * testMoney method
2037
 *
2038
 * @return void
2039
 */
2040
	public function testMoney() {
2041
		$this->assertTrue(Validation::money('100'));
2042
		$this->assertTrue(Validation::money('100.11'));
2043
		$this->assertTrue(Validation::money('100.112'));
2044
		$this->assertTrue(Validation::money('100.1'));
2045
		$this->assertTrue(Validation::money('100.111,1'));
2046
		$this->assertTrue(Validation::money('100.111,11'));
2047
		$this->assertFalse(Validation::money('100.111,111'));
2048
 
2049
		$this->assertTrue(Validation::money('$100'));
2050
		$this->assertTrue(Validation::money('$100.11'));
2051
		$this->assertTrue(Validation::money('$100.112'));
2052
		$this->assertTrue(Validation::money('$100.1'));
2053
		$this->assertFalse(Validation::money('$100.1111'));
2054
		$this->assertFalse(Validation::money('text'));
2055
 
2056
		$this->assertTrue(Validation::money('100', 'right'));
2057
		$this->assertTrue(Validation::money('100.11$', 'right'));
2058
		$this->assertTrue(Validation::money('100.112$', 'right'));
2059
		$this->assertTrue(Validation::money('100.1$', 'right'));
2060
		$this->assertFalse(Validation::money('100.1111$', 'right'));
2061
 
2062
		$this->assertTrue(Validation::money('€100'));
2063
		$this->assertTrue(Validation::money('€100.11'));
2064
		$this->assertTrue(Validation::money('€100.112'));
2065
		$this->assertTrue(Validation::money('€100.1'));
2066
		$this->assertFalse(Validation::money('€100.1111'));
2067
 
2068
		$this->assertTrue(Validation::money('100', 'right'));
2069
		$this->assertTrue(Validation::money('100.11€', 'right'));
2070
		$this->assertTrue(Validation::money('100.112€', 'right'));
2071
		$this->assertTrue(Validation::money('100.1€', 'right'));
2072
		$this->assertFalse(Validation::money('100.1111€', 'right'));
2073
	}
2074
 
2075
/**
2076
 * Test Multiple Select Validation
2077
 *
2078
 * @return void
2079
 */
2080
	public function testMultiple() {
2081
		$this->assertTrue(Validation::multiple(array(0, 1, 2, 3)));
2082
		$this->assertTrue(Validation::multiple(array(50, 32, 22, 0)));
2083
		$this->assertTrue(Validation::multiple(array('str', 'var', 'enum', 0)));
2084
		$this->assertFalse(Validation::multiple(''));
2085
		$this->assertFalse(Validation::multiple(null));
2086
		$this->assertFalse(Validation::multiple(array()));
2087
		$this->assertFalse(Validation::multiple(array(0)));
2088
		$this->assertFalse(Validation::multiple(array('0')));
2089
 
2090
		$this->assertTrue(Validation::multiple(array(0, 3, 4, 5), array('in' => range(0, 10))));
2091
		$this->assertFalse(Validation::multiple(array(0, 15, 20, 5), array('in' => range(0, 10))));
2092
		$this->assertFalse(Validation::multiple(array(0, 5, 10, 11), array('in' => range(0, 10))));
2093
		$this->assertFalse(Validation::multiple(array('boo', 'foo', 'bar'), array('in' => array('foo', 'bar', 'baz'))));
2094
		$this->assertFalse(Validation::multiple(array('foo', '1bar'), array('in' => range(0, 10))));
2095
 
2096
		$this->assertTrue(Validation::multiple(array(0, 5, 10, 11), array('max' => 3)));
2097
		$this->assertFalse(Validation::multiple(array(0, 5, 10, 11, 55), array('max' => 3)));
2098
		$this->assertTrue(Validation::multiple(array('foo', 'bar', 'baz'), array('max' => 3)));
2099
		$this->assertFalse(Validation::multiple(array('foo', 'bar', 'baz', 'squirrel'), array('max' => 3)));
2100
 
2101
		$this->assertTrue(Validation::multiple(array(0, 5, 10, 11), array('min' => 3)));
2102
		$this->assertTrue(Validation::multiple(array(0, 5, 10, 11, 55), array('min' => 3)));
2103
		$this->assertFalse(Validation::multiple(array('foo', 'bar', 'baz'), array('min' => 5)));
2104
		$this->assertFalse(Validation::multiple(array('foo', 'bar', 'baz', 'squirrel'), array('min' => 10)));
2105
 
2106
		$this->assertTrue(Validation::multiple(array(0, 5, 9), array('in' => range(0, 10), 'max' => 5)));
2107
		$this->assertTrue(Validation::multiple(array('0', '5', '9'), array('in' => range(0, 10), 'max' => 5)));
2108
 
2109
		$this->assertFalse(Validation::multiple(array(0, 5, 9, 8, 6, 2, 1), array('in' => range(0, 10), 'max' => 5)));
2110
		$this->assertFalse(Validation::multiple(array(0, 5, 9, 8, 11), array('in' => range(0, 10), 'max' => 5)));
2111
 
2112
		$this->assertFalse(Validation::multiple(array(0, 5, 9), array('in' => range(0, 10), 'max' => 5, 'min' => 3)));
2113
		$this->assertFalse(Validation::multiple(array(0, 5, 9, 8, 6, 2, 1), array('in' => range(0, 10), 'max' => 5, 'min' => 2)));
2114
		$this->assertFalse(Validation::multiple(array(0, 5, 9, 8, 11), array('in' => range(0, 10), 'max' => 5, 'min' => 2)));
2115
 
2116
		$this->assertFalse(Validation::multiple(array('2x', '3x'), array('in' => array(1, 2, 3, 4, 5))));
2117
		$this->assertFalse(Validation::multiple(array(2, 3), array('in' => array('1x', '2x', '3x', '4x'))));
2118
		$this->assertFalse(Validation::multiple(array('one'), array('in' => array('One', 'Two'))));
2119
		$this->assertFalse(Validation::multiple(array('Two'), array('in' => array('one', 'two'))));
2120
 
2121
		// case insensitive
2122
		$this->assertTrue(Validation::multiple(array('one'), array('in' => array('One', 'Two')), true));
2123
		$this->assertTrue(Validation::multiple(array('Two'), array('in' => array('one', 'two')), true));
2124
		$this->assertFalse(Validation::multiple(array('three'), array('in' => array('one', 'two')), true));
2125
	}
2126
 
2127
/**
2128
 * testNumeric method
2129
 *
2130
 * @return void
2131
 */
2132
	public function testNumeric() {
2133
		$this->assertFalse(Validation::numeric('teststring'));
2134
		$this->assertFalse(Validation::numeric('1.1test'));
2135
		$this->assertFalse(Validation::numeric('2test'));
2136
 
2137
		$this->assertTrue(Validation::numeric('2'));
2138
		$this->assertTrue(Validation::numeric(2));
2139
		$this->assertTrue(Validation::numeric(2.2));
2140
		$this->assertTrue(Validation::numeric('2.2'));
2141
	}
2142
 
2143
/**
2144
 * testNaturalNumber method
2145
 *
2146
 * @return void
2147
 */
2148
	public function testNaturalNumber() {
2149
		$this->assertFalse(Validation::naturalNumber('teststring'));
2150
		$this->assertFalse(Validation::naturalNumber('5.4'));
2151
		$this->assertFalse(Validation::naturalNumber(99.004));
2152
		$this->assertFalse(Validation::naturalNumber('0,05'));
2153
		$this->assertFalse(Validation::naturalNumber('-2'));
2154
		$this->assertFalse(Validation::naturalNumber(-2));
2155
		$this->assertFalse(Validation::naturalNumber('0'));
2156
		$this->assertFalse(Validation::naturalNumber('050'));
2157
 
2158
		$this->assertTrue(Validation::naturalNumber('2'));
2159
		$this->assertTrue(Validation::naturalNumber(49));
2160
		$this->assertTrue(Validation::naturalNumber('0', true));
2161
		$this->assertTrue(Validation::naturalNumber(0, true));
2162
	}
2163
 
2164
/**
2165
 * testPhone method
2166
 *
2167
 * @return void
2168
 */
2169
	public function testPhone() {
2170
		$this->assertFalse(Validation::phone('teststring'));
2171
		$this->assertFalse(Validation::phone('1-(33)-(333)-(4444)'));
2172
		$this->assertFalse(Validation::phone('1-(33)-3333-4444'));
2173
		$this->assertFalse(Validation::phone('1-(33)-33-4444'));
2174
		$this->assertFalse(Validation::phone('1-(33)-3-44444'));
2175
		$this->assertFalse(Validation::phone('1-(33)-3-444'));
2176
		$this->assertFalse(Validation::phone('1-(33)-3-44'));
2177
 
2178
		$this->assertFalse(Validation::phone('(055) 999-9999'));
2179
		$this->assertFalse(Validation::phone('(155) 999-9999'));
2180
		$this->assertFalse(Validation::phone('(595) 999-9999'));
2181
		$this->assertFalse(Validation::phone('(213) 099-9999'));
2182
		$this->assertFalse(Validation::phone('(213) 199-9999'));
2183
 
2184
		// invalid area-codes
2185
		$this->assertFalse(Validation::phone('1-(511)-999-9999'));
2186
		$this->assertFalse(Validation::phone('1-(555)-999-9999'));
2187
 
2188
		// invalid exhange
2189
		$this->assertFalse(Validation::phone('1-(222)-511-9999'));
2190
 
2191
		// invalid phone number
2192
		$this->assertFalse(Validation::phone('1-(222)-555-0199'));
2193
		$this->assertFalse(Validation::phone('1-(222)-555-0122'));
2194
 
2195
		// valid phone numbers
2196
		$this->assertTrue(Validation::phone('416-428-1234'));
2197
		$this->assertTrue(Validation::phone('1-(369)-333-4444'));
2198
		$this->assertTrue(Validation::phone('1-(973)-333-4444'));
2199
		$this->assertTrue(Validation::phone('1-(313)-555-9999'));
2200
		$this->assertTrue(Validation::phone('1-(222)-555-0299'));
2201
		$this->assertTrue(Validation::phone('508-428-1234'));
2202
		$this->assertTrue(Validation::phone('1-(508)-232-9651'));
2203
 
2204
		$this->assertTrue(Validation::phone('1 (222) 333 4444'));
2205
		$this->assertTrue(Validation::phone('+1 (222) 333 4444'));
2206
		$this->assertTrue(Validation::phone('(222) 333 4444'));
2207
 
2208
		$this->assertTrue(Validation::phone('1-(333)-333-4444'));
2209
		$this->assertTrue(Validation::phone('1.(333)-333-4444'));
2210
		$this->assertTrue(Validation::phone('1.(333).333-4444'));
2211
		$this->assertTrue(Validation::phone('1.(333).333.4444'));
2212
		$this->assertTrue(Validation::phone('1-333-333-4444'));
2213
	}
2214
 
2215
/**
2216
 * testPostal method
2217
 *
2218
 * @return void
2219
 */
2220
	public function testPostal() {
2221
		$this->assertFalse(Validation::postal('111', null, 'de'));
2222
		$this->assertFalse(Validation::postal('1111', null, 'de'));
2223
		$this->assertTrue(Validation::postal('13089', null, 'de'));
2224
 
2225
		$this->assertFalse(Validation::postal('111', null, 'be'));
2226
		$this->assertFalse(Validation::postal('0123', null, 'be'));
2227
		$this->assertTrue(Validation::postal('1204', null, 'be'));
2228
 
2229
		$this->assertFalse(Validation::postal('111', null, 'it'));
2230
		$this->assertFalse(Validation::postal('1111', null, 'it'));
2231
		$this->assertTrue(Validation::postal('13089', null, 'it'));
2232
 
2233
		$this->assertFalse(Validation::postal('111', null, 'uk'));
2234
		$this->assertFalse(Validation::postal('1111', null, 'uk'));
2235
		$this->assertFalse(Validation::postal('AZA 0AB', null, 'uk'));
2236
		$this->assertFalse(Validation::postal('X0A 0ABC', null, 'uk'));
2237
		$this->assertTrue(Validation::postal('X0A 0AB', null, 'uk'));
2238
		$this->assertTrue(Validation::postal('AZ0A 0AA', null, 'uk'));
2239
		$this->assertTrue(Validation::postal('A89 2DD', null, 'uk'));
2240
 
2241
		$this->assertFalse(Validation::postal('111', null, 'ca'));
2242
		$this->assertFalse(Validation::postal('1111', null, 'ca'));
2243
		$this->assertFalse(Validation::postal('D2A 0A0', null, 'ca'));
2244
		$this->assertFalse(Validation::postal('BAA 0ABC', null, 'ca'));
2245
		$this->assertFalse(Validation::postal('B2A AABC', null, 'ca'));
2246
		$this->assertFalse(Validation::postal('B2A 2AB', null, 'ca'));
2247
		$this->assertFalse(Validation::postal('K1A 1D1', null, 'ca'));
2248
		$this->assertFalse(Validation::postal('K1O 1Q1', null, 'ca'));
2249
		$this->assertFalse(Validation::postal('A1A 1U1', null, 'ca'));
2250
		$this->assertFalse(Validation::postal('A1F 1B1', null, 'ca'));
2251
		$this->assertTrue(Validation::postal('X0A 0A2', null, 'ca'));
2252
		$this->assertTrue(Validation::postal('G4V 4C3', null, 'ca'));
2253
 
2254
		$this->assertFalse(Validation::postal('111', null, 'us'));
2255
		$this->assertFalse(Validation::postal('1111', null, 'us'));
2256
		$this->assertFalse(Validation::postal('130896', null, 'us'));
2257
		$this->assertFalse(Validation::postal('13089-33333', null, 'us'));
2258
		$this->assertFalse(Validation::postal('13089-333', null, 'us'));
2259
		$this->assertFalse(Validation::postal('13A89-4333', null, 'us'));
2260
		$this->assertTrue(Validation::postal('13089-3333', null, 'us'));
2261
 
2262
		$this->assertFalse(Validation::postal('111'));
2263
		$this->assertFalse(Validation::postal('1111'));
2264
		$this->assertFalse(Validation::postal('130896'));
2265
		$this->assertFalse(Validation::postal('13089-33333'));
2266
		$this->assertFalse(Validation::postal('13089-333'));
2267
		$this->assertFalse(Validation::postal('13A89-4333'));
2268
		$this->assertTrue(Validation::postal('13089-3333'));
2269
	}
2270
 
2271
/**
2272
 * test that phone and postal pass to other classes.
2273
 *
2274
 * @return void
2275
 */
2276
	public function testPhonePostalSsnPass() {
2277
		$this->assertTrue(Validation::postal('text', null, 'testNl'));
2278
		$this->assertTrue(Validation::phone('text', null, 'testDe'));
2279
		$this->assertTrue(Validation::ssn('text', null, 'testNl'));
2280
	}
2281
 
2282
/**
2283
 * test pass through failure on postal
2284
 *
2285
 * @expectedException PHPUnit_Framework_Error
2286
 * @return void
2287
 */
2288
	public function testPassThroughMethodFailure() {
2289
		Validation::phone('text', null, 'testNl');
2290
	}
2291
 
2292
/**
2293
 * test the pass through calling of an alternate locale with postal()
2294
 *
2295
 * @expectedException PHPUnit_Framework_Error
2296
 * @return void
2297
 */
2298
	public function testPassThroughClassFailure() {
2299
		Validation::postal('text', null, 'AUTOFAIL');
2300
	}
2301
 
2302
/**
2303
 * test pass through method
2304
 *
2305
 * @return void
2306
 */
2307
	public function testPassThroughMethod() {
2308
		$this->assertTrue(Validation::postal('text', null, 'testNl'));
2309
	}
2310
 
2311
/**
2312
 * testSsn method
2313
 *
2314
 * @return void
2315
 */
2316
	public function testSsn() {
2317
		$this->assertFalse(Validation::ssn('111-333', null, 'dk'));
2318
		$this->assertFalse(Validation::ssn('111111-333', null, 'dk'));
2319
		$this->assertTrue(Validation::ssn('111111-3334', null, 'dk'));
2320
 
2321
		$this->assertFalse(Validation::ssn('1118333', null, 'nl'));
2322
		$this->assertFalse(Validation::ssn('1234567890', null, 'nl'));
2323
		$this->assertFalse(Validation::ssn('12345A789', null, 'nl'));
2324
		$this->assertTrue(Validation::ssn('123456789', null, 'nl'));
2325
 
2326
		$this->assertFalse(Validation::ssn('11-33-4333', null, 'us'));
2327
		$this->assertFalse(Validation::ssn('113-3-4333', null, 'us'));
2328
		$this->assertFalse(Validation::ssn('111-33-333', null, 'us'));
2329
		$this->assertTrue(Validation::ssn('111-33-4333', null, 'us'));
2330
	}
2331
 
2332
/**
2333
 * testUserDefined method
2334
 *
2335
 * @return void
2336
 */
2337
	public function testUserDefined() {
2338
		$validator = new CustomValidator;
2339
		$this->assertFalse(Validation::userDefined('33', $validator, 'customValidate'));
2340
		$this->assertFalse(Validation::userDefined('3333', $validator, 'customValidate'));
2341
		$this->assertTrue(Validation::userDefined('333', $validator, 'customValidate'));
2342
	}
2343
 
2344
/**
2345
 * testDatetime method
2346
 *
2347
 * @return void
2348
 */
2349
	public function testDatetime() {
2350
		$this->assertTrue(Validation::datetime('27-12-2006 01:00', 'dmy'));
2351
		$this->assertTrue(Validation::datetime('27-12-2006 01:00', array('dmy')));
2352
		$this->assertFalse(Validation::datetime('27-12-2006 1:00', 'dmy'));
2353
 
2354
		$this->assertTrue(Validation::datetime('27.12.2006 1:00pm', 'dmy'));
2355
		$this->assertFalse(Validation::datetime('27.12.2006 13:00pm', 'dmy'));
2356
 
2357
		$this->assertTrue(Validation::datetime('27/12/2006 1:00pm', 'dmy'));
2358
		$this->assertFalse(Validation::datetime('27/12/2006 9:00', 'dmy'));
2359
 
2360
		$this->assertTrue(Validation::datetime('27 12 2006 1:00pm', 'dmy'));
2361
		$this->assertFalse(Validation::datetime('27 12 2006 24:00', 'dmy'));
2362
 
2363
		$this->assertFalse(Validation::datetime('00-00-0000 1:00pm', 'dmy'));
2364
		$this->assertFalse(Validation::datetime('00.00.0000 1:00pm', 'dmy'));
2365
		$this->assertFalse(Validation::datetime('00/00/0000 1:00pm', 'dmy'));
2366
		$this->assertFalse(Validation::datetime('00 00 0000 1:00pm', 'dmy'));
2367
		$this->assertFalse(Validation::datetime('31-11-2006 1:00pm', 'dmy'));
2368
		$this->assertFalse(Validation::datetime('31.11.2006 1:00pm', 'dmy'));
2369
		$this->assertFalse(Validation::datetime('31/11/2006 1:00pm', 'dmy'));
2370
		$this->assertFalse(Validation::datetime('31 11 2006 1:00pm', 'dmy'));
2371
	}
2372
 
2373
/**
2374
 * testMimeType method
2375
 *
2376
 * @return void
2377
 */
2378
	public function testMimeType() {
2379
		$image = CORE_PATH . 'Cake' . DS . 'Test' . DS . 'test_app' . DS . 'webroot' . DS . 'img' . DS . 'cake.power.gif';
2380
		$File = new File($image, false);
2381
 
2382
		$this->skipIf(!$File->mime(), 'Cannot determine mimeType');
2383
 
2384
		$this->assertTrue(Validation::mimeType($image, array('image/gif')));
2385
		$this->assertTrue(Validation::mimeType(array('tmp_name' => $image), array('image/gif')));
2386
		$this->assertTrue(Validation::mimeType(array('tmp_name' => $image), '#image/.+#'));
2387
		$this->assertTrue(Validation::mimeType($image, array('image/GIF')));
2388
 
2389
		$this->assertFalse(Validation::mimeType($image, array('image/png')));
2390
		$this->assertFalse(Validation::mimeType(array('tmp_name' => $image), array('image/png')));
2391
	}
2392
 
2393
/**
2394
 * testMimeTypeFalse method
2395
 *
2396
 * @expectedException CakeException
2397
 * @return void
2398
 */
2399
	public function testMimeTypeFalse() {
2400
		$image = CORE_PATH . 'Cake' . DS . 'Test' . DS . 'test_app' . DS . 'webroot' . DS . 'img' . DS . 'cake.power.gif';
2401
		$File = new File($image, false);
2402
		$this->skipIf($File->mime(), 'mimeType can be determined, no Exception will be thrown');
2403
		Validation::mimeType($image, array('image/gif'));
2404
	}
2405
 
2406
/**
2407
 * testUploadError method
2408
 *
2409
 * @return void
2410
 */
2411
	public function testUploadError() {
2412
		$this->assertTrue(Validation::uploadError(0));
2413
		$this->assertTrue(Validation::uploadError(array('error' => 0)));
2414
		$this->assertTrue(Validation::uploadError(array('error' => '0')));
2415
 
2416
		$this->assertFalse(Validation::uploadError(2));
2417
		$this->assertFalse(Validation::uploadError(array('error' => 2)));
2418
		$this->assertFalse(Validation::uploadError(array('error' => '2')));
2419
	}
2420
 
2421
/**
2422
 * testFileSize method
2423
 *
2424
 * @return void
2425
 */
2426
	public function testFileSize() {
2427
		$image = CORE_PATH . 'Cake' . DS . 'Test' . DS . 'test_app' . DS . 'webroot' . DS . 'img' . DS . 'cake.power.gif';
2428
		$this->assertTrue(Validation::fileSize($image, '<', 1024));
2429
		$this->assertTrue(Validation::fileSize(array('tmp_name' => $image), 'isless', 1024));
2430
		$this->assertTrue(Validation::fileSize($image, '<', '1KB'));
2431
		$this->assertTrue(Validation::fileSize($image, '>=', 200));
2432
		$this->assertTrue(Validation::fileSize($image, '==', 201));
2433
		$this->assertTrue(Validation::fileSize($image, '==', '201B'));
2434
 
2435
		$this->assertFalse(Validation::fileSize($image, 'isgreater', 1024));
2436
		$this->assertFalse(Validation::fileSize(array('tmp_name' => $image), '>', '1KB'));
2437
	}
2438
 
2439
}