samples/visitor/21-clientprovider/src-test/org/apidesign/test/visitor/PrintTest.java
1 package org.apidesign.test.visitor;
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.*;
11 public class PrintTest {
13 public static Number newNumber(final int value) {
15 public int getValue() {
19 public void visit(Visitor v) {
20 v.dispatchNumber(this);
24 public static Plus newPlus(
25 final Expression first, final Expression second
28 public Expression getFirst() {
32 public Expression getSecond() {
36 public void visit(Visitor v) {
42 // BEGIN: visitor.clientprovider.print
43 public static class PrintVisitor implements Visitor.Version1_0 {
44 StringBuffer sb = new StringBuffer();
46 final Visitor dispatch = Visitor.create(this);
48 public void visitPlus(Plus s) {
49 // s.getFirst().visit(this); // does not compile, we need:
50 s.getFirst().visit(dispatch);
52 s.getSecond().visit(dispatch);
55 public void visitNumber(Number n) {
56 sb.append (n.getValue());
59 public boolean visitUnknown(Expression e) {
64 // END: visitor.clientprovider.print
66 @Test public void printOnePlusOne() {
67 Number one = newNumber(1);
68 Expression plus = newPlus(one, one);
70 PrintVisitor print = new PrintVisitor();
71 plus.visit(print.dispatch);
73 assertEquals("1 + 1", print.sb.toString());
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));
82 PrintVisitor print = new PrintVisitor();
83 plus.visit(print.dispatch);
85 assertEquals("1 + 2 + 3", print.sb.toString());