/*******************************************************************************
* Copyright (c) 2010 xored software, Inc.
*
* 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:
* xored software, Inc. - initial API and Implementation (Alex Panchenko)
*******************************************************************************/
package org.eclipse.dltk.javascript.core.tests.search;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.dltk.core.IField;
import org.eclipse.dltk.core.IModelElement;
import org.eclipse.dltk.core.search.IDLTKSearchConstants;
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.Test;
public class SearchReferenceTests extends Assert implements
IDLTKSearchConstants {
@ClassRule
public static final ProjectSetup PROJECT = new ProjectSetup(
AllTests.WORKSPACE, "search",
ProjectSetup.Option.WAIT_INDEXES_READY);
@Test
public void testFunctionHello1() throws CoreException {
final TestSearchResults results = PROJECT.search("hello", METHOD,
REFERENCES);
assertEquals(1, results.size());
final IModelElement method = results.locate(IField.class, "a");
final IModelElement parent = method.getParent();
assertEquals(IModelElement.SOURCE_MODULE, parent.getElementType());
assertEquals("a.js", parent.getElementName());
}
@Test
public void testVarA() throws CoreException {
final TestSearchResults results = PROJECT
.search("a", FIELD, REFERENCES);
assertEquals(1, results.size());
final IModelElement module = results.locate(IField.class, "b");
final IModelElement parent = module.getParent();
assertEquals(IModelElement.SOURCE_MODULE, parent.getElementType());
assertEquals("b.js", parent.getElementName());
}
@Test
public void testMethodRef() throws CoreException {
final TestSearchResults results = PROJECT.search("size", METHOD,
REFERENCES);
assertEquals(1, results.size());
final IModelElement element = results.get(0);
final IModelElement parent = element
.getAncestor(IModelElement.SOURCE_MODULE);
assertEquals("size.js", parent.getElementName());
}
@Test
public void testPropertyRef() throws CoreException {
final TestSearchResults results = PROJECT.search("length", FIELD,
REFERENCES);
assertEquals(1, results.size());
final IModelElement element = results.get(0);
final IModelElement parent = element
.getAncestor(IModelElement.SOURCE_MODULE);
assertEquals("length.js", parent.getElementName());
}
@Test
public void testThisFunctionTest() throws CoreException {
final TestSearchResults results = PROJECT.search("myfunction", METHOD,
REFERENCES);
assertEquals(2, results.size());
final IModelElement element = results.get(0);
final IModelElement parent = element
.getAncestor(IModelElement.SOURCE_MODULE);
assertEquals("thisobject.js", parent.getElementName());
}
@Test
public void testThisVariableTest() throws CoreException {
final TestSearchResults results = PROJECT.search("myvariable", FIELD,
REFERENCES);
assertEquals(2, results.size());
final IModelElement element = results.get(0);
final IModelElement parent = element
.getAncestor(IModelElement.SOURCE_MODULE);
assertEquals("thisobject.js", parent.getElementName());
}
@Test
public void testMethodReferenceThatsReferencesInAnArgument() throws CoreException {
final TestSearchResults results = PROJECT.search("convertToExternalURL", METHOD,
REFERENCES);
assertEquals(1, results.size());
final IModelElement element = results.get(0);
final IModelElement parent = element
.getAncestor(IModelElement.SOURCE_MODULE);
assertEquals("globals.js", parent.getElementName());
}
@Test
public void testMethodReferenceThatsReferencesInAVariableFunctionInit() throws CoreException {
final TestSearchResults results = PROJECT.search("SvyException", METHOD,
REFERENCES);
assertEquals(2, results.size());
final IModelElement element = results.get(0);
final IModelElement parent = element
.getAncestor(IModelElement.SOURCE_MODULE);
assertEquals("functioncallsinfunctionvariableinit.js", parent.getElementName());
}
@Test
public void testMethodReferenceThatsReferencesAsIdentifier() throws CoreException {
final TestSearchResults results = PROJECT.search("referencedFuntion", METHOD,
REFERENCES);
assertEquals(1, results.size());
final IModelElement element = results.get(0);
final IModelElement parent = element
.getAncestor(IModelElement.SOURCE_MODULE);
assertEquals("referencetofunctionasidentifier.js", parent.getElementName());
}
}