blob: fda2ef061364369ed26cc233852c3b418c56c67f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2011 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.ui.tests.core;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.eclipse.jdt.testplugin.JavaProjectHelper;
import org.eclipse.jdt.testplugin.JavaTestPlugin;
import org.eclipse.jdt.testplugin.StringAsserts;
import org.eclipse.core.runtime.Path;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.search.IJavaSearchConstants;
import org.eclipse.jdt.core.search.IJavaSearchScope;
import org.eclipse.jdt.core.search.SearchEngine;
import org.eclipse.jdt.core.search.SearchPattern;
import org.eclipse.jdt.core.search.TypeNameMatch;
import org.eclipse.jdt.core.search.TypeNameMatchRequestor;
import org.eclipse.jdt.internal.corext.util.TypeNameMatchCollector;
public class TypeInfoTest extends TestCase {
private static final Class THIS= TypeInfoTest.class;
private IJavaProject fJProject1;
private IJavaProject fJProject2;
public TypeInfoTest(String name) {
super(name);
}
public static Test suite() {
return setUpTest(new TestSuite(THIS));
}
public static Test setUpTest(Test test) {
return new ProjectTestSetup(test);
}
protected void setUp() throws Exception {
fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
assertNotNull("jre is null", JavaProjectHelper.addRTJar(fJProject1));
fJProject2= JavaProjectHelper.createJavaProject("TestProject2", "bin");
assertNotNull("jre is null", JavaProjectHelper.addRTJar(fJProject2));
}
protected void tearDown() throws Exception {
JavaProjectHelper.delete(fJProject1);
JavaProjectHelper.delete(fJProject2);
}
public void test1() throws Exception {
// add Junit source to project 2
File junitSrcArchive= JavaTestPlugin.getDefault().getFileInPlugin(JavaProjectHelper.JUNIT_SRC_381);
assertTrue("Junit source", junitSrcArchive != null && junitSrcArchive.exists());
JavaProjectHelper.addSourceContainerWithImport(fJProject2, "src", junitSrcArchive, JavaProjectHelper.JUNIT_SRC_ENCODING);
// source folder
IPackageFragmentRoot root1= JavaProjectHelper.addSourceContainer(fJProject1, "src");
IPackageFragment pack1= root1.createPackageFragment("com.oti", true, null);
ICompilationUnit cu1= pack1.getCompilationUnit("V.java");
cu1.createType("public class V {\n static class VInner {\n}\n}\n", null, true, null);
// proj1 has proj2 as prerequisit
JavaProjectHelper.addRequiredProject(fJProject1, fJProject2);
// internal jar
//IPackageFragmentRoot root2= JavaProjectHelper.addLibraryWithImport(fJProject1, JARFILE, null, null);
ArrayList result= new ArrayList();
IJavaElement[] elements= new IJavaElement[] { fJProject1 };
IJavaSearchScope scope= SearchEngine.createJavaSearchScope(elements);
TypeNameMatchRequestor requestor= new TypeNameMatchCollector(result);
SearchEngine engine= new SearchEngine();
engine.searchAllTypeNames(
null,
0,
new char[] {'V'},
SearchPattern.R_PREFIX_MATCH,
IJavaSearchConstants.TYPE,
scope,
requestor,
IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,
null);
findTypeRef(result, "com.oti.V");
findTypeRef(result, "com.oti.V.VInner");
findTypeRef(result, "java.lang.VerifyError");
findTypeRef(result, "java.lang.VirtualMachineError");
findTypeRef(result, "java.lang.Void");
findTypeRef(result, "java.util.Vector");
findTypeRef(result, "junit.samples.VectorTest");
findTypeRef(result, "junit.runner.Version");
for (int i= 0; i < result.size(); i++) {
TypeNameMatch ref= (TypeNameMatch) result.get(i);
//System.out.println(ref.getTypeName());
assertResolve(ref);
}
assertTrue("Should find 8 elements, is " + result.size(), result.size() == 8);
}
private void assertResolve(TypeNameMatch ref) {
IType resolvedType= ref.getType();
if (resolvedType == null) {
assertTrue("Could not be resolved: " + ref.toString(), false);
}
if (!resolvedType.exists()) {
assertTrue("Resolved type does not exist: " + ref.toString(), false);
}
StringAsserts.assertEqualString(resolvedType.getFullyQualifiedName('.'), ref.getFullyQualifiedName());
}
private void findTypeRef(List refs, String fullname) {
for (int i= 0; i <refs.size(); i++) {
TypeNameMatch curr= (TypeNameMatch) refs.get(i);
if (fullname.equals(curr.getFullyQualifiedName())) {
return;
}
}
assertTrue("Type not found: " + fullname, false);
}
public void test2() throws Exception {
ArrayList result= new ArrayList();
// add Junit source to project 2
File junitSrcArchive= JavaTestPlugin.getDefault().getFileInPlugin(JavaProjectHelper.JUNIT_SRC_381);
assertTrue("Junit source", junitSrcArchive != null && junitSrcArchive.exists());
JavaProjectHelper.addSourceContainerWithImport(fJProject2, "src", junitSrcArchive, JavaProjectHelper.JUNIT_SRC_ENCODING);
IJavaProject[] elements= new IJavaProject[] { fJProject2 };
IJavaSearchScope scope= SearchEngine.createJavaSearchScope(elements);
TypeNameMatchRequestor requestor= new TypeNameMatchCollector(result);
SearchEngine engine= new SearchEngine();
engine.searchAllTypeNames(
null,
0,
new char[] {'T'},
SearchPattern.R_PREFIX_MATCH,
IJavaSearchConstants.TYPE,
scope,
requestor,
IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,
null);
findTypeRef(result, "junit.extensions.TestDecorator");
findTypeRef(result, "junit.framework.Test");
findTypeRef(result, "junit.framework.TestListener");
findTypeRef(result, "junit.tests.framework.TestCaseTest.TornDown");
assertEquals("wrong element count", 51, result.size());
//System.out.println("Elements found: " + result.size());
for (int i= 0; i < result.size(); i++) {
TypeNameMatch ref= (TypeNameMatch) result.get(i);
//System.out.println(ref.getTypeName());
assertResolve(ref);
}
}
public void test_bug44772() throws Exception {
File lib= JavaTestPlugin.getDefault().getFileInPlugin(JavaProjectHelper.MYLIB);
JavaProjectHelper.addLibraryWithImport(fJProject1, Path.fromOSString(lib.getPath()), null, null); // as internal
JavaProjectHelper.addLibrary(fJProject1, Path.fromOSString(lib.getPath())); // and as external
ArrayList result= new ArrayList();
IJavaElement[] elements= new IJavaElement[] { fJProject1 };
IJavaSearchScope scope= SearchEngine.createJavaSearchScope(elements);
TypeNameMatchRequestor requestor= new TypeNameMatchCollector(result);
SearchEngine engine= new SearchEngine();
engine.searchAllTypeNames(
null,
0,
"Foo".toCharArray(),
SearchPattern.R_EXACT_MATCH | SearchPattern.R_CASE_SENSITIVE,
IJavaSearchConstants.TYPE,
scope,
requestor,
IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,
null);
assertEquals("result size", result.size(), 2);
IType type1= ((TypeNameMatch) result.get(0)).getType();
IType type2= ((TypeNameMatch) result.get(1)).getType();
assertNotNull(type1);
assertNotNull(type2);
assertFalse(type1.equals(type2));
}
}