samples/visitor/21-clientprovider/src-test/org/apidesign/test/visitor/PrintTest.java
author Jaroslav Tulach <jtulach@netbeans.org>
Sat, 14 Jun 2008 22:38:00 +0200
changeset 265 eb31b2d1822a
parent 179 b94c14f52c31
child 266 47d5f1fe0b03
permissions -rw-r--r--
All tests are passing now in the "no.failures" mode
     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 static junit.framework.Assert.*;
     8 import org.junit.Test;
     9 
    10 public class PrintTest {
    11     
    12     public static Number newNumber(final int value) {
    13         return new Number() {
    14             public int getValue() {
    15                 return value;
    16             }
    17 
    18             public void visit(Visitor v) {
    19                 v.dispatchNumber(this);
    20             }
    21         };
    22     }
    23     public static Plus newPlus(
    24         final Expression first, final Expression second
    25     ) {
    26         return new Plus() {
    27             public Expression getFirst() {
    28                 return first;
    29             }
    30 
    31             public Expression getSecond() {
    32                 return second;
    33             }
    34 
    35             public void visit(Visitor v) {
    36                 v.dispatchPlus(this);
    37             }
    38         };
    39     }
    40 
    41     // BEGIN: visitor.clientprovider.print
    42     public static class PrintVisitor implements Visitor.Version1_0 {
    43         StringBuffer sb = new StringBuffer();
    44         
    45         final Visitor dispatch = Visitor.create(this);
    46         
    47         public void visitPlus(Plus s) {
    48             // s.getFirst().visit(this); // does not compile, we need:
    49             s.getFirst().visit(dispatch);
    50             sb.append(" + ");
    51             s.getSecond().visit(dispatch);
    52         }
    53 
    54         public void visitNumber(Number n) {
    55             sb.append (n.getValue());
    56         }
    57 
    58         public boolean visitUnknown(Expression e) {
    59             sb.append("unknown");
    60             return true;
    61         }
    62     }
    63     // END: visitor.clientprovider.print
    64     
    65     @Test public void printOnePlusOne() {
    66         Number one = newNumber(1);
    67         Expression plus = newPlus(one, one);
    68         
    69         PrintVisitor print = new PrintVisitor();
    70         plus.visit(print.dispatch);
    71         
    72         assertEquals("1 + 1", print.sb.toString());
    73     }
    74 
    75     @Test public void printOnePlusTwoPlusThree() {
    76         Number one = newNumber(1);
    77         Number two = newNumber(2);
    78         Number three = newNumber(3);
    79         Expression plus = newPlus(one, newPlus(two, three));
    80         
    81         PrintVisitor print = new PrintVisitor();
    82         plus.visit(print.dispatch);
    83         
    84         assertEquals("1 + 2 + 3", print.sb.toString());
    85     }
    86 }