/** * Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.util.fudgemsg.multimap; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.Is.is; import org.testng.annotations.Test; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.HashMultimap; import com.google.common.collect.ListMultimap; import com.google.common.collect.Multimap; import com.opengamma.util.test.AbstractFudgeBuilderTestCase; import com.opengamma.util.test.TestGroup; /** * Tests the Multimap support in joda-beans/fudge. */ @Test(groups = TestGroup.UNIT) public class MultimapBeanFudgeBuilderTest extends AbstractFudgeBuilderTestCase { public void test_empty_simple_multimap() { SimpleMultimapMockBean bean = SimpleMultimapMockBean.builder() .simpleMultimap(ArrayListMultimap.<String, String>create()) .build(); assertThat(cycleObject(SimpleMultimapMockBean.class, bean), is(bean)); } public void test_non_empty_simple_multimap() { Multimap<String, String> mmap = HashMultimap.create(); mmap.put("one", "1"); mmap.put("one", "42"); mmap.put("two", "2"); SimpleMultimapMockBean bean = SimpleMultimapMockBean.builder() .simpleMultimap(mmap) .build(); assertThat(cycleObject(SimpleMultimapMockBean.class, bean), is(bean)); } public void test_empty_list_multimap() { ListMultimapMockBean bean = ListMultimapMockBean.builder() .listMultimap(ArrayListMultimap.<String, String>create()) .build(); assertThat(cycleObject(ListMultimapMockBean.class, bean), is(bean)); } public void test_non_empty_list_multimap() { ListMultimap<String, String> mmap = ArrayListMultimap.create(); mmap.put("one", "1"); mmap.put("one", "42"); mmap.put("two", "2"); ListMultimapMockBean bean = ListMultimapMockBean.builder() .listMultimap(mmap) .build(); assertThat(cycleObject(ListMultimapMockBean.class, bean), is(bean)); } /** * This test is unreliable at the moment and so disabled. This is due * to the way joda-beans treats a property of Multimap. Joda-beans * creates a HashMultiMap, but this gets copied by ImmutableMultimap.copyOf() * which uses a ListMultimap which depending on JVM means that * the created multimaps don't compare as equals. * If https://github.com/JodaOrg/joda-beans/issues/64 gets fixed, it should * be possible to enable this test. */ @Test(enabled = false) public void test_combined_multimap() { ListMultimap<String, String> lmmap = ArrayListMultimap.create(); lmmap.put("one", "1"); lmmap.put("one", "42"); lmmap.put("two", "2"); HashMultimap<String, String> hmmap = HashMultimap.create(); hmmap.put("three", "100"); hmmap.put("three", "4200"); hmmap.put("four", "200"); HashMultimap<String, String> mmap = HashMultimap.create(); mmap.put("seven", "-13"); mmap.put("seven", "-423"); mmap.put("eight", "-24"); CombinedMultimapMockBean bean = CombinedMultimapMockBean.builder() .listMultimap(lmmap) .setMultimap(hmmap) .noTypeMultimap(mmap) .build(); assertThat(cycleObject(CombinedMultimapMockBean.class, bean), is(bean)); } }