/******************************************************************************* * Copyright (c) 2015 Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is made available under the terms of the * Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.common.core.test; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import org.eclipse.core.resources.IProject; import org.eclipse.jdt.core.IField; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.IType; import org.eclipse.jdt.core.JavaCore; import org.jboss.tools.common.java.IParametedType; import org.jboss.tools.common.java.ParametedType; import org.jboss.tools.common.java.ParametedTypeFactory; import org.jboss.tools.common.util.EclipseJavaUtil; import org.jboss.tools.test.util.ResourcesUtils; import org.junit.Before; import org.junit.Test; public class ParametedTypeTest { IProject project; @Before public void setUp() throws Exception { if(project == null) { project = importProject("JavaProject"); } } private static IProject importProject(String name) throws Exception { IProject project = ResourcesUtils.importProject("org.jboss.tools.common.core.test", "projects/" + name); assertNotNull(project); assertTrue(project.exists()); return project; } @Test public void testEquals() throws Exception { IJavaProject javaProject = JavaCore.create(project); assertNotNull(javaProject); IType dependencies = EclipseJavaUtil.findType(javaProject, "parameters.Dependencies"); assertNotNull(dependencies); IType type4 = EclipseJavaUtil.findType(javaProject, "parameters.Dependencies.Type4"); assertNotNull(type4); IType type5 = EclipseJavaUtil.findType(javaProject, "parameters.Dependencies.Type4.Type5"); assertNotNull(type5); IField f2 = type4.getField("f2"); assertNotNull(f2); ParametedTypeFactory factory = new ParametedTypeFactory(); IParametedType ptype5 = factory.newParametedType(type5); assertNotNull(ptype5); System.out.println(f2.getTypeSignature()); IParametedType pf2 = factory.getParametedType(type4, f2.getTypeSignature()); try { assertTrue(pf2.equals(ptype5)); assertTrue(ptype5.equals(pf2)); } catch (StackOverflowError e) { fail("Stack overflow in ParametedType.equals()."); } } @Test public void testIsAssignableTo() throws Exception { IJavaProject javaProject = JavaCore.create(project); assertNotNull(javaProject); IType dependencies = EclipseJavaUtil.findType(javaProject, "parameters.Dependencies"); assertNotNull(dependencies); IType type1 = EclipseJavaUtil.findType(javaProject, "parameters.Dependencies.Type1"); assertNotNull(type1); IType type2 = EclipseJavaUtil.findType(javaProject, "parameters.Dependencies.Type2"); assertNotNull(type2); IType type3 = EclipseJavaUtil.findType(javaProject, "parameters.Dependencies.Type3"); assertNotNull(type3); IField f1 = dependencies.getField("f1"); assertNotNull(f1); ParametedTypeFactory factory = new ParametedTypeFactory(); IParametedType pdependencies = factory.newParametedType(dependencies); ParametedType ptype1 = (ParametedType)factory.newParametedType(type1); assertNotNull(ptype1); ParametedType ptype2 = (ParametedType)factory.newParametedType(type2); assertNotNull(ptype2); ParametedType ptype3 = (ParametedType)factory.newParametedType(type3); assertNotNull(ptype3); System.out.println(f1.getTypeSignature()); ParametedType pf1 = (ParametedType)factory.getParametedType(dependencies, f1.getTypeSignature()); try { assertTrue(ptype1.isAssignableTo(pf1, true)); assertTrue(ptype2.isAssignableTo(pf1, true)); assertTrue(ptype3.isAssignableTo(pf1, true)); } catch (StackOverflowError e) { fail("Stack overflow in ParametedType.isAssignableTo()."); } } }