|
Groovy example source code file (CodeVisitorSupportTest.groovy)
The Groovy CodeVisitorSupportTest.groovy source code
package 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.