HCOLL-268 updated test cases

This commit is contained in:
Rob Austin
2014-12-22 18:42:53 +00:00
parent 872b1bdd3e
commit f3b7fe2be2
3 changed files with 73 additions and 21 deletions
@@ -67,6 +67,7 @@ import static java.lang.Math.max;
import static java.lang.Thread.currentThread;
import static java.nio.ByteBuffer.allocateDirect;
import static net.openhft.chronicle.map.Asserts.assertNotNull;
import static net.openhft.chronicle.map.XStreamHelper.deserialize;
import static net.openhft.lang.MemoryUnit.*;
class VanillaChronicleMap<K, KI, MKI extends MetaBytesInterop<K, ? super KI>,
@@ -671,7 +672,7 @@ class VanillaChronicleMap<K, KI, MKI extends MetaBytesInterop<K, ? super KI>,
public synchronized void getAll(File toFile) throws IOException {
final XStream xstream = new XStream(new JettisonMappedXmlDriver());
xstream.setMode(XStream.NO_REFERENCES);
xstream.alias("chronicle-entries", VanillaChronicleMap.EntrySet.class);
xstream.alias("cmap", VanillaChronicleMap.EntrySet.class);
lazyXStreamConverter().registerConverter(xstream);
OutputStream outputStream = new FileOutputStream(toFile);
@@ -686,7 +687,7 @@ class VanillaChronicleMap<K, KI, MKI extends MetaBytesInterop<K, ? super KI>,
public synchronized void putAll(File fromFile) throws IOException {
final XStream xstream = new XStream(new JettisonMappedXmlDriver());
xstream.setMode(XStream.NO_REFERENCES);
xstream.alias("chronicle-entries", VanillaChronicleMap.EntrySet.class);
xstream.alias("cmap", VanillaChronicleMap.EntrySet.class);
// ideally we will use java serialization if we can
lazyXStreamConverter().registerConverter(xstream);
@@ -817,7 +818,7 @@ class VanillaChronicleMap<K, KI, MKI extends MetaBytesInterop<K, ? super KI>,
} else if (EntrySet.class
.isAssignableFrom(o.getClass())) {
for (Entry e : (EntrySet) o) {
writer.startNode("chronicle-entry");
writer.startNode("entry");
marshallingContext.convertAnother(e);
writer.endNode();
}
@@ -951,13 +952,13 @@ class VanillaChronicleMap<K, KI, MKI extends MetaBytesInterop<K, ? super KI>,
final String nodeName = reader.getNodeName();
switch (nodeName) {
case "chronicle-entries":
case "cmap":
while (reader.hasMoreChildren()) {
reader.moveDown();
final String nodeName0 = reader.getNodeName();
if (!nodeName0.equals("chronicle-entry"))
if (!nodeName0.equals("entry"))
throw new ConversionException("unable to convert node " +
"named=" + nodeName0);
final K k;
@@ -966,17 +967,12 @@ class VanillaChronicleMap<K, KI, MKI extends MetaBytesInterop<K, ? super KI>,
reader.moveDown();
{
String type = reader.getNodeName();
Class o = XStreamHelper.forName(type);
k = (K) unmarshallingContext.convertAnother(null, o);
k = (K) deserialize(unmarshallingContext, reader);
}
reader.moveUp();
reader.moveDown();
{
String type = reader.getNodeName();
Class o = XStreamHelper.forName(type);
v = (V) unmarshallingContext.convertAnother(null, o);
v = (V) deserialize(unmarshallingContext, reader);
}
reader.moveUp();
@@ -996,7 +992,6 @@ class VanillaChronicleMap<K, KI, MKI extends MetaBytesInterop<K, ? super KI>,
}
};
xstream.registerConverter(converter);
@@ -17,21 +17,50 @@
package net.openhft.chronicle.map;
import com.thoughtworks.xstream.converters.ConversionException;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import net.openhft.lang.model.DataValueClasses;
import net.openhft.lang.values.StringValue;
import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.util.Collections;
/**
* Created by Rob on 18/12/14.
*/
class XStreamHelper {
static Object deserialize(UnmarshallingContext unmarshallingContext, HierarchicalStreamReader
reader) {
String type = reader.getNodeName();
switch (type) {
case "java.util.Collections$EmptySet":
return Collections.EMPTY_SET;
case "java.util.Collections$EmptyList":
return Collections.EMPTY_LIST;
case "java.util.Collections$EmptyMap":
case "java.util.Collections.EmptyMap":
return Collections.EMPTY_MAP;
}
Class o = XStreamHelper.forName(type);
return unmarshallingContext.convertAnother(null, o);
}
static Class forName(String type) {
boolean isNative = type.endsWith("$$Native");
if (!isNative && !type.endsWith("$$Heap")) {
try {
@@ -81,6 +110,12 @@ class XStreamHelper {
final String value = reader.getValue();
Class<?> parameterType = p.getPropertyType();
if (StringValue.class.isAssignableFrom(o.getClass())) {
((StringValue) o).setValue(value);
return o;
}
if (parameterType.isPrimitive()) {
// convert the primitive to their boxed type
@@ -115,4 +150,6 @@ class XStreamHelper {
throw new ConversionException("setValue(..) method not found in class=" + aClass
.getCanonicalName());
}
}