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 static junit.framework.Assert.*;
10 public class PrintTest {
12 public static Number newNumber(final int value) {
14 public int getValue() {
18 public void visit(Visitor v) {
19 v.dispatchNumber(this);
23 public static Plus newPlus(
24 final Expression first, final Expression second
27 public Expression getFirst() {
31 public Expression getSecond() {
35 public void visit(Visitor v) {
41 // BEGIN: visitor.clientprovider.print
42 public static class PrintVisitor implements Visitor.Version1_0 {
43 StringBuffer sb = new StringBuffer();
45 final Visitor dispatch = Visitor.create(this);
47 public void visitPlus(Plus s) {
48 // s.getFirst().visit(this); // does not compile, we need:
49 s.getFirst().visit(dispatch);
51 s.getSecond().visit(dispatch);
54 public void visitNumber(Number n) {
55 sb.append (n.getValue());
58 public boolean visitUnknown(Expression e) {
63 // END: visitor.clientprovider.print
65 @Test public void printOnePlusOne() {
66 Number one = newNumber(1);
67 Expression plus = newPlus(one, one);
69 PrintVisitor print = new PrintVisitor();
70 plus.visit(print.dispatch);
72 assertEquals("1 + 1", print.sb.toString());
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));
81 PrintVisitor print = new PrintVisitor();
82 plus.visit(print.dispatch);
84 assertEquals("1 + 2 + 3", print.sb.toString());