samples/visitor/21-clientprovider/src-test/org/apidesign/test/visitor/PrintTest.java
author Jaroslav Tulach <jtulach@netbeans.org>
Sat, 14 Jun 2008 09:59:23 +0200
changeset 179 b94c14f52c31
parent 177 67d6dceb1002
child 265 eb31b2d1822a
permissions -rw-r--r--
Going through the suggar section
     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.print
    43     public static class PrintVisitor implements Visitor.Version1_0 {
    44         StringBuffer sb = new StringBuffer();
    45         
    46         final Visitor dispatch = Visitor.create(this);
    47         
    48         public void visitPlus(Plus s) {
    49             // s.getFirst().visit(this); // does not compile, we need:
    50             s.getFirst().visit(dispatch);
    51             sb.append(" + ");
    52             s.getSecond().visit(dispatch);
    53         }
    54 
    55         public void visitNumber(Number n) {
    56             sb.append (n.getValue());
    57         }
    58 
    59         public boolean visitUnknown(Expression e) {
    60             sb.append("unknown");
    61             return true;
    62         }
    63     }
    64     // END: visitor.clientprovider.print
    65     
    66     @Test public void printOnePlusOne() {
    67         Number one = newNumber(1);
    68         Expression plus = newPlus(one, one);
    69         
    70         PrintVisitor print = new PrintVisitor();
    71         plus.visit(print.dispatch);
    72         
    73         assertEquals("1 + 1", print.sb.toString());
    74     }
    75 
    76     @Test public void printOnePlusTwoPlusThree() {
    77         Number one = newNumber(1);
    78         Number two = newNumber(2);
    79         Number three = newNumber(3);
    80         Expression plus = newPlus(one, newPlus(two, three));
    81         
    82         PrintVisitor print = new PrintVisitor();
    83         plus.visit(print.dispatch);
    84         
    85         assertEquals("1 + 2 + 3", print.sb.toString());
    86     }
    87 }