1+ package com .jnape .palatable .lambda .functions .builtin .fn2 ;
2+
3+ import org .junit .Test ;
4+
5+ import java .util .AbstractCollection ;
6+ import java .util .Arrays ;
7+ import java .util .Iterator ;
8+ import java .util .List ;
9+
10+ import static com .jnape .palatable .lambda .functions .builtin .fn2 .ToArray .toArray ;
11+ import static java .util .Arrays .asList ;
12+ import static java .util .Collections .emptyIterator ;
13+ import static org .junit .Assert .assertArrayEquals ;
14+
15+ public class ToArrayTest {
16+
17+ @ Test
18+ public void writesIterableToArray () {
19+ assertArrayEquals (new Integer []{1 , 2 , 3 }, toArray (Integer [].class , asList (1 , 2 , 3 )));
20+
21+ List <? extends Integer > variance = asList (1 , 2 , 3 );
22+ assertArrayEquals (new Object []{1 , 2 , 3 }, toArray (Object [].class , variance ));
23+ }
24+
25+ @ Test
26+ public void usesCollectionToArrayIfPossible () {
27+ Object sentinel = new Object ();
28+ class CustomCollection extends AbstractCollection <Object > {
29+ @ Override
30+ public Iterator <Object > iterator () {
31+ return emptyIterator ();
32+ }
33+
34+ @ Override
35+ public int size () {
36+ return 0 ;
37+ }
38+
39+ @ Override
40+ @ SuppressWarnings ("unchecked" )
41+ public <T > T [] toArray (T [] a ) {
42+ T [] result = Arrays .copyOf (a , 1 );
43+ result [0 ] = (T ) sentinel ;
44+ return result ;
45+ }
46+ }
47+
48+ assertArrayEquals (new Object []{sentinel }, toArray (Object [].class , new CustomCollection ()));
49+ }
50+ }
0 commit comments