samples/visitor/02-abstractclass/src-test/org/apidesign/test/visitor/LanguageCheckTest.java
author Jaroslav Tulach <jtulach@netbeans.org>
Sat, 14 Jun 2008 22:59:00 +0200
changeset 266 47d5f1fe0b03
parent 167 ab8c04922abe
permissions -rw-r--r--
The final book text is using VisitorXY instead of original VisitorX_Y
     1 package org.apidesign.test.visitor;
     2 
     3 import static junit.framework.Assert.*;
     4 import org.apidesign.visitor.Language.Expression;
     5 import org.apidesign.visitor.Language.Number;
     6 import org.apidesign.visitor.Language.Plus;
     7 import org.apidesign.visitor.Language.Visitor;
     8 import org.junit.Test;
     9 
    10 public class LanguageCheckTest {
    11 
    12     // BEGIN: visitor.language.check.exception
    13     private static class Valid10Language extends Visitor/*version1.0*/ {
    14         public void visitPlus(Plus s) {
    15             s.getFirst().visit(this);
    16             s.getSecond().visit(this);
    17         }
    18         public void visitNumber(Number n) { 
    19         }
    20     }
    21 
    22     public static boolean isValid10Language(Expression expression) {
    23         Valid10Language valid = new Valid10Language();
    24         try {
    25             expression.visit(valid);
    26             return true; // yes, no unknown elements
    27         } catch (IllegalStateException ex) {
    28             return false; // no, probably from visitMinus of Visitor/*2.0*/
    29         }
    30     }
    31     // END: visitor.language.check.exception
    32     
    33     @Test public void printOnePlusOne() {
    34         Number one = new Number(1);
    35         Expression expression = new Plus(one, one);
    36 
    37         assertTrue("Valid language", isValid10Language(expression));
    38     }
    39 
    40     @Test public void printOnePlusTwoPlusThree() {
    41         Number one = new Number(1);
    42         Number two = new Number(2);
    43         Number three = new Number(3);
    44         Expression plus = new Plus(one, new Plus(two, three));
    45         
    46         assertTrue("Valid language", isValid10Language(plus));
    47     }
    48 }