samples/visitor/04-traversal/src-test/org/apidesign/test/visitor/CountNumbersTest.java
author Jaroslav Tulach <jtulach@netbeans.org>
Sat, 14 Jun 2008 10:08:12 +0200
changeset 244 2b19d24a755f
parent 167 ab8c04922abe
permissions -rw-r--r--
Scanner does not really need to override any visitXYZ methods that do default traversal
     1 package org.apidesign.test.visitor;
     2 
     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;
     8 import org.junit.Test;
     9 
    10 public class CountNumbersTest {
    11 
    12     // BEGIN: visitor.count.numbers.traversal
    13     private static class CountNumbers extends Visitor/*version1.0*/ {
    14         int cnt;
    15 
    16         @Override
    17         public boolean visitUnknown(Expression exp) {
    18             return true;
    19         }
    20         @Override
    21         public void visitNumber(Number n) {
    22             cnt++;
    23         }
    24     }
    25 
    26     public static int countNumbers(Expression expression) {
    27         CountNumbers counter = new CountNumbers();
    28         expression.visit(counter);
    29         return counter.cnt;
    30     }
    31     // END: visitor.count.numbers.traversal
    32     
    33     @Test public void printOnePlusOne() {
    34         Number one = new Number(1);
    35         Expression expression = new Plus(one, one);
    36 
    37         assertEquals("Two 1's", 2, countNumbers(expression));
    38     }
    39 
    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));
    45         
    46         assertEquals("Three", 3, countNumbers(plus));
    47     }
    48 }