blob: fb6fe58b8bc9aefe2d61743c6d7988815555031d [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2009 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.wst.jsdt.core.tests.dom;
import java.lang.reflect.Method;
import junit.framework.Test;
import org.eclipse.wst.jsdt.core.dom.AST;
import org.eclipse.wst.jsdt.core.dom.ASTMatcher;
import org.eclipse.wst.jsdt.core.dom.ASTNode;
import org.eclipse.wst.jsdt.core.dom.ASTVisitor;
import org.eclipse.wst.jsdt.core.dom.AnonymousClassDeclaration;
import org.eclipse.wst.jsdt.core.dom.ArrayAccess;
import org.eclipse.wst.jsdt.core.dom.ArrayCreation;
import org.eclipse.wst.jsdt.core.dom.ArrayInitializer;
import org.eclipse.wst.jsdt.core.dom.ArrayType;
import org.eclipse.wst.jsdt.core.dom.Assignment;
import org.eclipse.wst.jsdt.core.dom.Block;
import org.eclipse.wst.jsdt.core.dom.BlockComment;
import org.eclipse.wst.jsdt.core.dom.BooleanLiteral;
import org.eclipse.wst.jsdt.core.dom.BreakStatement;
import org.eclipse.wst.jsdt.core.dom.CatchClause;
import org.eclipse.wst.jsdt.core.dom.CharacterLiteral;
import org.eclipse.wst.jsdt.core.dom.ClassInstanceCreation;
import org.eclipse.wst.jsdt.core.dom.ConditionalExpression;
import org.eclipse.wst.jsdt.core.dom.ConstructorInvocation;
import org.eclipse.wst.jsdt.core.dom.ContinueStatement;
import org.eclipse.wst.jsdt.core.dom.DoStatement;
import org.eclipse.wst.jsdt.core.dom.EmptyStatement;
import org.eclipse.wst.jsdt.core.dom.EnhancedForStatement;
import org.eclipse.wst.jsdt.core.dom.Expression;
import org.eclipse.wst.jsdt.core.dom.ExpressionStatement;
import org.eclipse.wst.jsdt.core.dom.FieldAccess;
import org.eclipse.wst.jsdt.core.dom.FieldDeclaration;
import org.eclipse.wst.jsdt.core.dom.ForStatement;
import org.eclipse.wst.jsdt.core.dom.FunctionDeclaration;
import org.eclipse.wst.jsdt.core.dom.FunctionInvocation;
import org.eclipse.wst.jsdt.core.dom.FunctionRef;
import org.eclipse.wst.jsdt.core.dom.FunctionRefParameter;
import org.eclipse.wst.jsdt.core.dom.IfStatement;
import org.eclipse.wst.jsdt.core.dom.ImportDeclaration;
import org.eclipse.wst.jsdt.core.dom.InfixExpression;
import org.eclipse.wst.jsdt.core.dom.Initializer;
import org.eclipse.wst.jsdt.core.dom.JSdoc;
import org.eclipse.wst.jsdt.core.dom.JavaScriptUnit;
import org.eclipse.wst.jsdt.core.dom.LabeledStatement;
import org.eclipse.wst.jsdt.core.dom.LineComment;
import org.eclipse.wst.jsdt.core.dom.MemberRef;
import org.eclipse.wst.jsdt.core.dom.Modifier;
import org.eclipse.wst.jsdt.core.dom.Name;
import org.eclipse.wst.jsdt.core.dom.NullLiteral;
import org.eclipse.wst.jsdt.core.dom.NumberLiteral;
import org.eclipse.wst.jsdt.core.dom.PackageDeclaration;
import org.eclipse.wst.jsdt.core.dom.ParenthesizedExpression;
import org.eclipse.wst.jsdt.core.dom.PostfixExpression;
import org.eclipse.wst.jsdt.core.dom.PrefixExpression;
import org.eclipse.wst.jsdt.core.dom.PrimitiveType;
import org.eclipse.wst.jsdt.core.dom.QualifiedName;
import org.eclipse.wst.jsdt.core.dom.QualifiedType;
import org.eclipse.wst.jsdt.core.dom.ReturnStatement;
import org.eclipse.wst.jsdt.core.dom.SimpleName;
import org.eclipse.wst.jsdt.core.dom.SimpleType;
import org.eclipse.wst.jsdt.core.dom.SingleVariableDeclaration;
import org.eclipse.wst.jsdt.core.dom.Statement;
import org.eclipse.wst.jsdt.core.dom.StringLiteral;
import org.eclipse.wst.jsdt.core.dom.SuperConstructorInvocation;
import org.eclipse.wst.jsdt.core.dom.SuperFieldAccess;
import org.eclipse.wst.jsdt.core.dom.SuperMethodInvocation;
import org.eclipse.wst.jsdt.core.dom.SwitchCase;
import org.eclipse.wst.jsdt.core.dom.SwitchStatement;
import org.eclipse.wst.jsdt.core.dom.TagElement;
import org.eclipse.wst.jsdt.core.dom.TextElement;
import org.eclipse.wst.jsdt.core.dom.ThisExpression;
import org.eclipse.wst.jsdt.core.dom.ThrowStatement;
import org.eclipse.wst.jsdt.core.dom.TryStatement;
import org.eclipse.wst.jsdt.core.dom.Type;
import org.eclipse.wst.jsdt.core.dom.TypeDeclaration;
import org.eclipse.wst.jsdt.core.dom.TypeDeclarationStatement;
import org.eclipse.wst.jsdt.core.dom.TypeLiteral;
import org.eclipse.wst.jsdt.core.dom.VariableDeclarationExpression;
import org.eclipse.wst.jsdt.core.dom.VariableDeclarationFragment;
import org.eclipse.wst.jsdt.core.dom.VariableDeclarationStatement;
import org.eclipse.wst.jsdt.core.dom.WhileStatement;
/**
* Test suite for <code>ASTMatcher</code> and <code>ASTNode.subtreeMatch</code>.
*/
public class ASTMatcherTest extends org.eclipse.wst.jsdt.core.tests.junit.extension.TestCase {
/** @deprecated using deprecated code */
public static Test suite() {
// TODO (frederic) use buildList + setAstLevel(init) instead...
junit.framework.TestSuite suite = new junit.framework.TestSuite(ASTMatcherTest.class.getName());
Class c = ASTMatcherTest.class;
Method[] methods = c.getMethods();
for (int i = 0, max = methods.length; i < max; i++) {
if (methods[i].getName().startsWith("test")) { //$NON-NLS-1$
suite.addTest(new ASTMatcherTest(methods[i].getName(), AST.JLS3));
}
}
return suite;
}
AST ast;
SimpleName N1;
SimpleName N2;
SimpleName N3;
SimpleName N4;
Expression E1;
Expression E2;
Type T1;
String T1S;
Type T2;
String T2S;
String PT1S;
Statement S1;
Statement S2;
Block B1;
SingleVariableDeclaration V1;
SingleVariableDeclaration V2;
VariableDeclarationFragment W1;
VariableDeclarationFragment W2;
FieldDeclaration FD1;
FieldDeclaration FD2;
PackageDeclaration PD1;
ImportDeclaration ID1;
ImportDeclaration ID2;
TypeDeclaration TD1;
TypeDeclaration TD2;
AnonymousClassDeclaration ACD1;
JSdoc JD1;
JSdoc JD2;
String JD2S;
String TP1S;
String TP2S;
TagElement TAG1;
TagElement TAG2;
TextElement TEXT1;
MemberRef MBREF1;
FunctionRef MTHREF1;
FunctionRefParameter MPARM1;
LineComment LC1;
BlockComment BC1;
Modifier MOD1;
Modifier MOD2;
final StringBuffer b = new StringBuffer();
int API_LEVEL;
public ASTMatcherTest(String name, int apiLevel) {
super(name);
this.API_LEVEL = apiLevel;
}
/**
* @deprecated (not really - just suppressing the warnings
* that come from testing Javadoc.getComment())
*
*/
protected void setUp() throws Exception {
super.setUp();
ast = AST.newAST(this.API_LEVEL);
N1 = ast.newSimpleName("N"); //$NON-NLS-1$
N2 = ast.newSimpleName("M"); //$NON-NLS-1$
N3 = ast.newSimpleName("O"); //$NON-NLS-1$
N4 = ast.newSimpleName("P"); //$NON-NLS-1$
E1 = ast.newSimpleName("X"); //$NON-NLS-1$
E2 = ast.newSimpleName("Y"); //$NON-NLS-1$
T1 = ast.newSimpleType(ast.newSimpleName("Z")); //$NON-NLS-1$
T1S = "(tS(nSZZnS)tS)"; //$NON-NLS-1$
T2 = ast.newSimpleType(ast.newSimpleName("Y")); //$NON-NLS-1$
T2S = "(tS(nSYYnS)tS)"; //$NON-NLS-1$
S1 = ast.newContinueStatement();
S2 = ast.newBreakStatement();
B1 = ast.newBlock();
V1 = ast.newSingleVariableDeclaration();
V1.setType(ast.newPrimitiveType(PrimitiveType.INT));
V1.setName(ast.newSimpleName("a")); //$NON-NLS-1$
V2 = ast.newSingleVariableDeclaration();
V2.setType(ast.newPrimitiveType(PrimitiveType.BYTE));
V2.setName(ast.newSimpleName("b")); //$NON-NLS-1$
W1 = ast.newVariableDeclarationFragment();
W1.setName(ast.newSimpleName("a")); //$NON-NLS-1$
W2 = ast.newVariableDeclarationFragment();
W2.setName(ast.newSimpleName("b")); //$NON-NLS-1$
{
VariableDeclarationFragment temp = ast.newVariableDeclarationFragment();
temp.setName(ast.newSimpleName("f")); //$NON-NLS-1$
FD1 = ast.newFieldDeclaration(temp);
FD1.setType(ast.newPrimitiveType(PrimitiveType.INT));
}
{
VariableDeclarationFragment temp = ast.newVariableDeclarationFragment();
temp.setName(ast.newSimpleName("g")); //$NON-NLS-1$
FD2 = ast.newFieldDeclaration(temp);
FD2.setType(ast.newPrimitiveType(PrimitiveType.CHAR));
}
PD1 = ast.newPackageDeclaration();
PD1.setName(ast.newSimpleName("p")); //$NON-NLS-1$
ID1 = ast.newImportDeclaration();
ID1.setName(ast.newSimpleName("i")); //$NON-NLS-1$
ID2 = ast.newImportDeclaration();
ID2.setName(ast.newSimpleName("j")); //$NON-NLS-1$
TD1 = ast.newTypeDeclaration();
TD1.setName(ast.newSimpleName("c")); //$NON-NLS-1$
TD2 = ast.newTypeDeclaration();
TD2.setName(ast.newSimpleName("d")); //$NON-NLS-1$
ACD1 = ast.newAnonymousClassDeclaration();
JD1 = ast.newJSdoc();
JD2 = ast.newJSdoc();
if (ast.apiLevel() == AST.JLS2) {
JD1.setComment("/**X*/"); //$NON-NLS-1$
JD2.setComment("/**Y*/"); //$NON-NLS-1$
}
BC1 = ast.newBlockComment();
TAG1 = ast.newTagElement();
TAG1.setTagName("@foo"); //$NON-NLS-1$
TAG2 = ast.newTagElement();
TAG2.setTagName("@bar"); //$NON-NLS-1$
TEXT1 = ast.newTextElement();
TEXT1.setText("foo"); //$NON-NLS-1$
MBREF1 = ast.newMemberRef();
MBREF1.setName(ast.newSimpleName("p")); //$NON-NLS-1$
MTHREF1 = ast.newFunctionRef();
MTHREF1.setName(ast.newSimpleName("p")); //$NON-NLS-1$
MPARM1 = ast.newFunctionRefParameter();
MPARM1.setType(ast.newPrimitiveType(PrimitiveType.CHAR));
if (ast.apiLevel() >= AST.JLS3) {
PT1S = "[(tM[(tS[(nSZZnS)]tS)]tM)]"; //$NON-NLS-1$
TP1S = "[(tTP[(nSxxnS)]tTP)]"; //$NON-NLS-1$
TP2S = "[(tTP[(nSyynS)]tTP)]"; //$NON-NLS-1$
LC1 = ast.newLineComment();
MOD1 = ast.newModifier(Modifier.ModifierKeyword.PUBLIC_KEYWORD);
MOD2 = ast.newModifier(Modifier.ModifierKeyword.FINAL_KEYWORD);
}
}
protected void tearDown() throws Exception {
ast = null;
super.tearDown();
}
/** @deprecated using deprecated code */
public String getName() {
String name = super.getName();
switch (this.API_LEVEL) {
case AST.JLS2:
name = "JLS2 - " + name;
break;
case AST.JLS3:
name = "JLS3 - " + name;
break;
}
return name;
}
/**
* An ASTMatcher that simply records the arguments it is passed,
* immediately returns a pre-ordained answer, and counts how many
* times it is called.
*/
class TestMatcher extends ASTMatcher {
public Object receiverNode;
public Object otherNode;
public boolean result;
public boolean superMatch;
public boolean superMatchResult;
public int matchCalls = 0;
TestMatcher() {
this(false);
}
TestMatcher(boolean visitDocTags) {
super(visitDocTags);
}
boolean standardBody(ASTNode receiver, Object other, boolean matchResult) {
matchCalls++;
this.receiverNode = receiver;
this.otherNode = other;
this.superMatchResult = matchResult;
if (superMatch) {
return this.superMatchResult;
}
return this.result;
}
public boolean match(AnonymousClassDeclaration node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(ArrayAccess node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(ArrayCreation node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(ArrayInitializer node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(ArrayType node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(Assignment node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(Block node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(BlockComment node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(BooleanLiteral node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(BreakStatement node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(CatchClause node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(CharacterLiteral node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(ClassInstanceCreation node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(JavaScriptUnit node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(ConditionalExpression node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(ConstructorInvocation node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(ContinueStatement node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(DoStatement node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(EmptyStatement node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(EnhancedForStatement node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(ExpressionStatement node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(FieldAccess node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(FieldDeclaration node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(ForStatement node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(IfStatement node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(ImportDeclaration node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(InfixExpression node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(Initializer node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(JSdoc node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(LabeledStatement node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(LineComment node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(MemberRef node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(FunctionDeclaration node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(FunctionInvocation node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(FunctionRef node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(FunctionRefParameter node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(Modifier node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(NullLiteral node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(NumberLiteral node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(PackageDeclaration node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(ParenthesizedExpression node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(PostfixExpression node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(PrefixExpression node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(PrimitiveType node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(QualifiedName node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(QualifiedType node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(ReturnStatement node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(SimpleName node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(SimpleType node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(SingleVariableDeclaration node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(StringLiteral node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(SuperConstructorInvocation node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(SuperFieldAccess node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(SuperMethodInvocation node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(SwitchCase node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(SwitchStatement node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(TagElement node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(TextElement node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(ThisExpression node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(ThrowStatement node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(TryStatement node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(TypeDeclaration node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(TypeDeclarationStatement node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(TypeLiteral node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(VariableDeclarationExpression node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(VariableDeclarationFragment node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(VariableDeclarationStatement node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
public boolean match(WhileStatement node, Object other) {
return standardBody(node, other, superMatch ? super.match(node, other) : false);
}
}
/**
* AST node visitor that counts the nodes visited.
*/
static class NodeCounter extends ASTVisitor {
public NodeCounter(boolean visitDocTags) {
super(visitDocTags);
}
public int count = 0;
/* (no javadoc for this method)
* Method declared on ASTVisitor.
*/
public void preVisit(ASTNode node) {
count++;
}
}
/**
* Returns the number of AST nodes in the given subtree.
*
* @param node the root of the subtree
* @param visitDocTags true if doc tags should be visited
* @return the number of nodes (always positive)
*/
static int nodeCount(ASTNode node, boolean visitDocTags) {
NodeCounter c = new NodeCounter(visitDocTags);
node.accept(c);
return c.count;
}
/**
* Checks that the ASTNode.subtreeMatch mechanism is working
* for a node of a given type.
*/
void basicMatch(ASTNode node) {
TestMatcher[] m = {
new TestMatcher(),
new TestMatcher(true),
new TestMatcher(false)};
for (int i = 0; i < m.length; i++) {
// check that matcher was called with right arguments
// and that matches succeed
TestMatcher m1 = m[i];
Object o1 = new Object();
m1.result = true;
boolean result = node.subtreeMatch(m1, o1);
assertTrue(m1.matchCalls == 1);
assertTrue(m1.receiverNode == node);
assertTrue(m1.otherNode == o1);
assertTrue(result == true);
}
m = new TestMatcher[] {
new TestMatcher(),
new TestMatcher(true),
new TestMatcher(false)};
for (int i = 0; i < m.length; i++) {
// check that matcher was called with right arguments
// and that non-matches fail
TestMatcher m1 = m[i];
Object o1 = new Object();
m1.result = false;
boolean result = node.subtreeMatch(m1, o1);
assertTrue(m1.matchCalls == 1);
assertTrue(m1.receiverNode == node);
assertTrue(m1.otherNode == o1);
assertTrue(result == false);
}
// check that ASTMatcher() default implementations delegate
{
int count = nodeCount(node, false); // ignore doc tags
TestMatcher m1 = new TestMatcher();
m1.superMatch = true;
boolean result = node.subtreeMatch(m1, node);
assertTrue(m1.matchCalls == count);
assertTrue(result == true);
}
// check that ASTMatcher(false) default implementations delegate
{
int count = nodeCount(node, false); // ignore doc tags
TestMatcher m1 = new TestMatcher(false);
m1.superMatch = true;
boolean result = node.subtreeMatch(m1, node);
assertTrue(m1.matchCalls == count);
assertTrue(result == true);
}
// check that ASTMatcher(true) default implementations delegate
{
int count = nodeCount(node, true); // include doc tags
TestMatcher m1 = new TestMatcher(true);
m1.superMatch = true;
boolean result = node.subtreeMatch(m1, node);
assertTrue(m1.matchCalls == count);
assertTrue(result == true);
}
}
// NAMES
public void testSimpleName() {
Name x1 = ast.newName(new String[]{"Z"}); //$NON-NLS-1$
basicMatch(x1);
}
public void testQualifiedName() {
Name x1 = ast.newName(new String[]{"X", "Y"}); //$NON-NLS-1$ //$NON-NLS-2$
basicMatch(x1);
}
// TYPES
public void testPrimitiveType() {
Type x1 = ast.newPrimitiveType(PrimitiveType.CHAR);
basicMatch(x1);
}
public void testSimpleType() {
Type x1 = ast.newSimpleType(N1);
basicMatch(x1);
}
public void testArrayType() {
Type x0 = ast.newPrimitiveType(PrimitiveType.CHAR);
Type x1 = ast.newArrayType(x0);
basicMatch(x1);
}
/** @deprecated using deprecated code */
public void testQualifiedType() {
if (ast.apiLevel() == AST.JLS2) {
return;
}
Type x1 = ast.newQualifiedType(T1, N1);
basicMatch(x1);
}
// EXPRESSIONS and STATEMENTS
public void testAnonymousClassDeclaration() {
AnonymousClassDeclaration x1 = ast.newAnonymousClassDeclaration();
x1.bodyDeclarations().add(FD1);
x1.bodyDeclarations().add(FD2);
basicMatch(x1);
}
public void testArrayAccess() {
ArrayAccess x1 = ast.newArrayAccess();
x1.setArray(E1);
x1.setIndex(E2);
basicMatch(x1);
}
public void testArrayCreation() {
ArrayCreation x1 = ast.newArrayCreation();
x1.setType(ast.newArrayType(T1));
x1.dimensions().add(E1);
x1.dimensions().add(E2);
x1.setInitializer(ast.newArrayInitializer());
basicMatch(x1);
}
public void testArrayInitializer() {
ArrayInitializer x1 = ast.newArrayInitializer();
x1.expressions().add(E1);
x1.expressions().add(E2);
basicMatch(x1);
}
public void testAssignment() {
Assignment x1 = ast.newAssignment();
x1.setLeftHandSide(E1);
x1.setRightHandSide(E2);
basicMatch(x1);
}
public void testBlock() {
Block x1 = ast.newBlock();
x1.statements().add(S1);
x1.statements().add(S2);
basicMatch(x1);
}
public void testBlockComment() {
BlockComment x1 = ast.newBlockComment();
basicMatch(x1);
}
public void testBooleanLiteral() {
BooleanLiteral x1 = ast.newBooleanLiteral(true);
basicMatch(x1);
}
public void testBreakStatement() {
BreakStatement x1 = ast.newBreakStatement();
x1.setLabel(N1);
basicMatch(x1);
}
public void testCatchClause() {
CatchClause x1 = ast.newCatchClause();
x1.setException(V1);
x1.setBody(B1);
basicMatch(x1);
}
public void testCharacterLiteral() {
CharacterLiteral x1 = ast.newCharacterLiteral();
x1.setCharValue('q');
basicMatch(x1);
}
/** @deprecated using deprecated code */
public void testClassInstanceCreation() {
ClassInstanceCreation x1 = ast.newClassInstanceCreation();
x1.setExpression(E1);
if (ast.apiLevel() == AST.JLS2) {
x1.setName(N1);
} else {
x1.setType(T1);
}
x1.setAnonymousClassDeclaration(ACD1);
basicMatch(x1);
}
public void testConditionalExpression() {
ConditionalExpression x1 = ast.newConditionalExpression();
x1.setExpression(E1);
x1.setThenExpression(E2);
x1.setElseExpression(N1);
basicMatch(x1);
}
public void testConstructorInvocation() {
ConstructorInvocation x1 = ast.newConstructorInvocation();
x1.arguments().add(E1);
x1.arguments().add(E2);
basicMatch(x1);
}
public void testContinueStatement() {
ContinueStatement x1 = ast.newContinueStatement();
x1.setLabel(N1);
basicMatch(x1);
}
public void testDoStatement() {
DoStatement x1 = ast.newDoStatement();
x1.setExpression(E1);
x1.setBody(S1);
basicMatch(x1);
}
public void testEmptyStatement() {
EmptyStatement x1 = ast.newEmptyStatement();
basicMatch(x1);
}
/** @deprecated using deprecated code */
public void testEnhancedForStatement() {
if (ast.apiLevel() == AST.JLS2) {
return;
}
EnhancedForStatement x1 = ast.newEnhancedForStatement();
x1.setParameter(V1);
x1.setExpression(E1);
x1.setBody(S1);
basicMatch(x1);
}
public void testExpressionStatement() {
ExpressionStatement x1 = ast.newExpressionStatement(E1);
basicMatch(x1);
}
public void testFieldAccess() {
FieldAccess x1 = ast.newFieldAccess();
x1.setExpression(E1);
x1.setName(N1);
basicMatch(x1);
}
public void testFieldDeclaration() {
FieldDeclaration x1 = ast.newFieldDeclaration(W1);
x1.setJavadoc(JD1);
if (ast.apiLevel() >= AST.JLS3) {
x1.modifiers().add(MOD1);
x1.modifiers().add(MOD2);
}
x1.setType(T1);
x1.fragments().add(W2);
basicMatch(x1);
}
public void testForStatement() {
ForStatement x1 = ast.newForStatement();
x1.initializers().add(E1);
x1.initializers().add(E2);
x1.setExpression(N1);
x1.updaters().add(N2);
x1.updaters().add(N3);
x1.setBody(S1);
basicMatch(x1);
}
public void testIfStatement() {
IfStatement x1 = ast.newIfStatement();
x1.setExpression(E1);
x1.setThenStatement(S1);
x1.setElseStatement(S2);
basicMatch(x1);
}
public void testImportDeclaration() {
ImportDeclaration x1 = ast.newImportDeclaration();
x1.setName(N1);
basicMatch(x1);
}
public void testInfixExpression() {
InfixExpression x1 = ast.newInfixExpression();
x1.setOperator(InfixExpression.Operator.PLUS);
x1.setLeftOperand(E1);
x1.setRightOperand(E2);
x1.extendedOperands().add(N1);
x1.extendedOperands().add(N2);
basicMatch(x1);
}
public void testInitializer() {
Initializer x1 = ast.newInitializer();
x1.setJavadoc(JD1);
if (ast.apiLevel() >= AST.JLS3) {
x1.modifiers().add(MOD1);
x1.modifiers().add(MOD2);
}
x1.setBody(B1);
basicMatch(x1);
}
/**
* @deprecated (not really - just suppressing the warnings
* that come from testing Javadoc.getComment())
*
*/
public void testJavadoc() {
JSdoc x1 = ast.newJSdoc();
if (ast.apiLevel() == AST.JLS2) {
x1.setComment("/**?*/"); //$NON-NLS-1$
}
x1.tags().add(TAG1);
x1.tags().add(TAG2);
basicMatch(x1);
}
public void testLabeledStatement() {
LabeledStatement x1 = ast.newLabeledStatement();
x1.setLabel(N1);
x1.setBody(S1);
basicMatch(x1);
}
public void testLineComment() {
LineComment x1 = ast.newLineComment();
basicMatch(x1);
}
public void testMemberRef() {
MemberRef x1 = ast.newMemberRef();
x1.setQualifier(N1);
x1.setName(N2);
basicMatch(x1);
}
/** @deprecated using deprecated code */
public void testMethodDeclaration() {
FunctionDeclaration x1 = ast.newFunctionDeclaration();
x1.setJavadoc(JD1);
if (ast.apiLevel() == AST.JLS2) {
x1.setReturnType(T1);
} else {
x1.modifiers().add(MOD1);
x1.modifiers().add(MOD2);
x1.setReturnType2(T1);
}
x1.setName(N1);
x1.parameters().add(V1);
x1.parameters().add(V2);
x1.thrownExceptions().add(N2);
x1.thrownExceptions().add(N3);
x1.setBody(B1);
basicMatch(x1);
}
public void testMethodInvocation() {
FunctionInvocation x1 = ast.newFunctionInvocation();
x1.setExpression(N1);
x1.setName(N2);
x1.arguments().add(E1);
x1.arguments().add(E2);
basicMatch(x1);
}
public void testMethodRef() {
FunctionRef x1 = ast.newFunctionRef();
basicMatch(x1);
x1.setQualifier(N1);
x1.setName(N2);
x1.parameters().add(MPARM1);
}
public void testMethodRefParameter() {
FunctionRefParameter x1 = ast.newFunctionRefParameter();
x1.setType(T1);
x1.setName(N1);
basicMatch(x1);
}
public void testNullLiteral() {
NullLiteral x1 = ast.newNullLiteral();
basicMatch(x1);
}
public void testNumberLiteral() {
NumberLiteral x1 = ast.newNumberLiteral("1.0"); //$NON-NLS-1$
basicMatch(x1);
}
public void testParenthesizedExpression() {
ParenthesizedExpression x1 = ast.newParenthesizedExpression();
basicMatch(x1);
}
public void testPostfixExpression() {
PostfixExpression x1 = ast.newPostfixExpression();
x1.setOperand(E1);
x1.setOperator(PostfixExpression.Operator.INCREMENT);
basicMatch(x1);
}
public void testPrefixExpression() {
PrefixExpression x1 = ast.newPrefixExpression();
x1.setOperand(E1);
x1.setOperator(PrefixExpression.Operator.INCREMENT);
basicMatch(x1);
}
public void testReturnStatement() {
ReturnStatement x1 = ast.newReturnStatement();
x1.setExpression(E1);
basicMatch(x1);
}
public void testSingleVariableDeclaration() {
SingleVariableDeclaration x1 = ast.newSingleVariableDeclaration();
if (ast.apiLevel() >= AST.JLS3) {
x1.modifiers().add(MOD1);
x1.modifiers().add(MOD2);
}
x1.setType(T1);
x1.setName(N1);
x1.setInitializer(E1);
basicMatch(x1);
}
public void testStringLiteral() {
StringLiteral x1 = ast.newStringLiteral();
x1.setLiteralValue("H"); //$NON-NLS-1$
basicMatch(x1);
}
public void testSuperConstructorInvocation() {
SuperConstructorInvocation x1 = ast.newSuperConstructorInvocation();
x1.setExpression(N1);
x1.arguments().add(E1);
x1.arguments().add(E2);
basicMatch(x1);
}
public void testSuperFieldAccess() {
SuperFieldAccess x1 = ast.newSuperFieldAccess();
x1.setQualifier(N1);
x1.setName(N2);
basicMatch(x1);
}
public void testSuperMethodInvocation() {
SuperMethodInvocation x1 = ast.newSuperMethodInvocation();
x1.setQualifier(N1);
x1.setName(N2);
x1.arguments().add(E1);
x1.arguments().add(E2);
basicMatch(x1);
}
public void testSwitchCase() {
SwitchCase x1 = ast.newSwitchCase();
x1.setExpression(E1);
basicMatch(x1);
}
public void testSwitchStatement() {
SwitchStatement x1 = ast.newSwitchStatement();
x1.setExpression(E1);
x1.statements().add(S1);
x1.statements().add(S2);
basicMatch(x1);
}
public void testTagElement() {
TagElement x1 = ast.newTagElement();
x1.setTagName("@foo"); //$NON-NLS-1$
x1.fragments().add(TAG1);
x1.fragments().add(TEXT1);
x1.fragments().add(N1);
x1.fragments().add(MTHREF1);
basicMatch(x1);
}
public void testTextElement() {
TextElement x1 = ast.newTextElement();
x1.setText("foo"); //$NON-NLS-1$
basicMatch(x1);
}
public void testThisExpression() {
ThisExpression x1 = ast.newThisExpression();
x1.setQualifier(N1);
basicMatch(x1);
}
public void testThrowStatement() {
ThrowStatement x1 = ast.newThrowStatement();
x1.setExpression(E1);
basicMatch(x1);
}
public void testTryStatement() {
TryStatement x1 = ast.newTryStatement();
x1.setBody(B1);
CatchClause c1 = ast.newCatchClause();
c1.setException(V1);
c1.setBody(ast.newBlock());
x1.catchClauses().add(c1);
CatchClause c2 = ast.newCatchClause();
c2.setException(V2);
c2.setBody(ast.newBlock());
x1.catchClauses().add(c2);
x1.setFinally(ast.newBlock());
basicMatch(x1);
}
/** @deprecated using deprecated code */
public void testTypeDeclaration() {
TypeDeclaration x1 = ast.newTypeDeclaration();
x1.setJavadoc(JD1);
x1.setName(N1);
if (ast.apiLevel() == AST.JLS2) {
x1.setSuperclass(N2);
} else {
x1.modifiers().add(MOD1);
x1.modifiers().add(MOD2);
}
x1.bodyDeclarations().add(FD1);
x1.bodyDeclarations().add(FD2);
basicMatch(x1);
}
public void testTypeDeclarationStatement() {
TypeDeclarationStatement x1 = ast.newTypeDeclarationStatement(TD1);
basicMatch(x1);
}
public void testTypeLiteral() {
TypeLiteral x1 = ast.newTypeLiteral();
x1.setType(T1);
basicMatch(x1);
}
public void testVariableDeclarationFragment() {
VariableDeclarationFragment x1 = ast.newVariableDeclarationFragment();
x1.setName(N1);
x1.setInitializer(E1);
basicMatch(x1);
}
public void testVariableDeclarationExpression() {
VariableDeclarationExpression x1 = ast.newVariableDeclarationExpression(W1);
if (ast.apiLevel() >= AST.JLS3) {
x1.modifiers().add(MOD1);
x1.modifiers().add(MOD2);
}
x1.setType(T1);
x1.fragments().add(W2);
basicMatch(x1);
}
public void testVariableDeclarationStatement() {
VariableDeclarationStatement x1 = ast.newVariableDeclarationStatement(W1);
if (ast.apiLevel() >= AST.JLS3) {
x1.modifiers().add(MOD1);
x1.modifiers().add(MOD2);
}
x1.setType(T1);
x1.fragments().add(W2);
basicMatch(x1);
}
public void testWhileStatement() {
WhileStatement x1 = ast.newWhileStatement();
x1.setExpression(E1);
x1.setBody(S1);
basicMatch(x1);
}
}