Skip to content

Commit 33abbae

Browse files
committed
feat: add replacements for deprecated assertContainsOnly() and assertNotContainsOnly()
1 parent 72fc49a commit 33abbae

File tree

2 files changed

+264
-2
lines changed

2 files changed

+264
-2
lines changed

docs/supported_asserts.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,35 @@ assertClassNotHasAttribute
2020
assertClassNotHasStaticAttribute
2121
assertContains
2222
assertContainsEquals
23+
assertContainsNotOnlyArray
24+
assertContainsNotOnlyBool
25+
assertContainsNotOnlyCallable
26+
assertContainsNotOnlyClosedResource
27+
assertContainsNotOnlyFloat
28+
assertContainsNotOnlyInstancesOf
29+
assertContainsNotOnlyInt
30+
assertContainsNotOnlyIterable
31+
assertContainsNotOnlyNull
32+
assertContainsNotOnlyNumeric
33+
assertContainsNotOnlyObject
34+
assertContainsNotOnlyResource
35+
assertContainsNotOnlyScalar
36+
assertContainsNotOnlyString
2337
assertContainsOnly
38+
assertContainsOnlyArray
39+
assertContainsOnlyBool
40+
assertContainsOnlyCallable
41+
assertContainsOnlyClosedResource
42+
assertContainsOnlyFloat
2443
assertContainsOnlyInstancesOf
44+
assertContainsOnlyInt
45+
assertContainsOnlyIterable
46+
assertContainsOnlyNull
47+
assertContainsOnlyNumeric
48+
assertContainsOnlyObject
49+
assertContainsOnlyResource
50+
assertContainsOnlyScalar
51+
assertContainsOnlyString
2552
assertCount
2653
assertDirectoryDoesNotExist
2754
assertDirectoryExists

src/Codeception/Util/Shared/InheritedAsserts.php

Lines changed: 237 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,14 +99,120 @@ protected function assertNotContainsEquals(mixed $needle, iterable $haystack, st
9999
Assert::assertNotContainsEquals($needle, $haystack, $message);
100100
}
101101

102+
protected function assertContainsNotOnlyArray(iterable $haystack, string $message = ''): void
103+
{
104+
Assert::assertContainsNotOnlyArray($haystack, $message);
105+
}
106+
107+
protected function assertContainsNotOnlyBool(iterable $haystack, string $message = ''): void
108+
{
109+
Assert::assertContainsNotOnlyBool($haystack, $message);
110+
}
111+
112+
protected function assertContainsNotOnlyCallable(iterable $haystack, string $message = ''): void
113+
{
114+
Assert::assertContainsNotOnlyCallable($haystack, $message);
115+
}
116+
117+
protected function assertContainsNotOnlyFloat(iterable $haystack, string $message = ''): void
118+
{
119+
Assert::assertContainsNotOnlyFloat($haystack, $message);
120+
}
121+
122+
protected function assertContainsNotOnlyInt(iterable $haystack, string $message = ''): void
123+
{
124+
Assert::assertContainsNotOnlyInt($haystack, $message);
125+
}
126+
127+
protected function assertContainsNotOnlyIterable(iterable $haystack, string $message = ''): void
128+
{
129+
Assert::assertContainsNotOnlyIterable($haystack, $message);
130+
}
131+
132+
protected function assertContainsNotOnlyNull(iterable $haystack, string $message = ''): void
133+
{
134+
Assert::assertContainsNotOnlyNull($haystack, $message);
135+
}
136+
137+
protected function assertContainsNotOnlyNumeric(iterable $haystack, string $message = ''): void
138+
{
139+
Assert::assertContainsNotOnlyNumeric($haystack, $message);
140+
}
141+
142+
protected function assertContainsNotOnlyObject(iterable $haystack, string $message = ''): void
143+
{
144+
Assert::assertContainsNotOnlyObject($haystack, $message);
145+
}
146+
147+
protected function assertContainsNotOnlyResource(iterable $haystack, string $message = ''): void
148+
{
149+
Assert::assertContainsNotOnlyResource($haystack, $message);
150+
}
151+
152+
protected function assertContainsNotOnlyClosedResource(iterable $haystack, string $message = ''): void
153+
{
154+
Assert::assertContainsNotOnlyClosedResource($haystack, $message);
155+
}
156+
157+
protected function assertContainsNotOnlyScalar(iterable $haystack, string $message = ''): void
158+
{
159+
Assert::assertContainsNotOnlyScalar($haystack, $message);
160+
}
161+
162+
protected function assertContainsNotOnlyString(iterable $haystack, string $message = ''): void
163+
{
164+
Assert::assertContainsNotOnlyString($haystack, $message);
165+
}
166+
102167
/**
103168
* Asserts that a haystack contains only values of a given type.
104169
* @param 'array'|'bool'|'boolean'|'callable'|'double'|'float'|'int'|'integer'|'iterable'|'null'|'numeric'|'object'|'real'|'resource'|'resource (closed)'|'scalar'|'string' $type
105170
* @param iterable<mixed> $haystack
106171
*/
107172
protected function assertContainsOnly(string $type, iterable $haystack, ?bool $isNativeType = null, string $message = ''): void
108173
{
109-
Assert::assertContainsOnly($type, $haystack, $isNativeType, $message);
174+
$isNativeType ??= self::isNativeType($type);
175+
176+
if ($isNativeType) {
177+
$replacement = match ($type) {
178+
'array' => 'assertContainsOnlyArray',
179+
'bool', 'boolean' => 'assertContainsOnlyBool',
180+
'callable' => 'assertContainsOnlyCallable',
181+
'double', 'float', 'real' => 'assertContainsOnlyFloat',
182+
'int', 'integer' => 'assertContainsOnlyInt',
183+
'iterable' => 'assertContainsOnlyIterable',
184+
'null' => 'assertContainsOnlyNull',
185+
'numeric' => 'assertContainsOnlyNumeric',
186+
'object' => 'assertContainsOnlyObject',
187+
'resource' => 'assertContainsOnlyResource',
188+
'resource (closed)' => 'assertContainsOnlyClosedResource',
189+
'scalar' => 'assertContainsOnlyScalar',
190+
'string' => 'assertContainsOnlyString',
191+
};
192+
193+
trigger_error(
194+
sprintf(
195+
'%s is deprecated since PHPUnit 11.5. Please use %s($haystack) instead of assertContainsOnly(\'%s\', $haystack)',
196+
__FUNCTION__,
197+
$replacement,
198+
$type,
199+
),
200+
E_USER_DEPRECATED,
201+
);
202+
203+
$this->$replacement($haystack, $message);
204+
} else {
205+
trigger_error(
206+
sprintf(
207+
'assertContainsOnly() is deprecated since PHPUnit 11.5. Please use assertContainsOnlyInstancesOf(\'%s\', $haystack) instead of assertContainsOnly(\'%s\', $haystack).',
208+
$type,
209+
$type,
210+
),
211+
E_USER_DEPRECATED,
212+
);
213+
214+
Assert::assertContainsOnlyInstancesOf($type, $haystack, $message);
215+
}
110216
}
111217

112218
/**
@@ -118,6 +224,71 @@ protected function assertContainsOnlyInstancesOf(string $className, iterable $ha
118224
{
119225
Assert::assertContainsOnlyInstancesOf($className, $haystack, $message);
120226
}
227+
228+
protected function assertContainsOnlyArray(iterable $haystack, string $message = ''): void
229+
{
230+
Assert::assertContainsOnlyArray($haystack, $message);
231+
}
232+
233+
protected function assertContainsOnlyBool(iterable $haystack, string $message = ''): void
234+
{
235+
Assert::assertContainsOnlyBool($haystack, $message);
236+
}
237+
238+
protected function assertContainsOnlyCallable(iterable $haystack, string $message = ''): void
239+
{
240+
Assert::assertContainsOnlyCallable($haystack, $message);
241+
}
242+
243+
protected function assertContainsOnlyFloat(iterable $haystack, string $message = ''): void
244+
{
245+
Assert::assertContainsOnlyFloat($haystack, $message);
246+
}
247+
248+
protected function assertContainsOnlyInt(iterable $haystack, string $message = ''): void
249+
{
250+
Assert::assertContainsOnlyInt($haystack, $message);
251+
}
252+
253+
protected function assertContainsOnlyIterable(iterable $haystack, string $message = ''): void
254+
{
255+
Assert::assertContainsOnlyIterable($haystack, $message);
256+
}
257+
258+
protected function assertContainsOnlyNull(iterable $haystack, string $message = ''): void
259+
{
260+
Assert::assertContainsOnlyNull($haystack, $message);
261+
}
262+
263+
protected function assertContainsOnlyNumeric(iterable $haystack, string $message = ''): void
264+
{
265+
Assert::assertContainsOnlyNumeric($haystack, $message);
266+
}
267+
268+
protected function assertContainsOnlyObject(iterable $haystack, string $message = ''): void
269+
{
270+
Assert::assertContainsOnlyObject($haystack, $message);
271+
}
272+
273+
protected function assertContainsOnlyResource(iterable $haystack, string $message = ''): void
274+
{
275+
Assert::assertContainsOnlyResource($haystack, $message);
276+
}
277+
278+
protected function assertContainsOnlyClosedResource(iterable $haystack, string $message = ''): void
279+
{
280+
Assert::assertContainsOnlyClosedResource($haystack, $message);
281+
}
282+
283+
protected function assertContainsOnlyScalar(iterable $haystack, string $message = ''): void
284+
{
285+
Assert::assertContainsOnlyScalar($haystack, $message);
286+
}
287+
288+
protected function assertContainsOnlyString(iterable $haystack, string $message = ''): void
289+
{
290+
Assert::assertContainsOnlyString($haystack, $message);
291+
}
121292

122293
/**
123294
* Asserts the number of elements of an array, Countable or Traversable.
@@ -838,9 +1009,73 @@ protected function assertNotContains(mixed $needle, iterable $haystack, string $
8381009
*/
8391010
protected function assertNotContainsOnly(string $type, iterable $haystack, ?bool $isNativeType = null, string $message = ''): void
8401011
{
841-
Assert::assertNotContainsOnly($type, $haystack, $isNativeType, $message);
1012+
$isNativeType ??= self::isNativeType($type);
1013+
1014+
if ($isNativeType) {
1015+
$replacement = match ($type) {
1016+
'array' => 'assertContainsNotOnlyArray',
1017+
'bool', 'boolean' => 'assertContainsNotOnlyBool',
1018+
'callable' => 'assertContainsNotOnlyCallable',
1019+
'double', 'float', 'real' => 'assertContainsNotOnlyFloat',
1020+
'int', 'integer' => 'assertContainsNotOnlyInt',
1021+
'iterable' => 'assertContainsNotOnlyIterable',
1022+
'null' => 'assertContainsNotOnlyNull',
1023+
'numeric' => 'assertContainsNotOnlyNumeric',
1024+
'object' => 'assertContainsNotOnlyObject',
1025+
'resource' => 'assertContainsNotOnlyResource',
1026+
'resource (closed)' => 'assertContainsNotOnlyClosedResource',
1027+
'scalar' => 'assertContainsNotOnlyScalar',
1028+
'string' => 'assertContainsNotOnlyString',
1029+
};
1030+
1031+
trigger_error(
1032+
sprintf(
1033+
'%s is deprecated since PHPUnit 11.5. Please use %s($haystack) instead of assertContainsNotOnly(\'%s\', $haystack)',
1034+
__FUNCTION__,
1035+
$replacement,
1036+
$type,
1037+
),
1038+
E_USER_DEPRECATED,
1039+
);
1040+
1041+
$this->$replacement($haystack, $message);
1042+
} else {
1043+
trigger_error(
1044+
sprintf(
1045+
'assertNotContainsOnly() is deprecated since PHPUnit 11.5. Please use assertContainsNotOnlyInstancesOf(\'%s\', $haystack) instead of assertNotContainsOnly(\'%s\', $haystack).',
1046+
$type,
1047+
$type,
1048+
),
1049+
E_USER_DEPRECATED,
1050+
);
1051+
1052+
Assert::assertContainsNotOnlyInstancesOf($type, $haystack, $message);
1053+
}
8421054
}
8431055

1056+
private static function isNativeType(string $type): bool
1057+
{
1058+
return in_array($type, [
1059+
'array',
1060+
'bool',
1061+
'boolean',
1062+
'callable',
1063+
'double',
1064+
'float',
1065+
'int',
1066+
'integer',
1067+
'iterable',
1068+
'null',
1069+
'numeric',
1070+
'object',
1071+
'real',
1072+
'resource',
1073+
'resource (closed)',
1074+
'scalar',
1075+
'string',
1076+
]);
1077+
}
1078+
8441079
/**
8451080
* Asserts the number of elements of an array, Countable or Traversable.
8461081
*

0 commit comments

Comments
 (0)