samples/visitor/04-traversal/src-test/org/apidesign/test/visitor/CountNumbersTest.java
Scanner does not really need to override any visitXYZ methods that do default traversal
1 package org.apidesign.test.visitor;
3 import static junit.framework.Assert.*;
4 import org.apidesign.visitor.Language.Expression;
5 import org.apidesign.visitor.Language.Number;
6 import org.apidesign.visitor.Language.Plus;
7 import org.apidesign.visitor.Language.Visitor;
10 public class CountNumbersTest {
12 // BEGIN: visitor.count.numbers.traversal
13 private static class CountNumbers extends Visitor/*version1.0*/ {
17 public boolean visitUnknown(Expression exp) {
21 public void visitNumber(Number n) {
26 public static int countNumbers(Expression expression) {
27 CountNumbers counter = new CountNumbers();
28 expression.visit(counter);
31 // END: visitor.count.numbers.traversal
33 @Test public void printOnePlusOne() {
34 Number one = new Number(1);
35 Expression expression = new Plus(one, one);
37 assertEquals("Two 1's", 2, countNumbers(expression));
40 @Test public void printOnePlusTwoPlusThree() {
41 Number one = new Number(1);
42 Number two = new Number(2);
43 Number three = new Number(3);
44 Expression plus = new Plus(one, new Plus(two, three));
46 assertEquals("Three", 3, countNumbers(plus));