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 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(dispatch);
50 s.getSecond().visit(dispatch);
53 public void visitNumber(Number n) {
54 sb.append (n.getValue());
57 public boolean visitUnknown(Expression e) {
63 @Test public void printOnePlusOne() {
64 Number one = newNumber(1);
65 Expression plus = newPlus(one, one);
67 PrintVisitor print = new PrintVisitor();
68 plus.visit(print.dispatch);
70 assertEquals("1 + 1", print.sb.toString());
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));
79 PrintVisitor print = new PrintVisitor();
80 plus.visit(print.dispatch);
82 assertEquals("1 + 2 + 3", print.sb.toString());