From 9db7295f2b0a27b5a6e0c7e6b4b83b3740cae3ca Mon Sep 17 00:00:00 2001 From: Rob Austin Date: Tue, 23 Dec 2014 16:14:52 +0000 Subject: [PATCH] now correctly comparing char[] values --- .../convertors/ChronicleMapConverter.java | 11 ++--- .../chronicle/map/CHMUseCasesTest.java | 49 ++++++++++++------- 2 files changed, 36 insertions(+), 24 deletions(-) diff --git a/src/main/java/net/openhft/xstreem/convertors/ChronicleMapConverter.java b/src/main/java/net/openhft/xstreem/convertors/ChronicleMapConverter.java index 533c97b2e..8b0d44b61 100644 --- a/src/main/java/net/openhft/xstreem/convertors/ChronicleMapConverter.java +++ b/src/main/java/net/openhft/xstreem/convertors/ChronicleMapConverter.java @@ -63,12 +63,12 @@ public class ChronicleMapConverter implements Converter { final AbstractMap.SimpleEntry e = (AbstractMap.SimpleEntry) o; final Object key = e.getKey(); - writer.startNode(key.getClass().getCanonicalName()); + writer.startNode(key.getClass().getName()); marshallingContext.convertAnother(key); writer.endNode(); Object value = e.getValue(); - writer.startNode(value.getClass().getCanonicalName()); + writer.startNode(value.getClass().getName()); marshallingContext.convertAnother(value); writer.endNode(); @@ -114,9 +114,7 @@ public class ChronicleMapConverter implements Converter { static E deserialize(@NotNull UnmarshallingContext unmarshallingContext, @NotNull HierarchicalStreamReader reader) { - final String clazz = reader.getNodeName(); - - switch (clazz) { + switch (reader.getNodeName()) { case "java.util.Collections$EmptySet": return (E) Collections.EMPTY_SET; @@ -130,7 +128,7 @@ public class ChronicleMapConverter implements Converter { } - return (E) unmarshallingContext.convertAnother(null, forName(clazz)); + return (E) unmarshallingContext.convertAnother(null, forName(reader.getNodeName())); } static Class forName(String clazz) { @@ -159,3 +157,4 @@ public class ChronicleMapConverter implements Converter { } } + diff --git a/src/test/java/net/openhft/chronicle/map/CHMUseCasesTest.java b/src/test/java/net/openhft/chronicle/map/CHMUseCasesTest.java index 47bd3dae7..e11d95d03 100644 --- a/src/test/java/net/openhft/chronicle/map/CHMUseCasesTest.java +++ b/src/test/java/net/openhft/chronicle/map/CHMUseCasesTest.java @@ -122,8 +122,8 @@ public class CHMUseCasesTest { return; - // waitTillEqual(5000); - // assertEquals(map1, map2); + waitTillEqual(5000); + assertEquals(map1, map2); } if (typeOfMap == TypeOfMap.SIMPLE) @@ -131,35 +131,48 @@ public class CHMUseCasesTest { } + private void assertArrayValueEquals(ChronicleMap map1, ChronicleMap map2) { + + assertEquals(map1.size(), map2.size()); + + + for (Object key : map1.keySet()) { + + if (map1.valueClass() == byte[].class) + Assert.assertArrayEquals((byte[]) map1.get(key), (byte[]) map2.get(key)); + + else if (map1.valueClass() == char[].class) + Assert.assertArrayEquals((char[]) map1.get(key), (char[]) map2.get(key)); + + else throw new IllegalStateException("unsupported type"); + + } + } + private void checkJsonSerilization() { - // see HCOLL-265 Chronicle Maps with Identical char[] values are not equal1 - if (map1.keyClass() == char[].class || map1.valueClass() == char[].class) { - return; - } - File file = new File(TMP + "/chronicle-map-" + System.nanoTime() + ".json"); file.deleteOnExit(); - - try { - try { - map1.getAll(file); + map1.getAll(file); - try (ChronicleMap actual = ChronicleMapBuilder.of(map1.keyClass(), - map1.valueClass()) - .create()) { - actual.putAll(file); + try (ChronicleMap actual = ChronicleMapBuilder.of(map1.keyClass(), + map1.valueClass()) + .create()) { + actual.putAll(file); + + if (map1.keyClass() == char[].class || map1.valueClass() == char[].class) { + assertArrayValueEquals(map1, actual); + } else { Assert.assertEquals(map1, actual); } - - } catch (IOException e) { - e.printStackTrace(); } + } catch (IOException e) { + Assert.fail(); } finally { file.delete(); }