samples/visitor/22-self/src-test/org/apidesign/test/visitor/PrintTest.java
author Jaroslav Tulach <jtulach@netbeans.org>
Sat, 14 Jun 2008 22:59:00 +0200
changeset 266 47d5f1fe0b03
parent 183 e9f4bdb6a3f4
permissions -rw-r--r--
The final book text is using VisitorXY instead of original VisitorX_Y
     1 package org.apidesign.test.visitor;
     2 
     3 import org.apidesign.visitor.Language.Expression;
     4 import org.apidesign.visitor.Language.Number;
     5 import org.apidesign.visitor.Language.Plus;
     6 import org.apidesign.visitor.Language.Visitor;
     7 import org.apidesign.visitor.Language.Visitor;
     8 import static junit.framework.Assert.*;
     9 import org.junit.Test;
    10 
    11 public class PrintTest {
    12     
    13     public static Number newNumber(final int value) {
    14         return new Number() {
    15             public int getValue() {
    16                 return value;
    17             }
    18 
    19             public void visit(Visitor v) {
    20                 v.dispatchNumber(this);
    21             }
    22         };
    23     }
    24     public static Plus newPlus(
    25         final Expression first, final Expression second
    26     ) {
    27         return new Plus() {
    28             public Expression getFirst() {
    29                 return first;
    30             }
    31 
    32             public Expression getSecond() {
    33                 return second;
    34             }
    35 
    36             public void visit(Visitor v) {
    37                 v.dispatchPlus(this);
    38             }
    39         };
    40     }
    41 
    42     // BEGIN: visitor.clientprovider.self.print
    43     public static class PrintVisitor implements Visitor.Version10 {
    44         StringBuffer sb = new StringBuffer();
    45         
    46         public void visitPlus(Plus s, Visitor self) {
    47             s.getFirst().visit(self);
    48             sb.append(" + ");
    49             s.getSecond().visit(self);
    50         }
    51 
    52         public void visitNumber(Number n, Visitor self) {
    53             sb.append (n.getValue());
    54         }
    55 
    56         public boolean visitUnknown(Expression e, Visitor self) {
    57             sb.append("unknown");
    58             return true;
    59         }
    60     }
    61     
    62     @Test public void printOnePlusOne() {
    63         Number one = newNumber(1);
    64         Expression plus = newPlus(one, one);
    65         
    66         PrintVisitor print = new PrintVisitor();
    67         plus.visit(Visitor.create(print));
    68         
    69         assertEquals("1 + 1", print.sb.toString());
    70     }
    71     // END: visitor.clientprovider.self.print
    72 
    73     @Test public void printOnePlusTwoPlusThree() {
    74         Number one = newNumber(1);
    75         Number two = newNumber(2);
    76         Number three = newNumber(3);
    77         Expression plus = newPlus(one, newPlus(two, three));
    78         
    79         PrintVisitor print = new PrintVisitor();
    80         plus.visit(Visitor.create(print));
    81         
    82         assertEquals("1 + 2 + 3", print.sb.toString());
    83     }
    84 }