package org.eclipse.recommenders.utils.gson; import static java.util.Arrays.asList; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.assertThat; import java.io.File; import java.util.Date; import java.util.LinkedList; import java.util.UUID; import org.eclipse.recommenders.utils.NamesTest; import org.eclipse.recommenders.utils.names.IFieldName; import org.eclipse.recommenders.utils.names.IMethodName; import org.eclipse.recommenders.utils.names.IPackageName; import org.eclipse.recommenders.utils.names.ITypeName; import org.eclipse.recommenders.utils.names.VmFieldName; import org.eclipse.recommenders.utils.names.VmMethodName; import org.eclipse.recommenders.utils.names.VmPackageName; import org.eclipse.recommenders.utils.names.VmTypeName; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import com.google.common.collect.HashMultimap; import com.google.common.collect.HashMultiset; import com.google.common.collect.Lists; @RunWith(Parameterized.class) public class TypeAdaptersTest { private final Object value; private final Class<?> type; public TypeAdaptersTest(Object value, Class<?> type) { this.value = value; this.type = type; } @Parameters public static Iterable<Object[]> scenarios() { LinkedList<Object[]> scenarios = Lists.newLinkedList(); scenarios.add(scenario(NamesTest.STRING, ITypeName.class)); scenarios.add(scenario(NamesTest.STRING, VmTypeName.class)); scenarios.add(scenario(NamesTest.STRING_NEW, IMethodName.class)); scenarios.add(scenario(NamesTest.STRING_NEW, VmMethodName.class)); scenarios.add(scenario(NamesTest.EVENT_FIELD, IFieldName.class)); scenarios.add(scenario(NamesTest.EVENT_FIELD, VmFieldName.class)); scenarios.add(scenario(NamesTest.JAVA_LANG, IPackageName.class)); scenarios.add(scenario(NamesTest.JAVA_LANG, VmPackageName.class)); scenarios.add(scenario(new File("/tmp/example.json"), File.class)); scenarios.add(scenario(UUID.fromString("01234567-89ab-cdef-0123-456789abcdef"), UUID.class)); scenarios.add(scenario(new Date(0), Date.class)); scenarios.add(scenario(HashMultimap.create(), HashMultimap.class)); scenarios.add(scenario(HashMultiset.create(), HashMultiset.class)); scenarios.add(scenario(HashMultiset.create(asList("x", "y", "z", "z", "y")), HashMultiset.class)); return scenarios; } private static <T> Object[] scenario(T value, Class<? extends T> type) { return new Object[] { value, type }; } @Test public void testSerializationRoundtrip() { String serializedValue = GsonUtil.serialize(value); Object deserializedValue = GsonUtil.deserialize(serializedValue, type); assertThat(deserializedValue, is(equalTo(value))); } }