40
40
import static org .junit .Assert .assertTrue ;
41
41
import static org .junit .Assert .fail ;
42
42
43
+ import java .lang .reflect .Field ;
43
44
import java .lang .reflect .Type ;
45
+ import java .math .BigDecimal ;
44
46
import java .util .ArrayList ;
45
47
import java .util .Collection ;
46
48
import java .util .Collections ;
54
56
import org .junit .Test ;
55
57
import org .scijava .Context ;
56
58
import org .scijava .Priority ;
59
+ import org .scijava .convert .ArrayConverters .ByteArrayWrapper ;
60
+ import org .scijava .convert .ArrayConverters .DoubleArrayUnwrapper ;
61
+ import org .scijava .convert .ArrayConverters .FloatArrayWrapper ;
62
+ import org .scijava .convert .ArrayConverters .LongArrayWrapper ;
63
+ import org .scijava .convert .ArrayConverters .ShortArrayUnwrapper ;
64
+ import org .scijava .convert .NumberConverters .ByteToLongConverter ;
65
+ import org .scijava .convert .NumberConverters .DoubleToBigDecimalConverter ;
66
+ import org .scijava .convert .NumberConverters .ShortToFloatConverter ;
57
67
import org .scijava .plugin .Plugin ;
58
68
import org .scijava .util .BoolArray ;
69
+ import org .scijava .util .ByteArray ;
59
70
import org .scijava .util .CharArray ;
60
71
import org .scijava .util .ClassUtils ;
61
72
import org .scijava .util .DoubleArray ;
62
73
import org .scijava .util .FloatArray ;
74
+ import org .scijava .util .GenericUtils ;
63
75
import org .scijava .util .IntArray ;
64
76
import org .scijava .util .LongArray ;
65
77
import org .scijava .util .PrimitiveArray ;
@@ -135,7 +147,7 @@ public void testPrimitives() {
135
147
*/
136
148
@ Test
137
149
public void testArrays () {
138
- // Test that each primitive [] is compatible in either direciton with its
150
+ // Test that each primitive [] is compatible in either direction with its
139
151
// paired PrimitiveArray
140
152
testIntechangeable (int [].class , IntArray .class );
141
153
testIntechangeable (long [].class , LongArray .class );
@@ -145,7 +157,7 @@ public void testArrays() {
145
157
testIntechangeable (char [].class , CharArray .class );
146
158
testIntechangeable (boolean [].class , BoolArray .class );
147
159
148
- // Test that primitive [] can not be convertied to mismatched PrimitiveArray
160
+ // Test that primitive [] can not be converted to mismatched PrimitiveArray
149
161
assertFalse (convertService .supports (int [].class , LongArray .class ));
150
162
151
163
// Test that lists can be converted to any primitive []
@@ -565,6 +577,126 @@ public void testGetCompatibleInputs() {
565
577
assertEquals (StringHisListConverter .S4 , compatibleInputs .get (3 ));
566
578
}
567
579
580
+ /**
581
+ * Tests that the {@link NullConverter} is chosen for null src and/or dest.
582
+ */
583
+ @ Test
584
+ public void testNullConverterMatching () {
585
+ final Converter <?, ?> c = convertService .getHandler (new ConversionRequest (
586
+ null , List .class ));
587
+ assertEquals (NullConverter .class , c .getClass ());
588
+
589
+ final Converter <?, ?> cc = convertService .getHandler (new ConversionRequest (
590
+ new Object (), (Class <?>) null ));
591
+ assertEquals (NullConverter .class , cc .getClass ());
592
+
593
+ final Converter <?, ?> ccc = convertService .getHandler (new ConversionRequest (
594
+ null , (Class <?>) null ));
595
+ assertEquals (NullConverter .class , ccc .getClass ());
596
+ }
597
+
598
+ /**
599
+ * Tests the the appropriate wrapping ArrayConverter is chosen for converting
600
+ * primitive arrays to scijava wrappers.
601
+ */
602
+ @ Test
603
+ public void testArrayConverterWrappingMatching () {
604
+ final byte [] b = new byte [] { -128 , 0 , 127 };
605
+ final long [] l = new long [] { 13 , 17 , -103209 , 0 , 6 };
606
+ final float [] f = new float [] { 12.125f , -0.0625f , 2.5f };
607
+
608
+ final Converter <?, ?> c = convertService .getHandler (b , ByteArray .class );
609
+ assertEquals (ByteArrayWrapper .class , c .getClass ());
610
+
611
+ final Converter <?, ?> cc = convertService .getHandler (l , LongArray .class );
612
+ assertEquals (LongArrayWrapper .class , cc .getClass ());
613
+
614
+ final Converter <?, ?> ccc = convertService .getHandler (f , FloatArray .class );
615
+ assertEquals (FloatArrayWrapper .class , ccc .getClass ());
616
+ }
617
+
618
+ /**
619
+ * Tests that the appropriate unwrapping ArrayConverter is chosen for
620
+ * converting scijava arrays to primitive arrays.
621
+ */
622
+ @ Test
623
+ public void testArrayConverterUnwrappingMatching () {
624
+ final ShortArray s = new ShortArray ();
625
+ final DoubleArray d = new DoubleArray ();
626
+
627
+ final Converter <?, ?> c = convertService .getHandler (s , short [].class );
628
+ assertEquals (ShortArrayUnwrapper .class , c .getClass ());
629
+
630
+ final Converter <?, ?> cc = convertService .getHandler (d , double [].class );
631
+ assertEquals (DoubleArrayUnwrapper .class , cc .getClass ());
632
+ }
633
+
634
+ /**
635
+ * Tests that the {@link CastingConverter} is called when casting is possible.
636
+ */
637
+ @ Test
638
+ public void testCastingConverterMatching () {
639
+ final ArrayList <Double > al = new ArrayList <>();
640
+
641
+ final Converter <?, ?> c = convertService .getHandler (al , Collection .class );
642
+ assertEquals (CastingConverter .class , c .getClass ());
643
+ }
644
+
645
+ /**
646
+ * Tests the that the appropriate {@link NumberToNumberConverter} is chosen.
647
+ */
648
+ @ Test
649
+ public void testNumberConverterMatching () {
650
+ final double d = -24312926.0625 ;
651
+ final byte b = 64 ;
652
+ final short s = 32625 ;
653
+
654
+ // Number converters only handle widening conversions
655
+ final Converter <?, ?> c = convertService .getHandler (d , BigDecimal .class );
656
+ assertEquals (DoubleToBigDecimalConverter .class , c .getClass ());
657
+
658
+ final Converter <?, ?> cc = convertService .getHandler (b , long .class );
659
+ assertEquals (ByteToLongConverter .class , cc .getClass ());
660
+
661
+ final Converter <?, ?> ccc = convertService .getHandler (s , float .class );
662
+ assertEquals (ShortToFloatConverter .class , ccc .getClass ());
663
+ }
664
+
665
+ /**
666
+ * Tests that the {@link DefaultConverter} is chosen when no other suitable
667
+ * converter is available.
668
+ */
669
+ @ Test
670
+ public void testDefaultConverterMatching () {
671
+ final float f = 13624292.25f ;
672
+ final List <String > l = new ArrayList <>();
673
+
674
+ // Narrowing number conversion
675
+ final Converter <?, ?> c = convertService .getHandler (f , byte .class );
676
+ assertEquals (DefaultConverter .class , c .getClass ());
677
+
678
+ // List to Array
679
+ final Converter <?, ?> cc = convertService .getHandler (l , String [].class );
680
+ assertEquals (DefaultConverter .class , cc .getClass ());
681
+
682
+ // Object to String
683
+ final Converter <?, ?> os = convertService .getHandler (new Object (),
684
+ String .class );
685
+ assertEquals (DefaultConverter .class , os .getClass ());
686
+
687
+ // String to Character
688
+ final Converter <?, ?> ss = convertService .getHandler ("hello" , char .class );
689
+ assertEquals (DefaultConverter .class , ss .getClass ());
690
+
691
+ // String to Enum
692
+ final Converter <?, ?> se = convertService .getHandler ("bye" , Words .class );
693
+ assertEquals (DefaultConverter .class , se .getClass ());
694
+
695
+ // Source which can be wrapped as destination
696
+ final Converter <?, ?> w = convertService .getHandler (10122017l , Date .class );
697
+ assertEquals (DefaultConverter .class , w .getClass ());
698
+ }
699
+
568
700
// -- Helper Methods --
569
701
570
702
/**
@@ -751,7 +883,7 @@ public <T> T convert(Object src, Class<T> dest) {
751
883
// -- Helper methods --
752
884
753
885
/**
754
- * Verify bi-direciotnal conversion is supported between the two classes
886
+ * Verify bi-directional conversion is supported between the two classes
755
887
*/
756
888
private void testIntechangeable (final Class <?> c1 , final Class <?> c2 ) {
757
889
assertTrue (convertService .supports (c1 , c2 ));
0 commit comments