diff --git a/src/main/java/com/cedarsoftware/util/convert/MapConversions.java b/src/main/java/com/cedarsoftware/util/convert/MapConversions.java index 07f0ad12..ea178f3b 100644 --- a/src/main/java/com/cedarsoftware/util/convert/MapConversions.java +++ b/src/main/java/com/cedarsoftware/util/convert/MapConversions.java @@ -348,7 +348,7 @@ private static T fromSingleKey(final Object from, final Converter converter, Map map = asMap(from); if (map.containsKey(key)) { - return converter.convert(key, type, options); + return converter.convert(map.get(key), type, options); } return extractValue(map, converter, options, type, key); diff --git a/src/test/java/com/cedarsoftware/util/convert/ConverterEverythingTest.java b/src/test/java/com/cedarsoftware/util/convert/ConverterEverythingTest.java index e5a24e5c..24602b2f 100644 --- a/src/test/java/com/cedarsoftware/util/convert/ConverterEverythingTest.java +++ b/src/test/java/com/cedarsoftware/util/convert/ConverterEverythingTest.java @@ -332,15 +332,12 @@ class ConverterEverythingTest TEST_FACTORY.put(pair(Map.class, Year.class), new Object[][] { { mapOf("_v", "1984"), Year.of(1984) }, { mapOf("value", 1984L), Year.of(1984) }, -// { mapOf("year", 1992), Year.of(1992) }, -// { mapOf("year", mapOf("_v", (short)2024)), Year.of(2024) }, // recursion - }); -// DEFAULT_FACTORY.put(pair(Void.class, Year.class), VoidConversions::toNull); -// DEFAULT_FACTORY.put(pair(Year.class, Year.class), Converter::identity); -// DEFAULT_FACTORY.put(pair(Byte.class, Year.class), UNSUPPORTED); -// DEFAULT_FACTORY.put(pair(Number.class, Year.class), NumberConversions::toYear); -// DEFAULT_FACTORY.put(pair(String.class, Year.class), StringConversions::toYear); -// DEFAULT_FACTORY.put(pair(Map.class, Year.class), MapConversions::toYear); + { mapOf("year", 1492), Year.of(1492) }, + { mapOf("year", mapOf("_v", (short)2024)), Year.of(2024) }, // recursion + }); + TEST_FACTORY.put(pair(Number.class, Year.class), new Object[][] { + { (byte)101, new IllegalArgumentException("Unsupported conversion, source type [Byte (101)] target type 'Year'") }, + }); } @BeforeEach @@ -355,6 +352,10 @@ void testEverything() { Map, Set>> map = converter.allSupportedConversions(); int neededTests = 0; int count = 0; + boolean runOnlyOneTest = false; + Class singleSource = Number.class; + Class singleTarget = Year.class; + int singleIndex = 0; for (Map.Entry, Set>> entry : map.entrySet()) { Class sourceClass = entry.getKey(); @@ -372,6 +373,12 @@ void testEverything() { } for (int i=0; i < testData.length; i++) { + if (runOnlyOneTest) { + if (!sourceClass.equals(singleSource) || !targetClass.equals(singleTarget) || singleIndex != i) { + continue; + } + } + Object[] testPair = testData[i]; try { verifyTestPair(sourceClass, targetClass, testPair);