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 +}