/** * Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.util.fudgemsg; import static org.testng.Assert.assertEquals; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.Writer; import java.util.Set; import org.fudgemsg.FudgeContext; import org.fudgemsg.MutableFudgeMsg; import org.fudgemsg.mapping.FudgeDeserializer; import org.fudgemsg.mapping.FudgeSerializer; import org.fudgemsg.wire.FudgeMsgReader; import org.fudgemsg.wire.FudgeMsgWriter; import org.fudgemsg.wire.xml.FudgeXMLStreamReader; import org.fudgemsg.wire.xml.FudgeXMLStreamWriter; import org.joda.beans.Bean; import org.testng.annotations.Test; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.opengamma.util.test.AbstractFudgeBuilderTestCase; import com.opengamma.util.test.TestGroup; /** * Tests the {@link FlexiBeanFudgeBuilder} class. */ @Test(groups = TestGroup.UNIT) public class JodaBeanFudgeBuilderTest extends AbstractFudgeBuilderTestCase { @Test public void test_Joda_MapWithTypeObject() throws IOException { // bean Set<String> strings = ImmutableSet.of("a", "b", "c"); Bean bean = JodaTestBean.builder().map(ImmutableMap.<String, Object>of("some", strings)).build(); // write FudgeContext ctx = OpenGammaFudgeContext.getInstance(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); try (Writer writer = new OutputStreamWriter(baos)) { FudgeXMLStreamWriter streamWriter = new FudgeXMLStreamWriter(ctx, writer); try (FudgeMsgWriter fudgeMsgWriter = new FudgeMsgWriter(streamWriter)) { MutableFudgeMsg msg = (new FudgeSerializer(ctx)).objectToFudgeMsg(bean); FudgeSerializer.addClassHeader(msg, bean.getClass()); fudgeMsgWriter.writeMessage(msg); fudgeMsgWriter.flush(); } } // read try (InputStreamReader reader = new InputStreamReader(new ByteArrayInputStream(baos.toByteArray()))) { try (FudgeXMLStreamReader xmlReader = new FudgeXMLStreamReader(ctx, reader)) { try (FudgeMsgReader fudgeMsgReader = new FudgeMsgReader(xmlReader)) { FudgeDeserializer deserializer = new FudgeDeserializer(ctx); Bean cycled = deserializer.fudgeMsgToObject(bean.getClass(), fudgeMsgReader.nextMessage()); assertEquals(cycled, bean); } } } } @Test public void test_Joda_EmptyMapWithTypeObject() throws IOException { // bean Bean bean = JodaTestBean.builder().map(ImmutableMap.<String, Object>of()).build(); // write FudgeContext ctx = OpenGammaFudgeContext.getInstance(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); try (Writer writer = new OutputStreamWriter(baos)) { FudgeXMLStreamWriter streamWriter = new FudgeXMLStreamWriter(ctx, writer); try (FudgeMsgWriter fudgeMsgWriter = new FudgeMsgWriter(streamWriter)) { MutableFudgeMsg msg = (new FudgeSerializer(ctx)).objectToFudgeMsg(bean); FudgeSerializer.addClassHeader(msg, bean.getClass()); fudgeMsgWriter.writeMessage(msg); fudgeMsgWriter.flush(); } } // read try (InputStreamReader reader = new InputStreamReader(new ByteArrayInputStream(baos.toByteArray()))) { try (FudgeXMLStreamReader xmlReader = new FudgeXMLStreamReader(ctx, reader)) { try (FudgeMsgReader fudgeMsgReader = new FudgeMsgReader(xmlReader)) { FudgeDeserializer deserializer = new FudgeDeserializer(ctx); Bean cycled = deserializer.fudgeMsgToObject(bean.getClass(), fudgeMsgReader.nextMessage()); assertEquals(cycled, bean); } } } } @Test public void test_Joda_ObjectField() throws IOException { // bean Set<String> strings = ImmutableSet.of("a", "b", "c"); Bean bean = JodaTestBean.builder().object(ImmutableMap.<String, Object>of("some", strings)).build(); // write FudgeContext ctx = OpenGammaFudgeContext.getInstance(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); try (Writer writer = new OutputStreamWriter(baos)) { FudgeXMLStreamWriter streamWriter = new FudgeXMLStreamWriter(ctx, writer); try (FudgeMsgWriter fudgeMsgWriter = new FudgeMsgWriter(streamWriter)) { MutableFudgeMsg msg = (new FudgeSerializer(ctx)).objectToFudgeMsg(bean); FudgeSerializer.addClassHeader(msg, bean.getClass()); fudgeMsgWriter.writeMessage(msg); fudgeMsgWriter.flush(); } } // read try (InputStreamReader reader = new InputStreamReader(new ByteArrayInputStream(baos.toByteArray()))) { try (FudgeXMLStreamReader xmlReader = new FudgeXMLStreamReader(ctx, reader)) { try (FudgeMsgReader fudgeMsgReader = new FudgeMsgReader(xmlReader)) { FudgeDeserializer deserializer = new FudgeDeserializer(ctx); Bean cycled = deserializer.fudgeMsgToObject(bean.getClass(), fudgeMsgReader.nextMessage()); assertEquals(cycled, bean); } } } } }