Completed
Pull Request — master (#131)
by Sandro
02:30
created

AssertTest::testLengthFailedForWrongEncoding()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 5
rs 9.4285
cc 1
eloc 3
nc 1
nop 0
1
<?php
2
namespace Assert\Tests;
3
4
use Assert\Assertion;
5
use Assert\AssertionFailedException;
6
7
class AssertTest extends \PHPUnit_Framework_TestCase
8
{
9
    public static function dataInvalidFloat()
10
    {
11
        return array(
12
            array(1),
13
            array(false),
14
            array("test"),
15
            array(null),
16
            array("1.23"),
17
            array("10"),
18
        );
19
    }
20
21
    /**
22
     * @dataProvider dataInvalidFloat
23
     */
24
    public function testInvalidFloat($nonFloat)
25
    {
26
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_FLOAT);
27
        Assertion::float($nonFloat);
28
    }
29
30
    public function testValidFloat()
31
    {
32
        Assertion::float(1.0);
33
        Assertion::float(0.1);
34
        Assertion::float(-1.1);
35
    }
36
37
    public static function dataInvalidInteger()
38
    {
39
        return array(
40
            array(1.23),
41
            array(false),
42
            array("test"),
43
            array(null),
44
            array("1.23"),
45
            array("10"),
46
            array(new \DateTime()),
47
        );
48
    }
49
50
    /**
51
     * @dataProvider dataInvalidInteger
52
     */
53
    public function testInvalidInteger($nonInteger)
54
    {
55
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_INTEGER);
56
        Assertion::integer($nonInteger);
57
    }
58
59
    public function testValidInteger()
60
    {
61
        Assertion::integer(10);
62
        Assertion::integer(0);
63
    }
64
65
    public function testValidIntegerish()
66
    {
67
        Assertion::integerish(10);
68
        Assertion::integerish("10");
69
    }
70
71
    public static function dataInvalidIntegerish()
72
    {
73
        return array(
74
            array(1.23),
75
            array(false),
76
            array("test"),
77
            array(null),
78
            array("1.23"),
79
        );
80
    }
81
82
    /**
83
     * @dataProvider dataInvalidIntegerish
84
     */
85
    public function testInvalidIntegerish($nonInteger)
86
    {
87
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_INTEGERISH);
88
        Assertion::integerish($nonInteger);
89
    }
90
91
    public function testValidBoolean()
92
    {
93
        Assertion::boolean(true);
94
        Assertion::boolean(false);
95
    }
96
97
    public function testInvalidBoolean()
98
    {
99
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_BOOLEAN);
100
        Assertion::boolean(1);
101
    }
102
103
    public function testInvalidScalar()
104
    {
105
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_SCALAR);
106
        Assertion::scalar(new \stdClass);
107
    }
108
109
    public function testValidScalar()
110
    {
111
        Assertion::scalar("foo");
112
        Assertion::scalar(52);
113
        Assertion::scalar(12.34);
114
        Assertion::scalar(false);
115
    }
116
117
    public static function dataInvalidNotEmpty()
118
    {
119
        return array(
120
            array(""),
121
            array(false),
122
            array(0),
123
            array(null),
124
            array( array() ),
125
        );
126
    }
127
128
    /**
129
     * @dataProvider dataInvalidNotEmpty
130
     */
131
    public function testInvalidNotEmpty($value)
132
    {
133
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::VALUE_EMPTY);
134
        Assertion::notEmpty($value);
135
    }
136
137
    public function testNotEmpty()
138
    {
139
        Assertion::notEmpty("test");
140
        Assertion::notEmpty(1);
141
        Assertion::notEmpty(true);
142
        Assertion::notEmpty( array("foo") );
143
    }
144
145
    public function testEmpty()
146
    {
147
        Assertion::noContent("");
148
        Assertion::noContent(0);
149
        Assertion::noContent(false);
150
        Assertion::noContent( array() );
151
    }
152
153
    public static function dataInvalidEmpty()
154
    {
155
        return array(
156
            array("foo"),
157
            array(true),
158
            array(12),
159
            array( array('foo') ),
160
            array( new \stdClass() ),
161
        );
162
    }
163
164
    /**
165
     * @dataProvider dataInvalidEmpty
166
     */
167
    public function testInvalidEmpty($value)
168
    {
169
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::VALUE_NOT_EMPTY);
170
        Assertion::noContent($value);
171
    }
172
173
    public function testNotNull()
174
    {
175
        Assertion::notNull("1");
176
        Assertion::notNull(1);
177
        Assertion::notNull(0);
178
        Assertion::notNull(array());
179
        Assertion::notNull(false);
180
    }
181
182
    public function testInvalidNotNull()
183
    {
184
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::VALUE_NULL);
185
        Assertion::notNull(null);
186
    }
187
188
    public function testString()
189
    {
190
        Assertion::string("test-string");
191
        Assertion::string("");
192
    }
193
194
    /**
195
     * @dataProvider dataInvalidString
196
     */
197
    public function testInvalidString($invalidString)
198
    {
199
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_STRING);
200
        Assertion::string($invalidString);
201
    }
202
203
    public static function dataInvalidString()
204
    {
205
        return array(
206
            array(1.23),
207
            array(false),
208
            array(new \ArrayObject),
209
            array(null),
210
            array(10),
211
            array(true),
212
        );
213
    }
214
215
    public function testInvalidRegex()
216
    {
217
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_REGEX);
218
        Assertion::regex("foo", "(bar)");
219
    }
220
221
    public function testInvalidRegexValueNotString()
222
    {
223
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_STRING);
224
        Assertion::regex(array("foo"), "(bar)");
225
    }
226
227
    public function testInvalidMinLength()
228
    {
229
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_MIN_LENGTH);
230
        Assertion::minLength("foo", 4);
231
    }
232
233
    public function testValidMinLength()
234
    {
235
        Assertion::minLength("foo", 3);
236
        Assertion::minLength("foo", 1);
237
        Assertion::minLength("foo", 0);
238
        Assertion::minLength("", 0);
239
        Assertion::minLength("址址", 2);
240
    }
241
242
    public function testInvalidMaxLength()
243
    {
244
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_MAX_LENGTH);
245
        Assertion::maxLength("foo", 2);
246
    }
247
248
    public function testValidMaxLength()
249
    {
250
        Assertion::maxLength("foo", 10);
251
        Assertion::maxLength("foo", 3);
252
        Assertion::maxLength("", 0);
253
        Assertion::maxLength("址址", 2);
254
    }
255
256
    public function testInvalidBetweenLengthMin()
257
    {
258
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_MIN_LENGTH);
259
        Assertion::betweenLength("foo", 4, 100);
260
    }
261
262
    public function testInvalidBetweenLengthMax()
263
    {
264
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_MAX_LENGTH);
265
        Assertion::betweenLength("foo", 0, 2);
266
    }
267
268
    public function testValidBetweenLength()
269
    {
270
        Assertion::betweenLength("foo", 0, 3);
271
        Assertion::betweenLength("址址", 2, 2);
272
    }
273
274
    public function testInvalidStartsWith()
275
    {
276
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_STRING_START);
277
        Assertion::startsWith("foo", "bar");
278
    }
279
280
    public function testInvalidStartsWithDueToWrongEncoding()
281
    {
282
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_STRING_START);
283
        Assertion::startsWith("址", "址址", null, null, 'ASCII');
0 ignored issues
show
Unused Code introduced by
The call to Assertion::startsWith() has too many arguments starting with 'ASCII'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
284
    }
285
286
    public function testValidStartsWith()
287
    {
288
        Assertion::startsWith("foo", "foo");
289
        Assertion::startsWith("foo", "fo");
290
        Assertion::startsWith("foo", "f");
291
        Assertion::startsWith("址foo", "址");
292
    }
293
294
    public function testInvalidEndsWith()
295
    {
296
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_STRING_END);
297
        Assertion::endsWith("foo", "bar");
298
    }
299
300
    public function testInvalidEndsWithDueToWrongEncoding()
301
    {
302
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_STRING_END);
303
        Assertion::endsWith("址", "址址", null, null, 'ASCII');
0 ignored issues
show
Unused Code introduced by
The call to Assertion::endsWith() has too many arguments starting with 'ASCII'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
304
    }
305
306
    public function testValidEndsWith()
307
    {
308
        Assertion::endsWith("foo", "foo");
309
        Assertion::endsWith("sonderbar", "bar");
310
        Assertion::endsWith("opp", "p");
311
        Assertion::endsWith("foo址", "址");
312
    }
313
314
    public function testInvalidContains()
315
    {
316
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_STRING_CONTAINS);
317
        Assertion::contains("foo", "bar");
318
    }
319
320
    public function testValidContains()
321
    {
322
        Assertion::contains("foo", "foo");
323
        Assertion::contains("foo", "oo");
324
    }
325
326
    public function testInvalidChoice()
327
    {
328
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_CHOICE);
329
        Assertion::choice("foo", array("bar", "baz"));
330
    }
331
332
    public function testValidChoice()
333
    {
334
        Assertion::choice("foo", array("foo"));
335
    }
336
337
    public function testInvalidInArray()
338
    {
339
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_CHOICE);
340
        Assertion::inArray("bar", array("baz"));
341
    }
342
343
    public function testValidInArray()
344
    {
345
        Assertion::inArray("foo", array("foo"));
346
    }
347
348
    public function testInvalidNumeric()
349
    {
350
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_NUMERIC);
351
        Assertion::numeric("foo");
352
    }
353
354
    public function testValidNumeric()
355
    {
356
        Assertion::numeric("1");
357
        Assertion::numeric(1);
358
        Assertion::numeric(1.23);
359
    }
360
361
    public static function dataInvalidArray()
362
    {
363
        return array(
364
            array(null),
365
            array(false),
366
            array("test"),
367
            array(1),
368
            array(1.23),
369
            array(new \StdClass),
370
            array(fopen('php://memory', 'r')),
371
        );
372
    }
373
374
    /**
375
     * @dataProvider dataInvalidArray
376
     */
377
    public function testInvalidArray($value)
378
    {
379
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_ARRAY);
380
        Assertion::isArray($value);
381
    }
382
383
    public function testValidArray()
384
    {
385
        Assertion::isArray(array());
386
        Assertion::isArray(array(1,2,3));
387
        Assertion::isArray(array(array(),array()));
388
    }
389
390
    public function testInvalidKeyExists()
391
    {
392
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_KEY_EXISTS);
393
        Assertion::keyExists(array("foo" => "bar"), "baz");
394
    }
395
396
    public function testValidKeyExists()
397
    {
398
        Assertion::keyExists(array("foo" => "bar"), "foo");
399
    }
400
401
    public static function dataInvalidNotBlank()
402
    {
403
        return array(
404
            array(""),
405
            array(" "),
406
            array("\t"),
407
            array("\n"),
408
            array("\r"),
409
            array(false),
410
            array(null),
411
            array( array() ),
412
        );
413
    }
414
415
    /**
416
     * @dataProvider dataInvalidNotBlank
417
     */
418
    public function testInvalidNotBlank($notBlank)
419
    {
420
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_NOT_BLANK);
421
        Assertion::notBlank($notBlank);
422
    }
423
424
    public function testValidNotBlank()
425
    {
426
        Assertion::notBlank("foo");
427
    }
428
429
    public function testInvalidNotInstanceOf()
430
    {
431
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_NOT_INSTANCE_OF);
432
        Assertion::notIsInstanceOf(new \stdClass, 'stdClass');
433
    }
434
435
    public function testValidNotIsInstanceOf()
436
    {
437
        Assertion::notIsInstanceOf(new \stdClass, 'PDO');
438
    }
439
440
    public function testInvalidInstanceOf()
441
    {
442
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_INSTANCE_OF);
443
        Assertion::isInstanceOf(new \stdClass, 'PDO');
444
    }
445
446
    public function testValidInstanceOf()
447
    {
448
        Assertion::isInstanceOf(new \stdClass, 'stdClass');
449
    }
450
451
    public function testInvalidSubclassOf()
452
    {
453
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_SUBCLASS_OF);
454
        Assertion::subclassOf(new \stdClass, 'PDO');
455
    }
456
457
    public function testValidSubclassOf()
458
    {
459
        Assertion::subclassOf(new ChildStdClass, 'stdClass');
460
    }
461
462
    public function testInvalidRange()
463
    {
464
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_RANGE);
465
        Assertion::range(1, 2, 3);
466
        Assertion::range(1.5, 2, 3);
467
    }
468
469
    public function testValidRange()
470
    {
471
        Assertion::range(1, 1, 2);
472
        Assertion::range(2, 1, 2);
473
        Assertion::range(2, 0, 100);
474
        Assertion::range(2.5, 2.25, 2.75);
475
    }
476
477
    public function testInvalidEmail()
478
    {
479
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_EMAIL);
480
        Assertion::email("foo");
481
    }
482
483
    public function testValidEmail()
484
    {
485
        Assertion::email("[email protected]");
486
    }
487
488
    /**
489
     * @dataProvider dataInvalidUrl
490
     */
491
    public function testInvalidUrl($url)
492
    {
493
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_URL);
494
495
        Assertion::url($url);
496
    }
497
498
    public static function dataInvalidUrl()
499
    {
500
        return array(
501
            'null value' => array(""),
502
            'empty string' => array(" "),
503
            'no scheme' => array("url.de"),
504
            'unsupported scheme' => array("git://url.de"),
505
            'Http with query (no / between tld und ?)' => array("http://example.org?do=something"),
506
            'Http with query and port (no / between port und ?)' => array("http://example.org:8080?do=something"),
507
        );
508
    }
509
510
    /**
511
     * @dataProvider dataValidUrl
512
     */
513
    public function testValidUrl($url)
514
    {
515
        Assertion::url($url);
516
    }
517
518
    public static function dataValidUrl()
519
    {
520
        return array(
521
            'straight with Http' => array("http://example.org"),
522
            'Http with path' => array("http://example.org/do/something"),
523
            'Http with query' => array("http://example.org/index.php?do=something"),
524
            'Http with port' => array("http://example.org:8080"),
525
            'Http with all possibilities' => array("http://example.org:8080/do/something/index.php?do=something"),
526
            'straight with Https' => array("https://example.org"),
527
        );
528
    }
529
530
    public function testInvalidDigit()
531
    {
532
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_DIGIT);
533
        Assertion::digit(-1);
534
    }
535
536
    public function testValidDigit()
537
    {
538
        Assertion::digit(1);
539
        Assertion::digit(0);
540
        Assertion::digit("0");
541
    }
542
543
    public function testValidAlnum()
544
    {
545
        Assertion::alnum("a");
546
        Assertion::alnum("a1");
547
        Assertion::alnum("aasdf1234");
548
        Assertion::alnum("a1b2c3");
549
    }
550
551
    public function testInvalidAlnum()
552
    {
553
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_ALNUM);
554
        Assertion::alnum("1a");
555
    }
556
557
    public function testValidTrue()
558
    {
559
        Assertion::true(1 == 1);
560
    }
561
562
    public function testInvalidTrue()
563
    {
564
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_TRUE);
565
        Assertion::true(false);
566
    }
567
568
    public function testValidFalse()
569
    {
570
        Assertion::false(1 == 0);
571
    }
572
573
    public function testInvalidFalse()
574
    {
575
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_FALSE);
576
        Assertion::false(true);
577
    }
578
579
    public function testInvalidClass()
580
    {
581
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_CLASS);
582
        Assertion::classExists("Foo");
583
    }
584
585
    public function testValidClass()
586
    {
587
        Assertion::classExists("\\Exception");
588
    }
589
590
    public function testSame()
591
    {
592
        Assertion::same(1,1);
593
        Assertion::same("foo","foo");
594
        Assertion::same($obj = new \stdClass(), $obj);
595
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_SAME);
596
        Assertion::same(new \stdClass(), new \stdClass());
597
    }
598
599
    public function testEq()
600
    {
601
        Assertion::eq(1,"1");
602
        Assertion::eq("foo",true);
603
        Assertion::eq($obj = new \stdClass(), $obj);
604
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_EQ);
605
        Assertion::eq("2", 1);
606
    }
607
608
    public function testNotEq()
609
    {
610
        Assertion::NotEq("1", false);
611
        Assertion::NotEq(new \stdClass(), array());
612
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_NOT_EQ);
613
        Assertion::NotEq("1", 1);
614
    }
615
616
    public function testNotSame()
617
    {
618
        Assertion::notSame("1", 2);
619
        Assertion::notSame(new \stdClass(), array());
620
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_NOT_SAME);
621
        Assertion::notSame(1, 1);
622
    }
623
624
    public function testMin()
625
    {
626
        Assertion::min(1, 1);
627
        Assertion::min(2, 1);
628
        Assertion::min(2.5, 1);
629
630
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_MIN);
631
        Assertion::min(0, 1);
632
    }
633
634
    public function testMax()
635
    {
636
        Assertion::max(1, 1);
637
        Assertion::max(0.5, 1);
638
        Assertion::max(0, 1);
639
640
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_MAX);
641
        Assertion::max(2, 1);
642
    }
643
644
    public function testNullOr()
645
    {
646
        Assertion::nullOrMax(null, 1);
647
        Assertion::nullOrMax(null, 2);
648
    }
649
650
    public function testNullOrWithNoValueThrows()
651
    {
652
        $this->setExpectedException('BadMethodCallException');
653
        Assertion::nullOrMax();
0 ignored issues
show
Bug introduced by
The call to nullOrMax() misses some required arguments starting with $value.
Loading history...
654
    }
655
656
    public function testLength()
657
    {
658
        Assertion::length("asdf", 4);
659
        Assertion::length("", 0);
660
    }
661
662
    public static function dataLengthUtf8Characters()
663
    {
664
        return array(
665
            array("址", 1),
666
            array("ل", 1),
667
        );
668
    }
669
670
    /**
671
     * @dataProvider dataLengthUtf8Characters
672
     */
673
    public function testLenghtUtf8Characters($value, $expected)
674
    {
675
        Assertion::length($value, $expected);
676
    }
677
678
    public function testLengthFailed()
679
    {
680
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_LENGTH);
681
        Assertion::length("asdf", 3);
682
    }
683
684
    public function testLengthValidForGivenEncoding()
685
    {
686
        Assertion::length("址", 1, null, null, 'utf8');
0 ignored issues
show
Unused Code introduced by
The call to Assertion::length() has too many arguments starting with 'utf8'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
687
    }
688
689
    public function testFile()
690
    {
691
        Assertion::file(__FILE__);
692
    }
693
694
    public function testFileWithEmptyFilename()
695
    {
696
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::VALUE_EMPTY);
697
        Assertion::file("");
698
    }
699
700
    public function testFileDoesNotExists()
701
    {
702
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_FILE);
703
        Assertion::file(__DIR__ . '/does-not-exists');
704
    }
705
706
    public function testDirectory()
707
    {
708
        Assertion::directory(__DIR__);
709
710
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_DIRECTORY);
711
        Assertion::directory(__DIR__ . '/does-not-exist');
712
    }
713
714
    public function testReadable()
715
    {
716
        Assertion::readable(__FILE__);
717
718
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_READABLE);
719
        Assertion::readable(__DIR__ . '/does-not-exist');
720
    }
721
722
    public function testWriteable()
723
    {
724
        Assertion::writeable(sys_get_temp_dir());
725
726
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_WRITEABLE);
727
        Assertion::writeable(__DIR__ . '/does-not-exist');
728
    }
729
730
    /**
731
     * @expectedException \BadMethodCallException
732
     * @expectedExceptionMessage No assertion
733
     */
734
    public function testFailedNullOrMethodCall()
735
    {
736
        Assertion::NullOrAssertionDoesNotExist();
737
    }
738
739
    public function testImplementsInterface()
740
    {
741
        Assertion::implementsInterface(
742
            '\ArrayIterator',
743
            '\Traversable'
744
        );
745
746
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INTERFACE_NOT_IMPLEMENTED);
747
        Assertion::implementsInterface(
748
            '\Exception',
749
            '\Traversable'
750
        );
751
    }
752
753
    public function testImplementsInterfaceWithClassObject()
754
    {
755
        $class = new \ArrayObject();
756
757
        Assertion::implementsInterface(
758
            $class,
759
            '\Traversable'
760
        );
761
762
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INTERFACE_NOT_IMPLEMENTED);
763
        Assertion::implementsInterface(
764
            $class,
765
            '\SplObserver'
766
        );
767
    }
768
769
    /**
770
     * @dataProvider isJsonStringDataprovider
771
     */
772
    public function testIsJsonString($content)
773
    {
774
        Assertion::isJsonString($content);
775
    }
776
777
    public static function isJsonStringDataprovider()
778
    {
779
        return array(
780
            '»null« value' => array(json_encode(null)),
781
            '»false« value' => array(json_encode(false)),
782
            'array value' => array('["false"]'),
783
            'object value' => array('{"tux":"false"}'),
784
        );
785
    }
786
787
    /**
788
     * @dataProvider isJsonStringInvalidStringDataprovider
789
     */
790
    public function testIsJsonStringExpectingException($invalidString)
791
    {
792
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_JSON_STRING);
793
        Assertion::isJsonString($invalidString);
794
    }
795
796
    public static function isJsonStringInvalidStringDataprovider()
797
    {
798
        return array(
799
            'no json string' => array('invalid json encoded string'),
800
            'error in json string' => array('{invalid json encoded string}'),
801
        );
802
    }
803
804
    /**
805
     * @dataProvider providesValidUuids
806
     */
807
    public function testValidUuids($uuid)
808
    {
809
        Assertion::uuid($uuid);
810
    }
811
812
    /**
813
     * @dataProvider providesInvalidUuids
814
     */
815
    public function testInvalidUuids($uuid)
816
    {
817
        $this->setExpectedException('Assert\InvalidArgumentException');
818
        Assertion::uuid($uuid);
819
    }
820
821
    static public function providesValidUuids()
0 ignored issues
show
Coding Style introduced by
As per PSR2, the static declaration should come after the visibility declaration.
Loading history...
822
    {
823
        return array(
824
            array('ff6f8cb0-c57d-11e1-9b21-0800200c9a66'),
825
            array('ff6f8cb0-c57d-21e1-9b21-0800200c9a66'),
826
            array('ff6f8cb0-c57d-31e1-9b21-0800200c9a66'),
827
            array('ff6f8cb0-c57d-41e1-9b21-0800200c9a66'),
828
            array('ff6f8cb0-c57d-51e1-9b21-0800200c9a66'),
829
            array('FF6F8CB0-C57D-11E1-9B21-0800200C9A66'),
830
        );
831
    }
832
833
    static public function providesInvalidUuids()
0 ignored issues
show
Coding Style introduced by
As per PSR2, the static declaration should come after the visibility declaration.
Loading history...
834
    {
835
        return array(
836
            array('zf6f8cb0-c57d-11e1-9b21-0800200c9a66'),
837
            array('af6f8cb0c57d11e19b210800200c9a66'),
838
            array('ff6f8cb0-c57da-51e1-9b21-0800200c9a66'),
839
            array('af6f8cb-c57d-11e1-9b21-0800200c9a66'),
840
            array('3f6f8cb0-c57d-11e1-9b21-0800200c9a6'),
841
        );
842
    }
843
844
    public function testValidNotEmptyKey()
845
    {
846
        Assertion::notEmptyKey(array('keyExists' => 'notEmpty'), 'keyExists');
847
    }
848
849
    /**
850
     * @dataProvider invalidNotEmptyKeyDataprovider
851
     */
852
    public function testInvalidNotEmptyKey($invalidArray, $key)
853
    {
854
        $this->setExpectedException('Assert\InvalidArgumentException');
855
        Assertion::notEmptyKey($invalidArray, $key);
856
    }
857
858
    public static function invalidNotEmptyKeyDataprovider()
859
    {
860
        return array(
861
            'empty'          => array(array('keyExists' => ''), 'keyExists'),
862
            'key not exists' => array(array('key' => 'notEmpty'), 'keyNotExists')
863
        );
864
    }
865
866
    public function testAllWithSimpleAssertion()
867
    {
868
        Assertion::allTrue(array(true, true));
869
    }
870
871
    public function testAllWithSimpleAssertionThrowsExceptionOnElementThatFailsAssertion()
872
    {
873
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_TRUE);
874
        Assertion::allTrue(array(true, false));
875
    }
876
877
    public function testAllWithComplexAssertion()
878
    {
879
        Assertion::allIsInstanceOf(array(new \stdClass, new \stdClass), 'stdClass');
880
    }
881
882
    public function testAllWithComplexAssertionThrowsExceptionOnElementThatFailsAssertion()
883
    {
884
        $this->setExpectedException('Assert\AssertionFailedException', 'Assertion failed', Assertion::INVALID_INSTANCE_OF);
885
886
        Assertion::allIsInstanceOf(array(new \stdClass, new \stdClass), 'PDO', 'Assertion failed', 'foos');
887
    }
888
889
    public function testAllWithNoValueThrows()
890
    {
891
        $this->setExpectedException('BadMethodCallException');
892
        Assertion::allTrue();
0 ignored issues
show
Bug introduced by
The call to allTrue() misses a required argument $value.

This check looks for function calls that miss required arguments.

Loading history...
893
    }
894
895
    public function testValidCount()
896
    {
897
        Assertion::count(array('Hi'), 1);
898
        Assertion::count(new OneCountable(), 1);
899
    }
900
901
    public static function dataInvalidCount()
902
    {
903
        return array(
904
            array(array('Hi', 'There'), 3),
905
            array(new OneCountable(), 2),
906
        );
907
    }
908
909
    /**
910
     * @dataProvider dataInvalidCount
911
     */
912
    public function testInvalidCount($countable, $count)
913
    {
914
        $this->setExpectedException('Assert\AssertionFailedException', 'List does not contain exactly "'.$count.'" elements.', Assertion::INVALID_COUNT);
915
        Assertion::count($countable, $count);
916
    }
917
918
    public function testChoicesNotEmpty()
919
    {
920
        Assertion::choicesNotEmpty(
921
            array('tux' => 'linux', 'Gnu' => 'dolphin'),
922
            array('tux')
923
        );
924
    }
925
926
    /**
927
     * @dataProvider invalidChoicesProvider
928
     */
929
    public function testChoicesNotEmptyExpectingException($values, $choices, $exceptionCode)
930
    {
931
        $this->setExpectedException('Assert\AssertionFailedException', null, $exceptionCode);
932
        Assertion::choicesNotEmpty(
933
            $values,
934
            $choices
935
        );
936
    }
937
938
    public function invalidChoicesProvider()
939
    {
940
        return array(
941
            'empty values' => array(array(), array('tux'), Assertion::VALUE_EMPTY),
942
            'empty recodes in $values' => array(array('tux' => ''), array('tux'), Assertion::VALUE_EMPTY),
943
            'choice not found in values' => array(array('tux' => ''), array('invalidChoice'), Assertion::INVALID_KEY_ISSET),
944
        );
945
    }
946
947
    public function testIsObject()
948
    {
949
        Assertion::isObject(new \StdClass);
950
    }
951
952
    public function testIsObjectExpectingException()
953
    {
954
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_OBJECT);
955
        Assertion::isObject('notAnObject');
956
    }
957
958
    public function testMethodExists()
959
    {
960
        Assertion::methodExists('methodExists', new Assertion());
961
    }
962
963
    /**
964
     * @test
965
     */
966
    public function it_passes_values_and_constraints_to_exception()
0 ignored issues
show
Coding Style introduced by
Method name "AssertTest::it_passes_values_and_constraints_to_exception" is not in camel caps format
Loading history...
967
    {
968
        try {
969
            Assertion::range(0, 10, 20);
970
971
            $this->fail('Exception expected');
972
        } catch (AssertionFailedException $e) {
973
            $this->assertEquals(0, $e->getValue());
974
            $this->assertEquals(array('min' => 10, 'max' => 20), $e->getConstraints());
975
        }
976
    }
977
978
    public function testLessThan()
979
    {
980
        Assertion::lessThan(1, 2);
981
        Assertion::lessThan('aaa', 'bbb');
982
        Assertion::lessThan('aaa', 'aaaa');
983
        Assertion::lessThan(new \DateTime('today'), new \DateTime('tomorrow'));
984
    }
985
986
    public function invalidLessProvider()
987
    {
988
        return array(
989
            array(2, 1),
990
            array(2, 2),
991
            array('aaa', 'aaa'),
992
            array('aaaa', 'aaa'),
993
            array(new \DateTime('today'), new \DateTime('yesterday')),
994
            array(new \DateTime('today'), new \DateTime('today')),
995
        );
996
    }
997
998
    /**
999
     * @dataProvider invalidLessProvider
1000
     */
1001
    public function testLessThanThrowsException($value, $limit)
1002
    {
1003
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_LESS);
1004
        Assertion::lessThan($value, $limit);
1005
    }
1006
1007
    public function testLessOrEqualThan()
1008
    {
1009
        Assertion::lessOrEqualThan(1, 2);
1010
        Assertion::lessOrEqualThan(1, 1);
1011
        Assertion::lessOrEqualThan('aaa', 'bbb');
1012
        Assertion::lessOrEqualThan('aaa', 'aaaa');
1013
        Assertion::lessOrEqualThan('aaa', 'aaa');
1014
        Assertion::lessOrEqualThan(new \DateTime('today'), new \DateTime('tomorrow'));
1015
        Assertion::lessOrEqualThan(new \DateTime('today'), new \DateTime('today'));
1016
    }
1017
1018
    public function invalidLessOrEqualProvider()
1019
    {
1020
        return array(
1021
            array(2, 1),
1022
            array('aaaa', 'aaa'),
1023
            array(new \DateTime('today'), new \DateTime('yesterday')),
1024
        );
1025
    }
1026
1027
    /**
1028
     * @dataProvider invalidLessOrEqualProvider
1029
     */
1030
    public function testLessOrEqualThanThrowsException($value, $limit)
1031
    {
1032
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_LESS_OR_EQUAL);
1033
        Assertion::lessOrEqualThan($value, $limit);
1034
    }
1035
1036
    public function testGreaterThan()
1037
    {
1038
        Assertion::greaterThan(2, 1);
1039
        Assertion::greaterThan('bbb', 'aaa');
1040
        Assertion::greaterThan('aaaa', 'aaa');
1041
        Assertion::greaterThan(new \DateTime('tomorrow'), new \DateTime('today'));
1042
    }
1043
1044
    public function invalidGreaterProvider()
1045
    {
1046
        return array(
1047
            array(1, 2),
1048
            array(2, 2),
1049
            array('aaa', 'aaa'),
1050
            array('aaa', 'aaaa'),
1051
            array(new \DateTime('yesterday'), new \DateTime('today')),
1052
            array(new \DateTime('today'), new \DateTime('today')),
1053
        );
1054
    }
1055
1056
    /**
1057
     * @dataProvider validDateProvider
1058
     */
1059
    public function testValidDate($value, $format)
1060
    {
1061
        Assertion::date($value, $format);
1062
    }
1063
1064
    public function validDateProvider()
1065
    {
1066
        return array(
1067
            array('2012-03-13', 'Y-m-d'),
1068
            array('29.02.2012 12:03:36.432563', 'd.m.Y H:i:s.u'),
1069
            array('13.08.2015 17:08:23 Thu Thursday th 224 August Aug 8 15 17 432563 UTC UTC', 'd.m.Y H:i:s D l S z F M n y H u e T'),
1070
            array('1439486158', 'U')
1071
        );
1072
    }
1073
1074
    /**
1075
     * @dataProvider invalidGreaterProvider
1076
     */
1077
    public function testGreaterThanThrowsException($value, $limit)
1078
    {
1079
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_GREATER);
1080
        Assertion::greaterThan($value, $limit);
1081
    }
1082
1083
    public function testGreaterOrEqualThan()
1084
    {
1085
        Assertion::greaterOrEqualThan(2, 1);
1086
        Assertion::greaterOrEqualThan(1, 1);
1087
        Assertion::greaterOrEqualThan('bbb', 'aaa');
1088
        Assertion::greaterOrEqualThan('aaaa', 'aaa');
1089
        Assertion::greaterOrEqualThan('aaa', 'aaa');
1090
        Assertion::greaterOrEqualThan(new \DateTime('tomorrow'), new \DateTime('today'));
1091
        Assertion::greaterOrEqualThan(new \DateTime('today'), new \DateTime('today'));
1092
    }
1093
1094
    public function invalidGreaterOrEqualProvider()
1095
    {
1096
        return array(
1097
            array(1, 2),
1098
            array('aaa', 'aaaa'),
1099
            array(new \DateTime('yesterday'), new \DateTime('tomorrow')),
1100
        );
1101
    }
1102
1103
    /**
1104
     * @dataProvider invalidGreaterOrEqualProvider
1105
     *
1106
     * @param mixed $value
1107
     * @param mixed $limit
1108
     */
1109
    public function testGreaterOrEqualThanThrowsException($value, $limit)
1110
    {
1111
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_GREATER_OR_EQUAL);
1112
        Assertion::greaterOrEqualThan($value, $limit);
1113
    }
1114
1115
    /**
1116
     * @dataProvider invalidDateProvider
1117
     */
1118
    public function testInvalidDate($value, $format)
1119
    {
1120
        $this->setExpectedException('Assert\AssertionFailedException', null, Assertion::INVALID_DATE);
1121
        Assertion::date($value, $format);
1122
    }
1123
1124
    public function invalidDateProvider()
1125
    {
1126
        return array(
1127
            array('this is not the date', 'Y-m-d'),
1128
            array('2011-02-29', 'Y-m-d'),
1129
            array('2012.02.29 12:60:36.432563', 'Y.m.d H:i:s.u')
1130
        );
1131
    }
1132
}
1133
1134
class ChildStdClass extends \stdClass
0 ignored issues
show
Coding Style Compatibility introduced by
PSR1 recommends that each class should be in its own file to aid autoloaders.

Having each class in a dedicated file usually plays nice with PSR autoloaders and is therefore a well established practice. If you use other autoloaders, you might not want to follow this rule.

Loading history...
1135
{
1136
1137
}
1138
1139
class OneCountable implements \Countable
0 ignored issues
show
Coding Style Compatibility introduced by
PSR1 recommends that each class should be in its own file to aid autoloaders.

Having each class in a dedicated file usually plays nice with PSR autoloaders and is therefore a well established practice. If you use other autoloaders, you might not want to follow this rule.

Loading history...
1140
{
1141
    public function count()
1142
    {
1143
        return 1;
1144
    }
1145
}
1146