package bluej.debugger.gentype;

import java.util.*;

import junit.framework.TestCase;
import bluej.utility.JavaReflective;


| Tests for the GenType classes. | | @author Davin McCall | public class GenTypeTests extends TestCase{ protected void setUp() { } protected void tearDown() { }
| Test "map to derived" functionality for a non-immediate derived class. | * * fails in 2.0.2. */ public void test1() { TestReflective baseReflective = new TestReflective("base"); TestReflective derivedR = new TestReflective("derived1"); TestReflective derivedR2 = new TestReflective("derived2"); // Create genType for java.lang.Object Class<?> c = Object.class; JavaReflective objectR = new JavaReflective(c); GenTypeSolid oBound = new GenTypeClass(objectR); | |
// each of the three classes will have a type parameter T | |
derivedR.typeParams.add(new GenTypeDeclTpar("T", new GenTypeSolid [] {oBound })); derivedR2.typeParams.add(new GenTypeDeclTpar("T", new GenTypeSolid [] {oBound })); baseReflective.typeParams.add(new GenTypeDeclTpar("T", new GenTypeSolid[] {oBound })); List<GenTypeParameter> tpars = new ArrayList<GenTypeParameter>(); tpars.add(new GenTypeTpar("T")); derivedR.superTypes.add(new GenTypeClass(baseReflective, tpars)); derivedR2.superTypes.add(new GenTypeClass(derivedR, tpars)); List<GenTypeParameter> basePars = new ArrayList<GenTypeParameter>(); | | basePars.add(oBound); | | GenTypeClass baseClass = new GenTypeClass(baseReflective, basePars); | | //Map m = baseClass.mapToDerived(derivedR2); | | GenTypeClass mapped = (GenTypeClass) baseClass.mapToDerived(derivedR2); | | //assertTrue(m.get("T").equals(oBound)); assertEquals("derived2<java.lang.Object>", mapped.toString()); } /** * Must be able to map tpars of a wildcard to a wildcard. The result is * not a legal java type, but its string representation must be a legal * type. */ public void test2() | | { | | // Create genType for java.lang.Object | | JavaReflective objectR = new JavaReflective(Object.class); | | GenTypeSolid object = new GenTypeClass(objectR); | | // Create a wildcard ('wildcard1') "? extends T" GenTypeExtends wildcard1 = new GenTypeExtends(new GenTypeTpar("T")); // create a wildcard ('wildcard2') "? extends Object" GenTypeExtends wildcard2 = new GenTypeExtends(object); // create a mapping "T -> wildcard2" Map<String,GenTypeParameter> m = new HashMap<String,GenTypeParameter>(); m.put("T", wildcard2); // Apply mapping to wildcard1 String st = wildcard1.mapTparsToTypes(m).toString(true); // check that result is a legal java type (when as a string) assertEquals("?", st); } /** * Test we can map successfully from a raw type to a non-generic base type. */ public void test3() { TestReflective baseReflective = new TestReflective("base"); TestReflective derivedR = new TestReflective("derived1"); // Create genType for java.lang.Object Class<?> c = Object.class; JavaReflective objectR = new JavaReflective(c); GenTypeSolid oBound = new GenTypeClass(objectR); | | // derived class has a type parameter "T" derivedR.typeParams.add(new GenTypeDeclTpar("T", new GenTypeSolid [] {oBound })); // derived inherits from base List<GenTypeParameter> noTpars = new ArrayList<GenTypeParameter>(); derivedR.superTypes.add(new GenTypeClass(baseReflective, noTpars)); | | // Make a raw version of the derived type | | GenTypeClass derived = new GenTypeClass(derivedR, noTpars); | | GenTypeClass mapped = derived.mapToSuper("base"); assertEquals(mapped.toString(), "base"); } /** * For a type A which inherits the raw version of a generic type B which * inherits a generic base C, mapping A -> C should yield the raw type C. */ public void test4() { | | TestReflective aReflective = new TestReflective("AClass"); TestReflective bReflective = new TestReflective("BClass"); TestReflective cReflective = new TestReflective("CClass"); TestReflective objReflective = new TestReflective("java.lang.Object"); // BClass and CClass have a type parameter "T" GenTypeDeclTpar tparT = new GenTypeDeclTpar("T", new GenTypeSolid[] {new GenTypeClass(objReflective) }); bReflective.typeParams.add(tparT); cReflective.typeParams.add(tparT); // AClass derives from raw BClass aReflective.superTypes.add(new GenTypeClass(bReflective)); | | // BClass<T> derives from CClass<T> | | List<GenTypeParameter> l = new ArrayList<GenTypeParameter>(); | | l.add(tparT); | | bReflective.superTypes.add(new GenTypeClass(cReflective, l)); | | // test! | | GenTypeClass instanceAClass = new GenTypeClass(aReflective); | | GenTypeClass mapped = instanceAClass.mapToSuper("CClass"); assertEquals("CClass", mapped.toString()); } /** * Test GenTypeClass constructor taking a Reflective and Map; no type parameters, empty map */ public void test5() { TestReflective aReflective = new TestReflective("AClass"); GenTypeClass aClass = new GenTypeClass(aReflective, new HashMap<String,GenTypeParameter>()); assertEquals("AClass", aClass.toString()); } /** * Test GenTypeClass constructor taking a Reflective and Map; type parameters, empty map. */ public void test6() { TestReflective aReflective = new TestReflective("AClass"); TestReflective bReflective = new TestReflective("BClass"); aReflective.typeParams.add(new GenTypeDeclTpar("T", new GenTypeClass(bReflective))); // effective declaration: class AClass<T extends BClass> GenTypeClass aClass = new GenTypeClass(aReflective, new HashMap<String,GenTypeParameter>()); | | assertEquals("AClass<? extends BClass>", aClass.toString()); } }
top, use, map, class GenTypeTests

.   setUp
.   tearDown




21 neLoCode + 28 LoComm