/*******************************************************************************
* Copyright (c) 2006-2013
* Software Technology Group, Dresden University of Technology
* DevBoost GmbH, Berlin, Amtsgericht Charlottenburg, HRB 140026
*
* 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:
* Software Technology Group - TU Dresden, Germany;
* DevBoost GmbH - Berlin, Germany
* - initial API and implementation
******************************************************************************/
package org.emftext.language.java.test.resolving;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.io.File;
import org.emftext.language.java.expressions.AssignmentExpression;
import org.emftext.language.java.expressions.Expression;
import org.emftext.language.java.members.ClassMethod;
import org.emftext.language.java.members.Field;
import org.emftext.language.java.members.Member;
import org.emftext.language.java.members.Method;
import org.emftext.language.java.references.IdentifierReference;
import org.emftext.language.java.references.MethodCall;
import org.emftext.language.java.statements.ExpressionStatement;
import org.emftext.language.java.statements.Statement;
import org.emftext.language.java.test.AbstractJavaParserTestCase;
import org.emftext.language.java.variables.LocalVariable;
/**
* An abstract super class for all test cases that check reference resolving.
* It provides some assert methods that can be used to check the correctness
* of reference targets.
*/
public abstract class AbstractResolverTestCase extends AbstractJavaParserTestCase {
protected static final String TEST_INPUT_FOLDER_RESOLVING = "src-input" + File.separator + "resolving" + File.separator;
protected org.emftext.language.java.classifiers.Class assertParsesToClass(String typename) throws Exception {
return assertParsesToType(typename, org.emftext.language.java.classifiers.Class.class);
}
protected Field assertIsField(Member member, String expectedName) {
assertType(member, Field.class);
Field field = (Field) member;
assertEquals(expectedName, field.getName());
return field;
}
protected ClassMethod assertIsMethod(Member member, String expectedName) {
assertType(member, ClassMethod.class);
ClassMethod method = (ClassMethod) member;
assertEquals(expectedName, method.getName());
return method;
}
protected void assertIsCallToMethod(Statement statement, Method expectedCallTarget) {
assertType(statement, ExpressionStatement.class);
ExpressionStatement expression = (ExpressionStatement) statement;
Expression methodCallExpression = expression.getExpression();
assertNotNull(methodCallExpression);
assertType(methodCallExpression, MethodCall.class);
MethodCall mc = (MethodCall) methodCallExpression;
assertEquals(expectedCallTarget, mc.getTarget());
}
protected void assertIsReferenceToField(Statement statement, Field expectedReferenceTarget) {
assertType(statement, ExpressionStatement.class);
ExpressionStatement expression = (ExpressionStatement) statement;
Expression expr = expression.getExpression();
assertNotNull(expr);
assertType(expr, AssignmentExpression.class);
Expression expr2 = ((AssignmentExpression) expr).getChild();
assertNotNull(expr2);
assertType(expr2, IdentifierReference.class);
IdentifierReference identifierReference = (IdentifierReference) expr2;
assertEquals(expectedReferenceTarget, identifierReference.getTarget());
}
protected void assertIsReferenceToLocalVariable(Statement statement, LocalVariable expectedReferenceTarget) {
assertType(statement, ExpressionStatement.class);
ExpressionStatement expression = (ExpressionStatement) statement;
Expression expr = expression.getExpression();
assertNotNull(expr);
assertType(expr, AssignmentExpression.class);
Expression expr2 = ((AssignmentExpression) expr).getChild();
assertNotNull(expr2);
assertType(expr2, IdentifierReference.class);
IdentifierReference identifierReference = (IdentifierReference) expr2;
assertEquals(expectedReferenceTarget, identifierReference.getTarget());
}
@Override
protected boolean isExcludedFromReprintTest(String filename) {
return true;
}
@Override
protected boolean ignoreSemanticErrors(String filename) {
return false;
}
@Override
protected String getTestInputFolder() {
return TEST_INPUT_FOLDER_RESOLVING;
}
}