Skip to content

Commit fbb21b3

Browse files
Add tests
1 parent 2845e49 commit fbb21b3

File tree

1 file changed

+53
-4
lines changed

1 file changed

+53
-4
lines changed

tests/unit/Framework/Constraint/Traversable/TraversableContainsOnlyTest.php

Lines changed: 53 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,14 @@
1515
use PHPUnit\Framework\ExpectationFailedException;
1616
use PHPUnit\Framework\NativeType;
1717
use PHPUnit\Framework\TestCase;
18+
use stdClass;
1819

1920
#[CoversClass(TraversableContainsOnly::class)]
2021
#[CoversClass(Constraint::class)]
2122
#[Small]
2223
final class TraversableContainsOnlyTest extends TestCase
2324
{
24-
public static function provider(): array
25+
public static function nativeTypeProvider(): array
2526
{
2627
return [
2728
[
@@ -46,8 +47,31 @@ public static function provider(): array
4647
];
4748
}
4849

49-
#[DataProvider('provider')]
50-
public function testCanBeEvaluated(bool $result, string $failureDescription, NativeType $expected, mixed $actual): void
50+
public static function classOrInterfaceProvider(): array
51+
{
52+
return [
53+
[
54+
true,
55+
'',
56+
stdClass::class,
57+
[new stdClass, new stdClass],
58+
],
59+
60+
[
61+
false,
62+
<<<'EOT'
63+
Failed asserting that Array &0 [
64+
0 => null,
65+
] contains only values of type "stdClass".
66+
EOT,
67+
stdClass::class,
68+
[null],
69+
],
70+
];
71+
}
72+
73+
#[DataProvider('nativeTypeProvider')]
74+
public function testCanBeEvaluatedForNativeType(bool $result, string $failureDescription, NativeType $expected, mixed $actual): void
5175
{
5276
$constraint = TraversableContainsOnly::forNativeType($expected);
5377

@@ -63,11 +87,36 @@ public function testCanBeEvaluated(bool $result, string $failureDescription, Nat
6387
$constraint->evaluate($actual);
6488
}
6589

66-
public function testCanBeRepresentedAsString(): void
90+
/**
91+
* @param class-string $expected
92+
*/
93+
#[DataProvider('classOrInterfaceProvider')]
94+
public function testCanBeEvaluatedForClassOrInterface(bool $result, string $failureDescription, string $expected, mixed $actual): void
95+
{
96+
$constraint = TraversableContainsOnly::forClassOrInterface($expected);
97+
98+
$this->assertSame($result, $constraint->evaluate($actual, returnResult: true));
99+
100+
if ($result) {
101+
return;
102+
}
103+
104+
$this->expectException(ExpectationFailedException::class);
105+
$this->expectExceptionMessage($failureDescription);
106+
107+
$constraint->evaluate($actual);
108+
}
109+
110+
public function testCanBeRepresentedAsStringForNativeType(): void
67111
{
68112
$this->assertSame('contains only values of type "int"', TraversableContainsOnly::forNativeType(NativeType::Int)->toString());
69113
}
70114

115+
public function testCanBeRepresentedAsStringForClassOrInterface(): void
116+
{
117+
$this->assertSame('contains only values of type "stdClass"', TraversableContainsOnly::forClassOrInterface(stdClass::class)->toString());
118+
}
119+
71120
public function testIsCountable(): void
72121
{
73122
$this->assertCount(1, TraversableContainsOnly::forNativeType(NativeType::Int));

0 commit comments

Comments
 (0)