Skip to content

Commit ce7f98a

Browse files
awalter17ctrueden
authored andcommitted
Add tests for ConvertService matching
1 parent 1a4b024 commit ce7f98a

File tree

1 file changed

+132
-0
lines changed

1 file changed

+132
-0
lines changed

src/test/java/org/scijava/convert/ConvertServiceTest.java

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,9 @@
4040
import static org.junit.Assert.assertTrue;
4141
import static org.junit.Assert.fail;
4242

43+
import java.lang.reflect.Field;
4344
import java.lang.reflect.Type;
45+
import java.math.BigDecimal;
4446
import java.util.ArrayList;
4547
import java.util.Collection;
4648
import java.util.Collections;
@@ -54,12 +56,22 @@
5456
import org.junit.Test;
5557
import org.scijava.Context;
5658
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;
5767
import org.scijava.plugin.Plugin;
5868
import org.scijava.util.BoolArray;
69+
import org.scijava.util.ByteArray;
5970
import org.scijava.util.CharArray;
6071
import org.scijava.util.ClassUtils;
6172
import org.scijava.util.DoubleArray;
6273
import org.scijava.util.FloatArray;
74+
import org.scijava.util.GenericUtils;
6375
import org.scijava.util.IntArray;
6476
import org.scijava.util.LongArray;
6577
import org.scijava.util.PrimitiveArray;
@@ -565,6 +577,126 @@ public void testGetCompatibleInputs() {
565577
assertEquals(StringHisListConverter.S4, compatibleInputs.get(3));
566578
}
567579

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+
568700
// -- Helper Methods --
569701

570702
/**

0 commit comments

Comments
 (0)