/** * Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.util.types; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertTrue; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.lang.reflect.WildcardType; import java.util.Set; import org.testng.annotations.Test; import com.google.common.collect.ImmutableSet; import com.google.common.reflect.TypeToken; import com.opengamma.util.test.TestGroup; /** * Tests the {@link VariantType} class. */ @Test(groups = TestGroup.UNIT) public class VariantTypeTest { private static void assertVariantEquals(final Type type, final Type... types) { assertEquals(type.getClass(), VariantType.class); assertEquals(ImmutableSet.copyOf(((VariantType) type).getLogicalTypes()), ImmutableSet.copyOf(types)); } public void testEither() { assertEquals(VariantType.either(null, String.class), String.class); assertEquals(VariantType.either(String.class, null), String.class); assertEquals(VariantType.either(String.class, String.class), String.class); assertVariantEquals(VariantType.either(VariantType.either(Integer.class, Double.class), String.class), Integer.class, Double.class, String.class); assertVariantEquals(VariantType.either(String.class, VariantType.either(Integer.class, Double.class)), Integer.class, Double.class, String.class); assertVariantEquals(VariantType.either(String.class, Integer.class), String.class, Integer.class); assertVariantEquals(VariantType.either(VariantType.either(Integer.class, Double.class), VariantType.either(Double.class, String.class)), Integer.class, Double.class, String.class); } public void testEquals() { @SuppressWarnings("serial") final ParameterizedType setType = (ParameterizedType) (new TypeToken<Set<? extends Number>>() { }).getType(); final WildcardType wildType = (WildcardType) setType.getActualTypeArguments()[0]; assertTrue(wildType.equals(VariantType.either(Integer.class, Double.class))); assertTrue(VariantType.either(Integer.class, Double.class).equals(wildType)); } public void testHashCode() { @SuppressWarnings("serial") final ParameterizedType setType = (ParameterizedType) (new TypeToken<Set<? extends Number>>() { }).getType(); final WildcardType wildType = (WildcardType) setType.getActualTypeArguments()[0]; assertEquals(wildType.hashCode(), VariantType.either(Integer.class, Double.class).hashCode()); } }