Completed
Push — master ( 96df1a...267f86 )
by Naveen
09:52
created

PHPUnit_Framework_Assert   F

Complexity

Total Complexity 287

Size/Duplication

Total Lines 3150
Duplicated Lines 23.52 %

Coupling/Cohesion

Components 1
Dependencies 41
Metric Value
wmc 287
lcom 1
cbo 41
dl 741
loc 3150
rs 0.5217

137 Methods

Rating   Name   Duplication   Size   Complexity  
B assertArrayHasKey() 0 20 5
A assertArraySubset() 20 20 3
B assertArrayNotHasKey() 0 22 5
B assertContains() 30 30 6
A assertAttributeContains() 11 11 1
B assertNotContains() 34 34 6
A assertAttributeNotContains() 11 11 1
B assertContainsOnly() 23 23 5
A assertContainsOnlyInstancesOf() 0 19 4
A assertAttributeContainsOnly() 0 9 1
B assertNotContainsOnly() 25 25 5
A assertAttributeNotContainsOnly() 0 9 1
B assertCount() 18 18 5
A assertAttributeCount() 0 8 1
B assertNotCount() 18 18 5
A assertAttributeNotCount() 0 8 1
A assertEquals() 12 12 1
A assertAttributeEquals() 12 12 1
A assertNotEquals() 14 14 1
A assertAttributeNotEquals() 12 12 1
A assertEmpty() 0 4 1
A assertAttributeEmpty() 0 7 1
A assertNotEmpty() 0 4 1
A assertAttributeNotEmpty() 0 7 1
A assertGreaterThan() 0 4 1
A assertAttributeGreaterThan() 0 8 1
A assertGreaterThanOrEqual() 0 8 1
A assertAttributeGreaterThanOrEqual() 0 8 1
A assertLessThan() 0 4 1
A assertAttributeLessThan() 0 8 1
A assertLessThanOrEqual() 0 4 1
A assertAttributeLessThanOrEqual() 0 8 1
A assertFileEquals() 15 15 1
A assertFileNotEquals() 15 15 1
A assertStringEqualsFile() 14 14 1
A assertStringNotEqualsFile() 14 14 1
A assertFileExists() 0 10 2
A assertFileNotExists() 0 12 2
A assertTrue() 0 4 1
A assertNotTrue() 0 4 1
A assertFalse() 0 4 1
A assertNotFalse() 0 4 1
A assertNotNull() 0 4 1
A assertNull() 0 4 1
B assertClassHasAttribute() 20 20 5
B assertClassNotHasAttribute() 20 20 5
B assertClassHasStaticAttribute() 20 20 5
B assertClassNotHasStaticAttribute() 22 22 5
A assertObjectHasAttribute() 20 20 4
A assertObjectNotHasAttribute() 20 20 4
A assertSame() 0 12 3
A assertAttributeSame() 0 8 1
A assertNotSame() 0 12 3
A assertAttributeNotSame() 0 8 1
A assertInstanceOf() 0 12 4
A assertAttributeInstanceOf() 0 8 1
A assertNotInstanceOf() 0 12 4
A assertAttributeNotInstanceOf() 0 8 1
A assertInternalType() 0 12 2
A assertAttributeInternalType() 0 8 1
A assertNotInternalType() 0 12 2
A assertAttributeNotInternalType() 0 8 1
A assertRegExp() 14 14 3
A assertNotRegExp() 16 16 3
B assertSameSize() 20 20 7
B assertNotSameSize() 20 20 7
A assertStringMatchesFormat() 14 14 3
A assertStringNotMatchesFormat() 16 16 3
A assertStringMatchesFormatFile() 0 14 2
A assertStringNotMatchesFormatFile() 0 16 2
A assertStringStartsWith() 16 16 3
A assertStringStartsNotWith() 16 16 3
A assertStringEndsWith() 14 14 3
A assertStringEndsNotWith() 16 16 3
A assertXmlFileEqualsXmlFile() 0 7 1
A assertXmlFileNotEqualsXmlFile() 0 7 1
A assertXmlStringEqualsXmlFile() 7 7 1
A assertXmlStringNotEqualsXmlFile() 0 7 1
A assertXmlStringEqualsXmlString() 7 7 1
A assertXmlStringNotEqualsXmlString() 7 7 1
C assertEqualXMLStructure() 0 71 8
A assertSelectCount() 13 13 1
A assertSelectRegExp() 13 13 1
C assertSelectEquals() 0 49 16
A assertTag() 10 10 2
A assertNotTag() 10 10 2
A assertThat() 0 6 1
A assertJson() 0 8 2
A assertJsonStringEqualsJsonString() 10 10 1
A assertJsonStringNotEqualsJsonString() 10 10 1
A assertJsonStringEqualsJsonFile() 15 15 1
A assertJsonStringNotEqualsJsonFile() 15 15 1
A assertJsonFileNotEqualsJsonFile() 21 21 1
A assertJsonFileEqualsJsonFile() 21 21 1
A logicalAnd() 0 9 1
A logicalOr() 0 9 1
A logicalNot() 0 4 1
A logicalXor() 0 9 1
A anything() 0 4 1
A isTrue() 0 4 1
A callback() 0 4 1
A isFalse() 0 4 1
A isJson() 0 4 1
A isNull() 0 4 1
A attribute() 0 7 1
A contains() 0 4 1
A containsOnly() 0 4 1
A containsOnlyInstancesOf() 0 4 1
A arrayHasKey() 0 4 1
A equalTo() 0 10 1
A attributeEqualTo() 0 13 1
A isEmpty() 0 4 1
A fileExists() 0 4 1
A greaterThan() 0 4 1
A greaterThanOrEqual() 0 7 1
A classHasAttribute() 0 6 1
A classHasStaticAttribute() 0 6 1
A objectHasAttribute() 0 6 1
A identicalTo() 0 4 1
A isInstanceOf() 0 4 1
A isType() 0 4 1
A lessThan() 0 4 1
A lessThanOrEqual() 0 7 1
A matchesRegularExpression() 0 4 1
A matches() 0 4 1
A stringStartsWith() 0 4 1
A stringContains() 0 4 1
A stringEndsWith() 0 4 1
A countOf() 0 4 1
A fail() 0 4 1
B readAttribute() 0 34 6
C getStaticAttribute() 0 37 7
C getObjectAttribute() 0 47 10
A markTestIncomplete() 0 4 1
A markTestSkipped() 0 4 1
A getCount() 0 4 1
A resetCount() 0 4 1

How to fix   Duplicated Code    Complexity   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

Complex Class

 Tip:   Before tackling complexity, make sure that you eliminate any duplication first. This often can reduce the size of classes significantly.

Complex classes like PHPUnit_Framework_Assert often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes. You can also have a look at the cohesion graph to spot any un-connected, or weakly-connected components.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

While breaking up the class, it is a good idea to analyze how other classes use PHPUnit_Framework_Assert, and based on these observations, apply Extract Interface, too.

1
<?php
2
/*
3
 * This file is part of PHPUnit.
4
 *
5
 * (c) Sebastian Bergmann <[email protected]>
6
 *
7
 * For the full copyright and license information, please view the LICENSE
8
 * file that was distributed with this source code.
9
 */
10
11
/**
12
 * A set of assert methods.
13
 *
14
 * @since Class available since Release 2.0.0
15
 */
16
abstract class PHPUnit_Framework_Assert
0 ignored issues
show
Coding Style Compatibility introduced by
PSR1 recommends that each class must be in a namespace of at least one level to avoid collisions.

You can fix this by adding a namespace to your class:

namespace YourVendor;

class YourClass { }

When choosing a vendor namespace, try to pick something that is not too generic to avoid conflicts with other libraries.

Loading history...
17
{
18
    /**
19
     * @var int
20
     */
21
    private static $count = 0;
22
23
    /**
24
     * Asserts that an array has a specified key.
25
     *
26
     * @param mixed             $key
27
     * @param array|ArrayAccess $array
28
     * @param string            $message
29
     *
30
     * @since Method available since Release 3.0.0
31
     */
32
    public static function assertArrayHasKey($key, $array, $message = '')
33
    {
34
        if (!(is_integer($key) || is_string($key))) {
35
            throw PHPUnit_Util_InvalidArgumentHelper::factory(
36
                1,
37
                'integer or string'
38
            );
39
        }
40
41
        if (!(is_array($array) || $array instanceof ArrayAccess)) {
42
            throw PHPUnit_Util_InvalidArgumentHelper::factory(
43
                2,
44
                'array or ArrayAccess'
45
            );
46
        }
47
48
        $constraint = new PHPUnit_Framework_Constraint_ArrayHasKey($key);
49
50
        self::assertThat($array, $constraint, $message);
51
    }
52
53
    /**
54
     * Asserts that an array has a specified subset.
55
     *
56
     * @param array|ArrayAccess $subset
57
     * @param array|ArrayAccess $array
58
     * @param bool              $strict  Check for object identity
59
     * @param string            $message
60
     *
61
     * @since Method available since Release 4.4.0
62
     */
63 View Code Duplication
    public static function assertArraySubset($subset, $array, $strict = false, $message = '')
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
64
    {
65
        if (!is_array($subset)) {
66
            throw PHPUnit_Util_InvalidArgumentHelper::factory(
67
                1,
68
                'array or ArrayAccess'
69
            );
70
        }
71
72
        if (!is_array($array)) {
73
            throw PHPUnit_Util_InvalidArgumentHelper::factory(
74
                2,
75
                'array or ArrayAccess'
76
            );
77
        }
78
79
        $constraint = new PHPUnit_Framework_Constraint_ArraySubset($subset, $strict);
80
81
        self::assertThat($array, $constraint, $message);
82
    }
83
84
    /**
85
     * Asserts that an array does not have a specified key.
86
     *
87
     * @param mixed             $key
88
     * @param array|ArrayAccess $array
89
     * @param string            $message
90
     *
91
     * @since  Method available since Release 3.0.0
92
     */
93
    public static function assertArrayNotHasKey($key, $array, $message = '')
94
    {
95
        if (!(is_integer($key) || is_string($key))) {
96
            throw PHPUnit_Util_InvalidArgumentHelper::factory(
97
                1,
98
                'integer or string'
99
            );
100
        }
101
102
        if (!(is_array($array) || $array instanceof ArrayAccess)) {
103
            throw PHPUnit_Util_InvalidArgumentHelper::factory(
104
                2,
105
                'array or ArrayAccess'
106
            );
107
        }
108
109
        $constraint = new PHPUnit_Framework_Constraint_Not(
110
            new PHPUnit_Framework_Constraint_ArrayHasKey($key)
111
        );
112
113
        self::assertThat($array, $constraint, $message);
114
    }
115
116
    /**
117
     * Asserts that a haystack contains a needle.
118
     *
119
     * @param mixed  $needle
120
     * @param mixed  $haystack
121
     * @param string $message
122
     * @param bool   $ignoreCase
123
     * @param bool   $checkForObjectIdentity
124
     * @param bool   $checkForNonObjectIdentity
125
     *
126
     * @since  Method available since Release 2.1.0
127
     */
128 View Code Duplication
    public static function assertContains($needle, $haystack, $message = '', $ignoreCase = false, $checkForObjectIdentity = true, $checkForNonObjectIdentity = false)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
129
    {
130
        if (is_array($haystack) ||
131
            is_object($haystack) && $haystack instanceof Traversable) {
132
            $constraint = new PHPUnit_Framework_Constraint_TraversableContains(
133
                $needle,
134
                $checkForObjectIdentity,
135
                $checkForNonObjectIdentity
136
            );
137
        } elseif (is_string($haystack)) {
138
            if (!is_string($needle)) {
139
                throw PHPUnit_Util_InvalidArgumentHelper::factory(
140
                    1,
141
                    'string'
142
                );
143
            }
144
145
            $constraint = new PHPUnit_Framework_Constraint_StringContains(
146
                $needle,
147
                $ignoreCase
148
            );
149
        } else {
150
            throw PHPUnit_Util_InvalidArgumentHelper::factory(
151
                2,
152
                'array, traversable or string'
153
            );
154
        }
155
156
        self::assertThat($haystack, $constraint, $message);
157
    }
158
159
    /**
160
     * Asserts that a haystack that is stored in a static attribute of a class
161
     * or an attribute of an object contains a needle.
162
     *
163
     * @param mixed  $needle
164
     * @param string $haystackAttributeName
165
     * @param mixed  $haystackClassOrObject
166
     * @param string $message
167
     * @param bool   $ignoreCase
168
     * @param bool   $checkForObjectIdentity
169
     * @param bool   $checkForNonObjectIdentity
170
     *
171
     * @since  Method available since Release 3.0.0
172
     */
173 View Code Duplication
    public static function assertAttributeContains($needle, $haystackAttributeName, $haystackClassOrObject, $message = '', $ignoreCase = false, $checkForObjectIdentity = true, $checkForNonObjectIdentity = false)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
174
    {
175
        self::assertContains(
176
            $needle,
177
            self::readAttribute($haystackClassOrObject, $haystackAttributeName),
178
            $message,
179
            $ignoreCase,
180
            $checkForObjectIdentity,
181
            $checkForNonObjectIdentity
182
        );
183
    }
184
185
    /**
186
     * Asserts that a haystack does not contain a needle.
187
     *
188
     * @param mixed  $needle
189
     * @param mixed  $haystack
190
     * @param string $message
191
     * @param bool   $ignoreCase
192
     * @param bool   $checkForObjectIdentity
193
     * @param bool   $checkForNonObjectIdentity
194
     *
195
     * @since  Method available since Release 2.1.0
196
     */
197 View Code Duplication
    public static function assertNotContains($needle, $haystack, $message = '', $ignoreCase = false, $checkForObjectIdentity = true, $checkForNonObjectIdentity = false)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
198
    {
199
        if (is_array($haystack) ||
200
            is_object($haystack) && $haystack instanceof Traversable) {
201
            $constraint = new PHPUnit_Framework_Constraint_Not(
202
                new PHPUnit_Framework_Constraint_TraversableContains(
203
                    $needle,
204
                    $checkForObjectIdentity,
205
                    $checkForNonObjectIdentity
206
                )
207
            );
208
        } elseif (is_string($haystack)) {
209
            if (!is_string($needle)) {
210
                throw PHPUnit_Util_InvalidArgumentHelper::factory(
211
                    1,
212
                    'string'
213
                );
214
            }
215
216
            $constraint = new PHPUnit_Framework_Constraint_Not(
217
                new PHPUnit_Framework_Constraint_StringContains(
218
                    $needle,
219
                    $ignoreCase
220
                )
221
            );
222
        } else {
223
            throw PHPUnit_Util_InvalidArgumentHelper::factory(
224
                2,
225
                'array, traversable or string'
226
            );
227
        }
228
229
        self::assertThat($haystack, $constraint, $message);
230
    }
231
232
    /**
233
     * Asserts that a haystack that is stored in a static attribute of a class
234
     * or an attribute of an object does not contain a needle.
235
     *
236
     * @param mixed  $needle
237
     * @param string $haystackAttributeName
238
     * @param mixed  $haystackClassOrObject
239
     * @param string $message
240
     * @param bool   $ignoreCase
241
     * @param bool   $checkForObjectIdentity
242
     * @param bool   $checkForNonObjectIdentity
243
     *
244
     * @since  Method available since Release 3.0.0
245
     */
246 View Code Duplication
    public static function assertAttributeNotContains($needle, $haystackAttributeName, $haystackClassOrObject, $message = '', $ignoreCase = false, $checkForObjectIdentity = true, $checkForNonObjectIdentity = false)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
247
    {
248
        self::assertNotContains(
249
            $needle,
250
            self::readAttribute($haystackClassOrObject, $haystackAttributeName),
251
            $message,
252
            $ignoreCase,
253
            $checkForObjectIdentity,
254
            $checkForNonObjectIdentity
255
        );
256
    }
257
258
    /**
259
     * Asserts that a haystack contains only values of a given type.
260
     *
261
     * @param string $type
262
     * @param mixed  $haystack
263
     * @param bool   $isNativeType
264
     * @param string $message
265
     *
266
     * @since  Method available since Release 3.1.4
267
     */
268 View Code Duplication
    public static function assertContainsOnly($type, $haystack, $isNativeType = null, $message = '')
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
269
    {
270
        if (!(is_array($haystack) ||
271
            is_object($haystack) && $haystack instanceof Traversable)) {
272
            throw PHPUnit_Util_InvalidArgumentHelper::factory(
273
                2,
274
                'array or traversable'
275
            );
276
        }
277
278
        if ($isNativeType == null) {
279
            $isNativeType = PHPUnit_Util_Type::isType($type);
280
        }
281
282
        self::assertThat(
283
            $haystack,
284
            new PHPUnit_Framework_Constraint_TraversableContainsOnly(
285
                $type,
286
                $isNativeType
287
            ),
288
            $message
289
        );
290
    }
291
292
    /**
293
     * Asserts that a haystack contains only instances of a given classname
294
     *
295
     * @param string            $classname
296
     * @param array|Traversable $haystack
297
     * @param string            $message
298
     */
299
    public static function assertContainsOnlyInstancesOf($classname, $haystack, $message = '')
300
    {
301
        if (!(is_array($haystack) ||
302
            is_object($haystack) && $haystack instanceof Traversable)) {
303
            throw PHPUnit_Util_InvalidArgumentHelper::factory(
304
                2,
305
                'array or traversable'
306
            );
307
        }
308
309
        self::assertThat(
310
            $haystack,
311
            new PHPUnit_Framework_Constraint_TraversableContainsOnly(
312
                $classname,
313
                false
314
            ),
315
            $message
316
        );
317
    }
318
319
    /**
320
     * Asserts that a haystack that is stored in a static attribute of a class
321
     * or an attribute of an object contains only values of a given type.
322
     *
323
     * @param string $type
324
     * @param string $haystackAttributeName
325
     * @param mixed  $haystackClassOrObject
326
     * @param bool   $isNativeType
327
     * @param string $message
328
     *
329
     * @since  Method available since Release 3.1.4
330
     */
331
    public static function assertAttributeContainsOnly($type, $haystackAttributeName, $haystackClassOrObject, $isNativeType = null, $message = '')
332
    {
333
        self::assertContainsOnly(
334
            $type,
335
            self::readAttribute($haystackClassOrObject, $haystackAttributeName),
336
            $isNativeType,
337
            $message
338
        );
339
    }
340
341
    /**
342
     * Asserts that a haystack does not contain only values of a given type.
343
     *
344
     * @param string $type
345
     * @param mixed  $haystack
346
     * @param bool   $isNativeType
347
     * @param string $message
348
     *
349
     * @since  Method available since Release 3.1.4
350
     */
351 View Code Duplication
    public static function assertNotContainsOnly($type, $haystack, $isNativeType = null, $message = '')
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
352
    {
353
        if (!(is_array($haystack) ||
354
            is_object($haystack) && $haystack instanceof Traversable)) {
355
            throw PHPUnit_Util_InvalidArgumentHelper::factory(
356
                2,
357
                'array or traversable'
358
            );
359
        }
360
361
        if ($isNativeType == null) {
362
            $isNativeType = PHPUnit_Util_Type::isType($type);
363
        }
364
365
        self::assertThat(
366
            $haystack,
367
            new PHPUnit_Framework_Constraint_Not(
368
                new PHPUnit_Framework_Constraint_TraversableContainsOnly(
369
                    $type,
370
                    $isNativeType
371
                )
372
            ),
373
            $message
374
        );
375
    }
376
377
    /**
378
     * Asserts that a haystack that is stored in a static attribute of a class
379
     * or an attribute of an object does not contain only values of a given
380
     * type.
381
     *
382
     * @param string $type
383
     * @param string $haystackAttributeName
384
     * @param mixed  $haystackClassOrObject
385
     * @param bool   $isNativeType
386
     * @param string $message
387
     *
388
     * @since  Method available since Release 3.1.4
389
     */
390
    public static function assertAttributeNotContainsOnly($type, $haystackAttributeName, $haystackClassOrObject, $isNativeType = null, $message = '')
391
    {
392
        self::assertNotContainsOnly(
393
            $type,
394
            self::readAttribute($haystackClassOrObject, $haystackAttributeName),
395
            $isNativeType,
396
            $message
397
        );
398
    }
399
400
    /**
401
     * Asserts the number of elements of an array, Countable or Traversable.
402
     *
403
     * @param int    $expectedCount
404
     * @param mixed  $haystack
405
     * @param string $message
406
     */
407 View Code Duplication
    public static function assertCount($expectedCount, $haystack, $message = '')
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
408
    {
409
        if (!is_int($expectedCount)) {
410
            throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'integer');
411
        }
412
413
        if (!$haystack instanceof Countable &&
414
            !$haystack instanceof Traversable &&
415
            !is_array($haystack)) {
416
            throw PHPUnit_Util_InvalidArgumentHelper::factory(2, 'countable or traversable');
417
        }
418
419
        self::assertThat(
420
            $haystack,
421
            new PHPUnit_Framework_Constraint_Count($expectedCount),
422
            $message
423
        );
424
    }
425
426
    /**
427
     * Asserts the number of elements of an array, Countable or Traversable
428
     * that is stored in an attribute.
429
     *
430
     * @param int    $expectedCount
431
     * @param string $haystackAttributeName
432
     * @param mixed  $haystackClassOrObject
433
     * @param string $message
434
     *
435
     * @since Method available since Release 3.6.0
436
     */
437
    public static function assertAttributeCount($expectedCount, $haystackAttributeName, $haystackClassOrObject, $message = '')
438
    {
439
        self::assertCount(
440
            $expectedCount,
441
            self::readAttribute($haystackClassOrObject, $haystackAttributeName),
442
            $message
443
        );
444
    }
445
446
    /**
447
     * Asserts the number of elements of an array, Countable or Traversable.
448
     *
449
     * @param int    $expectedCount
450
     * @param mixed  $haystack
451
     * @param string $message
452
     */
453 View Code Duplication
    public static function assertNotCount($expectedCount, $haystack, $message = '')
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
454
    {
455
        if (!is_int($expectedCount)) {
456
            throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'integer');
457
        }
458
459
        if (!$haystack instanceof Countable &&
460
            !$haystack instanceof Traversable &&
461
            !is_array($haystack)) {
462
            throw PHPUnit_Util_InvalidArgumentHelper::factory(2, 'countable or traversable');
463
        }
464
465
        $constraint = new PHPUnit_Framework_Constraint_Not(
466
            new PHPUnit_Framework_Constraint_Count($expectedCount)
467
        );
468
469
        self::assertThat($haystack, $constraint, $message);
470
    }
471
472
    /**
473
     * Asserts the number of elements of an array, Countable or Traversable
474
     * that is stored in an attribute.
475
     *
476
     * @param int    $expectedCount
477
     * @param string $haystackAttributeName
478
     * @param mixed  $haystackClassOrObject
479
     * @param string $message
480
     *
481
     * @since Method available since Release 3.6.0
482
     */
483
    public static function assertAttributeNotCount($expectedCount, $haystackAttributeName, $haystackClassOrObject, $message = '')
484
    {
485
        self::assertNotCount(
486
            $expectedCount,
487
            self::readAttribute($haystackClassOrObject, $haystackAttributeName),
488
            $message
489
        );
490
    }
491
492
    /**
493
     * Asserts that two variables are equal.
494
     *
495
     * @param mixed  $expected
496
     * @param mixed  $actual
497
     * @param string $message
498
     * @param float  $delta
499
     * @param int    $maxDepth
500
     * @param bool   $canonicalize
501
     * @param bool   $ignoreCase
502
     */
503 View Code Duplication
    public static function assertEquals($expected, $actual, $message = '', $delta = 0.0, $maxDepth = 10, $canonicalize = false, $ignoreCase = false)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
504
    {
505
        $constraint = new PHPUnit_Framework_Constraint_IsEqual(
506
            $expected,
507
            $delta,
508
            $maxDepth,
509
            $canonicalize,
510
            $ignoreCase
511
        );
512
513
        self::assertThat($actual, $constraint, $message);
514
    }
515
516
    /**
517
     * Asserts that a variable is equal to an attribute of an object.
518
     *
519
     * @param mixed  $expected
520
     * @param string $actualAttributeName
521
     * @param string $actualClassOrObject
522
     * @param string $message
523
     * @param float  $delta
524
     * @param int    $maxDepth
525
     * @param bool   $canonicalize
526
     * @param bool   $ignoreCase
527
     */
528 View Code Duplication
    public static function assertAttributeEquals($expected, $actualAttributeName, $actualClassOrObject, $message = '', $delta = 0.0, $maxDepth = 10, $canonicalize = false, $ignoreCase = false)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
529
    {
530
        self::assertEquals(
531
            $expected,
532
            self::readAttribute($actualClassOrObject, $actualAttributeName),
533
            $message,
534
            $delta,
535
            $maxDepth,
536
            $canonicalize,
537
            $ignoreCase
538
        );
539
    }
540
541
    /**
542
     * Asserts that two variables are not equal.
543
     *
544
     * @param mixed  $expected
545
     * @param mixed  $actual
546
     * @param string $message
547
     * @param float  $delta
548
     * @param int    $maxDepth
549
     * @param bool   $canonicalize
550
     * @param bool   $ignoreCase
551
     *
552
     * @since  Method available since Release 2.3.0
553
     */
554 View Code Duplication
    public static function assertNotEquals($expected, $actual, $message = '', $delta = 0.0, $maxDepth = 10, $canonicalize = false, $ignoreCase = false)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
555
    {
556
        $constraint = new PHPUnit_Framework_Constraint_Not(
557
            new PHPUnit_Framework_Constraint_IsEqual(
558
                $expected,
559
                $delta,
560
                $maxDepth,
561
                $canonicalize,
562
                $ignoreCase
563
            )
564
        );
565
566
        self::assertThat($actual, $constraint, $message);
567
    }
568
569
    /**
570
     * Asserts that a variable is not equal to an attribute of an object.
571
     *
572
     * @param mixed  $expected
573
     * @param string $actualAttributeName
574
     * @param string $actualClassOrObject
575
     * @param string $message
576
     * @param float  $delta
577
     * @param int    $maxDepth
578
     * @param bool   $canonicalize
579
     * @param bool   $ignoreCase
580
     */
581 View Code Duplication
    public static function assertAttributeNotEquals($expected, $actualAttributeName, $actualClassOrObject, $message = '', $delta = 0.0, $maxDepth = 10, $canonicalize = false, $ignoreCase = false)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
582
    {
583
        self::assertNotEquals(
584
            $expected,
585
            self::readAttribute($actualClassOrObject, $actualAttributeName),
586
            $message,
587
            $delta,
588
            $maxDepth,
589
            $canonicalize,
590
            $ignoreCase
591
        );
592
    }
593
594
    /**
595
     * Asserts that a variable is empty.
596
     *
597
     * @param mixed  $actual
598
     * @param string $message
599
     *
600
     * @throws PHPUnit_Framework_AssertionFailedError
601
     */
602
    public static function assertEmpty($actual, $message = '')
603
    {
604
        self::assertThat($actual, self::isEmpty(), $message);
605
    }
606
607
    /**
608
     * Asserts that a static attribute of a class or an attribute of an object
609
     * is empty.
610
     *
611
     * @param string $haystackAttributeName
612
     * @param mixed  $haystackClassOrObject
613
     * @param string $message
614
     *
615
     * @since Method available since Release 3.5.0
616
     */
617
    public static function assertAttributeEmpty($haystackAttributeName, $haystackClassOrObject, $message = '')
618
    {
619
        self::assertEmpty(
620
            self::readAttribute($haystackClassOrObject, $haystackAttributeName),
621
            $message
622
        );
623
    }
624
625
    /**
626
     * Asserts that a variable is not empty.
627
     *
628
     * @param mixed  $actual
629
     * @param string $message
630
     *
631
     * @throws PHPUnit_Framework_AssertionFailedError
632
     */
633
    public static function assertNotEmpty($actual, $message = '')
634
    {
635
        self::assertThat($actual, self::logicalNot(self::isEmpty()), $message);
636
    }
637
638
    /**
639
     * Asserts that a static attribute of a class or an attribute of an object
640
     * is not empty.
641
     *
642
     * @param string $haystackAttributeName
643
     * @param mixed  $haystackClassOrObject
644
     * @param string $message
645
     *
646
     * @since Method available since Release 3.5.0
647
     */
648
    public static function assertAttributeNotEmpty($haystackAttributeName, $haystackClassOrObject, $message = '')
649
    {
650
        self::assertNotEmpty(
651
            self::readAttribute($haystackClassOrObject, $haystackAttributeName),
652
            $message
653
        );
654
    }
655
656
    /**
657
     * Asserts that a value is greater than another value.
658
     *
659
     * @param mixed  $expected
660
     * @param mixed  $actual
661
     * @param string $message
662
     *
663
     * @since  Method available since Release 3.1.0
664
     */
665
    public static function assertGreaterThan($expected, $actual, $message = '')
666
    {
667
        self::assertThat($actual, self::greaterThan($expected), $message);
668
    }
669
670
    /**
671
     * Asserts that an attribute is greater than another value.
672
     *
673
     * @param mixed  $expected
674
     * @param string $actualAttributeName
675
     * @param string $actualClassOrObject
676
     * @param string $message
677
     *
678
     * @since  Method available since Release 3.1.0
679
     */
680
    public static function assertAttributeGreaterThan($expected, $actualAttributeName, $actualClassOrObject, $message = '')
681
    {
682
        self::assertGreaterThan(
683
            $expected,
684
            self::readAttribute($actualClassOrObject, $actualAttributeName),
685
            $message
686
        );
687
    }
688
689
    /**
690
     * Asserts that a value is greater than or equal to another value.
691
     *
692
     * @param mixed  $expected
693
     * @param mixed  $actual
694
     * @param string $message
695
     *
696
     * @since  Method available since Release 3.1.0
697
     */
698
    public static function assertGreaterThanOrEqual($expected, $actual, $message = '')
699
    {
700
        self::assertThat(
701
            $actual,
702
            self::greaterThanOrEqual($expected),
703
            $message
704
        );
705
    }
706
707
    /**
708
     * Asserts that an attribute is greater than or equal to another value.
709
     *
710
     * @param mixed  $expected
711
     * @param string $actualAttributeName
712
     * @param string $actualClassOrObject
713
     * @param string $message
714
     *
715
     * @since  Method available since Release 3.1.0
716
     */
717
    public static function assertAttributeGreaterThanOrEqual($expected, $actualAttributeName, $actualClassOrObject, $message = '')
718
    {
719
        self::assertGreaterThanOrEqual(
720
            $expected,
721
            self::readAttribute($actualClassOrObject, $actualAttributeName),
722
            $message
723
        );
724
    }
725
726
    /**
727
     * Asserts that a value is smaller than another value.
728
     *
729
     * @param mixed  $expected
730
     * @param mixed  $actual
731
     * @param string $message
732
     *
733
     * @since  Method available since Release 3.1.0
734
     */
735
    public static function assertLessThan($expected, $actual, $message = '')
736
    {
737
        self::assertThat($actual, self::lessThan($expected), $message);
738
    }
739
740
    /**
741
     * Asserts that an attribute is smaller than another value.
742
     *
743
     * @param mixed  $expected
744
     * @param string $actualAttributeName
745
     * @param string $actualClassOrObject
746
     * @param string $message
747
     *
748
     * @since  Method available since Release 3.1.0
749
     */
750
    public static function assertAttributeLessThan($expected, $actualAttributeName, $actualClassOrObject, $message = '')
751
    {
752
        self::assertLessThan(
753
            $expected,
754
            self::readAttribute($actualClassOrObject, $actualAttributeName),
755
            $message
756
        );
757
    }
758
759
    /**
760
     * Asserts that a value is smaller than or equal to another value.
761
     *
762
     * @param mixed  $expected
763
     * @param mixed  $actual
764
     * @param string $message
765
     *
766
     * @since  Method available since Release 3.1.0
767
     */
768
    public static function assertLessThanOrEqual($expected, $actual, $message = '')
769
    {
770
        self::assertThat($actual, self::lessThanOrEqual($expected), $message);
771
    }
772
773
    /**
774
     * Asserts that an attribute is smaller than or equal to another value.
775
     *
776
     * @param mixed  $expected
777
     * @param string $actualAttributeName
778
     * @param string $actualClassOrObject
779
     * @param string $message
780
     *
781
     * @since  Method available since Release 3.1.0
782
     */
783
    public static function assertAttributeLessThanOrEqual($expected, $actualAttributeName, $actualClassOrObject, $message = '')
784
    {
785
        self::assertLessThanOrEqual(
786
            $expected,
787
            self::readAttribute($actualClassOrObject, $actualAttributeName),
788
            $message
789
        );
790
    }
791
792
    /**
793
     * Asserts that the contents of one file is equal to the contents of another
794
     * file.
795
     *
796
     * @param string $expected
797
     * @param string $actual
798
     * @param string $message
799
     * @param bool   $canonicalize
800
     * @param bool   $ignoreCase
801
     *
802
     * @since  Method available since Release 3.2.14
803
     */
804 View Code Duplication
    public static function assertFileEquals($expected, $actual, $message = '', $canonicalize = false, $ignoreCase = false)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
805
    {
806
        self::assertFileExists($expected, $message);
807
        self::assertFileExists($actual, $message);
808
809
        self::assertEquals(
810
            file_get_contents($expected),
811
            file_get_contents($actual),
812
            $message,
813
            0,
814
            10,
815
            $canonicalize,
816
            $ignoreCase
817
        );
818
    }
819
820
    /**
821
     * Asserts that the contents of one file is not equal to the contents of
822
     * another file.
823
     *
824
     * @param string $expected
825
     * @param string $actual
826
     * @param string $message
827
     * @param bool   $canonicalize
828
     * @param bool   $ignoreCase
829
     *
830
     * @since  Method available since Release 3.2.14
831
     */
832 View Code Duplication
    public static function assertFileNotEquals($expected, $actual, $message = '', $canonicalize = false, $ignoreCase = false)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
833
    {
834
        self::assertFileExists($expected, $message);
835
        self::assertFileExists($actual, $message);
836
837
        self::assertNotEquals(
838
            file_get_contents($expected),
839
            file_get_contents($actual),
840
            $message,
841
            0,
842
            10,
843
            $canonicalize,
844
            $ignoreCase
845
        );
846
    }
847
848
    /**
849
     * Asserts that the contents of a string is equal
850
     * to the contents of a file.
851
     *
852
     * @param string $expectedFile
853
     * @param string $actualString
854
     * @param string $message
855
     * @param bool   $canonicalize
856
     * @param bool   $ignoreCase
857
     *
858
     * @since  Method available since Release 3.3.0
859
     */
860 View Code Duplication
    public static function assertStringEqualsFile($expectedFile, $actualString, $message = '', $canonicalize = false, $ignoreCase = false)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
861
    {
862
        self::assertFileExists($expectedFile, $message);
863
864
        self::assertEquals(
865
            file_get_contents($expectedFile),
866
            $actualString,
867
            $message,
868
            0,
869
            10,
870
            $canonicalize,
871
            $ignoreCase
872
        );
873
    }
874
875
    /**
876
     * Asserts that the contents of a string is not equal
877
     * to the contents of a file.
878
     *
879
     * @param string $expectedFile
880
     * @param string $actualString
881
     * @param string $message
882
     * @param bool   $canonicalize
883
     * @param bool   $ignoreCase
884
     *
885
     * @since  Method available since Release 3.3.0
886
     */
887 View Code Duplication
    public static function assertStringNotEqualsFile($expectedFile, $actualString, $message = '', $canonicalize = false, $ignoreCase = false)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
888
    {
889
        self::assertFileExists($expectedFile, $message);
890
891
        self::assertNotEquals(
892
            file_get_contents($expectedFile),
893
            $actualString,
894
            $message,
895
            0,
896
            10,
897
            $canonicalize,
898
            $ignoreCase
899
        );
900
    }
901
902
    /**
903
     * Asserts that a file exists.
904
     *
905
     * @param string $filename
906
     * @param string $message
907
     *
908
     * @since  Method available since Release 3.0.0
909
     */
910
    public static function assertFileExists($filename, $message = '')
911
    {
912
        if (!is_string($filename)) {
913
            throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'string');
914
        }
915
916
        $constraint = new PHPUnit_Framework_Constraint_FileExists;
917
918
        self::assertThat($filename, $constraint, $message);
919
    }
920
921
    /**
922
     * Asserts that a file does not exist.
923
     *
924
     * @param string $filename
925
     * @param string $message
926
     *
927
     * @since  Method available since Release 3.0.0
928
     */
929
    public static function assertFileNotExists($filename, $message = '')
930
    {
931
        if (!is_string($filename)) {
932
            throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'string');
933
        }
934
935
        $constraint = new PHPUnit_Framework_Constraint_Not(
936
            new PHPUnit_Framework_Constraint_FileExists
937
        );
938
939
        self::assertThat($filename, $constraint, $message);
940
    }
941
942
    /**
943
     * Asserts that a condition is true.
944
     *
945
     * @param bool   $condition
946
     * @param string $message
947
     *
948
     * @throws PHPUnit_Framework_AssertionFailedError
949
     */
950
    public static function assertTrue($condition, $message = '')
951
    {
952
        self::assertThat($condition, self::isTrue(), $message);
953
    }
954
955
    /**
956
     * Asserts that a condition is not true.
957
     *
958
     * @param bool   $condition
959
     * @param string $message
960
     *
961
     * @throws PHPUnit_Framework_AssertionFailedError
962
     */
963
    public static function assertNotTrue($condition, $message = '')
964
    {
965
        self::assertThat($condition, self::logicalNot(self::isTrue()), $message);
966
    }
967
968
    /**
969
     * Asserts that a condition is false.
970
     *
971
     * @param bool   $condition
972
     * @param string $message
973
     *
974
     * @throws PHPUnit_Framework_AssertionFailedError
975
     */
976
    public static function assertFalse($condition, $message = '')
977
    {
978
        self::assertThat($condition, self::isFalse(), $message);
979
    }
980
981
    /**
982
     * Asserts that a condition is not false.
983
     *
984
     * @param bool   $condition
985
     * @param string $message
986
     *
987
     * @throws PHPUnit_Framework_AssertionFailedError
988
     */
989
    public static function assertNotFalse($condition, $message = '')
990
    {
991
        self::assertThat($condition, self::logicalNot(self::isFalse()), $message);
992
    }
993
994
    /**
995
     * Asserts that a variable is not null.
996
     *
997
     * @param mixed  $actual
998
     * @param string $message
999
     */
1000
    public static function assertNotNull($actual, $message = '')
1001
    {
1002
        self::assertThat($actual, self::logicalNot(self::isNull()), $message);
1003
    }
1004
1005
    /**
1006
     * Asserts that a variable is null.
1007
     *
1008
     * @param mixed  $actual
1009
     * @param string $message
1010
     */
1011
    public static function assertNull($actual, $message = '')
1012
    {
1013
        self::assertThat($actual, self::isNull(), $message);
1014
    }
1015
1016
    /**
1017
     * Asserts that a class has a specified attribute.
1018
     *
1019
     * @param string $attributeName
1020
     * @param string $className
1021
     * @param string $message
1022
     *
1023
     * @since  Method available since Release 3.1.0
1024
     */
1025 View Code Duplication
    public static function assertClassHasAttribute($attributeName, $className, $message = '')
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1026
    {
1027
        if (!is_string($attributeName)) {
1028
            throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'string');
1029
        }
1030
1031
        if (!preg_match('/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/', $attributeName)) {
1032
            throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'valid attribute name');
1033
        }
1034
1035
        if (!is_string($className) || !class_exists($className)) {
1036
            throw PHPUnit_Util_InvalidArgumentHelper::factory(2, 'class name', $className);
1037
        }
1038
1039
        $constraint = new PHPUnit_Framework_Constraint_ClassHasAttribute(
1040
            $attributeName
1041
        );
1042
1043
        self::assertThat($className, $constraint, $message);
1044
    }
1045
1046
    /**
1047
     * Asserts that a class does not have a specified attribute.
1048
     *
1049
     * @param string $attributeName
1050
     * @param string $className
1051
     * @param string $message
1052
     *
1053
     * @since  Method available since Release 3.1.0
1054
     */
1055 View Code Duplication
    public static function assertClassNotHasAttribute($attributeName, $className, $message = '')
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1056
    {
1057
        if (!is_string($attributeName)) {
1058
            throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'string');
1059
        }
1060
1061
        if (!preg_match('/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/', $attributeName)) {
1062
            throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'valid attribute name');
1063
        }
1064
1065
        if (!is_string($className) || !class_exists($className)) {
1066
            throw PHPUnit_Util_InvalidArgumentHelper::factory(2, 'class name', $className);
1067
        }
1068
1069
        $constraint = new PHPUnit_Framework_Constraint_Not(
1070
            new PHPUnit_Framework_Constraint_ClassHasAttribute($attributeName)
1071
        );
1072
1073
        self::assertThat($className, $constraint, $message);
1074
    }
1075
1076
    /**
1077
     * Asserts that a class has a specified static attribute.
1078
     *
1079
     * @param string $attributeName
1080
     * @param string $className
1081
     * @param string $message
1082
     *
1083
     * @since  Method available since Release 3.1.0
1084
     */
1085 View Code Duplication
    public static function assertClassHasStaticAttribute($attributeName, $className, $message = '')
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1086
    {
1087
        if (!is_string($attributeName)) {
1088
            throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'string');
1089
        }
1090
1091
        if (!preg_match('/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/', $attributeName)) {
1092
            throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'valid attribute name');
1093
        }
1094
1095
        if (!is_string($className) || !class_exists($className)) {
1096
            throw PHPUnit_Util_InvalidArgumentHelper::factory(2, 'class name', $className);
1097
        }
1098
1099
        $constraint = new PHPUnit_Framework_Constraint_ClassHasStaticAttribute(
1100
            $attributeName
1101
        );
1102
1103
        self::assertThat($className, $constraint, $message);
1104
    }
1105
1106
    /**
1107
     * Asserts that a class does not have a specified static attribute.
1108
     *
1109
     * @param string $attributeName
1110
     * @param string $className
1111
     * @param string $message
1112
     *
1113
     * @since  Method available since Release 3.1.0
1114
     */
1115 View Code Duplication
    public static function assertClassNotHasStaticAttribute($attributeName, $className, $message = '')
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1116
    {
1117
        if (!is_string($attributeName)) {
1118
            throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'string');
1119
        }
1120
1121
        if (!preg_match('/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/', $attributeName)) {
1122
            throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'valid attribute name');
1123
        }
1124
1125
        if (!is_string($className) || !class_exists($className)) {
1126
            throw PHPUnit_Util_InvalidArgumentHelper::factory(2, 'class name', $className);
1127
        }
1128
1129
        $constraint = new PHPUnit_Framework_Constraint_Not(
1130
            new PHPUnit_Framework_Constraint_ClassHasStaticAttribute(
1131
                $attributeName
1132
            )
1133
        );
1134
1135
        self::assertThat($className, $constraint, $message);
1136
    }
1137
1138
    /**
1139
     * Asserts that an object has a specified attribute.
1140
     *
1141
     * @param string $attributeName
1142
     * @param object $object
1143
     * @param string $message
1144
     *
1145
     * @since  Method available since Release 3.0.0
1146
     */
1147 View Code Duplication
    public static function assertObjectHasAttribute($attributeName, $object, $message = '')
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1148
    {
1149
        if (!is_string($attributeName)) {
1150
            throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'string');
1151
        }
1152
1153
        if (!preg_match('/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/', $attributeName)) {
1154
            throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'valid attribute name');
1155
        }
1156
1157
        if (!is_object($object)) {
1158
            throw PHPUnit_Util_InvalidArgumentHelper::factory(2, 'object');
1159
        }
1160
1161
        $constraint = new PHPUnit_Framework_Constraint_ObjectHasAttribute(
1162
            $attributeName
1163
        );
1164
1165
        self::assertThat($object, $constraint, $message);
1166
    }
1167
1168
    /**
1169
     * Asserts that an object does not have a specified attribute.
1170
     *
1171
     * @param string $attributeName
1172
     * @param object $object
1173
     * @param string $message
1174
     *
1175
     * @since  Method available since Release 3.0.0
1176
     */
1177 View Code Duplication
    public static function assertObjectNotHasAttribute($attributeName, $object, $message = '')
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1178
    {
1179
        if (!is_string($attributeName)) {
1180
            throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'string');
1181
        }
1182
1183
        if (!preg_match('/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/', $attributeName)) {
1184
            throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'valid attribute name');
1185
        }
1186
1187
        if (!is_object($object)) {
1188
            throw PHPUnit_Util_InvalidArgumentHelper::factory(2, 'object');
1189
        }
1190
1191
        $constraint = new PHPUnit_Framework_Constraint_Not(
1192
            new PHPUnit_Framework_Constraint_ObjectHasAttribute($attributeName)
1193
        );
1194
1195
        self::assertThat($object, $constraint, $message);
1196
    }
1197
1198
    /**
1199
     * Asserts that two variables have the same type and value.
1200
     * Used on objects, it asserts that two variables reference
1201
     * the same object.
1202
     *
1203
     * @param mixed  $expected
1204
     * @param mixed  $actual
1205
     * @param string $message
1206
     */
1207
    public static function assertSame($expected, $actual, $message = '')
1208
    {
1209
        if (is_bool($expected) && is_bool($actual)) {
1210
            self::assertEquals($expected, $actual, $message);
1211
        } else {
1212
            $constraint = new PHPUnit_Framework_Constraint_IsIdentical(
1213
                $expected
1214
            );
1215
1216
            self::assertThat($actual, $constraint, $message);
1217
        }
1218
    }
1219
1220
    /**
1221
     * Asserts that a variable and an attribute of an object have the same type
1222
     * and value.
1223
     *
1224
     * @param mixed  $expected
1225
     * @param string $actualAttributeName
1226
     * @param object $actualClassOrObject
1227
     * @param string $message
1228
     */
1229
    public static function assertAttributeSame($expected, $actualAttributeName, $actualClassOrObject, $message = '')
1230
    {
1231
        self::assertSame(
1232
            $expected,
1233
            self::readAttribute($actualClassOrObject, $actualAttributeName),
1234
            $message
1235
        );
1236
    }
1237
1238
    /**
1239
     * Asserts that two variables do not have the same type and value.
1240
     * Used on objects, it asserts that two variables do not reference
1241
     * the same object.
1242
     *
1243
     * @param mixed  $expected
1244
     * @param mixed  $actual
1245
     * @param string $message
1246
     */
1247
    public static function assertNotSame($expected, $actual, $message = '')
1248
    {
1249
        if (is_bool($expected) && is_bool($actual)) {
1250
            self::assertNotEquals($expected, $actual, $message);
1251
        } else {
1252
            $constraint = new PHPUnit_Framework_Constraint_Not(
1253
                new PHPUnit_Framework_Constraint_IsIdentical($expected)
1254
            );
1255
1256
            self::assertThat($actual, $constraint, $message);
1257
        }
1258
    }
1259
1260
    /**
1261
     * Asserts that a variable and an attribute of an object do not have the
1262
     * same type and value.
1263
     *
1264
     * @param mixed  $expected
1265
     * @param string $actualAttributeName
1266
     * @param object $actualClassOrObject
1267
     * @param string $message
1268
     */
1269
    public static function assertAttributeNotSame($expected, $actualAttributeName, $actualClassOrObject, $message = '')
1270
    {
1271
        self::assertNotSame(
1272
            $expected,
1273
            self::readAttribute($actualClassOrObject, $actualAttributeName),
1274
            $message
1275
        );
1276
    }
1277
1278
    /**
1279
     * Asserts that a variable is of a given type.
1280
     *
1281
     * @param string $expected
1282
     * @param mixed  $actual
1283
     * @param string $message
1284
     *
1285
     * @since Method available since Release 3.5.0
1286
     */
1287
    public static function assertInstanceOf($expected, $actual, $message = '')
1288
    {
1289
        if (!(is_string($expected) && (class_exists($expected) || interface_exists($expected)))) {
1290
            throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'class or interface name');
1291
        }
1292
1293
        $constraint = new PHPUnit_Framework_Constraint_IsInstanceOf(
1294
            $expected
1295
        );
1296
1297
        self::assertThat($actual, $constraint, $message);
1298
    }
1299
1300
    /**
1301
     * Asserts that an attribute is of a given type.
1302
     *
1303
     * @param string $expected
1304
     * @param string $attributeName
1305
     * @param mixed  $classOrObject
1306
     * @param string $message
1307
     *
1308
     * @since Method available since Release 3.5.0
1309
     */
1310
    public static function assertAttributeInstanceOf($expected, $attributeName, $classOrObject, $message = '')
1311
    {
1312
        self::assertInstanceOf(
1313
            $expected,
1314
            self::readAttribute($classOrObject, $attributeName),
1315
            $message
1316
        );
1317
    }
1318
1319
    /**
1320
     * Asserts that a variable is not of a given type.
1321
     *
1322
     * @param string $expected
1323
     * @param mixed  $actual
1324
     * @param string $message
1325
     *
1326
     * @since Method available since Release 3.5.0
1327
     */
1328
    public static function assertNotInstanceOf($expected, $actual, $message = '')
1329
    {
1330
        if (!(is_string($expected) && (class_exists($expected) || interface_exists($expected)))) {
1331
            throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'class or interface name');
1332
        }
1333
1334
        $constraint = new PHPUnit_Framework_Constraint_Not(
1335
            new PHPUnit_Framework_Constraint_IsInstanceOf($expected)
1336
        );
1337
1338
        self::assertThat($actual, $constraint, $message);
1339
    }
1340
1341
    /**
1342
     * Asserts that an attribute is of a given type.
1343
     *
1344
     * @param string $expected
1345
     * @param string $attributeName
1346
     * @param mixed  $classOrObject
1347
     * @param string $message
1348
     *
1349
     * @since Method available since Release 3.5.0
1350
     */
1351
    public static function assertAttributeNotInstanceOf($expected, $attributeName, $classOrObject, $message = '')
1352
    {
1353
        self::assertNotInstanceOf(
1354
            $expected,
1355
            self::readAttribute($classOrObject, $attributeName),
1356
            $message
1357
        );
1358
    }
1359
1360
    /**
1361
     * Asserts that a variable is of a given type.
1362
     *
1363
     * @param string $expected
1364
     * @param mixed  $actual
1365
     * @param string $message
1366
     *
1367
     * @since Method available since Release 3.5.0
1368
     */
1369
    public static function assertInternalType($expected, $actual, $message = '')
1370
    {
1371
        if (!is_string($expected)) {
1372
            throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'string');
1373
        }
1374
1375
        $constraint = new PHPUnit_Framework_Constraint_IsType(
1376
            $expected
1377
        );
1378
1379
        self::assertThat($actual, $constraint, $message);
1380
    }
1381
1382
    /**
1383
     * Asserts that an attribute is of a given type.
1384
     *
1385
     * @param string $expected
1386
     * @param string $attributeName
1387
     * @param mixed  $classOrObject
1388
     * @param string $message
1389
     *
1390
     * @since Method available since Release 3.5.0
1391
     */
1392
    public static function assertAttributeInternalType($expected, $attributeName, $classOrObject, $message = '')
1393
    {
1394
        self::assertInternalType(
1395
            $expected,
1396
            self::readAttribute($classOrObject, $attributeName),
1397
            $message
1398
        );
1399
    }
1400
1401
    /**
1402
     * Asserts that a variable is not of a given type.
1403
     *
1404
     * @param string $expected
1405
     * @param mixed  $actual
1406
     * @param string $message
1407
     *
1408
     * @since Method available since Release 3.5.0
1409
     */
1410
    public static function assertNotInternalType($expected, $actual, $message = '')
1411
    {
1412
        if (!is_string($expected)) {
1413
            throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'string');
1414
        }
1415
1416
        $constraint = new PHPUnit_Framework_Constraint_Not(
1417
            new PHPUnit_Framework_Constraint_IsType($expected)
1418
        );
1419
1420
        self::assertThat($actual, $constraint, $message);
1421
    }
1422
1423
    /**
1424
     * Asserts that an attribute is of a given type.
1425
     *
1426
     * @param string $expected
1427
     * @param string $attributeName
1428
     * @param mixed  $classOrObject
1429
     * @param string $message
1430
     *
1431
     * @since Method available since Release 3.5.0
1432
     */
1433
    public static function assertAttributeNotInternalType($expected, $attributeName, $classOrObject, $message = '')
1434
    {
1435
        self::assertNotInternalType(
1436
            $expected,
1437
            self::readAttribute($classOrObject, $attributeName),
1438
            $message
1439
        );
1440
    }
1441
1442
    /**
1443
     * Asserts that a string matches a given regular expression.
1444
     *
1445
     * @param string $pattern
1446
     * @param string $string
1447
     * @param string $message
1448
     */
1449 View Code Duplication
    public static function assertRegExp($pattern, $string, $message = '')
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1450
    {
1451
        if (!is_string($pattern)) {
1452
            throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'string');
1453
        }
1454
1455
        if (!is_string($string)) {
1456
            throw PHPUnit_Util_InvalidArgumentHelper::factory(2, 'string');
1457
        }
1458
1459
        $constraint = new PHPUnit_Framework_Constraint_PCREMatch($pattern);
1460
1461
        self::assertThat($string, $constraint, $message);
1462
    }
1463
1464
    /**
1465
     * Asserts that a string does not match a given regular expression.
1466
     *
1467
     * @param string $pattern
1468
     * @param string $string
1469
     * @param string $message
1470
     *
1471
     * @since  Method available since Release 2.1.0
1472
     */
1473 View Code Duplication
    public static function assertNotRegExp($pattern, $string, $message = '')
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1474
    {
1475
        if (!is_string($pattern)) {
1476
            throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'string');
1477
        }
1478
1479
        if (!is_string($string)) {
1480
            throw PHPUnit_Util_InvalidArgumentHelper::factory(2, 'string');
1481
        }
1482
1483
        $constraint = new PHPUnit_Framework_Constraint_Not(
1484
            new PHPUnit_Framework_Constraint_PCREMatch($pattern)
1485
        );
1486
1487
        self::assertThat($string, $constraint, $message);
1488
    }
1489
1490
    /**
1491
     * Assert that the size of two arrays (or `Countable` or `Traversable` objects)
1492
     * is the same.
1493
     *
1494
     * @param array|Countable|Traversable $expected
1495
     * @param array|Countable|Traversable $actual
1496
     * @param string                      $message
1497
     */
1498 View Code Duplication
    public static function assertSameSize($expected, $actual, $message = '')
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1499
    {
1500
        if (!$expected instanceof Countable &&
1501
            !$expected instanceof Traversable &&
1502
            !is_array($expected)) {
1503
            throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'countable or traversable');
1504
        }
1505
1506
        if (!$actual instanceof Countable &&
1507
            !$actual instanceof Traversable &&
1508
            !is_array($actual)) {
1509
            throw PHPUnit_Util_InvalidArgumentHelper::factory(2, 'countable or traversable');
1510
        }
1511
1512
        self::assertThat(
1513
            $actual,
1514
            new PHPUnit_Framework_Constraint_SameSize($expected),
0 ignored issues
show
Documentation introduced by
$expected is of type object<Countable>|object<Traversable>|array, but the function expects a integer.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
1515
            $message
1516
        );
1517
    }
1518
1519
    /**
1520
     * Assert that the size of two arrays (or `Countable` or `Traversable` objects)
1521
     * is not the same.
1522
     *
1523
     * @param array|Countable|Traversable $expected
1524
     * @param array|Countable|Traversable $actual
1525
     * @param string                      $message
1526
     */
1527 View Code Duplication
    public static function assertNotSameSize($expected, $actual, $message = '')
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1528
    {
1529
        if (!$expected instanceof Countable &&
1530
            !$expected instanceof Traversable &&
1531
            !is_array($expected)) {
1532
            throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'countable or traversable');
1533
        }
1534
1535
        if (!$actual instanceof Countable &&
1536
            !$actual instanceof Traversable &&
1537
            !is_array($actual)) {
1538
            throw PHPUnit_Util_InvalidArgumentHelper::factory(2, 'countable or traversable');
1539
        }
1540
1541
        $constraint = new PHPUnit_Framework_Constraint_Not(
1542
            new PHPUnit_Framework_Constraint_SameSize($expected)
0 ignored issues
show
Documentation introduced by
$expected is of type object<Countable>|object<Traversable>|array, but the function expects a integer.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
1543
        );
1544
1545
        self::assertThat($actual, $constraint, $message);
1546
    }
1547
1548
    /**
1549
     * Asserts that a string matches a given format string.
1550
     *
1551
     * @param string $format
1552
     * @param string $string
1553
     * @param string $message
1554
     *
1555
     * @since  Method available since Release 3.5.0
1556
     */
1557 View Code Duplication
    public static function assertStringMatchesFormat($format, $string, $message = '')
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1558
    {
1559
        if (!is_string($format)) {
1560
            throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'string');
1561
        }
1562
1563
        if (!is_string($string)) {
1564
            throw PHPUnit_Util_InvalidArgumentHelper::factory(2, 'string');
1565
        }
1566
1567
        $constraint = new PHPUnit_Framework_Constraint_StringMatches($format);
1568
1569
        self::assertThat($string, $constraint, $message);
1570
    }
1571
1572
    /**
1573
     * Asserts that a string does not match a given format string.
1574
     *
1575
     * @param string $format
1576
     * @param string $string
1577
     * @param string $message
1578
     *
1579
     * @since  Method available since Release 3.5.0
1580
     */
1581 View Code Duplication
    public static function assertStringNotMatchesFormat($format, $string, $message = '')
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1582
    {
1583
        if (!is_string($format)) {
1584
            throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'string');
1585
        }
1586
1587
        if (!is_string($string)) {
1588
            throw PHPUnit_Util_InvalidArgumentHelper::factory(2, 'string');
1589
        }
1590
1591
        $constraint = new PHPUnit_Framework_Constraint_Not(
1592
            new PHPUnit_Framework_Constraint_StringMatches($format)
1593
        );
1594
1595
        self::assertThat($string, $constraint, $message);
1596
    }
1597
1598
    /**
1599
     * Asserts that a string matches a given format file.
1600
     *
1601
     * @param string $formatFile
1602
     * @param string $string
1603
     * @param string $message
1604
     *
1605
     * @since  Method available since Release 3.5.0
1606
     */
1607
    public static function assertStringMatchesFormatFile($formatFile, $string, $message = '')
1608
    {
1609
        self::assertFileExists($formatFile, $message);
1610
1611
        if (!is_string($string)) {
1612
            throw PHPUnit_Util_InvalidArgumentHelper::factory(2, 'string');
1613
        }
1614
1615
        $constraint = new PHPUnit_Framework_Constraint_StringMatches(
1616
            file_get_contents($formatFile)
1617
        );
1618
1619
        self::assertThat($string, $constraint, $message);
1620
    }
1621
1622
    /**
1623
     * Asserts that a string does not match a given format string.
1624
     *
1625
     * @param string $formatFile
1626
     * @param string $string
1627
     * @param string $message
1628
     *
1629
     * @since  Method available since Release 3.5.0
1630
     */
1631
    public static function assertStringNotMatchesFormatFile($formatFile, $string, $message = '')
1632
    {
1633
        self::assertFileExists($formatFile, $message);
1634
1635
        if (!is_string($string)) {
1636
            throw PHPUnit_Util_InvalidArgumentHelper::factory(2, 'string');
1637
        }
1638
1639
        $constraint = new PHPUnit_Framework_Constraint_Not(
1640
            new PHPUnit_Framework_Constraint_StringMatches(
1641
                file_get_contents($formatFile)
1642
            )
1643
        );
1644
1645
        self::assertThat($string, $constraint, $message);
1646
    }
1647
1648
    /**
1649
     * Asserts that a string starts with a given prefix.
1650
     *
1651
     * @param string $prefix
1652
     * @param string $string
1653
     * @param string $message
1654
     *
1655
     * @since  Method available since Release 3.4.0
1656
     */
1657 View Code Duplication
    public static function assertStringStartsWith($prefix, $string, $message = '')
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1658
    {
1659
        if (!is_string($prefix)) {
1660
            throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'string');
1661
        }
1662
1663
        if (!is_string($string)) {
1664
            throw PHPUnit_Util_InvalidArgumentHelper::factory(2, 'string');
1665
        }
1666
1667
        $constraint = new PHPUnit_Framework_Constraint_StringStartsWith(
1668
            $prefix
1669
        );
1670
1671
        self::assertThat($string, $constraint, $message);
1672
    }
1673
1674
    /**
1675
     * Asserts that a string starts not with a given prefix.
1676
     *
1677
     * @param string $prefix
1678
     * @param string $string
1679
     * @param string $message
1680
     *
1681
     * @since  Method available since Release 3.4.0
1682
     */
1683 View Code Duplication
    public static function assertStringStartsNotWith($prefix, $string, $message = '')
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1684
    {
1685
        if (!is_string($prefix)) {
1686
            throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'string');
1687
        }
1688
1689
        if (!is_string($string)) {
1690
            throw PHPUnit_Util_InvalidArgumentHelper::factory(2, 'string');
1691
        }
1692
1693
        $constraint = new PHPUnit_Framework_Constraint_Not(
1694
            new PHPUnit_Framework_Constraint_StringStartsWith($prefix)
1695
        );
1696
1697
        self::assertThat($string, $constraint, $message);
1698
    }
1699
1700
    /**
1701
     * Asserts that a string ends with a given suffix.
1702
     *
1703
     * @param string $suffix
1704
     * @param string $string
1705
     * @param string $message
1706
     *
1707
     * @since  Method available since Release 3.4.0
1708
     */
1709 View Code Duplication
    public static function assertStringEndsWith($suffix, $string, $message = '')
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1710
    {
1711
        if (!is_string($suffix)) {
1712
            throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'string');
1713
        }
1714
1715
        if (!is_string($string)) {
1716
            throw PHPUnit_Util_InvalidArgumentHelper::factory(2, 'string');
1717
        }
1718
1719
        $constraint = new PHPUnit_Framework_Constraint_StringEndsWith($suffix);
1720
1721
        self::assertThat($string, $constraint, $message);
1722
    }
1723
1724
    /**
1725
     * Asserts that a string ends not with a given suffix.
1726
     *
1727
     * @param string $suffix
1728
     * @param string $string
1729
     * @param string $message
1730
     *
1731
     * @since  Method available since Release 3.4.0
1732
     */
1733 View Code Duplication
    public static function assertStringEndsNotWith($suffix, $string, $message = '')
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1734
    {
1735
        if (!is_string($suffix)) {
1736
            throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'string');
1737
        }
1738
1739
        if (!is_string($string)) {
1740
            throw PHPUnit_Util_InvalidArgumentHelper::factory(2, 'string');
1741
        }
1742
1743
        $constraint = new PHPUnit_Framework_Constraint_Not(
1744
            new PHPUnit_Framework_Constraint_StringEndsWith($suffix)
1745
        );
1746
1747
        self::assertThat($string, $constraint, $message);
1748
    }
1749
1750
    /**
1751
     * Asserts that two XML files are equal.
1752
     *
1753
     * @param string $expectedFile
1754
     * @param string $actualFile
1755
     * @param string $message
1756
     *
1757
     * @since  Method available since Release 3.1.0
1758
     */
1759
    public static function assertXmlFileEqualsXmlFile($expectedFile, $actualFile, $message = '')
1760
    {
1761
        $expected = PHPUnit_Util_XML::loadFile($expectedFile);
1762
        $actual   = PHPUnit_Util_XML::loadFile($actualFile);
1763
1764
        self::assertEquals($expected, $actual, $message);
1765
    }
1766
1767
    /**
1768
     * Asserts that two XML files are not equal.
1769
     *
1770
     * @param string $expectedFile
1771
     * @param string $actualFile
1772
     * @param string $message
1773
     *
1774
     * @since  Method available since Release 3.1.0
1775
     */
1776
    public static function assertXmlFileNotEqualsXmlFile($expectedFile, $actualFile, $message = '')
1777
    {
1778
        $expected = PHPUnit_Util_XML::loadFile($expectedFile);
1779
        $actual   = PHPUnit_Util_XML::loadFile($actualFile);
1780
1781
        self::assertNotEquals($expected, $actual, $message);
1782
    }
1783
1784
    /**
1785
     * Asserts that two XML documents are equal.
1786
     *
1787
     * @param string $expectedFile
1788
     * @param string $actualXml
1789
     * @param string $message
1790
     *
1791
     * @since  Method available since Release 3.3.0
1792
     */
1793 View Code Duplication
    public static function assertXmlStringEqualsXmlFile($expectedFile, $actualXml, $message = '')
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1794
    {
1795
        $expected = PHPUnit_Util_XML::loadFile($expectedFile);
1796
        $actual   = PHPUnit_Util_XML::load($actualXml);
1797
1798
        self::assertEquals($expected, $actual, $message);
1799
    }
1800
1801
    /**
1802
     * Asserts that two XML documents are not equal.
1803
     *
1804
     * @param string $expectedFile
1805
     * @param string $actualXml
1806
     * @param string $message
1807
     *
1808
     * @since  Method available since Release 3.3.0
1809
     */
1810
    public static function assertXmlStringNotEqualsXmlFile($expectedFile, $actualXml, $message = '')
1811
    {
1812
        $expected = PHPUnit_Util_XML::loadFile($expectedFile);
1813
        $actual   = PHPUnit_Util_XML::load($actualXml);
1814
1815
        self::assertNotEquals($expected, $actual, $message);
1816
    }
1817
1818
    /**
1819
     * Asserts that two XML documents are equal.
1820
     *
1821
     * @param string $expectedXml
1822
     * @param string $actualXml
1823
     * @param string $message
1824
     *
1825
     * @since  Method available since Release 3.1.0
1826
     */
1827 View Code Duplication
    public static function assertXmlStringEqualsXmlString($expectedXml, $actualXml, $message = '')
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1828
    {
1829
        $expected = PHPUnit_Util_XML::load($expectedXml);
1830
        $actual   = PHPUnit_Util_XML::load($actualXml);
1831
1832
        self::assertEquals($expected, $actual, $message);
1833
    }
1834
1835
    /**
1836
     * Asserts that two XML documents are not equal.
1837
     *
1838
     * @param string $expectedXml
1839
     * @param string $actualXml
1840
     * @param string $message
1841
     *
1842
     * @since  Method available since Release 3.1.0
1843
     */
1844 View Code Duplication
    public static function assertXmlStringNotEqualsXmlString($expectedXml, $actualXml, $message = '')
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1845
    {
1846
        $expected = PHPUnit_Util_XML::load($expectedXml);
1847
        $actual   = PHPUnit_Util_XML::load($actualXml);
1848
1849
        self::assertNotEquals($expected, $actual, $message);
1850
    }
1851
1852
    /**
1853
     * Asserts that a hierarchy of DOMElements matches.
1854
     *
1855
     * @param DOMElement $expectedElement
1856
     * @param DOMElement $actualElement
1857
     * @param bool       $checkAttributes
1858
     * @param string     $message
1859
     *
1860
     * @since  Method available since Release 3.3.0
1861
     */
1862
    public static function assertEqualXMLStructure(DOMElement $expectedElement, DOMElement $actualElement, $checkAttributes = false, $message = '')
1863
    {
1864
        $tmp             = new DOMDocument;
1865
        $expectedElement = $tmp->importNode($expectedElement, true);
1866
1867
        $tmp           = new DOMDocument;
1868
        $actualElement = $tmp->importNode($actualElement, true);
1869
1870
        unset($tmp);
1871
1872
        self::assertEquals(
1873
            $expectedElement->tagName,
0 ignored issues
show
Bug introduced by
The property tagName does not seem to exist in DOMNode.

An attempt at access to an undefined property has been detected. This may either be a typographical error or the property has been renamed but there are still references to its old name.

If you really want to allow access to undefined properties, you can define magic methods to allow access. See the php core documentation on Overloading.

Loading history...
1874
            $actualElement->tagName,
1875
            $message
1876
        );
1877
1878
        if ($checkAttributes) {
1879
            self::assertEquals(
1880
                $expectedElement->attributes->length,
0 ignored issues
show
Bug introduced by
The property length does not seem to exist in DOMNamedNodeMap.

An attempt at access to an undefined property has been detected. This may either be a typographical error or the property has been renamed but there are still references to its old name.

If you really want to allow access to undefined properties, you can define magic methods to allow access. See the php core documentation on Overloading.

Loading history...
1881
                $actualElement->attributes->length,
1882
                sprintf(
1883
                    '%s%sNumber of attributes on node "%s" does not match',
1884
                    $message,
1885
                    !empty($message) ? "\n" : '',
1886
                    $expectedElement->tagName
1887
                )
1888
            );
1889
1890
            for ($i = 0; $i < $expectedElement->attributes->length; $i++) {
1891
                $expectedAttribute = $expectedElement->attributes->item($i);
1892
                $actualAttribute   = $actualElement->attributes->getNamedItem(
1893
                    $expectedAttribute->name
0 ignored issues
show
Bug introduced by
The property name does not seem to exist in DOMNode.

An attempt at access to an undefined property has been detected. This may either be a typographical error or the property has been renamed but there are still references to its old name.

If you really want to allow access to undefined properties, you can define magic methods to allow access. See the php core documentation on Overloading.

Loading history...
1894
                );
1895
1896
                if (!$actualAttribute) {
1897
                    self::fail(
1898
                        sprintf(
1899
                            '%s%sCould not find attribute "%s" on node "%s"',
1900
                            $message,
1901
                            !empty($message) ? "\n" : '',
1902
                            $expectedAttribute->name,
1903
                            $expectedElement->tagName
1904
                        )
1905
                    );
1906
                }
1907
            }
1908
        }
1909
1910
        PHPUnit_Util_XML::removeCharacterDataNodes($expectedElement);
1911
        PHPUnit_Util_XML::removeCharacterDataNodes($actualElement);
1912
1913
        self::assertEquals(
1914
            $expectedElement->childNodes->length,
1915
            $actualElement->childNodes->length,
1916
            sprintf(
1917
                '%s%sNumber of child nodes of "%s" differs',
1918
                $message,
1919
                !empty($message) ? "\n" : '',
1920
                $expectedElement->tagName
1921
            )
1922
        );
1923
1924
        for ($i = 0; $i < $expectedElement->childNodes->length; $i++) {
1925
            self::assertEqualXMLStructure(
1926
                $expectedElement->childNodes->item($i),
0 ignored issues
show
Compatibility introduced by
$expectedElement->childNodes->item($i) of type object<DOMNode> is not a sub-type of object<DOMElement>. It seems like you assume a child class of the class DOMNode to be always present.

This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass.

Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type.

Loading history...
1927
                $actualElement->childNodes->item($i),
0 ignored issues
show
Compatibility introduced by
$actualElement->childNodes->item($i) of type object<DOMNode> is not a sub-type of object<DOMElement>. It seems like you assume a child class of the class DOMNode to be always present.

This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass.

Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type.

Loading history...
1928
                $checkAttributes,
1929
                $message
1930
            );
1931
        }
1932
    }
1933
1934
    /**
1935
     * Assert the presence, absence, or count of elements in a document matching
1936
     * the CSS $selector, regardless of the contents of those elements.
1937
     *
1938
     * The first argument, $selector, is the CSS selector used to match
1939
     * the elements in the $actual document.
1940
     *
1941
     * The second argument, $count, can be either boolean or numeric.
1942
     * When boolean, it asserts for presence of elements matching the selector
1943
     * (true) or absence of elements (false).
1944
     * When numeric, it asserts the count of elements.
1945
     *
1946
     * assertSelectCount("#binder", true, $xml);  // any?
1947
     * assertSelectCount(".binder", 3, $xml);     // exactly 3?
1948
     *
1949
     * @param array          $selector
1950
     * @param int|bool|array $count
1951
     * @param mixed          $actual
1952
     * @param string         $message
1953
     * @param bool           $isHtml
1954
     *
1955
     * @since  Method available since Release 3.3.0
1956
     * @deprecated
1957
     * @codeCoverageIgnore
1958
     */
1959 View Code Duplication
    public static function assertSelectCount($selector, $count, $actual, $message = '', $isHtml = true)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1960
    {
1961
        trigger_error(__METHOD__ . ' is deprecated', E_USER_DEPRECATED);
1962
1963
        self::assertSelectEquals(
0 ignored issues
show
Deprecated Code introduced by
The method PHPUnit_Framework_Assert::assertSelectEquals() has been deprecated.

This method has been deprecated.

Loading history...
1964
            $selector,
1965
            true,
0 ignored issues
show
Documentation introduced by
true is of type boolean, but the function expects a string.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
1966
            $count,
1967
            $actual,
1968
            $message,
1969
            $isHtml
1970
        );
1971
    }
1972
1973
    /**
1974
     * assertSelectRegExp("#binder .name", "/Mike|Derek/", true, $xml); // any?
1975
     * assertSelectRegExp("#binder .name", "/Mike|Derek/", 3, $xml);    // 3?
1976
     *
1977
     * @param array          $selector
1978
     * @param string         $pattern
1979
     * @param int|bool|array $count
1980
     * @param mixed          $actual
1981
     * @param string         $message
1982
     * @param bool           $isHtml
1983
     *
1984
     * @since  Method available since Release 3.3.0
1985
     * @deprecated
1986
     * @codeCoverageIgnore
1987
     */
1988 View Code Duplication
    public static function assertSelectRegExp($selector, $pattern, $count, $actual, $message = '', $isHtml = true)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1989
    {
1990
        trigger_error(__METHOD__ . ' is deprecated', E_USER_DEPRECATED);
1991
1992
        self::assertSelectEquals(
0 ignored issues
show
Deprecated Code introduced by
The method PHPUnit_Framework_Assert::assertSelectEquals() has been deprecated.

This method has been deprecated.

Loading history...
1993
            $selector,
1994
            "regexp:$pattern",
1995
            $count,
1996
            $actual,
1997
            $message,
1998
            $isHtml
1999
        );
2000
    }
2001
2002
    /**
2003
     * assertSelectEquals("#binder .name", "Chuck", true,  $xml);  // any?
2004
     * assertSelectEquals("#binder .name", "Chuck", false, $xml);  // none?
2005
     *
2006
     * @param array          $selector
2007
     * @param string         $content
2008
     * @param int|bool|array $count
2009
     * @param mixed          $actual
2010
     * @param string         $message
2011
     * @param bool           $isHtml
2012
     *
2013
     * @since  Method available since Release 3.3.0
2014
     * @deprecated
2015
     * @codeCoverageIgnore
2016
     */
2017
    public static function assertSelectEquals($selector, $content, $count, $actual, $message = '', $isHtml = true)
2018
    {
2019
        trigger_error(__METHOD__ . ' is deprecated', E_USER_DEPRECATED);
2020
2021
        $tags = PHPUnit_Util_XML::cssSelect(
2022
            $selector,
2023
            $content,
2024
            $actual,
2025
            $isHtml
2026
        );
2027
2028
        // assert specific number of elements
2029
        if (is_numeric($count)) {
2030
            $counted = $tags ? count($tags) : 0;
2031
            self::assertEquals($count, $counted, $message);
2032
        } // assert any elements exist if true, assert no elements exist if false
2033
        elseif (is_bool($count)) {
2034
            $any = count($tags) > 0 && $tags[0] instanceof DOMNode;
2035
2036
            if ($count) {
2037
                self::assertTrue($any, $message);
2038
            } else {
2039
                self::assertFalse($any, $message);
2040
            }
2041
        } // check for range number of elements
2042
        elseif (is_array($count) &&
2043
                (isset($count['>']) || isset($count['<']) ||
2044
                isset($count['>=']) || isset($count['<=']))) {
2045
            $counted = $tags ? count($tags) : 0;
2046
2047
            if (isset($count['>'])) {
2048
                self::assertTrue($counted > $count['>'], $message);
2049
            }
2050
2051
            if (isset($count['>='])) {
2052
                self::assertTrue($counted >= $count['>='], $message);
2053
            }
2054
2055
            if (isset($count['<'])) {
2056
                self::assertTrue($counted < $count['<'], $message);
2057
            }
2058
2059
            if (isset($count['<='])) {
2060
                self::assertTrue($counted <= $count['<='], $message);
2061
            }
2062
        } else {
2063
            throw new PHPUnit_Framework_Exception;
2064
        }
2065
    }
2066
2067
    /**
2068
     * Evaluate an HTML or XML string and assert its structure and/or contents.
2069
     *
2070
     * The first argument ($matcher) is an associative array that specifies the
2071
     * match criteria for the assertion:
2072
     *
2073
     *  - `id`           : the node with the given id attribute must match the
2074
     *                     corresponding value.
2075
     *  - `tag`          : the node type must match the corresponding value.
2076
     *  - `attributes`   : a hash. The node's attributes must match the
2077
     *                     corresponding values in the hash.
2078
     *  - `content`      : The text content must match the given value.
2079
     *  - `parent`       : a hash. The node's parent must match the
2080
     *                     corresponding hash.
2081
     *  - `child`        : a hash. At least one of the node's immediate children
2082
     *                     must meet the criteria described by the hash.
2083
     *  - `ancestor`     : a hash. At least one of the node's ancestors must
2084
     *                     meet the criteria described by the hash.
2085
     *  - `descendant`   : a hash. At least one of the node's descendants must
2086
     *                     meet the criteria described by the hash.
2087
     *  - `children`     : a hash, for counting children of a node.
2088
     *                     Accepts the keys:
2089
     *    - `count`        : a number which must equal the number of children
2090
     *                       that match
2091
     *    - `less_than`    : the number of matching children must be greater
2092
     *                       than this number
2093
     *    - `greater_than` : the number of matching children must be less than
2094
     *                       this number
2095
     *    - `only`         : another hash consisting of the keys to use to match
2096
     *                       on the children, and only matching children will be
2097
     *                       counted
2098
     *
2099
     * <code>
2100
     * // Matcher that asserts that there is an element with an id="my_id".
2101
     * $matcher = array('id' => 'my_id');
2102
     *
2103
     * // Matcher that asserts that there is a "span" tag.
2104
     * $matcher = array('tag' => 'span');
2105
     *
2106
     * // Matcher that asserts that there is a "span" tag with the content
2107
     * // "Hello World".
2108
     * $matcher = array('tag' => 'span', 'content' => 'Hello World');
2109
     *
2110
     * // Matcher that asserts that there is a "span" tag with content matching
2111
     * // the regular expression pattern.
2112
     * $matcher = array('tag' => 'span', 'content' => 'regexp:/Try P(HP|ython)/');
2113
     *
2114
     * // Matcher that asserts that there is a "span" with an "list" class
2115
     * // attribute.
2116
     * $matcher = array(
2117
     *   'tag'        => 'span',
2118
     *   'attributes' => array('class' => 'list')
2119
     * );
2120
     *
2121
     * // Matcher that asserts that there is a "span" inside of a "div".
2122
     * $matcher = array(
2123
     *   'tag'    => 'span',
2124
     *   'parent' => array('tag' => 'div')
2125
     * );
2126
     *
2127
     * // Matcher that asserts that there is a "span" somewhere inside a
2128
     * // "table".
2129
     * $matcher = array(
2130
     *   'tag'      => 'span',
2131
     *   'ancestor' => array('tag' => 'table')
2132
     * );
2133
     *
2134
     * // Matcher that asserts that there is a "span" with at least one "em"
2135
     * // child.
2136
     * $matcher = array(
2137
     *   'tag'   => 'span',
2138
     *   'child' => array('tag' => 'em')
2139
     * );
2140
     *
2141
     * // Matcher that asserts that there is a "span" containing a (possibly
2142
     * // nested) "strong" tag.
2143
     * $matcher = array(
2144
     *   'tag'        => 'span',
2145
     *   'descendant' => array('tag' => 'strong')
2146
     * );
2147
     *
2148
     * // Matcher that asserts that there is a "span" containing 5-10 "em" tags
2149
     * // as immediate children.
2150
     * $matcher = array(
2151
     *   'tag'      => 'span',
2152
     *   'children' => array(
2153
     *     'less_than'    => 11,
2154
     *     'greater_than' => 4,
2155
     *     'only'         => array('tag' => 'em')
2156
     *   )
2157
     * );
2158
     *
2159
     * // Matcher that asserts that there is a "div", with an "ul" ancestor and
2160
     * // a "li" parent (with class="enum"), and containing a "span" descendant
2161
     * // that contains an element with id="my_test" and the text "Hello World".
2162
     * $matcher = array(
2163
     *   'tag'        => 'div',
2164
     *   'ancestor'   => array('tag' => 'ul'),
2165
     *   'parent'     => array(
2166
     *     'tag'        => 'li',
2167
     *     'attributes' => array('class' => 'enum')
2168
     *   ),
2169
     *   'descendant' => array(
2170
     *     'tag'   => 'span',
2171
     *     'child' => array(
2172
     *       'id'      => 'my_test',
2173
     *       'content' => 'Hello World'
2174
     *     )
2175
     *   )
2176
     * );
2177
     *
2178
     * // Use assertTag() to apply a $matcher to a piece of $html.
2179
     * $this->assertTag($matcher, $html);
2180
     *
2181
     * // Use assertTag() to apply a $matcher to a piece of $xml.
2182
     * $this->assertTag($matcher, $xml, '', false);
2183
     * </code>
2184
     *
2185
     * The second argument ($actual) is a string containing either HTML or
2186
     * XML text to be tested.
2187
     *
2188
     * The third argument ($message) is an optional message that will be
2189
     * used if the assertion fails.
2190
     *
2191
     * The fourth argument ($html) is an optional flag specifying whether
2192
     * to load the $actual string into a DOMDocument using the HTML or
2193
     * XML load strategy.  It is true by default, which assumes the HTML
2194
     * load strategy.  In many cases, this will be acceptable for XML as well.
2195
     *
2196
     * @param array  $matcher
2197
     * @param string $actual
2198
     * @param string $message
2199
     * @param bool   $isHtml
2200
     *
2201
     * @since  Method available since Release 3.3.0
2202
     * @deprecated
2203
     * @codeCoverageIgnore
2204
     */
2205 View Code Duplication
    public static function assertTag($matcher, $actual, $message = '', $isHtml = true)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
2206
    {
2207
        trigger_error(__METHOD__ . ' is deprecated', E_USER_DEPRECATED);
2208
2209
        $dom     = PHPUnit_Util_XML::load($actual, $isHtml);
2210
        $tags    = PHPUnit_Util_XML::findNodes($dom, $matcher, $isHtml);
2211
        $matched = count($tags) > 0 && $tags[0] instanceof DOMNode;
2212
2213
        self::assertTrue($matched, $message);
2214
    }
2215
2216
    /**
2217
     * This assertion is the exact opposite of assertTag().
2218
     *
2219
     * Rather than asserting that $matcher results in a match, it asserts that
2220
     * $matcher does not match.
2221
     *
2222
     * @param array  $matcher
2223
     * @param string $actual
2224
     * @param string $message
2225
     * @param bool   $isHtml
2226
     *
2227
     * @since  Method available since Release 3.3.0
2228
     * @deprecated
2229
     * @codeCoverageIgnore
2230
     */
2231 View Code Duplication
    public static function assertNotTag($matcher, $actual, $message = '', $isHtml = true)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
2232
    {
2233
        trigger_error(__METHOD__ . ' is deprecated', E_USER_DEPRECATED);
2234
2235
        $dom     = PHPUnit_Util_XML::load($actual, $isHtml);
2236
        $tags    = PHPUnit_Util_XML::findNodes($dom, $matcher, $isHtml);
2237
        $matched = count($tags) > 0 && $tags[0] instanceof DOMNode;
2238
2239
        self::assertFalse($matched, $message);
2240
    }
2241
2242
    /**
2243
     * Evaluates a PHPUnit_Framework_Constraint matcher object.
2244
     *
2245
     * @param mixed                        $value
2246
     * @param PHPUnit_Framework_Constraint $constraint
2247
     * @param string                       $message
2248
     *
2249
     * @since  Method available since Release 3.0.0
2250
     */
2251
    public static function assertThat($value, PHPUnit_Framework_Constraint $constraint, $message = '')
2252
    {
2253
        self::$count += count($constraint);
2254
2255
        $constraint->evaluate($value, $message);
2256
    }
2257
2258
    /**
2259
     * Asserts that a string is a valid JSON string.
2260
     *
2261
     * @param string $actualJson
2262
     * @param string $message
2263
     *
2264
     * @since  Method available since Release 3.7.20
2265
     */
2266
    public static function assertJson($actualJson, $message = '')
2267
    {
2268
        if (!is_string($actualJson)) {
2269
            throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'string');
2270
        }
2271
2272
        self::assertThat($actualJson, self::isJson(), $message);
2273
    }
2274
2275
    /**
2276
     * Asserts that two given JSON encoded objects or arrays are equal.
2277
     *
2278
     * @param string $expectedJson
2279
     * @param string $actualJson
2280
     * @param string $message
2281
     */
2282 View Code Duplication
    public static function assertJsonStringEqualsJsonString($expectedJson, $actualJson, $message = '')
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
2283
    {
2284
        self::assertJson($expectedJson, $message);
2285
        self::assertJson($actualJson, $message);
2286
2287
        $expected = json_decode($expectedJson);
2288
        $actual   = json_decode($actualJson);
2289
2290
        self::assertEquals($expected, $actual, $message);
2291
    }
2292
2293
    /**
2294
     * Asserts that two given JSON encoded objects or arrays are not equal.
2295
     *
2296
     * @param string $expectedJson
2297
     * @param string $actualJson
2298
     * @param string $message
2299
     */
2300 View Code Duplication
    public static function assertJsonStringNotEqualsJsonString($expectedJson, $actualJson, $message = '')
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
2301
    {
2302
        self::assertJson($expectedJson, $message);
2303
        self::assertJson($actualJson, $message);
2304
2305
        $expected = json_decode($expectedJson);
2306
        $actual   = json_decode($actualJson);
2307
2308
        self::assertNotEquals($expected, $actual, $message);
2309
    }
2310
2311
    /**
2312
     * Asserts that the generated JSON encoded object and the content of the given file are equal.
2313
     *
2314
     * @param string $expectedFile
2315
     * @param string $actualJson
2316
     * @param string $message
2317
     */
2318 View Code Duplication
    public static function assertJsonStringEqualsJsonFile($expectedFile, $actualJson, $message = '')
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
2319
    {
2320
        self::assertFileExists($expectedFile, $message);
2321
        $expectedJson = file_get_contents($expectedFile);
2322
2323
        self::assertJson($expectedJson, $message);
2324
        self::assertJson($actualJson, $message);
2325
2326
        // call constraint
2327
        $constraint = new PHPUnit_Framework_Constraint_JsonMatches(
2328
            $expectedJson
2329
        );
2330
2331
        self::assertThat($actualJson, $constraint, $message);
2332
    }
2333
2334
    /**
2335
     * Asserts that the generated JSON encoded object and the content of the given file are not equal.
2336
     *
2337
     * @param string $expectedFile
2338
     * @param string $actualJson
2339
     * @param string $message
2340
     */
2341 View Code Duplication
    public static function assertJsonStringNotEqualsJsonFile($expectedFile, $actualJson, $message = '')
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
2342
    {
2343
        self::assertFileExists($expectedFile, $message);
2344
        $expectedJson = file_get_contents($expectedFile);
2345
2346
        self::assertJson($expectedJson, $message);
2347
        self::assertJson($actualJson, $message);
2348
2349
        // call constraint
2350
        $constraint = new PHPUnit_Framework_Constraint_JsonMatches(
2351
            $expectedJson
2352
        );
2353
2354
        self::assertThat($actualJson, new PHPUnit_Framework_Constraint_Not($constraint), $message);
2355
    }
2356
2357
    /**
2358
     * Asserts that two JSON files are not equal.
2359
     *
2360
     * @param string $expectedFile
2361
     * @param string $actualFile
2362
     * @param string $message
2363
     */
2364 View Code Duplication
    public static function assertJsonFileNotEqualsJsonFile($expectedFile, $actualFile, $message = '')
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
2365
    {
2366
        self::assertFileExists($expectedFile, $message);
2367
        self::assertFileExists($actualFile, $message);
2368
2369
        $actualJson   = file_get_contents($actualFile);
2370
        $expectedJson = file_get_contents($expectedFile);
2371
2372
        self::assertJson($expectedJson, $message);
2373
        self::assertJson($actualJson, $message);
2374
2375
        // call constraint
2376
        $constraintExpected = new PHPUnit_Framework_Constraint_JsonMatches(
2377
            $expectedJson
2378
        );
2379
2380
        $constraintActual = new PHPUnit_Framework_Constraint_JsonMatches($actualJson);
2381
2382
        self::assertThat($expectedJson, new PHPUnit_Framework_Constraint_Not($constraintActual), $message);
2383
        self::assertThat($actualJson, new PHPUnit_Framework_Constraint_Not($constraintExpected), $message);
2384
    }
2385
2386
    /**
2387
     * Asserts that two JSON files are equal.
2388
     *
2389
     * @param string $expectedFile
2390
     * @param string $actualFile
2391
     * @param string $message
2392
     */
2393 View Code Duplication
    public static function assertJsonFileEqualsJsonFile($expectedFile, $actualFile, $message = '')
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
2394
    {
2395
        self::assertFileExists($expectedFile, $message);
2396
        self::assertFileExists($actualFile, $message);
2397
2398
        $actualJson   = file_get_contents($actualFile);
2399
        $expectedJson = file_get_contents($expectedFile);
2400
2401
        self::assertJson($expectedJson, $message);
2402
        self::assertJson($actualJson, $message);
2403
2404
        // call constraint
2405
        $constraintExpected = new PHPUnit_Framework_Constraint_JsonMatches(
2406
            $expectedJson
2407
        );
2408
2409
        $constraintActual = new PHPUnit_Framework_Constraint_JsonMatches($actualJson);
2410
2411
        self::assertThat($expectedJson, $constraintActual, $message);
2412
        self::assertThat($actualJson, $constraintExpected, $message);
2413
    }
2414
2415
    /**
2416
     * Returns a PHPUnit_Framework_Constraint_And matcher object.
2417
     *
2418
     * @return PHPUnit_Framework_Constraint_And
2419
     *
2420
     * @since  Method available since Release 3.0.0
2421
     */
2422
    public static function logicalAnd()
2423
    {
2424
        $constraints = func_get_args();
2425
2426
        $constraint = new PHPUnit_Framework_Constraint_And;
2427
        $constraint->setConstraints($constraints);
2428
2429
        return $constraint;
2430
    }
2431
2432
    /**
2433
     * Returns a PHPUnit_Framework_Constraint_Or matcher object.
2434
     *
2435
     * @return PHPUnit_Framework_Constraint_Or
2436
     *
2437
     * @since  Method available since Release 3.0.0
2438
     */
2439
    public static function logicalOr()
2440
    {
2441
        $constraints = func_get_args();
2442
2443
        $constraint = new PHPUnit_Framework_Constraint_Or;
2444
        $constraint->setConstraints($constraints);
2445
2446
        return $constraint;
2447
    }
2448
2449
    /**
2450
     * Returns a PHPUnit_Framework_Constraint_Not matcher object.
2451
     *
2452
     * @param PHPUnit_Framework_Constraint $constraint
2453
     *
2454
     * @return PHPUnit_Framework_Constraint_Not
2455
     *
2456
     * @since  Method available since Release 3.0.0
2457
     */
2458
    public static function logicalNot(PHPUnit_Framework_Constraint $constraint)
2459
    {
2460
        return new PHPUnit_Framework_Constraint_Not($constraint);
2461
    }
2462
2463
    /**
2464
     * Returns a PHPUnit_Framework_Constraint_Xor matcher object.
2465
     *
2466
     * @return PHPUnit_Framework_Constraint_Xor
2467
     *
2468
     * @since  Method available since Release 3.0.0
2469
     */
2470
    public static function logicalXor()
2471
    {
2472
        $constraints = func_get_args();
2473
2474
        $constraint = new PHPUnit_Framework_Constraint_Xor;
2475
        $constraint->setConstraints($constraints);
2476
2477
        return $constraint;
2478
    }
2479
2480
    /**
2481
     * Returns a PHPUnit_Framework_Constraint_IsAnything matcher object.
2482
     *
2483
     * @return PHPUnit_Framework_Constraint_IsAnything
2484
     *
2485
     * @since  Method available since Release 3.0.0
2486
     */
2487
    public static function anything()
2488
    {
2489
        return new PHPUnit_Framework_Constraint_IsAnything;
2490
    }
2491
2492
    /**
2493
     * Returns a PHPUnit_Framework_Constraint_IsTrue matcher object.
2494
     *
2495
     * @return PHPUnit_Framework_Constraint_IsTrue
2496
     *
2497
     * @since  Method available since Release 3.3.0
2498
     */
2499
    public static function isTrue()
2500
    {
2501
        return new PHPUnit_Framework_Constraint_IsTrue;
2502
    }
2503
2504
    /**
2505
     * Returns a PHPUnit_Framework_Constraint_Callback matcher object.
2506
     *
2507
     * @param callable $callback
2508
     *
2509
     * @return PHPUnit_Framework_Constraint_Callback
2510
     */
2511
    public static function callback($callback)
2512
    {
2513
        return new PHPUnit_Framework_Constraint_Callback($callback);
2514
    }
2515
2516
    /**
2517
     * Returns a PHPUnit_Framework_Constraint_IsFalse matcher object.
2518
     *
2519
     * @return PHPUnit_Framework_Constraint_IsFalse
2520
     *
2521
     * @since  Method available since Release 3.3.0
2522
     */
2523
    public static function isFalse()
2524
    {
2525
        return new PHPUnit_Framework_Constraint_IsFalse;
2526
    }
2527
2528
    /**
2529
     * Returns a PHPUnit_Framework_Constraint_IsJson matcher object.
2530
     *
2531
     * @return PHPUnit_Framework_Constraint_IsJson
2532
     *
2533
     * @since  Method available since Release 3.7.20
2534
     */
2535
    public static function isJson()
2536
    {
2537
        return new PHPUnit_Framework_Constraint_IsJson;
2538
    }
2539
2540
    /**
2541
     * Returns a PHPUnit_Framework_Constraint_IsNull matcher object.
2542
     *
2543
     * @return PHPUnit_Framework_Constraint_IsNull
2544
     *
2545
     * @since  Method available since Release 3.3.0
2546
     */
2547
    public static function isNull()
2548
    {
2549
        return new PHPUnit_Framework_Constraint_IsNull;
2550
    }
2551
2552
    /**
2553
     * Returns a PHPUnit_Framework_Constraint_Attribute matcher object.
2554
     *
2555
     * @param PHPUnit_Framework_Constraint $constraint
2556
     * @param string                       $attributeName
2557
     *
2558
     * @return PHPUnit_Framework_Constraint_Attribute
2559
     *
2560
     * @since  Method available since Release 3.1.0
2561
     */
2562
    public static function attribute(PHPUnit_Framework_Constraint $constraint, $attributeName)
2563
    {
2564
        return new PHPUnit_Framework_Constraint_Attribute(
2565
            $constraint,
2566
            $attributeName
2567
        );
2568
    }
2569
2570
    /**
2571
     * Returns a PHPUnit_Framework_Constraint_TraversableContains matcher
2572
     * object.
2573
     *
2574
     * @param mixed $value
2575
     * @param bool  $checkForObjectIdentity
2576
     * @param bool  $checkForNonObjectIdentity
2577
     *
2578
     * @return PHPUnit_Framework_Constraint_TraversableContains
2579
     *
2580
     * @since  Method available since Release 3.0.0
2581
     */
2582
    public static function contains($value, $checkForObjectIdentity = true, $checkForNonObjectIdentity = false)
2583
    {
2584
        return new PHPUnit_Framework_Constraint_TraversableContains($value, $checkForObjectIdentity, $checkForNonObjectIdentity);
2585
    }
2586
2587
    /**
2588
     * Returns a PHPUnit_Framework_Constraint_TraversableContainsOnly matcher
2589
     * object.
2590
     *
2591
     * @param string $type
2592
     *
2593
     * @return PHPUnit_Framework_Constraint_TraversableContainsOnly
2594
     *
2595
     * @since  Method available since Release 3.1.4
2596
     */
2597
    public static function containsOnly($type)
2598
    {
2599
        return new PHPUnit_Framework_Constraint_TraversableContainsOnly($type);
2600
    }
2601
2602
    /**
2603
     * Returns a PHPUnit_Framework_Constraint_TraversableContainsOnly matcher
2604
     * object.
2605
     *
2606
     * @param string $classname
2607
     *
2608
     * @return PHPUnit_Framework_Constraint_TraversableContainsOnly
2609
     */
2610
    public static function containsOnlyInstancesOf($classname)
2611
    {
2612
        return new PHPUnit_Framework_Constraint_TraversableContainsOnly($classname, false);
2613
    }
2614
2615
    /**
2616
     * Returns a PHPUnit_Framework_Constraint_ArrayHasKey matcher object.
2617
     *
2618
     * @param mixed $key
2619
     *
2620
     * @return PHPUnit_Framework_Constraint_ArrayHasKey
2621
     *
2622
     * @since  Method available since Release 3.0.0
2623
     */
2624
    public static function arrayHasKey($key)
2625
    {
2626
        return new PHPUnit_Framework_Constraint_ArrayHasKey($key);
2627
    }
2628
2629
    /**
2630
     * Returns a PHPUnit_Framework_Constraint_IsEqual matcher object.
2631
     *
2632
     * @param mixed $value
2633
     * @param float $delta
2634
     * @param int   $maxDepth
2635
     * @param bool  $canonicalize
2636
     * @param bool  $ignoreCase
2637
     *
2638
     * @return PHPUnit_Framework_Constraint_IsEqual
2639
     *
2640
     * @since  Method available since Release 3.0.0
2641
     */
2642
    public static function equalTo($value, $delta = 0.0, $maxDepth = 10, $canonicalize = false, $ignoreCase = false)
2643
    {
2644
        return new PHPUnit_Framework_Constraint_IsEqual(
2645
            $value,
2646
            $delta,
2647
            $maxDepth,
2648
            $canonicalize,
2649
            $ignoreCase
2650
        );
2651
    }
2652
2653
    /**
2654
     * Returns a PHPUnit_Framework_Constraint_IsEqual matcher object
2655
     * that is wrapped in a PHPUnit_Framework_Constraint_Attribute matcher
2656
     * object.
2657
     *
2658
     * @param string $attributeName
2659
     * @param mixed  $value
2660
     * @param float  $delta
2661
     * @param int    $maxDepth
2662
     * @param bool   $canonicalize
2663
     * @param bool   $ignoreCase
2664
     *
2665
     * @return PHPUnit_Framework_Constraint_Attribute
2666
     *
2667
     * @since  Method available since Release 3.1.0
2668
     */
2669
    public static function attributeEqualTo($attributeName, $value, $delta = 0.0, $maxDepth = 10, $canonicalize = false, $ignoreCase = false)
2670
    {
2671
        return self::attribute(
2672
            self::equalTo(
2673
                $value,
2674
                $delta,
2675
                $maxDepth,
2676
                $canonicalize,
2677
                $ignoreCase
2678
            ),
2679
            $attributeName
2680
        );
2681
    }
2682
2683
    /**
2684
     * Returns a PHPUnit_Framework_Constraint_IsEmpty matcher object.
2685
     *
2686
     * @return PHPUnit_Framework_Constraint_IsEmpty
2687
     *
2688
     * @since  Method available since Release 3.5.0
2689
     */
2690
    public static function isEmpty()
2691
    {
2692
        return new PHPUnit_Framework_Constraint_IsEmpty;
2693
    }
2694
2695
    /**
2696
     * Returns a PHPUnit_Framework_Constraint_FileExists matcher object.
2697
     *
2698
     * @return PHPUnit_Framework_Constraint_FileExists
2699
     *
2700
     * @since  Method available since Release 3.0.0
2701
     */
2702
    public static function fileExists()
2703
    {
2704
        return new PHPUnit_Framework_Constraint_FileExists;
2705
    }
2706
2707
    /**
2708
     * Returns a PHPUnit_Framework_Constraint_GreaterThan matcher object.
2709
     *
2710
     * @param mixed $value
2711
     *
2712
     * @return PHPUnit_Framework_Constraint_GreaterThan
2713
     *
2714
     * @since  Method available since Release 3.0.0
2715
     */
2716
    public static function greaterThan($value)
2717
    {
2718
        return new PHPUnit_Framework_Constraint_GreaterThan($value);
2719
    }
2720
2721
    /**
2722
     * Returns a PHPUnit_Framework_Constraint_Or matcher object that wraps
2723
     * a PHPUnit_Framework_Constraint_IsEqual and a
2724
     * PHPUnit_Framework_Constraint_GreaterThan matcher object.
2725
     *
2726
     * @param mixed $value
2727
     *
2728
     * @return PHPUnit_Framework_Constraint_Or
2729
     *
2730
     * @since  Method available since Release 3.1.0
2731
     */
2732
    public static function greaterThanOrEqual($value)
2733
    {
2734
        return self::logicalOr(
2735
            new PHPUnit_Framework_Constraint_IsEqual($value),
2736
            new PHPUnit_Framework_Constraint_GreaterThan($value)
2737
        );
2738
    }
2739
2740
    /**
2741
     * Returns a PHPUnit_Framework_Constraint_ClassHasAttribute matcher object.
2742
     *
2743
     * @param string $attributeName
2744
     *
2745
     * @return PHPUnit_Framework_Constraint_ClassHasAttribute
2746
     *
2747
     * @since  Method available since Release 3.1.0
2748
     */
2749
    public static function classHasAttribute($attributeName)
2750
    {
2751
        return new PHPUnit_Framework_Constraint_ClassHasAttribute(
2752
            $attributeName
2753
        );
2754
    }
2755
2756
    /**
2757
     * Returns a PHPUnit_Framework_Constraint_ClassHasStaticAttribute matcher
2758
     * object.
2759
     *
2760
     * @param string $attributeName
2761
     *
2762
     * @return PHPUnit_Framework_Constraint_ClassHasStaticAttribute
2763
     *
2764
     * @since  Method available since Release 3.1.0
2765
     */
2766
    public static function classHasStaticAttribute($attributeName)
2767
    {
2768
        return new PHPUnit_Framework_Constraint_ClassHasStaticAttribute(
2769
            $attributeName
2770
        );
2771
    }
2772
2773
    /**
2774
     * Returns a PHPUnit_Framework_Constraint_ObjectHasAttribute matcher object.
2775
     *
2776
     * @param string $attributeName
2777
     *
2778
     * @return PHPUnit_Framework_Constraint_ObjectHasAttribute
2779
     *
2780
     * @since  Method available since Release 3.0.0
2781
     */
2782
    public static function objectHasAttribute($attributeName)
2783
    {
2784
        return new PHPUnit_Framework_Constraint_ObjectHasAttribute(
2785
            $attributeName
2786
        );
2787
    }
2788
2789
    /**
2790
     * Returns a PHPUnit_Framework_Constraint_IsIdentical matcher object.
2791
     *
2792
     * @param mixed $value
2793
     *
2794
     * @return PHPUnit_Framework_Constraint_IsIdentical
2795
     *
2796
     * @since  Method available since Release 3.0.0
2797
     */
2798
    public static function identicalTo($value)
2799
    {
2800
        return new PHPUnit_Framework_Constraint_IsIdentical($value);
2801
    }
2802
2803
    /**
2804
     * Returns a PHPUnit_Framework_Constraint_IsInstanceOf matcher object.
2805
     *
2806
     * @param string $className
2807
     *
2808
     * @return PHPUnit_Framework_Constraint_IsInstanceOf
2809
     *
2810
     * @since  Method available since Release 3.0.0
2811
     */
2812
    public static function isInstanceOf($className)
2813
    {
2814
        return new PHPUnit_Framework_Constraint_IsInstanceOf($className);
2815
    }
2816
2817
    /**
2818
     * Returns a PHPUnit_Framework_Constraint_IsType matcher object.
2819
     *
2820
     * @param string $type
2821
     *
2822
     * @return PHPUnit_Framework_Constraint_IsType
2823
     *
2824
     * @since  Method available since Release 3.0.0
2825
     */
2826
    public static function isType($type)
2827
    {
2828
        return new PHPUnit_Framework_Constraint_IsType($type);
2829
    }
2830
2831
    /**
2832
     * Returns a PHPUnit_Framework_Constraint_LessThan matcher object.
2833
     *
2834
     * @param mixed $value
2835
     *
2836
     * @return PHPUnit_Framework_Constraint_LessThan
2837
     *
2838
     * @since  Method available since Release 3.0.0
2839
     */
2840
    public static function lessThan($value)
2841
    {
2842
        return new PHPUnit_Framework_Constraint_LessThan($value);
2843
    }
2844
2845
    /**
2846
     * Returns a PHPUnit_Framework_Constraint_Or matcher object that wraps
2847
     * a PHPUnit_Framework_Constraint_IsEqual and a
2848
     * PHPUnit_Framework_Constraint_LessThan matcher object.
2849
     *
2850
     * @param mixed $value
2851
     *
2852
     * @return PHPUnit_Framework_Constraint_Or
2853
     *
2854
     * @since  Method available since Release 3.1.0
2855
     */
2856
    public static function lessThanOrEqual($value)
2857
    {
2858
        return self::logicalOr(
2859
            new PHPUnit_Framework_Constraint_IsEqual($value),
2860
            new PHPUnit_Framework_Constraint_LessThan($value)
2861
        );
2862
    }
2863
2864
    /**
2865
     * Returns a PHPUnit_Framework_Constraint_PCREMatch matcher object.
2866
     *
2867
     * @param string $pattern
2868
     *
2869
     * @return PHPUnit_Framework_Constraint_PCREMatch
2870
     *
2871
     * @since  Method available since Release 3.0.0
2872
     */
2873
    public static function matchesRegularExpression($pattern)
2874
    {
2875
        return new PHPUnit_Framework_Constraint_PCREMatch($pattern);
2876
    }
2877
2878
    /**
2879
     * Returns a PHPUnit_Framework_Constraint_StringMatches matcher object.
2880
     *
2881
     * @param string $string
2882
     *
2883
     * @return PHPUnit_Framework_Constraint_StringMatches
2884
     *
2885
     * @since  Method available since Release 3.5.0
2886
     */
2887
    public static function matches($string)
2888
    {
2889
        return new PHPUnit_Framework_Constraint_StringMatches($string);
2890
    }
2891
2892
    /**
2893
     * Returns a PHPUnit_Framework_Constraint_StringStartsWith matcher object.
2894
     *
2895
     * @param mixed $prefix
2896
     *
2897
     * @return PHPUnit_Framework_Constraint_StringStartsWith
2898
     *
2899
     * @since  Method available since Release 3.4.0
2900
     */
2901
    public static function stringStartsWith($prefix)
2902
    {
2903
        return new PHPUnit_Framework_Constraint_StringStartsWith($prefix);
2904
    }
2905
2906
    /**
2907
     * Returns a PHPUnit_Framework_Constraint_StringContains matcher object.
2908
     *
2909
     * @param string $string
2910
     * @param bool   $case
2911
     *
2912
     * @return PHPUnit_Framework_Constraint_StringContains
2913
     *
2914
     * @since  Method available since Release 3.0.0
2915
     */
2916
    public static function stringContains($string, $case = true)
2917
    {
2918
        return new PHPUnit_Framework_Constraint_StringContains($string, $case);
2919
    }
2920
2921
    /**
2922
     * Returns a PHPUnit_Framework_Constraint_StringEndsWith matcher object.
2923
     *
2924
     * @param mixed $suffix
2925
     *
2926
     * @return PHPUnit_Framework_Constraint_StringEndsWith
2927
     *
2928
     * @since  Method available since Release 3.4.0
2929
     */
2930
    public static function stringEndsWith($suffix)
2931
    {
2932
        return new PHPUnit_Framework_Constraint_StringEndsWith($suffix);
2933
    }
2934
2935
    /**
2936
     * Returns a PHPUnit_Framework_Constraint_Count matcher object.
2937
     *
2938
     * @param int $count
2939
     *
2940
     * @return PHPUnit_Framework_Constraint_Count
2941
     */
2942
    public static function countOf($count)
2943
    {
2944
        return new PHPUnit_Framework_Constraint_Count($count);
2945
    }
2946
    /**
2947
     * Fails a test with the given message.
2948
     *
2949
     * @param string $message
2950
     *
2951
     * @throws PHPUnit_Framework_AssertionFailedError
2952
     */
2953
    public static function fail($message = '')
2954
    {
2955
        throw new PHPUnit_Framework_AssertionFailedError($message);
2956
    }
2957
2958
    /**
2959
     * Returns the value of an attribute of a class or an object.
2960
     * This also works for attributes that are declared protected or private.
2961
     *
2962
     * @param mixed  $classOrObject
2963
     * @param string $attributeName
2964
     *
2965
     * @return mixed
2966
     *
2967
     * @throws PHPUnit_Framework_Exception
2968
     */
2969
    public static function readAttribute($classOrObject, $attributeName)
2970
    {
2971
        if (!is_string($attributeName)) {
2972
            throw PHPUnit_Util_InvalidArgumentHelper::factory(2, 'string');
2973
        }
2974
2975
        if (!preg_match('/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/', $attributeName)) {
2976
            throw PHPUnit_Util_InvalidArgumentHelper::factory(2, 'valid attribute name');
2977
        }
2978
2979
        if (is_string($classOrObject)) {
2980
            if (!class_exists($classOrObject)) {
2981
                throw PHPUnit_Util_InvalidArgumentHelper::factory(
2982
                    1,
2983
                    'class name'
2984
                );
2985
            }
2986
2987
            return self::getStaticAttribute(
2988
                $classOrObject,
2989
                $attributeName
2990
            );
2991
        } elseif (is_object($classOrObject)) {
2992
            return self::getObjectAttribute(
2993
                $classOrObject,
2994
                $attributeName
2995
            );
2996
        } else {
2997
            throw PHPUnit_Util_InvalidArgumentHelper::factory(
2998
                1,
2999
                'class name or object'
3000
            );
3001
        }
3002
    }
3003
3004
    /**
3005
     * Returns the value of a static attribute.
3006
     * This also works for attributes that are declared protected or private.
3007
     *
3008
     * @param string $className
3009
     * @param string $attributeName
3010
     *
3011
     * @return mixed
3012
     *
3013
     * @throws PHPUnit_Framework_Exception
3014
     *
3015
     * @since  Method available since Release 4.0.0
3016
     */
3017
    public static function getStaticAttribute($className, $attributeName)
3018
    {
3019
        if (!is_string($className)) {
3020
            throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'string');
3021
        }
3022
3023
        if (!class_exists($className)) {
3024
            throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'class name');
3025
        }
3026
3027
        if (!is_string($attributeName)) {
3028
            throw PHPUnit_Util_InvalidArgumentHelper::factory(2, 'string');
3029
        }
3030
3031
        if (!preg_match('/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/', $attributeName)) {
3032
            throw PHPUnit_Util_InvalidArgumentHelper::factory(2, 'valid attribute name');
3033
        }
3034
3035
        $class = new ReflectionClass($className);
3036
3037
        while ($class) {
3038
            $attributes = $class->getStaticProperties();
3039
3040
            if (array_key_exists($attributeName, $attributes)) {
3041
                return $attributes[$attributeName];
3042
            }
3043
3044
            $class = $class->getParentClass();
3045
        }
3046
3047
        throw new PHPUnit_Framework_Exception(
3048
            sprintf(
3049
                'Attribute "%s" not found in class.',
3050
                $attributeName
3051
            )
3052
        );
3053
    }
3054
3055
    /**
3056
     * Returns the value of an object's attribute.
3057
     * This also works for attributes that are declared protected or private.
3058
     *
3059
     * @param object $object
3060
     * @param string $attributeName
3061
     *
3062
     * @return mixed
3063
     *
3064
     * @throws PHPUnit_Framework_Exception
3065
     *
3066
     * @since  Method available since Release 4.0.0
3067
     */
3068
    public static function getObjectAttribute($object, $attributeName)
3069
    {
3070
        if (!is_object($object)) {
3071
            throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'object');
3072
        }
3073
3074
        if (!is_string($attributeName)) {
3075
            throw PHPUnit_Util_InvalidArgumentHelper::factory(2, 'string');
3076
        }
3077
3078
        if (!preg_match('/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/', $attributeName)) {
3079
            throw PHPUnit_Util_InvalidArgumentHelper::factory(2, 'valid attribute name');
3080
        }
3081
3082
        try {
3083
            $attribute = new ReflectionProperty($object, $attributeName);
3084
        } catch (ReflectionException $e) {
3085
            $reflector = new ReflectionObject($object);
3086
3087
            while ($reflector = $reflector->getParentClass()) {
3088
                try {
3089
                    $attribute = $reflector->getProperty($attributeName);
3090
                    break;
3091
                } catch (ReflectionException $e) {
0 ignored issues
show
Coding Style Comprehensibility introduced by
Consider adding a comment why this CATCH block is empty.
Loading history...
3092
                }
3093
            }
3094
        }
3095
3096
        if (isset($attribute)) {
3097
            if (!$attribute || $attribute->isPublic()) {
3098
                return $object->$attributeName;
3099
            }
3100
3101
            $attribute->setAccessible(true);
3102
            $value = $attribute->getValue($object);
3103
            $attribute->setAccessible(false);
3104
3105
            return $value;
3106
        }
3107
3108
        throw new PHPUnit_Framework_Exception(
3109
            sprintf(
3110
                'Attribute "%s" not found in object.',
3111
                $attributeName
3112
            )
3113
        );
3114
    }
3115
3116
    /**
3117
     * Mark the test as incomplete.
3118
     *
3119
     * @param string $message
3120
     *
3121
     * @throws PHPUnit_Framework_IncompleteTestError
3122
     *
3123
     * @since  Method available since Release 3.0.0
3124
     */
3125
    public static function markTestIncomplete($message = '')
3126
    {
3127
        throw new PHPUnit_Framework_IncompleteTestError($message);
3128
    }
3129
3130
    /**
3131
     * Mark the test as skipped.
3132
     *
3133
     * @param string $message
3134
     *
3135
     * @throws PHPUnit_Framework_SkippedTestError
3136
     *
3137
     * @since  Method available since Release 3.0.0
3138
     */
3139
    public static function markTestSkipped($message = '')
3140
    {
3141
        throw new PHPUnit_Framework_SkippedTestError($message);
3142
    }
3143
3144
    /**
3145
     * Return the current assertion count.
3146
     *
3147
     * @return int
3148
     *
3149
     * @since  Method available since Release 3.3.3
3150
     */
3151
    public static function getCount()
3152
    {
3153
        return self::$count;
3154
    }
3155
3156
    /**
3157
     * Reset the assertion counter.
3158
     *
3159
     * @since  Method available since Release 3.3.3
3160
     */
3161
    public static function resetCount()
3162
    {
3163
        self::$count = 0;
3164
    }
3165
}
3166