/* * Copyright (c) 2007 Mockito contributors * This program is made available under the terms of the MIT License. */ package org.mockito.internal.util.reflection; import org.junit.Test; import java.lang.reflect.Field; import java.lang.reflect.Type; import java.util.*; import static org.junit.Assert.assertEquals; public class GenericMasterTest { GenericMaster m = new GenericMaster(); List<String> one; Set<Integer> two; Map<Double, String> map; String nonGeneric; List<Set<String>> nested; List<Set<Collection<String>>> multiNested; public interface ListSet extends List<Set<?>> {} public interface MapNumberString extends Map<Number, String> {} public class HashMapNumberString<K extends Number> extends HashMap<K, String> {} public List<Number> numberList() { return null; } public Comparable<Number> numberComparable() { return null; } @SuppressWarnings("rawtypes") public List rawList() { return null; } public List<? extends Type> typeList() { return null; } @Test public void should_find_generic_class() throws Exception { assertEquals(String.class, m.getGenericType(field("one"))); assertEquals(Integer.class, m.getGenericType(field("two"))); assertEquals(Double.class, m.getGenericType(field("map"))); } @Test public void should_get_object_for_non_generic() throws Exception { assertEquals(Object.class, m.getGenericType(field("nonGeneric"))); } @Test public void should_deal_with_nested_generics() throws Exception { assertEquals(Set.class, m.getGenericType(field("nested"))); assertEquals(Set.class, m.getGenericType(field("multiNested"))); } private Field field(String fieldName) throws SecurityException, NoSuchFieldException { return this.getClass().getDeclaredField(fieldName); } }