Skip to content

Commit e9068e3

Browse files
Implement specialized alternatives for the generic containsOnly() method
1 parent 87ca6a3 commit e9068e3

File tree

3 files changed

+140
-0
lines changed

3 files changed

+140
-0
lines changed

ChangeLog-11.5.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ All notable changes of the PHPUnit 11.5 release series are documented in this fi
1111
* Method `assertContainsNotOnlyInstancesOf()` in the `PHPUnit\Framework\Assert` class as the inverse of the `assertContainsOnlyInstancesOf()` method
1212
* Methods `assertContainsOnlyArray()`, `assertContainsOnlyBool()`, `assertContainsOnlyCallable()`, `assertContainsOnlyFloat()`, `assertContainsOnlyInt()`, `assertContainsOnlyIterable()`, `assertContainsOnlyNumeric()`, `assertContainsOnlyObject()`, `assertContainsOnlyResource()`, `assertContainsOnlyClosedResource()`, `assertContainsOnlyScalar()`, and `assertContainsOnlyString()` in the `PHPUnit\Framework\Assert` class as specialized alternatives for the generic `assertContainsOnly()` method
1313
* Methods `assertContainsNotOnlyArray()`, `assertContainsNotOnlyBool()`, `assertContainsNotOnlyCallable()`, `assertContainsNotOnlyFloat()`, `assertContainsNotOnlyInt()`, `assertContainsNotOnlyIterable()`, `assertContainsNotOnlyNumeric()`, `assertContainsNotOnlyObject()`, `assertContainsNotOnlyResource()`, `assertContainsNotOnlyClosedResource()`, `assertContainsNotOnlyScalar()`, and `assertContainsNotOnlyString()` in the `PHPUnit\Framework\Assert` class as specialized alternatives for the generic `assertNotContainsOnly()` method
14+
* Methods `containsOnlyArray()`, `containsOnlyBool()`, `containsOnlyCallable()`, `containsOnlyFloat()`, `containsOnlyInt()`, `containsOnlyIterable()`, `containsOnlyNumeric()`, `containsOnlyObject()`, `containsOnlyResource()`, `containsOnlyClosedResource()`, `containsOnlyScalar()`, and `containsOnlyString()` in the `PHPUnit\Framework\Assert` class as specialized alternatives for the generic `containsOnly()` method
1415
* Methods `isArray()`, `isBool()`, `isCallable()`, `isFloat()`, `isInt()`, `isIterable()`, `isNumeric()`, `isObject()`, `isResource()`, `isClosedResource()`, `isScalar()`, `isString()` in the `PHPUnit\Framework\Assert` class as specialized alternatives for the generic `isType()` method
1516
* `TestRunner\ChildProcessStarted` and `TestRunner\ChildProcessFinished` events
1617

src/Framework/Assert.php

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2750,6 +2750,71 @@ final public static function containsOnly(string $type): TraversableContainsOnly
27502750
return new TraversableContainsOnly($type);
27512751
}
27522752

2753+
final public static function containsOnlyArray(): TraversableContainsOnly
2754+
{
2755+
return new TraversableContainsOnly(NativeType::Array->value);
2756+
}
2757+
2758+
final public static function containsOnlyBool(): TraversableContainsOnly
2759+
{
2760+
return new TraversableContainsOnly(NativeType::Bool->value);
2761+
}
2762+
2763+
final public static function containsOnlyCallable(): TraversableContainsOnly
2764+
{
2765+
return new TraversableContainsOnly(NativeType::Callable->value);
2766+
}
2767+
2768+
final public static function containsOnlyFloat(): TraversableContainsOnly
2769+
{
2770+
return new TraversableContainsOnly(NativeType::Float->value);
2771+
}
2772+
2773+
final public static function containsOnlyInt(): TraversableContainsOnly
2774+
{
2775+
return new TraversableContainsOnly(NativeType::Int->value);
2776+
}
2777+
2778+
final public static function containsOnlyIterable(): TraversableContainsOnly
2779+
{
2780+
return new TraversableContainsOnly(NativeType::Iterable->value);
2781+
}
2782+
2783+
final public static function containsOnlyNull(): TraversableContainsOnly
2784+
{
2785+
return new TraversableContainsOnly(NativeType::Null->value);
2786+
}
2787+
2788+
final public static function containsOnlyNumeric(): TraversableContainsOnly
2789+
{
2790+
return new TraversableContainsOnly(NativeType::Numeric->value);
2791+
}
2792+
2793+
final public static function containsOnlyObject(): TraversableContainsOnly
2794+
{
2795+
return new TraversableContainsOnly(NativeType::Object->value);
2796+
}
2797+
2798+
final public static function containsOnlyResource(): TraversableContainsOnly
2799+
{
2800+
return new TraversableContainsOnly(NativeType::Resource->value);
2801+
}
2802+
2803+
final public static function containsOnlyClosedResource(): TraversableContainsOnly
2804+
{
2805+
return new TraversableContainsOnly(NativeType::ClosedResource->value);
2806+
}
2807+
2808+
final public static function containsOnlyScalar(): TraversableContainsOnly
2809+
{
2810+
return new TraversableContainsOnly(NativeType::Scalar->value);
2811+
}
2812+
2813+
final public static function containsOnlyString(): TraversableContainsOnly
2814+
{
2815+
return new TraversableContainsOnly(NativeType::String->value);
2816+
}
2817+
27532818
/**
27542819
* @param class-string $className
27552820
*

tests/unit/Framework/Assert/assertThatTest.php

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,80 @@ public function testAssertThatContainsOnly(): void
123123
$this->assertThat(['foo'], $this->containsOnly('string'));
124124
}
125125

126+
public function testAssertThatContainsOnlyArray(): void
127+
{
128+
$this->assertThat([[]], $this->containsOnlyArray());
129+
}
130+
131+
public function testAssertThatContainsOnlyBool(): void
132+
{
133+
$this->assertThat([true], $this->containsOnlyBool());
134+
}
135+
136+
public function testAssertThatContainsOnlyCallable(): void
137+
{
138+
$callable = static function (): void
139+
{};
140+
141+
$this->assertThat([$callable], $this->containsOnlyCallable());
142+
}
143+
144+
public function testAssertThatContainsOnlyFloat(): void
145+
{
146+
$this->assertThat([0.0], $this->containsOnlyFloat());
147+
}
148+
149+
public function testAssertThatContainsOnlyInt(): void
150+
{
151+
$this->assertThat([0], $this->containsOnlyInt());
152+
}
153+
154+
public function testAssertThatContainsOnlyIterable(): void
155+
{
156+
$this->assertThat([[]], $this->containsOnlyIterable());
157+
}
158+
159+
public function testAssertThatContainsOnlyNull(): void
160+
{
161+
$this->assertThat([null], $this->containsOnlyNull());
162+
}
163+
164+
public function testAssertThatContainsOnlyNumeric(): void
165+
{
166+
$this->assertThat(['0.0'], $this->containsOnlyNumeric());
167+
}
168+
169+
public function testAssertThatContainsOnlyObject(): void
170+
{
171+
$this->assertThat([new stdClass], $this->containsOnlyObject());
172+
}
173+
174+
public function testAssertThatContainsOnlyResource(): void
175+
{
176+
$resource = fopen(__FILE__, 'r');
177+
178+
$this->assertThat([$resource], $this->containsOnlyResource());
179+
}
180+
181+
public function testAssertThatContainsOnlyClosedResource(): void
182+
{
183+
$resource = fopen(__FILE__, 'r');
184+
185+
fclose($resource);
186+
187+
$this->assertThat([$resource], $this->containsOnlyClosedResource());
188+
}
189+
190+
public function testAssertThatContainsOnlyScalar(): void
191+
{
192+
$this->assertThat(['string'], $this->containsOnlyScalar());
193+
}
194+
195+
public function testAssertThatContainsOnlyString(): void
196+
{
197+
$this->assertThat(['string'], $this->containsOnlyString());
198+
}
199+
126200
public function testAssertThatContainsOnlyInstancesOf(): void
127201
{
128202
$this->assertThat([new Book], $this->containsOnlyInstancesOf(Book::class));

0 commit comments

Comments
 (0)