|
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;
|
@@ -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 | /**
|
|
0 commit comments