Testing version 3.0
authorJaroslav Tulach <jtulach@netbeans.org>
Sat, 14 Jun 2008 09:58:59 +0200
changeset 172bb543d116467
parent 171 2496512220b7
child 173 db68b5a2636f
Testing version 3.0
samples/visitor/11-cleanversion/build.xml
samples/visitor/11-cleanversion/nbproject/project.xml
samples/visitor/11-cleanversion/src-api3.0/org/apidesign/visitor/Language.java
samples/visitor/11-cleanversion/src-test3.0/org/apidesign/test/visitor/PrintOfMinusStructureTest.java
     1.1 --- a/samples/visitor/11-cleanversion/build.xml	Sat Jun 14 09:58:56 2008 +0200
     1.2 +++ b/samples/visitor/11-cleanversion/build.xml	Sat Jun 14 09:58:59 2008 +0200
     1.3 @@ -12,24 +12,23 @@
     1.4          <antcall target="-build-one">
     1.5              <param name="version" value="api2.0"/>
     1.6          </antcall>
     1.7 +        <antcall target="-build-one">
     1.8 +            <param name="version" value="api3.0"/>
     1.9 +        </antcall>
    1.10          
    1.11          <antcall target="-build-one">
    1.12              <param name="version" value="test"/>
    1.13              <param name="cp" value="build/api1.0/classes:${junit.jar}"/>
    1.14          </antcall>
    1.15  
    1.16 -        <echo level="info" message="Next compilation will fails, as adding methods into interface is not binary compatible"/>
    1.17 -        <antcall target="-build-one">
    1.18 -            <param name="version" value="test"/>
    1.19 -            <param name="out" value="will-not-compile"/>
    1.20 -            <param name="cp" value="build/api2.0/classes:${junit.jar}"/>
    1.21 -            <param name="failonerror" value="false"/>
    1.22 -        </antcall>
    1.23 -
    1.24          <antcall target="-build-one">
    1.25              <param name="version" value="test2.0"/>
    1.26              <param name="cp" value="build/api2.0/classes:build/test/classes:${junit.jar}"/>
    1.27          </antcall>
    1.28 +        <antcall target="-build-one">
    1.29 +            <param name="version" value="test3.0"/>
    1.30 +            <param name="cp" value="build/api3.0/classes:build/test/classes:${junit.jar}"/>
    1.31 +        </antcall>
    1.32      </target>
    1.33      
    1.34      <target name="test" depends="build">
    1.35 @@ -41,12 +40,18 @@
    1.36          <antcall target="-run-one">
    1.37              <param name="version" value="api2.0"/>
    1.38          </antcall>
    1.39 -        <echo level="info" message="PrintVisitor on new API. This yields runtime error."/>
    1.40 +        <echo level="info" message="PrintVisitor on new API. This contains a test that fails."/>
    1.41          <antcall target="-run-one">
    1.42              <param name="test" value="test2.0"/>
    1.43              <param name="extra.cp" value="build/test/classes"/>
    1.44              <param name="version" value="api2.0"/>
    1.45          </antcall>
    1.46 +        <echo level="info" message="Using old Number with new visitors"/>
    1.47 +        <antcall target="-run-one">
    1.48 +            <param name="test" value="test3.0"/>
    1.49 +            <param name="extra.cp" value="build/test/classes"/>
    1.50 +            <param name="version" value="api3.0"/>
    1.51 +        </antcall>
    1.52      </target>
    1.53      
    1.54      <!-- support methods -->
     2.1 --- a/samples/visitor/11-cleanversion/nbproject/project.xml	Sat Jun 14 09:58:56 2008 +0200
     2.2 +++ b/samples/visitor/11-cleanversion/nbproject/project.xml	Sat Jun 14 09:58:59 2008 +0200
     2.3 @@ -40,6 +40,12 @@
     2.4                      <location>src-test2.0</location>
     2.5                      <encoding>UTF-8</encoding>
     2.6                  </source-folder>
     2.7 +                <source-folder>
     2.8 +                    <label>test-3.0</label>
     2.9 +                    <type>java</type>
    2.10 +                    <location>src-test3.0</location>
    2.11 +                    <encoding>UTF-8</encoding>
    2.12 +                </source-folder>
    2.13              </folders>
    2.14              <ide-actions>
    2.15                  <action name="build">
    2.16 @@ -66,20 +72,24 @@
    2.17                          <location>src-api1.0</location>
    2.18                      </source-folder>
    2.19                      <source-folder style="packages">
    2.20 +                        <label>Usage of the API</label>
    2.21 +                        <location>src-test</location>
    2.22 +                    </source-folder>
    2.23 +                    <source-folder style="packages">
    2.24                          <label>API Version 2.0</label>
    2.25                          <location>src-api2.0</location>
    2.26                      </source-folder>
    2.27                      <source-folder style="packages">
    2.28 +                        <label>Usage of 2.0 elements with 1.0 visitor</label>
    2.29 +                        <location>src-test2.0</location>
    2.30 +                    </source-folder>
    2.31 +                    <source-folder style="packages">
    2.32                          <label>API Version 3.0</label>
    2.33                          <location>src-api3.0</location>
    2.34                      </source-folder>
    2.35                      <source-folder style="packages">
    2.36 -                        <label>Usage of the API</label>
    2.37 -                        <location>src-test</location>
    2.38 -                    </source-folder>
    2.39 -                    <source-folder style="packages">
    2.40 -                        <label>Usage of 2.0 elements with 1.0 visitor</label>
    2.41 -                        <location>src-test2.0</location>
    2.42 +                        <label>Usage of old elements with 3.0 visitor</label>
    2.43 +                        <location>src-test3.0</location>
    2.44                      </source-folder>
    2.45                      <source-file>
    2.46                          <location>build.xml</location>
    2.47 @@ -116,6 +126,11 @@
    2.48                  <classpath mode="compile">src-api2.0:src-test:../../libs/dist/junit-4.4.jar</classpath>
    2.49                  <source-level>1.5</source-level>
    2.50              </compilation-unit>
    2.51 +            <compilation-unit>
    2.52 +                <package-root>src-test3.0</package-root>
    2.53 +                <classpath mode="compile">src-api3.0:src-test:../../libs/dist/junit-4.4.jar</classpath>
    2.54 +                <source-level>1.5</source-level>
    2.55 +            </compilation-unit>
    2.56          </java-data>
    2.57      </configuration>
    2.58  </project>
     3.1 --- a/samples/visitor/11-cleanversion/src-api3.0/org/apidesign/visitor/Language.java	Sat Jun 14 09:58:56 2008 +0200
     3.2 +++ b/samples/visitor/11-cleanversion/src-api3.0/org/apidesign/visitor/Language.java	Sat Jun 14 09:58:59 2008 +0200
     3.3 @@ -84,7 +84,7 @@
     3.4      }
     3.5      // BEGIN: visitor.nonmonotonic.real
     3.6      /** @since 3.0 */
     3.7 -    public final class Real extends Expression {
     3.8 +    public static final class Real extends Expression {
     3.9          private final double value;
    3.10          public Real(double value) {
    3.11              this.value = value;
    3.12 @@ -115,7 +115,7 @@
    3.13      public interface Visitor3_0 extends Visitor {
    3.14          public void visitPlus(Plus s);
    3.15          public void visitMinus(Minus s);
    3.16 -        public void visitReal(Number n);
    3.17 +        public void visitReal(Real r);
    3.18      }
    3.19      // END: visitor.nonmonotonic.visitor
    3.20  }
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/samples/visitor/11-cleanversion/src-test3.0/org/apidesign/test/visitor/PrintOfMinusStructureTest.java	Sat Jun 14 09:58:59 2008 +0200
     4.3 @@ -0,0 +1,66 @@
     4.4 +package org.apidesign.test.visitor;
     4.5 +
     4.6 +import org.apidesign.test.visitor.PrintTest.PrintVisitor;
     4.7 +import static junit.framework.Assert.*;
     4.8 +import org.apidesign.visitor.Language.Expression;
     4.9 +import org.apidesign.visitor.Language.Minus;
    4.10 +import org.apidesign.visitor.Language.Number;
    4.11 +import org.apidesign.visitor.Language.Plus;
    4.12 +import org.apidesign.visitor.Language.Real;
    4.13 +import org.apidesign.visitor.Language.Visitor2_0;
    4.14 +import org.apidesign.visitor.Language.Visitor3_0;
    4.15 +import org.junit.Test;
    4.16 +
    4.17 +public class PrintOfMinusStructureTest {
    4.18 +    @Test public void printOneMinusTwo() {
    4.19 +        Real one = new Real(1);
    4.20 +        Real two = new Real(2);
    4.21 +        Expression plus = new Minus(one, two);
    4.22 +        
    4.23 +        PrintVisitor print = new PrintVisitor();
    4.24 +        plus.visit(print);
    4.25 +        
    4.26 +        assertEquals("1 - 2", print.sb.toString());
    4.27 +    }
    4.28 +    
    4.29 +    @Test public void visitorReadyForVersion3_0() {
    4.30 +        // BEGIN: visitor.nonmonotonic.print3
    4.31 +        class PrintVisitor3_0 implements Visitor3_0 {
    4.32 +            StringBuffer sb = new StringBuffer();
    4.33 +
    4.34 +            public void visitUnknown(Expression exp) {
    4.35 +                sb.append("unknown");
    4.36 +            }
    4.37 +
    4.38 +            public void visitPlus(Plus s) {
    4.39 +                s.getFirst().visit(this);
    4.40 +                sb.append(" + ");
    4.41 +                s.getSecond().visit(this);
    4.42 +            }
    4.43 +
    4.44 +            public void visitNumber(Number n) {
    4.45 +                sb.append (n.getValue());
    4.46 +            }
    4.47 +            public void visitMinus(Minus m) {
    4.48 +                m.getFirst().visit(this);
    4.49 +                sb.append(" - ");
    4.50 +                m.getSecond().visit(this);
    4.51 +            }
    4.52 +
    4.53 +            public void visitReal(Real r) {
    4.54 +                sb.append(r.getValue());
    4.55 +            }
    4.56 +        }
    4.57 +        
    4.58 +        Number one = new Number(1);
    4.59 +        Number two = new Number(2);
    4.60 +        Expression plus = new Minus(one, two);
    4.61 +        
    4.62 +        PrintVisitor3_0 print = new PrintVisitor3_0();
    4.63 +        plus.visit(print);
    4.64 +        
    4.65 +        assertEquals("1.0 - 2.0", print.sb.toString());
    4.66 +        // END: visitor.nonmonotonic.print3
    4.67 +        
    4.68 +    }
    4.69 +}