/******************************************************************************* * Copyright (c) 2012-2015 Codenvy, S.A. * 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: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.jdt.search; import org.eclipse.che.ide.ext.java.BaseTest; import org.eclipse.che.ide.ext.java.shared.dto.model.CompilationUnit; import org.eclipse.che.ide.ext.java.shared.dto.model.PackageFragment; import org.eclipse.che.ide.ext.java.shared.dto.model.PackageFragmentRoot; import org.eclipse.che.ide.ext.java.shared.dto.search.FindUsagesResponse; import org.eclipse.core.runtime.Path; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.IPackageFragment; import org.eclipse.jdt.core.IPackageFragmentRoot; import org.eclipse.jdt.internal.core.JavaProject; import org.eclipse.jdt.internal.ui.search.JavaSearchQuery; import org.eclipse.jdt.internal.ui.search.JavaSearchResult; import org.eclipse.search.ui.ISearchResult; import org.junit.After; import org.junit.Before; import org.junit.Test; import java.util.List; import static org.fest.assertions.Assertions.assertThat; /** * @author Evgen Vidolob */ public class FindReferencesTest extends BaseTest { private final JUnitSourceSetup setup; public FindReferencesTest() { setup = new JUnitSourceSetup(); } @Override @Before public void setUp() throws Exception { super.setUp(); setup.setUp(); } @After public void tearDown() throws Exception { setup.tearDown(); } @Test public void testFind() throws Exception { JavaSearchQuery query = SearchTestHelper.runMethodRefQuery("junit.framework.Test", "countTestCases", new String[0]); ISearchResult result = query.getSearchResult(); JavaSearchResult javaResult = ((JavaSearchResult)result); assertThat(javaResult.getElements()).hasSize(9); } @Test public void testFind2() throws Exception { IPackageFragmentRoot root = ((JavaProject)JUnitSourceSetup.getProject()).getPackageFragmentRoot( new Path(JUnitSourceSetup.SRC_CONTAINER)); IPackageFragment packageFragment = root.createPackageFragment("che", true, null); StringBuilder a = new StringBuilder(); a.append("package che;\n"); a.append("public class A{}\n"); packageFragment.createCompilationUnit("A.java", a.toString(), true, null); StringBuilder b = new StringBuilder(); b.append("package che;\n"); b.append("import java.util.Comparator;\n"); b.append("public class B extends A implements Comparator<A>{\n"); b.append(" @Override\n"); b.append(" public int compare(A o1, A o2) {\n"); b.append(" A bb = null;\n"); b.append(" return 0;\n"); b.append(" }\n"); b.append("}\n"); packageFragment.createCompilationUnit("B.java", b.toString(), true, null); JavaSearchQuery query = SearchTestHelper.runTypeRefQuery("che.A"); ISearchResult result = query.getSearchResult(); JavaSearchResult javaResult = ((JavaSearchResult)result); assertThat(javaResult.getElements()).hasSize(2); } @Test(expected = SearchException.class) public void testSearchCantFindElement() throws Exception { IPackageFragmentRoot root = ((JavaProject)JUnitSourceSetup.getProject()).getPackageFragmentRoot( new Path(JUnitSourceSetup.SRC_CONTAINER)); IPackageFragment packageFragment = root.createPackageFragment("che", true, null); StringBuilder a = new StringBuilder(); a.append("package che;\n"); a.append("public class A{}\n"); ICompilationUnit compilationUnitA = packageFragment.createCompilationUnit("A.java", a.toString(), true, null); SearchManager manager = new SearchManager(); manager.findUsage(JUnitSourceSetup.getProject(), compilationUnitA.getResource().getFullPath().toOSString(), 24); } @Test public void testSearchManagerFindUsage() throws Exception { IPackageFragmentRoot root = ((JavaProject)JUnitSourceSetup.getProject()).getPackageFragmentRoot( new Path(JUnitSourceSetup.SRC_CONTAINER)); IPackageFragment packageFragment = root.createPackageFragment("che", true, null); StringBuilder a = new StringBuilder(); a.append("package che;\n"); a.append("public class A{}\n"); ICompilationUnit compilationUnitA = packageFragment.createCompilationUnit("A.java", a.toString(), true, null); StringBuilder b = new StringBuilder(); b.append("package che;\n"); b.append("import java.util.Comparator;\n"); b.append("import che.A;\n"); b.append("public class B extends A implements Comparator<A>{\n"); b.append(" private A a = null;\n"); b.append(" static{\n"); b.append(" A ddd = null;\n"); b.append(" }\n"); b.append(" @Override\n"); b.append(" public int compare(A o1, A o2) {\n"); b.append(" A bb = null;\n"); b.append(" return 0;\n"); b.append(" }\n"); b.append(" class SubB{\n"); b.append(" public A ccc = null;\n"); b.append(" }\n"); b.append("}\n"); b.append("class SubB2{\n"); b.append(" private final A foo = null;\n"); b.append("}\n"); packageFragment.createCompilationUnit("B.java", b.toString(), true, null); SearchManager manager = new SearchManager(); FindUsagesResponse response = manager.findUsage(JUnitSourceSetup.getProject(), compilationUnitA.getResource().getFullPath().toOSString(), 26); assertThat(response.getSearchElementLabel()).isEqualTo("A"); List<org.eclipse.che.ide.ext.java.shared.dto.model.JavaProject> projects = response.getProjects(); assertThat(projects).isNotNull().isNotEmpty().hasSize(1); String expectedProjectPath = JUnitSourceSetup.getProject().getPath().toOSString(); org.eclipse.che.ide.ext.java.shared.dto.model.JavaProject project = projects.get(0); assertThat(project.getName()).isEqualTo(JUnitSourceSetup.PROJECT_NAME); assertThat(project.getPath()).isEqualTo(expectedProjectPath); assertThat(project.getPackageFragmentRoots()).isNotNull().isNotEmpty().hasSize(1); PackageFragmentRoot fragmentRoot = project.getPackageFragmentRoots().get(0); assertThat(fragmentRoot.getElementName()).isEqualTo(JUnitSourceSetup.SRC_CONTAINER); assertThat(fragmentRoot.getProjectPath()).isEqualTo(expectedProjectPath); assertThat(fragmentRoot.getPackageFragments()).isNotNull().isNotEmpty().hasSize(1); PackageFragment fragment = fragmentRoot.getPackageFragments().get(0); assertThat(fragment.getElementName()).isEqualTo("che"); assertThat(fragment.getProjectPath()).isEqualTo(expectedProjectPath); assertThat(fragment.getPath()).isEqualTo(expectedProjectPath + "/" + JUnitSourceSetup.SRC_CONTAINER + "/che"); assertThat(fragment.getClassFiles()).isNotNull().isEmpty(); assertThat(fragment.getCompilationUnits()).isNotNull().isNotEmpty().hasSize(1); CompilationUnit compilationUnit = fragment.getCompilationUnits().get(0); assertThat(compilationUnit.getElementName()).isEqualTo("B.java"); assertThat(compilationUnit.getPath()).isEqualTo(expectedProjectPath + "/" + JUnitSourceSetup.SRC_CONTAINER + "/che/B.java"); assertThat(compilationUnit.getImports()).hasSize(1); assertThat(compilationUnit.getTypes()).hasSize(2); } }