|
Groovy example source code file (CodeVisitorSupportTest.groovy)
The Groovy CodeVisitorSupportTest.groovy source codepackage org.codehaus.groovy.ast; import org.codehaus.groovy.ast.builder.AstBuilder import org.codehaus.groovy.ast.stmt.* import org.codehaus.groovy.ast.expr.* import org.codehaus.groovy.control.CompilePhase /** * Tests the CodeVisitorSupport. * * @author Hamlet D'Arcy */ public class CodeVisitorSupportTest extends GroovyTestCase { public void testIfElse() { def ast = new AstBuilder().buildFromCode { if (true) { 1 } else { 2 } } def visitor = new RecordingCodeVisitorSupport() visitor.visitBlockStatement(ast[0]) // first element is always BlockStatement assert visitor.history[0] == BlockStatement assert visitor.history[1] == IfStatement assert visitor.history[2] == BooleanExpression assert visitor.history[3] == BlockStatement assert visitor.history[4] == BlockStatement assert visitor.history.size == 5 } public void testEmptyStatementsOnIfElse() { def ast = new AstBuilder().buildFromCode(CompilePhase.SEMANTIC_ANALYSIS, true, { if (true) { 1 } }) def visitor = new RecordingCodeVisitorSupport() visitor.visitBlockStatement(ast[0]) // first element is always BlockStatement assert visitor.history[0] == BlockStatement assert visitor.history[1] == IfStatement assert visitor.history[2] == BooleanExpression assert visitor.history[3] == BlockStatement assert visitor.history[4] == EmptyStatement assert visitor.history.size == 5 } public void testTryCatchFinally() { def ast = new AstBuilder().buildFromCode { def x try { x = 1 } catch (IOException ei) { x = 2 } finally { x = 4 } } def visitor = new RecordingCodeVisitorSupport() visitor.visitBlockStatement(ast[0]) // first element is always BlockStatement assert visitor.history[0] == BlockStatement assert visitor.history[1] == TryCatchStatement assert visitor.history[2] == BlockStatement assert visitor.history[3] == CatchStatement assert visitor.history[4] == BlockStatement } public void testEmptyStatementsOnTryCatch() { def ast = new AstBuilder().buildFromCode { def x try { x = 1 } catch (IOException ei) { x = 2 } } def visitor = new RecordingCodeVisitorSupport() visitor.visitBlockStatement(ast[0]) // first element is always BlockStatement assert visitor.history[0] == BlockStatement assert visitor.history[1] == TryCatchStatement assert visitor.history[2] == BlockStatement assert visitor.history[3] == CatchStatement assert visitor.history[4] == BlockStatement assert visitor.history[5] == EmptyStatement } } /** * Records the visit method that were called so that they can be queried and verified later. * This would be better implemented using invokeMethod but it is called from Java so it * won't dispatch correctly. * * @author Hamlet D'Arcy */ private class RecordingCodeVisitorSupport extends CodeVisitorSupport implements GroovyInterceptable { def history = [] public void visitBlockStatement(BlockStatement node) { history << node.getClass() super.visitBlockStatement(node) } public void visitIfElse(IfStatement node) { history << node.getClass() super.visitIfElse(node) } public void visitBooleanExpression(BooleanExpression node) { history << node.getClass() super.visitBooleanExpression(node) } protected void visitEmptyStatement(EmptyStatement node) { history << node.getClass() super.visitEmptyStatement(node) } public void visitTryCatchFinally(TryCatchStatement node) { history << node.getClass() super.visitTryCatchFinally(node); } public void visitCatchStatement(CatchStatement node) { history << node.getClass() super.visitCatchStatement(node); } } Other Groovy examples (source code examples)Here is a short list of links related to this Groovy CodeVisitorSupportTest.groovy source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.