@@ -99,9 +99,7 @@ void toUnmodifiableListThrowsOnMutation() {
9999 Collection .class , //
100100 Iterable .class , //
101101 Iterator .class , //
102- Spliterator .class , //
103- MySpliteratorProvider .class , //
104- MyIteratorProvider .class , //
102+ IteratorProvider .class , //
105103 Object [].class , //
106104 String [].class , //
107105 int [].class , //
@@ -123,12 +121,11 @@ static Stream<Object> objectsConvertibleToStreams() {
123121 Stream .of ("cat" , "dog" ), //
124122 DoubleStream .of (42.3 ), //
125123 IntStream .of (99 ), //
126- LongStream .of (100000000 ), //
124+ LongStream .of (100_000_000 ), //
127125 Set .of (1 , 2 , 3 ), //
128126 Arguments .of ((Object ) new Object [] { 9 , 8 , 7 }), //
129127 new int [] { 5 , 10 , 15 }, //
130- MySpliteratorProvider .of (new String [] { "mouse" , "bear" }), //
131- MyIteratorProvider .of (new Integer [] { 1 , 2 , 3 , 4 , 5 })//
128+ IteratorProvider .of (new Integer [] { 1 , 2 , 3 , 4 , 5 })//
132129 );
133130 }
134131
@@ -139,6 +136,8 @@ static Stream<Object> objectsConvertibleToStreams() {
139136 Object .class , //
140137 Integer .class , //
141138 String .class , //
139+ IteratorProviderNotUsable .class , //
140+ Spliterator .class , //
142141 int .class , //
143142 boolean .class //
144143 })
@@ -251,34 +250,22 @@ void toStreamWithIterator() {
251250 assertThat (result ).containsExactly ("foo" , "bar" );
252251 }
253252
254- @ Test
255- @ SuppressWarnings ("unchecked" )
256- void toStreamWithSpliterator () {
257- final var input = List .of ("foo" , "bar" ).spliterator ();
258-
259- final var result = (Stream <String >) CollectionUtils .toStream (input );
260-
261- assertThat (result ).containsExactly ("foo" , "bar" );
262- }
263-
264253 @ Test
265254 @ SuppressWarnings ("unchecked" )
266255 void toStreamWithIteratorProvider () {
267- final var input = MyIteratorProvider .of (new String [] { "foo" , "bar" });
256+ final var input = IteratorProvider .of (new String [] { "foo" , "bar" });
268257
269258 final var result = (Stream <String >) CollectionUtils .toStream (input );
270259
271260 assertThat (result ).containsExactly ("foo" , "bar" );
272261 }
273262
274263 @ Test
275- @ SuppressWarnings ("unchecked" )
276- void toStreamWithSpliteratorProvider () {
277- final var input = MySpliteratorProvider .of (new String [] { "foo" , "bar" });
278-
279- var result = (Stream <String >) CollectionUtils .toStream (input );
264+ void throwWhenIteratorNamedMethodDoesNotReturnAnIterator () {
265+ var o = IteratorProviderNotUsable .of (new String [] { "Test" });
266+ var e = assertThrows (PreconditionViolationException .class , () -> CollectionUtils .toStream (o ));
280267
281- assertThat ( result ). containsExactly ( "foo" , "bar" );
268+ assertEquals ( "Method with name 'iterator' does not return java.util.Iterator" , e . getMessage () );
282269 }
283270
284271 @ Test
@@ -345,24 +332,29 @@ public Object convert(Object source, ParameterContext context) throws ArgumentCo
345332 }
346333 }
347334
335+ /**
336+ * An interface that has a method with name 'iterator', returning a java.util/Iterator as a return type
337+ */
348338 @ FunctionalInterface
349- private interface MySpliteratorProvider <T > {
339+ private interface IteratorProvider <T > {
350340
351341 @ SuppressWarnings ("unused" )
352- Spliterator <T > thisReturnsASpliterator ();
342+ Iterator <T > iterator ();
353343
354- static <T > MySpliteratorProvider <T > of (T [] elements ) {
355- return () -> Arrays .spliterator (elements );
344+ static <T > IteratorProvider <T > of (T [] elements ) {
345+ return () -> Spliterators . iterator ( Arrays .spliterator (elements ) );
356346 }
357347 }
358348
349+ /**
350+ * An interface that has a method with name 'iterator', but does not return java.util/Iterator as a return type
351+ */
359352 @ FunctionalInterface
360- private interface MyIteratorProvider <T > {
361-
353+ private interface IteratorProviderNotUsable {
362354 @ SuppressWarnings ("unused" )
363- Iterator < T > thisReturnsAnIterator ();
355+ Object iterator ();
364356
365- static <T > MyIteratorProvider < T > of (T [] elements ) {
357+ static <T > IteratorProviderNotUsable of (T [] elements ) {
366358 return () -> Spliterators .iterator (Arrays .spliterator (elements ));
367359 }
368360 }
0 commit comments