blob: 9ac304b9552616641e369678fc8a6abe2a70eeb4 [file] [log] [blame]
package com.github.javaparser.ast;
import com.github.javaparser.*;
import com.github.javaparser.ast.expr.Expression;
import com.github.javaparser.ast.expr.VariableDeclarationExpr;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import static org.junit.jupiter.api.Assertions.*;
public class AncestorDescendantTests {
@Test
void nodeIsNotAncestorOfItself() throws IOException {
JavaParser parser = new JavaParser();
Provider provider = Providers.resourceProvider("com/github/javaparser/range/A.java");
assertNotNull(provider);
ParseResult<CompilationUnit> parse = parser.parse(ParseStart.COMPILATION_UNIT, provider);
assertTrue(parse.isSuccessful());
VariableDeclarationExpr node = parse.getResult().get()
.getType(0) // class A
.getMember(0).asMethodDeclaration() // method foo()
.getBody().get().getStatement(0).asExpressionStmt() // int a = 42;
.getExpression().asVariableDeclarationExpr(); // a = 42
assertFalse(node.isAncestorOf(node));
}
@Test
void nodeIsNotDescendantOfItself() throws IOException {
JavaParser parser = new JavaParser();
Provider provider = Providers.resourceProvider("com/github/javaparser/range/A.java");
assertNotNull(provider);
ParseResult<CompilationUnit> parse = parser.parse(ParseStart.COMPILATION_UNIT, provider);
assertTrue(parse.isSuccessful());
VariableDeclarationExpr node = parse.getResult().get()
.getType(0) // class A
.getMember(0).asMethodDeclaration() // method foo()
.getBody().get().getStatement(0).asExpressionStmt() // int a = 42;
.getExpression().asVariableDeclarationExpr(); // a = 42
assertFalse(node.isDescendantOf(node));
}
@Test
void nodeInSameFileIsDescendantOfAncestor() throws IOException {
JavaParser parser = new JavaParser();
Provider provider = Providers.resourceProvider("com/github/javaparser/range/A.java");
assertNotNull(provider);
ParseResult<CompilationUnit> parse = parser.parse(ParseStart.COMPILATION_UNIT, provider);
assertTrue(parse.isSuccessful());
VariableDeclarationExpr superNode = parse.getResult().get()
.getType(0) // class A
.getMember(0).asMethodDeclaration() // method foo()
.getBody().get().getStatement(0).asExpressionStmt() // int a = 42;
.getExpression().asVariableDeclarationExpr(); // a = 42
Expression subNode = superNode.getVariable(0).getInitializer().get(); // 42
assertTrue(superNode.isAncestorOf(subNode));
assertFalse(subNode.isAncestorOf(superNode));
assertTrue(subNode.isDescendantOf(superNode));
assertFalse(superNode.isDescendantOf(subNode));
}
@Test
void nodesInTwoDifferentFilesAreNotDescendantOrAncestorOfEachOther() throws IOException {
JavaParser parser = new JavaParser();
Provider providerA = Providers.resourceProvider("com/github/javaparser/range/A.java");
assertNotNull(providerA);
ParseResult<CompilationUnit> parseA = parser.parse(ParseStart.COMPILATION_UNIT, providerA);
assertTrue(parseA.isSuccessful());
Provider providerB = Providers.resourceProvider("com/github/javaparser/range/B.java");
assertNotNull(providerB);
ParseResult<CompilationUnit> parseB = parser.parse(ParseStart.COMPILATION_UNIT, providerB);
assertTrue(parseB.isSuccessful());
VariableDeclarationExpr superNodeA = parseA.getResult().get()
.getType(0) // class A
.getMember(0).asMethodDeclaration() // method foo()
.getBody().get().getStatement(0).asExpressionStmt() // int a = 42;
.getExpression().asVariableDeclarationExpr(); // a = 42
Expression subNodeA = superNodeA.getVariable(0).getInitializer().get(); // 42
VariableDeclarationExpr superNodeB = parseB.getResult().get()
.getType(0) // class B
.getMember(0).asMethodDeclaration() // method foo()
.getBody().get().getStatement(0).asExpressionStmt() // int b = 42;
.getExpression().asVariableDeclarationExpr(); // b = 42
Expression subNodeB = superNodeB.getVariable(0).getInitializer().get(); // 42
assertFalse(superNodeA.isAncestorOf(superNodeB));
assertFalse(superNodeA.isDescendantOf(subNodeB));
assertFalse(superNodeB.isAncestorOf(superNodeA));
assertFalse(superNodeB.isDescendantOf(subNodeA));
}
}