@@ -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