stevel 2004/08/05 10:13:43 Modified: src/testcases/org/apache/tools/ant/taskdefs RmicAdvancedTest.java src/main/org/apache/tools/ant/taskdefs/rmic WLRmic.java SunRmic.java RmicAdapterFactory.java KaffeRmic.java ForkingSunRmic.java src/main/org/apache/tools/ant/taskdefs Rmic.java src/etc/testcases/taskdefs/rmic rmic.xml docs/manual/CoreTasks rmic.html Added: src/etc/testcases/taskdefs/rmic/src AntTimestamp.java Log: more tests; 'default' compiler and "" has a well defined behaviour. Revision Changes Path 1.1 ant/src/etc/testcases/taskdefs/rmic/src/AntTimestamp.java Index: AntTimestamp.java =================================================================== import java.rmi.Remote; import java.rmi.RemoteException; import java.util.Calendar; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.util.DateUtils; /** * This class imports a dependency on the Ant runtime classes, * so tests that classpath setup include them */ public class AntTimestamp implements RemoteTimestamp { /** * return the phase of the moon. * Note the completely different semantics of the other implementation, * which goes to show why signature is an inadeuqate way of verifying * how well an interface is implemented. * * @return * @throws RemoteException */ public long when() throws RemoteException { Calendar cal=Calendar.getInstance(); return DateUtils.getPhaseOfMoon(cal); } } 1.3 +96 -2 ant/src/testcases/org/apache/tools/ant/taskdefs/RmicAdvancedTest.java Index: RmicAdvancedTest.java =================================================================== RCS file: /home/cvs/ant/src/testcases/org/apache/tools/ant/taskdefs/RmicAdvancedTest.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- RmicAdvancedTest.java 5 Aug 2004 07:41:41 -0000 1.2 +++ RmicAdvancedTest.java 5 Aug 2004 17:13:42 -0000 1.3 @@ -19,7 +19,9 @@ package org.apache.tools.ant.taskdefs; import org.apache.tools.ant.BuildFileTest; +import org.apache.tools.ant.BuildException; import org.apache.tools.ant.taskdefs.rmic.RmicAdapterFactory; +import org.apache.tools.ant.taskdefs.rmic.DefaultRmicAdapter; /** * Date: 04-Aug-2004 @@ -48,6 +50,19 @@ } /** + * verify that "default" binds us to the default compiler + */ + public void testDefault() throws Exception { + executeTarget("testDefault"); + } + + /** + * verify that "" binds us to the default compiler + */ + public void testEmpty() throws Exception { + executeTarget("testEmpty"); + } + /** * A unit test for JUnit */ public void testRmic() throws Exception { @@ -68,13 +83,27 @@ } /** - * A unit test for JUnit + * test the forking compiler */ - public void testForking() throws Exception { + public void NotestForking() throws Exception { executeTarget("testForking"); } /** + * test the forking compiler + */ + public void NotestForkingAntClasspath() throws Exception { + executeTarget("testForkingAntClasspath"); + } + + /** + * test the forking compiler + */ + public void testAntClasspath() throws Exception { + executeTarget("testAntClasspath"); + } + + /** * A unit test for JUnit */ public void testBadName() throws Exception { @@ -90,6 +119,71 @@ expectBuildExceptionContaining("testWrongClass", "class not an RMIC adapter", RmicAdapterFactory.ERROR_NOT_RMIC_ADAPTER); + } + + + /** + * A unit test for JUnit + */ + public void testDefaultBadClass() throws Exception { + expectBuildExceptionContaining("testDefaultBadClass", + "expected the class to fail", + Rmic.ERROR_RMIC_FAILED); + //dont look for much text here as it is vendor and version dependent + assertLogContaining("unimplemented.class"); + } + + + /** + * A unit test for JUnit + */ + public void testMagicProperty() throws Exception { + expectBuildExceptionContaining("testMagicProperty", + "magic property not working", + RmicAdapterFactory.ERROR_UNKNOWN_COMPILER); + } + + /** + * A unit test for JUnit + */ + public void testMagicPropertyOverridesEmptyString() throws Exception { + expectBuildExceptionContaining("testMagicPropertyOverridesEmptyString", + "magic property not working", + RmicAdapterFactory.ERROR_UNKNOWN_COMPILER); + } + + + /** + * test the forking compiler + */ + public void testMagicPropertyIsEmptyString() throws Exception { + executeTarget("testMagicPropertyIsEmptyString"); + } + + + public void NotestFailingAdapter() throws Exception { + expectBuildExceptionContaining("testFailingAdapter", + "expected failures to propagate", + Rmic.ERROR_RMIC_FAILED); + } + + + /** + * this little bunny verifies that we can load stuff, and that + * a failure to execute is turned into a fault + */ + public static class FailingRmicAdapter extends DefaultRmicAdapter { + public static final String LOG_MESSAGE = "hello from FailingRmicAdapter"; + + /** + * Executes the task. + * + * @return false -always + */ + public boolean execute() throws BuildException { + getRmic().log(LOG_MESSAGE); + return false; + } } } 1.22 +5 -0 ant/src/main/org/apache/tools/ant/taskdefs/rmic/WLRmic.java Index: WLRmic.java =================================================================== RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/rmic/WLRmic.java,v retrieving revision 1.21 retrieving revision 1.22 diff -u -r1.21 -r1.22 --- WLRmic.java 4 Aug 2004 22:03:46 -0000 1.21 +++ WLRmic.java 5 Aug 2004 17:13:42 -0000 1.22 @@ -30,6 +30,11 @@ */ public class WLRmic extends DefaultRmicAdapter { public static final String WLRMIC_CLASSNAME = "weblogic.rmic"; + /** + * the name of this adapter for users to select + */ + public static final String COMPILER_NAME = "weblogic"; + public static final String ERROR_NO_WLRMIC_ON_CLASSPATH = "Cannot use WebLogic rmic, as it is not " + "available. A common solution is to " + "set the environment variable " 1.16 +5 -0 ant/src/main/org/apache/tools/ant/taskdefs/rmic/SunRmic.java Index: SunRmic.java =================================================================== RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/rmic/SunRmic.java,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- SunRmic.java 4 Aug 2004 22:03:46 -0000 1.15 +++ SunRmic.java 5 Aug 2004 17:13:42 -0000 1.16 @@ -39,6 +39,11 @@ public static final String RMIC_CLASSNAME = "sun.rmi.rmic.Main"; /** + * the name of this adapter for users to select + */ + public static final String COMPILER_NAME = "sun"; + + /** * name of the executable */ public static final String RMIC_EXECUTABLE = "rmic"; 1.15 +14 -4 ant/src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapterFactory.java Index: RmicAdapterFactory.java =================================================================== RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapterFactory.java,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- RmicAdapterFactory.java 4 Aug 2004 22:03:46 -0000 1.14 +++ RmicAdapterFactory.java 5 Aug 2004 17:13:42 -0000 1.15 @@ -29,6 +29,7 @@ public class RmicAdapterFactory { public static final String ERROR_UNKNOWN_COMPILER = "Cannot find the compiler or class: "; public static final String ERROR_NOT_RMIC_ADAPTER = "Not an rmic adapter: "; + public static final String DEFAULT_COMPILER = "default"; /** This is a singleton -- can't create instances!! */ private RmicAdapterFactory() { @@ -55,13 +56,22 @@ */ public static RmicAdapter getRmic(String rmicType, Task task) throws BuildException { - if (rmicType.equalsIgnoreCase("sun")) { + + //handle default specially. + if(DEFAULT_COMPILER.equalsIgnoreCase(rmicType) || rmicType.length()==0) { + String adapter = KaffeRmic.isAvailable() ? + KaffeRmic.COMPILER_NAME + :SunRmic.COMPILER_NAME; + return getRmic(adapter,task); + } + + if (SunRmic.COMPILER_NAME.equalsIgnoreCase(rmicType)) { return new SunRmic(); - } else if (rmicType.equalsIgnoreCase("kaffe")) { + } else if (KaffeRmic.COMPILER_NAME.equalsIgnoreCase(rmicType)) { return new KaffeRmic(); - } else if (rmicType.equalsIgnoreCase("weblogic")) { + } else if (WLRmic.COMPILER_NAME.equalsIgnoreCase(rmicType)) { return new WLRmic(); - } else if (rmicType.equalsIgnoreCase("forking")) { + } else if (ForkingSunRmic.COMPILER_NAME.equalsIgnoreCase(rmicType)) { return new ForkingSunRmic(); } return resolveClassName(rmicType); 1.17 +11 -7 ant/src/main/org/apache/tools/ant/taskdefs/rmic/KaffeRmic.java Index: KaffeRmic.java =================================================================== RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/rmic/KaffeRmic.java,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- KaffeRmic.java 4 Aug 2004 22:03:46 -0000 1.16 +++ KaffeRmic.java 5 Aug 2004 17:13:42 -0000 1.17 @@ -21,7 +21,6 @@ import java.lang.reflect.Method; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; -import org.apache.tools.ant.util.facade.FacadeTaskHelper; import org.apache.tools.ant.types.Commandline; /** @@ -31,6 +30,11 @@ */ public class KaffeRmic extends DefaultRmicAdapter { public static final String RMIC_CLASSNAME = "kaffe.rmi.rmic.RMIC"; + /** + * the name of this adapter for users to select + */ + public static final String COMPILER_NAME = "kaffe"; + public boolean execute() throws BuildException { getRmic().log("Using Kaffe rmic", Project.MSG_VERBOSE); @@ -51,19 +55,19 @@ + "set the environment variable " + "JAVA_HOME or CLASSPATH.", getRmic().getLocation()); + } catch (BuildException ex) { + //rethrow + throw ex; } catch (Exception ex) { - if (ex instanceof BuildException) { - throw (BuildException) ex; - } else { - throw new BuildException("Error starting Kaffe rmic: ", + //wrap + throw new BuildException("Error starting Kaffe rmic: ", ex, getRmic().getLocation()); - } } } /** * test for kaffe being on the system - * @return + * @return true if kaffe is on the current classpath */ public static boolean isAvailable() { try { 1.2 +6 -0 ant/src/main/org/apache/tools/ant/taskdefs/rmic/ForkingSunRmic.java Index: ForkingSunRmic.java =================================================================== RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/rmic/ForkingSunRmic.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- ForkingSunRmic.java 4 Aug 2004 22:03:46 -0000 1.1 +++ ForkingSunRmic.java 5 Aug 2004 17:13:42 -0000 1.2 @@ -42,6 +42,11 @@ public class ForkingSunRmic extends DefaultRmicAdapter { /** + * the name of this adapter for users to select + */ + public static final String COMPILER_NAME = "forking"; + + /** * exec by creating a new command * @return * @throws BuildException @@ -63,6 +68,7 @@ exe.setAntRun(project); exe.setWorkingDirectory(project.getBaseDir()); exe.setCommandline(args); + exe.execute(); return exe.getExitValue()==0; } catch (IOException exception) { 1.57 +9 -8 ant/src/main/org/apache/tools/ant/taskdefs/Rmic.java Index: Rmic.java =================================================================== RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/Rmic.java,v retrieving revision 1.56 retrieving revision 1.57 diff -u -r1.56 -r1.57 --- Rmic.java 4 Aug 2004 22:03:46 -0000 1.56 +++ Rmic.java 5 Aug 2004 17:13:43 -0000 1.57 @@ -80,7 +80,7 @@ public class Rmic extends MatchingTask { - private static final String FAIL_MSG + public static final String ERROR_RMIC_FAILED = "Rmic failed; see the compiler error output for details."; private File baseDir; @@ -116,8 +116,7 @@ public static final String ERROR_BASE_NOT_SET = "base attribute must be set!"; public Rmic() { - String facadeName=KaffeRmic.isAvailable()?"kaffe":"sun"; - facade = new FacadeTaskHelper(facadeName); + facade = new FacadeTaskHelper(RmicAdapterFactory.DEFAULT_COMPILER); } /** @@ -398,7 +397,9 @@ * @since Ant 1.5 */ public void setCompiler(String compiler) { - facade.setImplementation(compiler); + if(compiler.length()>0) { + facade.setImplementation(compiler); + } } /** @@ -481,7 +482,7 @@ // finally, lets execute the compiler!! if (!adapter.execute()) { - throw new BuildException(FAIL_MSG, getLocation()); + throw new BuildException(ERROR_RMIC_FAILED, getLocation()); } } @@ -583,9 +584,9 @@ } for (int i = 0; i < newFiles.length; i++) { - String classname = newFiles[i].replace(File.separatorChar, '.'); - classname = classname.substring(0, classname.lastIndexOf(".class")); - compileList.addElement(classname); + String name = newFiles[i].replace(File.separatorChar, '.'); + name = name.substring(0, name.lastIndexOf(".class")); + compileList.addElement(name); } } 1.2 +99 -3 ant/src/etc/testcases/taskdefs/rmic/rmic.xml Index: rmic.xml =================================================================== RCS file: /home/cvs/ant/src/etc/testcases/taskdefs/rmic/rmic.xml,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- rmic.xml 4 Aug 2004 22:03:47 -0000 1.1 +++ rmic.xml 5 Aug 2004 17:13:43 -0000 1.2 @@ -15,7 +15,8 @@ <javac destdir="${build.dir}" - srcdir="${src.dir}" > + srcdir="${src.dir}" + includes="Remote*.java"> </javac> <presetdef name="base-rmic"> @@ -24,6 +25,38 @@ verify="true" includes="**/*.class"/> </presetdef> + + <presetdef name="rmic-bad-class"> + <rmic + base="${build.dir}" + verify="false" + classname="unimplemented.class" + /> + </presetdef> + + <macrodef name="assertFileCreated"> + <attribute name="file" /> + <sequential> + <property name="file.to.find" location="${build.dir}/@{file}" /> + <available property="file.found" file="${file.to.find}"/> + <fail unless="file.found">Not found : ${file.to.find}</fail> + </sequential> + </macrodef> + + <macrodef name="assertBaseCompiled"> + <sequential> + <assertFileCreated file="RemoteTimestampImpl_Stub.class" /> + <assertFileCreated file="RemoteTimestampImpl_Skel.class"/> + </sequential> + </macrodef> + + <macrodef name="assertAntCompiled"> + <sequential> + <assertFileCreated file="AntTimestamp_Stub.class"/> + <assertFileCreated file="AntTimestamp_Skel.class"/> + </sequential> + </macrodef> + </target> <target name="probe-rmic"> @@ -31,15 +64,27 @@ <available property="rmic.present" classname="sun.rmi.rmic.Main"/> <available property="wlrmic.present" classname="weblogic.rmic"/> </target> - + + <target name="testDefault" depends="init"> + <base-rmic compiler="default"/> + <assertBaseCompiled/> + </target> + + <target name="testEmpty" depends="init"> + <base-rmic compiler=""/> + <assertBaseCompiled/> + </target> + <target name="testRmic" if="rmic.present" depends="init"> - <base-rmic /> + <base-rmic compiler="sun"/> + <assertBaseCompiled/> </target> <target name="testKaffe" if="kaffe.present" depends="init"> <base-rmic compiler="kaffe" /> + <assertBaseCompiled/> </target> <target name="testWlrmic" if="wlrmic.present" depends="init"> @@ -52,6 +97,7 @@ <base-rmic compiler="forking" /> + <assertBaseCompiled/> </target> <target name="testBadName" if="rmic.present" depends="init"> @@ -84,6 +130,56 @@ base="${ant.file}" verify="true" includes="**/*.class"/> + </target> + + <target name="testFailingAdapter" depends="init"> + <base-rmic + compiler="org.apache.tools.ant.taskdefs.rmic.RmicAdvancedTest$FailingRmicAdapter" + /> + </target> + + <target name="compileAntTimestamp" depends="init"> + <javac + destdir="${build.dir}" + srcdir="${src.dir}" + includes="Ant*.java"> + </javac> + </target> + + <target name="testAntClasspath" depends="compileAntTimestamp"> + <base-rmic + compiler="default" + /> + <assertAntCompiled/> + </target> + + <target name="testForkingAntClasspath" if="rmic.present" depends="compileAntTimestamp"> + <base-rmic + compiler="forking" + /> + <assertAntCompiled /> + </target> + + <target name="testDefaultBadClass" depends="init"> + <rmic-bad-class compiler="default"/> + </target> + + <target name="testMagicProperty" depends="init"> + <property name="build.rmic" value="no-such-adapter"/> + <base-rmic + /> + </target> + + <target name="testMagicPropertyOverridesEmptyString" depends="init"> + <property name="build.rmic" value="no-such-adapter"/> + <base-rmic compiler="" + /> + </target> + + <target name="testMagicPropertyIsEmptyString" depends="init"> + <property name="build.rmic" value=""/> + <base-rmic /> + <assertBaseCompiled/> </target> </project> 1.16 +7 -1 ant/docs/manual/CoreTasks/rmic.html Index: rmic.html =================================================================== RCS file: /home/cvs/ant/docs/manual/CoreTasks/rmic.html,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- rmic.html 4 Aug 2004 22:03:46 -0000 1.15 +++ rmic.html 5 Aug 2004 17:13:43 -0000 1.16 @@ -32,12 +32,18 @@ <code><patternset></code> elements.</p> <p>It is possible to use different compilers. This can be selected with the "build.rmic" property or the <code>compiler</code> -attribute. <a name="compilervalues">There are three choices</a>:</p> +attribute. +<a name="compilervalues">Here are the choices</a>:</p> <ul> + <li>default -the default compiler (kaffe or sun) for the platform. <li>sun (the standard compiler of the JDK)</li> <li>kaffe (the standard compiler of <a href="http://www.kaffe.org" target="_top">Kaffe</a>)</li> <li>weblogic</li> <li>forking - the sun compiler forked into a separate process</li> + <li> "" (empty string). This has the same behaviour as not setting the compiler attribute. + First the value of <tt>build.rmic<tt> is used if defined, and if not, the default + for the platform is chosen. If build.rmic is set to this, you get the default. + </ul> <p>The <a href="http://dione.zcu.cz/~toman40/miniRMI/">miniRMI</a>
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]