| /******************************************************************************* |
| * Copyright (c) 2010 xored software, Inc. |
| * |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Public License v. 2.0 which is available at |
| * http://www.eclipse.org/legal/epl-2.0. |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Contributors: |
| * xored software, Inc. - initial API and Implementation (Alex Panchenko) |
| *******************************************************************************/ |
| package org.eclipse.dltk.javascript.core.tests.search; |
| |
| import static org.eclipse.dltk.core.index2.search.ISearchEngine.SearchFor.ALL_OCCURRENCES; |
| import static org.eclipse.dltk.core.tests.CodeAssistUtil.on; |
| import static org.hamcrest.CoreMatchers.instanceOf; |
| |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.dltk.core.IMethod; |
| import org.eclipse.dltk.core.IModelElement; |
| import org.eclipse.dltk.core.ISourceModule; |
| import org.eclipse.dltk.core.index2.search.ISearchEngine.SearchFor; |
| import org.eclipse.dltk.core.search.FieldDeclarationMatch; |
| import org.eclipse.dltk.core.search.FieldReferenceMatch; |
| import org.eclipse.dltk.core.search.LocalVariableDeclarationMatch; |
| import org.eclipse.dltk.core.search.LocalVariableReferenceMatch; |
| import org.eclipse.dltk.core.search.MethodDeclarationMatch; |
| import org.eclipse.dltk.core.search.MethodReferenceMatch; |
| import org.eclipse.dltk.core.tests.ProjectSetup; |
| import org.eclipse.dltk.core.tests.model.TestSearchResults; |
| import org.eclipse.dltk.javascript.core.tests.AllTests; |
| import org.junit.Assert; |
| import org.junit.ClassRule; |
| import org.junit.Ignore; |
| import org.junit.Test; |
| |
| public class SearchFunctionTests extends Assert { |
| |
| @ClassRule |
| public static final ProjectSetup PROJECT = new ProjectSetup( |
| AllTests.WORKSPACE, "selection", |
| ProjectSetup.Option.WAIT_INDEXES_READY); |
| |
| @Test |
| public void testFunctionGlobalField() throws CoreException { |
| ISourceModule module = PROJECT.getSourceModule("src", "functions.js"); |
| IModelElement[] elements = on(module).beforeLast("fun1").codeSelect(); |
| assertEquals(1, elements.length); |
| final IMethod method = (IMethod) elements[0]; |
| final TestSearchResults results = PROJECT.search(method, |
| ALL_OCCURRENCES); |
| assertEquals(2, results.size()); |
| assertThat(results.getMatch(0), instanceOf(FieldDeclarationMatch.class)); |
| assertThat(results.getMatch(1), instanceOf(FieldReferenceMatch.class)); |
| } |
| |
| @Test |
| public void testFunctionLocalField() throws CoreException { |
| ISourceModule module = PROJECT.getSourceModule("src", "functions.js"); |
| IModelElement[] elements = on(module).beforeLast("fun2").codeSelect(); |
| assertEquals(1, elements.length); |
| final IMethod method = (IMethod) elements[0]; |
| final TestSearchResults results = PROJECT.search(method, |
| ALL_OCCURRENCES); |
| assertEquals(2, results.size()); |
| assertThat(results.getMatch(0), |
| instanceOf(LocalVariableDeclarationMatch.class)); |
| assertThat(results.getMatch(1), |
| instanceOf(LocalVariableReferenceMatch.class)); |
| } |
| |
| @Test |
| public void testFunctionLocalFieldWithDoubleName() throws CoreException { |
| ISourceModule module = PROJECT.getSourceModule("src", "functions.js"); |
| IModelElement[] elements = on(module).beforeLast("fun4").codeSelect(); |
| assertEquals(0, elements.length); |
| } |
| |
| @Ignore |
| @Test |
| public void testFunctionThisField() throws CoreException { |
| ISourceModule module = PROJECT.getSourceModule("src", "functions.js"); |
| IModelElement[] elements = on(module).beforeLast("fun5").codeSelect(); |
| assertEquals(1, elements.length); |
| final IMethod method = (IMethod) elements[0]; |
| final TestSearchResults results = PROJECT.search(method, |
| ALL_OCCURRENCES); |
| assertEquals(2, results.size()); |
| assertThat(results.getMatch(0), |
| instanceOf(MethodDeclarationMatch.class)); |
| assertThat(results.getMatch(1), instanceOf(MethodReferenceMatch.class)); |
| } |
| |
| @Test |
| public void testFunctionThisFieldOuterCall() throws CoreException { |
| ISourceModule module = PROJECT.getSourceModule("src", "functions.js"); |
| IModelElement[] elements = on(module).beforeLast("fun6").codeSelect(); |
| assertEquals(1, elements.length); |
| final IMethod method = (IMethod) elements[0]; |
| final TestSearchResults results = PROJECT.search(method, |
| ALL_OCCURRENCES); |
| assertEquals(2, results.size()); |
| assertThat(results.getMatch(0), |
| instanceOf(MethodDeclarationMatch.class)); |
| assertThat(results.getMatch(1), instanceOf(MethodReferenceMatch.class)); |
| } |
| |
| @Test |
| public void testFunctionThisFieldWithInnerFunction() throws CoreException { |
| ISourceModule module = PROJECT.getSourceModule("src", "functions.js"); |
| IModelElement[] elements = on(module).beforeLast("fun8").codeSelect(); |
| assertEquals(0, elements.length); |
| } |
| |
| @Test |
| public void testFunctionThisFieldWithInnerFunctionCall() |
| throws CoreException { |
| ISourceModule module = PROJECT.getSourceModule("src", "functions.js"); |
| IModelElement[] elements = on(module).beforeLast("funA").codeSelect(); |
| assertEquals(0, elements.length); |
| } |
| |
| @Test |
| public void testGlobalInitializerFunctionField() throws CoreException { |
| ISourceModule module = PROJECT.getSourceModule("src", "functions.js"); |
| IModelElement[] elements = on(module).beforeLast("funB").codeSelect(); |
| assertEquals(1, elements.length); |
| final IMethod method = (IMethod) elements[0]; |
| final TestSearchResults results = PROJECT.search(method, |
| ALL_OCCURRENCES); |
| assertEquals(results.toString(), 2, results.size()); |
| assertThat(results.getMatch(0), instanceOf(MethodDeclarationMatch.class)); |
| assertThat(results.getMatch(1), instanceOf(MethodReferenceMatch.class)); |
| } |
| |
| @Test |
| public void testLocalInitializerFunctionField() throws CoreException { |
| ISourceModule module = PROJECT.getSourceModule("src", "functions.js"); |
| IModelElement[] elements = on(module).beforeLast("funC").codeSelect(); |
| assertEquals(1, elements.length); |
| final IModelElement method = elements[0]; |
| final TestSearchResults results = PROJECT.search(method, |
| SearchFor.ALL_OCCURRENCES); |
| assertEquals(2, results.size()); |
| assertThat(results.getMatch(0), instanceOf(MethodDeclarationMatch.class)); |
| assertThat(results.getMatch(1), instanceOf(MethodReferenceMatch.class)); |
| } |
| |
| } |