|
37 | 37 | import static org.junit.Assert.assertTrue; |
38 | 38 | import static org.junit.Assert.fail; |
39 | 39 |
|
40 | | -import java.lang.reflect.Field; |
41 | 40 | import java.lang.reflect.Type; |
42 | 41 | import java.math.BigDecimal; |
43 | 42 | import java.util.ArrayList; |
| 43 | +import java.util.Arrays; |
44 | 44 | import java.util.Collection; |
45 | 45 | import java.util.Collections; |
46 | 46 | import java.util.Date; |
|
68 | 68 | import org.scijava.util.ClassUtils; |
69 | 69 | import org.scijava.util.DoubleArray; |
70 | 70 | import org.scijava.util.FloatArray; |
71 | | -import org.scijava.util.GenericUtils; |
72 | 71 | import org.scijava.util.IntArray; |
73 | 72 | import org.scijava.util.LongArray; |
74 | 73 | import org.scijava.util.PrimitiveArray; |
@@ -467,31 +466,49 @@ class Struct { |
467 | 466 | final Struct struct = new Struct(); |
468 | 467 |
|
469 | 468 | setFieldValue(struct, "intArray", "not an int array"); |
470 | | - assertEquals(null, struct.intArray); |
| 469 | + assertNotNull(struct.intArray); |
| 470 | + assertEquals(1, struct.intArray.length); |
| 471 | + assertSame(0, struct.intArray[0]); |
471 | 472 | } |
472 | 473 |
|
473 | 474 | /** |
474 | 475 | * Tests setting incompatible object values, for both array types of objects |
475 | 476 | * and a collection. |
476 | 477 | */ |
477 | 478 | @Test |
478 | | - public void testBadObjectElements() { |
| 479 | + public void testIncompatibleCollections() { |
479 | 480 | class Struct { |
480 | 481 |
|
481 | 482 | private Double[] doubleArray; |
482 | | - private List<String> stringList; |
483 | | - @SuppressWarnings("unused") |
484 | | - private Set<char[]> nestedArray; |
| 483 | + private List<Number> numberList; |
| 484 | + private Set<Integer[]> setOfIntegerArrays; |
485 | 485 | } |
486 | 486 | final Struct struct = new Struct(); |
487 | 487 |
|
488 | | - // Test abnormal behavior for an object array |
489 | | - setFieldValue(struct, "doubleArray", "not a double array"); |
490 | | - assertEquals(null, struct.doubleArray); |
| 488 | + // NB: DefaultConverter converts non-collection/array objects to |
| 489 | + // collection/array objects, even if some or all of the constituent elements |
| 490 | + // cannot be converted to the array/collection component/element type. |
491 | 491 |
|
492 | | - // Test abnormal behavior for a list |
493 | | - setFieldValue(struct, "nestedArray", "definitely not a set of char arrays"); |
494 | | - assertNull(struct.stringList); |
| 492 | + // Test object to incompatible array type |
| 493 | + setFieldValue(struct, "doubleArray", "not a double array"); |
| 494 | + assertNotNull(struct.doubleArray); |
| 495 | + assertEquals(1, struct.doubleArray.length); |
| 496 | + assertNull(struct.doubleArray[0]); |
| 497 | + |
| 498 | + // Test object to incompatible List type |
| 499 | + setFieldValue(struct, "numberList", "not actually a list of numbers"); |
| 500 | + List<Number> expectedList = Arrays.asList((Number) null); |
| 501 | + assertEquals(expectedList, struct.numberList); |
| 502 | + |
| 503 | + // Test object to incompatible Set type |
| 504 | + setFieldValue(struct, "setOfIntegerArrays", // |
| 505 | + "definitely not a set of Integer[]"); |
| 506 | + assertNotNull(struct.setOfIntegerArrays); |
| 507 | + assertEquals(1, struct.setOfIntegerArrays.size()); |
| 508 | + Integer[] singleton = struct.setOfIntegerArrays.iterator().next(); |
| 509 | + assertNotNull(singleton); |
| 510 | + assertEquals(1, singleton.length); |
| 511 | + assertNull(singleton[0]); |
495 | 512 | } |
496 | 513 |
|
497 | 514 | /** |
|
0 commit comments