Browse Source

Merge in 1.4 src changes

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@269663 13f79535-47bb-0310-9956-ffa450edef68
master
Conor MacNeill 24 years ago
parent
commit
df14132289
30 changed files with 597 additions and 240 deletions
  1. +11
    -1
      WHATSNEW
  2. +11
    -10
      build.xml
  3. +130
    -49
      src/etc/junit-frames.xsl
  4. +135
    -88
      src/etc/junit-noframes.xsl
  5. +2
    -1
      src/etc/testcases/taskdefs/optional/antlr/antlr.xml
  6. +5
    -0
      src/etc/testcases/types/description1.xml
  7. +6
    -0
      src/etc/testcases/types/description2.xml
  8. +6
    -0
      src/etc/testcases/types/description3.xml
  9. +6
    -0
      src/etc/testcases/types/description4.xml
  10. +6
    -0
      src/etc/testcases/types/filterset.xml
  11. +4
    -0
      src/main/org/apache/tools/ant/AntClassLoader.java
  12. +6
    -1
      src/main/org/apache/tools/ant/DefaultLogger.java
  13. +1
    -1
      src/main/org/apache/tools/ant/XmlLogger.java
  14. +7
    -0
      src/main/org/apache/tools/ant/taskdefs/ExecuteOn.java
  15. +53
    -27
      src/main/org/apache/tools/ant/taskdefs/Javac.java
  16. +1
    -2
      src/main/org/apache/tools/ant/taskdefs/Javadoc.java
  17. +1
    -5
      src/main/org/apache/tools/ant/taskdefs/Manifest.java
  18. +12
    -0
      src/main/org/apache/tools/ant/taskdefs/Property.java
  19. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java
  20. +29
    -12
      src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java
  21. +2
    -2
      src/main/org/apache/tools/ant/taskdefs/optional/ejb/BorlandDeploymentTool.java
  22. +23
    -23
      src/main/org/apache/tools/ant/taskdefs/optional/ejb/WLRun.java
  23. +3
    -1
      src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java
  24. +2
    -2
      src/main/org/apache/tools/ant/taskdefs/rmic/WLRmic.java
  25. +3
    -2
      src/main/org/apache/tools/ant/types/CommandlineJava.java
  26. +8
    -9
      src/main/org/apache/tools/ant/types/Description.java
  27. +11
    -0
      src/testcases/org/apache/tools/ant/taskdefs/TaskdefsTest.java
  28. +6
    -1
      src/testcases/org/apache/tools/ant/taskdefs/optional/AbstractXSLTLiaisonTest.java
  29. +102
    -0
      src/testcases/org/apache/tools/ant/types/DescriptionTest.java
  30. +4
    -2
      src/testcases/org/apache/tools/ant/types/FilterSetTest.java

+ 11
- 1
WHATSNEW View File

@@ -36,7 +36,7 @@ Changes that could break older environments:
encoding attribute of the task and set it to UTF8 to get the old encoding attribute of the task and set it to UTF8 to get the old
behavior. behavior.


* The <pvcs> task has been move to a package of its own.
* The <pvcs> task has been moved to a package of its own.


* JUnitResultFormater has two additional methods that must be * JUnitResultFormater has two additional methods that must be
implemented by custom formatters. implemented by custom formatters.
@@ -93,6 +93,16 @@ Changes that could break older environments:
</delete> </delete>
will now remove "somedir" as well, unless there are still files left will now remove "somedir" as well, unless there are still files left
in it (matched by the default excludes). in it (matched by the default excludes).
* The copy task will now fail if the file to be copied is not found.

* Ant properties defined in properties files now behave the same way as
properties defined in the build file. In particular the $ character needs
to be escaped in property values by doubling it to $$. So, to define a
property with the value $hello, you need to define it in a properties file
as
test.prop=$$hello
This was not the case in Ant 1.3


Other changes: Other changes:
-------------- --------------


+ 11
- 10
build.xml View File

@@ -161,6 +161,7 @@
<available property="xalan.envcheck" <available property="xalan.envcheck"
classname="org.apache.xalan.xslt.EnvironmentCheck" classname="org.apache.xalan.xslt.EnvironmentCheck"
classpathref="classpath" /> classpathref="classpath" />
<condition property="javamail.complete"> <condition property="javamail.complete">
<and> <and>
<available classname="javax.activation.DataHandler" <available classname="javax.activation.DataHandler"
@@ -180,6 +181,11 @@
<tstamp> <tstamp>
<format property="year" pattern="yyyy" /> <format property="year" pattern="yyyy" />
</tstamp> </tstamp>
<filterset id="ant.filters">
<filter token="VERSION" value="${version}" />
<filter token="DATE" value="${TODAY}" />
<filter token="TIME" value="${TSTAMP}" />
</filterset>
</target> </target>


<!-- <!--
@@ -256,12 +262,7 @@
<include name="**/version.txt" /> <include name="**/version.txt" />
<include name="**/defaultManifest.mf" /> <include name="**/defaultManifest.mf" />
</fileset> </fileset>
<filterset>
<filter token="VERSION" value="${version}" />
<filter token="DATE" value="${TODAY}" />
<filter token="TIME" value="${TSTAMP}" />
</filterset>
<filterset refid="ant.filters"/>
</copy> </copy>


<copy todir="${build.classes}/${optional.package}/junit/xsl"> <copy todir="${build.classes}/${optional.package}/junit/xsl">
@@ -369,9 +370,9 @@


<copy todir="${dist.lib}" file="${lib.dir}/optional/README"/> <copy todir="${dist.lib}" file="${lib.dir}/optional/README"/>
<copy todir="${dist.docs}"
filtering="on">
<copy todir="${dist.docs}">
<fileset dir="${docs.dir}"/> <fileset dir="${docs.dir}"/>
<filterset refid="ant.filters"/>
</copy> </copy>


<copy todir="${dist.dir}"> <copy todir="${dist.dir}">
@@ -655,10 +656,10 @@
<echo message="file.encoding=${file.encoding}" /> <echo message="file.encoding=${file.encoding}" />
<echo message="user.language=${user.language}" /> <echo message="user.language=${user.language}" />
</target> </target>
<!-- helper class from Xalan2 to check for jar versioning of xml/xsl processors --> <!-- helper class from Xalan2 to check for jar versioning of xml/xsl processors -->
<target name="xml-check" depends="check_for_optional_packages" if="xalan.envcheck"> <target name="xml-check" depends="check_for_optional_packages" if="xalan.envcheck">
<java classname="org.apache.xalan.xslt.EnvironmentCheck"/>
<java classname="org.apache.xalan.xslt.EnvironmentCheck"/>
</target> </target>


<!-- <!--


+ 130
- 49
src/etc/junit-frames.xsl View File

@@ -118,54 +118,55 @@
</html> </html>
</xsl:template> </xsl:template>



<!-- this is the stylesheet css to use for nearly everything --> <!-- this is the stylesheet css to use for nearly everything -->
<xsl:template name="stylesheet.css"> <xsl:template name="stylesheet.css">
body { body {
font:normal 68% verdana,arial,helvetica; font:normal 68% verdana,arial,helvetica;
color:#000000; color:#000000;
} }
td {
font-size: 68%
table tr td, table tr th {
font-size: 68%;
}
table.details tr th{
font-weight: bold;
text-align:left;
background:#a6caf0;
}
table.details tr td{
background:#eeeee0;
} }

p { p {
line-height:1.5em; line-height:1.5em;
margin-top:0.5em; margin-bottom:1.0em; margin-top:0.5em; margin-bottom:1.0em;
} }
h1 { h1 {
margin: 0px 0px 5px;
font: 165% verdana,arial,helvetica
margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
} }
h2 { h2 {
margin-top: 1em;
margin-bottom: 0.5em;
font: bold 125% verdana,arial,helvetica
margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
} }
h3 { h3 {
margin-bottom: 0.5em;
font: bold 115% verdana,arial,helvetica
margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
} }
h4 { h4 {
margin-bottom: 0.5em;
font: bold 100% verdana,arial,helvetica
margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
} }
h5 { h5 {
margin-bottom: 0.5em;
font: bold 100% verdana,arial,helvetica
margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
} }
h6 { h6 {
margin-bottom: 0.5em;
font: bold 100% verdana,arial,helvetica
margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
} }
.Error { .Error {
font-weight:bold;
color:red;
font-weight:bold; color:red;
} }
.Failure { .Failure {
font-weight:bold;
color:purple;
font-weight:bold; color:purple;
}
.Properties {
text-align:right;
} }

</xsl:template> </xsl:template>




@@ -181,29 +182,87 @@ h6 {
<xsl:call-template name="create.stylesheet.link"> <xsl:call-template name="create.stylesheet.link">
<xsl:with-param name="package.name" select="$package.name"/> <xsl:with-param name="package.name" select="$package.name"/>
</xsl:call-template> </xsl:call-template>
<script language="JavaScript">
var TestCases = new Array();
var cur;
<xsl:apply-templates select="properties"/>
</script>
<script language="JavaScript"><![CDATA[
function displayProperties (name) {
var win = window.open('','JUnitSystemProperties','scrollbars=1,resizable=1');
var doc = win.document.open();
doc.write("<html><head><title>Properties of " + name + "</title>");
doc.write("<style>")
doc.write("body {font:normal 68% verdana,arial,helvetica; color:#000000; }");
doc.write("table tr td, table tr th { font-size: 68%; }");
doc.write("table.properties { border-collapse:collapse; border-left:solid 1 #cccccc; border-top:solid 1 #cccccc; padding:5px; }");
doc.write("table.properties th { text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#eeeeee; }");
doc.write("table.properties td { font:normal; text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#fffffff; }");
doc.write("h3 { margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica }");
doc.write("</style>");
doc.write("</head><body>");
doc.write("<h3>Properties of " + name + "</h3>");
doc.write("<div align=\"right\"><a href=\"javascript:window.close();\">Close</a></div>");
doc.write("<table class='properties'>");
doc.write("<tr><th>Name</th><th>Value</th></tr>");
for (prop in TestCases[name]) {
doc.write("<tr><th>" + prop + "</th><td>" + TestCases[name][prop] + "</td></tr>");
}
doc.write("</table>");
doc.write("</body></html>");
doc.close();
win.focus();
}
]]>
</script>
</head> </head>
<body> <body>
<xsl:call-template name="pageHeader"/> <xsl:call-template name="pageHeader"/>
<h3>Class <xsl:if test="not($package.name = '')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></h3> <h3>Class <xsl:if test="not($package.name = '')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></h3>


<table border="0" cellpadding="5" cellspacing="2" width="95%">
<table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
<xsl:call-template name="testsuite.test.header"/> <xsl:call-template name="testsuite.test.header"/>
<xsl:apply-templates select="." mode="print.test"/> <xsl:apply-templates select="." mode="print.test"/>
</table> </table>
<h2>Tests</h2> <h2>Tests</h2>
<p> <p>
<table border="0" cellpadding="5" cellspacing="2" width="95%">
<xsl:call-template name="testcase.test.header"/>
<table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
<!--
test can even not be started at all (failure to load the class)
so report the error directly
-->
<xsl:if test="./error">
<tr class="Error">
<td colspan="4"><xsl:apply-templates select="./error"/></td>
</tr>
</xsl:if>
<xsl:apply-templates select="./testcase" mode="print.test"/> <xsl:apply-templates select="./testcase" mode="print.test"/>
</table> </table>
</p> </p>
<div class="Properties">
<a>
<xsl:attribute name="href">javascript:displayProperties('<xsl:value-of select="@package"/>.<xsl:value-of select="@name"/>');</xsl:attribute>
Properties &gt;&gt;
</a>
</div>
</body> </body>
</html> </html>
</xsl:template> </xsl:template>


<!--
Write properties into a JavaScript data structure.
This is based on the original idea by Erik Hatcher (erik@hatcher.net)
-->
<xsl:template match="properties">
cur = TestCases['<xsl:value-of select="../@package"/>.<xsl:value-of select="../@name"/>'] = new Array();
<xsl:for-each select="property">
<xsl:sort select="@name"/>
cur['<xsl:value-of select="@name"/>'] = '<xsl:call-template name="JS-escape"><xsl:with-param name="string" select="@value"/></xsl:call-template>';
</xsl:for-each>
</xsl:template>



<!-- ====================================================================== <!-- ======================================================================
This page is created for every package. This page is created for every package.
@@ -340,15 +399,15 @@ h6 {
<xsl:variable name="failureCount" select="sum(testsuite/@failures)"/> <xsl:variable name="failureCount" select="sum(testsuite/@failures)"/>
<xsl:variable name="timeCount" select="sum(testsuite/@time)"/> <xsl:variable name="timeCount" select="sum(testsuite/@time)"/>
<xsl:variable name="successRate" select="($testCount - $failureCount - $errorCount) div $testCount"/> <xsl:variable name="successRate" select="($testCount - $failureCount - $errorCount) div $testCount"/>
<table border="0" cellpadding="5" cellspacing="2" width="95%">
<tr bgcolor="#A6CAF0" valign="top">
<td><strong>Tests</strong></td>
<td><strong>Failures</strong></td>
<td><strong>Errors</strong></td>
<td><strong>Success rate</strong></td>
<td><strong>Time</strong></td>
<table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
<tr valign="top">
<th>Tests</th>
<th>Failures</th>
<th>Errors</th>
<th>Success rate</th>
<th>Time</th>
</tr> </tr>
<tr bgcolor="#EEEEE" valign="top">
<tr valign="top">
<xsl:attribute name="class"> <xsl:attribute name="class">
<xsl:choose> <xsl:choose>
<xsl:when test="$errorCount &gt; 0">Error</xsl:when> <xsl:when test="$errorCount &gt; 0">Error</xsl:when>
@@ -381,13 +440,13 @@ h6 {
</table> </table>
<h2>Packages</h2> <h2>Packages</h2>
<table border="0" cellpadding="5" cellspacing="2" width="95%">
<table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
<xsl:call-template name="testsuite.test.header"/> <xsl:call-template name="testsuite.test.header"/>
<xsl:for-each select="testsuite[not(./@package = preceding-sibling::testsuite/@package)]"> <xsl:for-each select="testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
<xsl:sort select="@package" order="ascending"/> <xsl:sort select="@package" order="ascending"/>
<!-- get the node set containing all testsuites that have the same package --> <!-- get the node set containing all testsuites that have the same package -->
<xsl:variable name="insamepackage" select="/testsuites/testsuite[./@package = current()/@package]"/> <xsl:variable name="insamepackage" select="/testsuites/testsuite[./@package = current()/@package]"/>
<tr bgcolor="#EEEEE" valign="top">
<tr valign="top">
<!-- display a failure if there is any failure/error in the package --> <!-- display a failure if there is any failure/error in the package -->
<xsl:attribute name="class"> <xsl:attribute name="class">
<xsl:choose> <xsl:choose>
@@ -435,7 +494,7 @@ h6 {
<xsl:if test="count($insamepackage) &gt; 0"> <xsl:if test="count($insamepackage) &gt; 0">
<h2>Classes</h2> <h2>Classes</h2>
<p> <p>
<table border="0" cellpadding="5" cellspacing="2" width="95%">
<table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
<xsl:call-template name="testsuite.test.header"/> <xsl:call-template name="testsuite.test.header"/>
<xsl:apply-templates select="$insamepackage" mode="print.test"> <xsl:apply-templates select="$insamepackage" mode="print.test">
<xsl:sort select="@name"/> <xsl:sort select="@name"/>
@@ -487,29 +546,29 @@ h6 {


<!-- class header --> <!-- class header -->
<xsl:template name="testsuite.test.header"> <xsl:template name="testsuite.test.header">
<tr bgcolor="#A6CAF0" valign="top">
<td width="80%"><strong>Name</strong></td>
<td><strong>Tests</strong></td>
<td><strong>Errors</strong></td>
<td><strong>Failures</strong></td>
<td nowrap="nowrap"><strong>Time(s)</strong></td>
<tr valign="top">
<th width="80%">Name</th>
<th>Tests</th>
<th>Errors</th>
<th>Failures</th>
<th nowrap="nowrap">Time(s)</th>
</tr> </tr>
</xsl:template> </xsl:template>


<!-- method header --> <!-- method header -->
<xsl:template name="testcase.test.header"> <xsl:template name="testcase.test.header">
<tr bgcolor="#A6CAF0" valign="top">
<td><strong>Name</strong></td>
<td><strong>Status</strong></td>
<td width="80%"><strong>Type</strong></td>
<td nowrap="nowrap"><strong>Time(s)</strong></td>
<tr valign="top">
<th>Name</th>
<th>Status</th>
<th width="80%">Type</th>
<th nowrap="nowrap">Time(s)</th>
</tr> </tr>
</xsl:template> </xsl:template>




<!-- class information --> <!-- class information -->
<xsl:template match="testsuite" mode="print.test"> <xsl:template match="testsuite" mode="print.test">
<tr bgcolor="#EEEEE" valign="top">
<tr valign="top">
<xsl:attribute name="class"> <xsl:attribute name="class">
<xsl:choose> <xsl:choose>
<xsl:when test="@errors[.&gt; 0]">Error</xsl:when> <xsl:when test="@errors[.&gt; 0]">Error</xsl:when>
@@ -529,7 +588,7 @@ h6 {
</xsl:template> </xsl:template>


<xsl:template match="testcase" mode="print.test"> <xsl:template match="testcase" mode="print.test">
<tr bgcolor="#EEEEE" valign="top">
<tr valign="top">
<xsl:attribute name="class"> <xsl:attribute name="class">
<xsl:choose> <xsl:choose>
<xsl:when test="error">Error</xsl:when> <xsl:when test="error">Error</xsl:when>
@@ -590,6 +649,28 @@ h6 {
<!--pre><xsl:value-of select="."/></pre--> <!--pre><xsl:value-of select="."/></pre-->
</xsl:template> </xsl:template>


<xsl:template name="JS-escape">
<xsl:param name="string"/>
<xsl:choose><!-- something isn't right here, basically all single quotes need to be replaced with backslash-single-quote
<xsl:when test="contains($string,'&apos;')">
<xsl:value-of select="substring-before($string,'&apos;')"/>
\&apos;
<xsl:call-template name="JS-escape">
<xsl:with-param name="string" select="substring-after($string,'&apos;')"/>
</xsl:call-template>
</xsl:when> -->
<xsl:when test="contains($string,'\')">
<xsl:value-of select="substring-before($string,'\')"/>\\<xsl:call-template name="JS-escape">
<xsl:with-param name="string" select="substring-after($string,'\')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$string"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>


<!-- <!--
template that will convert a carriage return into a br tag template that will convert a carriage return into a br tag
@param word the text from which to convert CR to BR tag @param word the text from which to convert CR to BR tag


+ 135
- 88
src/etc/junit-noframes.xsl View File

@@ -1,68 +1,95 @@
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">


<!-- ======================================================================

Stylesheet to transform an XML file generated by the Ant MAudit task into
a set of JavaDoc-like HTML page to make pages more convenient to be browsed.
It use the Xalan redirect extension to write to multiple output files.
Note: HTML output can be made much more clean by removing non css attributes

====================================================================== -->
<xsl:output method="html" indent="yes"/> <xsl:output method="html" indent="yes"/>
<xsl:decimal-format decimal-separator="." grouping-separator="," /> <xsl:decimal-format decimal-separator="." grouping-separator="," />


<xsl:template match="testsuites"> <xsl:template match="testsuites">
<HTML> <HTML>
<HEAD> <HEAD>
<style type="text/css">
BODY {
font:normal 68% verdana,arial,helvetica;
color:#000000;
}
TABLE TR TD, TABLE TR TH {
font-size: 68%;
}
TABLE.details TR TH{
font-weight: bold;
text-align:left;
background:#A6CAF0;
}
TABLE.details TR TD{
background:#EEEEE0;
}
P {
line-height:1.5em;
margin-top:0.5em; margin-bottom:1.0em;
}
H1 {
MARGIN: 0px 0px 5px; FONT: 165% verdana,arial,helvetica
}
H2 {
MARGIN-TOP: 1em; MARGIN-BOTTOM: 0.5em; FONT: bold 125% verdana,arial,helvetica
}
H3 {
MARGIN-BOTTOM: 0.5em; FONT: bold 115% verdana,arial,helvetica
}
H4 {
MARGIN-BOTTOM: 0.5em; FONT: bold 100% verdana,arial,helvetica
}
H5 {
MARGIN-BOTTOM: 0.5em; FONT: bold 100% verdana,arial,helvetica
}
H6 {
MARGIN-BOTTOM: 0.5em; FONT: bold 100% verdana,arial,helvetica
}
.Error {
font-weight:bold; color:red;
}
.Failure {
font-weight:bold; color:purple;
}
</style>
<style type="text/css">
body {
font:normal 68% verdana,arial,helvetica;
color:#000000;
}
table tr td, table tr th {
font-size: 68%;
}
table.details tr th{
font-weight: bold;
text-align:left;
background:#a6caf0;
}
table.details tr td{
background:#eeeee0;
}
p {
line-height:1.5em;
margin-top:0.5em; margin-bottom:1.0em;
}
h1 {
margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
}
h2 {
margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
}
h3 {
margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
}
h4 {
margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
}
h5 {
margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
}
h6 {
margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
}
.Error {
font-weight:bold; color:red;
}
.Failure {
font-weight:bold; color:purple;
}
.Properties {
text-align:right;
}
</style>
<script language="JavaScript">
var TestCases = new Array();
var cur;
<xsl:for-each select="./testsuite">
<xsl:apply-templates select="properties"/>
</xsl:for-each>

</script>
<script language="JavaScript"><![CDATA[
function displayProperties (name) {
var win = window.open('','JUnitSystemProperties','scrollbars=1,resizable=1');
var doc = win.document.open();
doc.write("<html><head><title>Properties of " + name + "</title>");
doc.write("<style>")
doc.write("body {font:normal 68% verdana,arial,helvetica; color:#000000; }");
doc.write("table tr td, table tr th { font-size: 68%; }");
doc.write("table.properties { border-collapse:collapse; border-left:solid 1 #cccccc; border-top:solid 1 #cccccc; padding:5px; }");
doc.write("table.properties th { text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#eeeeee; }");
doc.write("table.properties td { font:normal; text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#fffffff; }");
doc.write("h3 { margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica }");
doc.write("</style>");
doc.write("</head><body>");
doc.write("<h3>Properties of " + name + "</h3>");
doc.write("<div align=\"right\"><a href=\"javascript:window.close();\">Close</a></div>");
doc.write("<table class='properties'>");
doc.write("<tr><th>Name</th><th>Value</th></tr>");
for (prop in TestCases[name]) {
doc.write("<tr><th>" + prop + "</th><td>" + TestCases[name][prop] + "</td></tr>");
}
doc.write("</table>");
doc.write("</body></html>");
doc.close();
win.focus();
}
]]>
</script>
</HEAD> </HEAD>
<body> <body>
<a name="#top"></a> <a name="#top"></a>
@@ -163,14 +190,25 @@
<h3>TestCase <xsl:value-of select="@name"/></h3> <h3>TestCase <xsl:value-of select="@name"/></h3>
<table class="details" border="0" cellpadding="5" cellspacing="2" width="95%"> <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
<!-- Header -->
<xsl:call-template name="testcase.test.header"/>

<!-- match the testcases of this package -->
<xsl:apply-templates select="testcase" mode="print.test"/>
<xsl:call-template name="testcase.test.header"/>
<!--
test can even not be started at all (failure to load the class)
so report the error directly
-->
<xsl:if test="./error">
<tr class="Error">
<td colspan="4"><xsl:apply-templates select="./error"/></td>
</tr>
</xsl:if>
<xsl:apply-templates select="./testcase" mode="print.test"/>
</table> </table>
<div class="Properties">
<a>
<xsl:attribute name="href">javascript:displayProperties('<xsl:value-of select="@package"/>.<xsl:value-of select="@name"/>');</xsl:attribute>
Properties &gt;&gt;
</a>
</div>
<p/> <p/>
<xsl:apply-templates select="properties"/>
<a href="#top">Back to top</a> <a href="#top">Back to top</a>
</xsl:for-each> </xsl:for-each>
@@ -223,28 +261,17 @@
</table> </table>
</xsl:template> </xsl:template>
<xsl:template match="properties">
<!--
I have NO idea how to display properties ! :-(
It takes an incredible amount of space in the page and it's
really unreadable.
<xsl:variable name="count" select="count(property)"/>
<h3>System Properties</h3>
<table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
<tr valign="top">
<th>Name</th>
<th>Value</th>
</tr>
<xsl:for-each select="property">
<tr valign="top">
<td><xsl:value-of select="@name"/></td>
<td><xsl:value-of select="@value"/></td>
</tr>
</xsl:for-each>
</table>
-->
</xsl:template>
<!--
Write properties into a JavaScript data structure.
This is based on the original idea by Erik Hatcher (erik@hatcher.net)
-->
<xsl:template match="properties">
cur = TestCases['<xsl:value-of select="../@package"/>.<xsl:value-of select="../@name"/>'] = new Array();
<xsl:for-each select="property">
<xsl:sort select="@name"/>
cur['<xsl:value-of select="@name"/>'] = '<xsl:call-template name="JS-escape"><xsl:with-param name="string" select="@value"/></xsl:call-template>';
</xsl:for-each>
</xsl:template>
<!-- Page HEADER --> <!-- Page HEADER -->
<xsl:template name="pageHeader"> <xsl:template name="pageHeader">
@@ -345,8 +372,6 @@
</xsl:template> </xsl:template>




<!-- Note : the below template error and failure are the same style
so just call the same style store in the toolkit template -->
<xsl:template match="failure"> <xsl:template match="failure">
<xsl:call-template name="display-failures"/> <xsl:call-template name="display-failures"/>
</xsl:template> </xsl:template>
@@ -374,6 +399,28 @@
<!--pre><xsl:value-of select="."/></pre--> <!--pre><xsl:value-of select="."/></pre-->
</xsl:template> </xsl:template>


<xsl:template name="JS-escape">
<xsl:param name="string"/>
<xsl:choose><!-- something isn't right here, basically all single quotes need to be replaced with backslash-single-quote
<xsl:when test="contains($string,'&apos;')">
<xsl:value-of select="substring-before($string,'&apos;')"/>
\&apos;
<xsl:call-template name="JS-escape">
<xsl:with-param name="string" select="substring-after($string,'&apos;')"/>
</xsl:call-template>
</xsl:when> -->
<xsl:when test="contains($string,'\')">
<xsl:value-of select="substring-before($string,'\')"/>\\<xsl:call-template name="JS-escape">
<xsl:with-param name="string" select="substring-after($string,'\')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$string"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>


<!-- <!--
template that will convert a carriage return into a br tag template that will convert a carriage return into a br tag
@param word the text from which to convert CR to BR tag @param word the text from which to convert CR to BR tag


+ 2
- 1
src/etc/testcases/taskdefs/optional/antlr/antlr.xml View File

@@ -2,7 +2,7 @@


<project name="antlr-test" basedir="." default="test1"> <project name="antlr-test" basedir="." default="test1">


<property name="tmp.dir" value="antlr.tmp"/>
<property name="tmp.dir" location="antlr.tmp"/>




<target name="test1"> <target name="test1">
@@ -18,6 +18,7 @@
</target> </target>


<target name="test3"> <target name="test3">
<deltree dir="${tmp.dir}"/>
<mkdir dir="${tmp.dir}"/> <mkdir dir="${tmp.dir}"/>
<antlr target="antlr.g" outputdirectory="${tmp.dir}"/> <antlr target="antlr.g" outputdirectory="${tmp.dir}"/>
</target> </target>


+ 5
- 0
src/etc/testcases/types/description1.xml View File

@@ -0,0 +1,5 @@
<project name="test" default="main" basedir=".">
<description>Test Project Description</description>
<target name="main">
</target>
</project>

+ 6
- 0
src/etc/testcases/types/description2.xml View File

@@ -0,0 +1,6 @@
<project name="test" default="main" basedir=".">
<description>Multi Line
Project Description</description>
<target name="main">
</target>
</project>

+ 6
- 0
src/etc/testcases/types/description3.xml View File

@@ -0,0 +1,6 @@
<project name="test" default="main" basedir=".">
<description>Multi Instance </description>
<description>Project Description</description>
<target name="main">
</target>
</project>

+ 6
- 0
src/etc/testcases/types/description4.xml View File

@@ -0,0 +1,6 @@
<project name="test" default="main" basedir=".">
<description>Multi Instance </description>
<target name="main">
<description>Nested Project Description</description>
</target>
</project>

+ 6
- 0
src/etc/testcases/types/filterset.xml View File

@@ -34,4 +34,10 @@
<fixcrlf eol="lf" srcdir="." includes="dest3.txt"/> <fixcrlf eol="lf" srcdir="." includes="dest3.txt"/>
</target> </target>
<target name="cleanup">
<delete file="dest1.txt" quiet="true" />
<delete file="dest2.txt" quiet="true" />
<delete file="dest3.txt" quiet="true" />
</target>

</project> </project>

+ 4
- 0
src/main/org/apache/tools/ant/AntClassLoader.java View File

@@ -866,6 +866,9 @@ public class AntClassLoader extends ClassLoader implements BuildListener {
if (t instanceof ClassFormatError) { if (t instanceof ClassFormatError) {
throw (ClassFormatError)t; throw (ClassFormatError)t;
} }
else if (t instanceof NoClassDefFoundError) {
throw (NoClassDefFoundError)t;
}
else { else {
throw new IOException(t.toString()); throw new IOException(t.toString());
} }
@@ -914,6 +917,7 @@ public class AntClassLoader extends ClassLoader implements BuildListener {
} }
} }
catch (IOException ioe) { catch (IOException ioe) {
// ioe.printStackTrace();
log("Exception reading component " + pathComponent , Project.MSG_VERBOSE); log("Exception reading component " + pathComponent , Project.MSG_VERBOSE);
} }
} }


+ 6
- 1
src/main/org/apache/tools/ant/DefaultLogger.java View File

@@ -143,7 +143,12 @@ public class DefaultLogger implements BuildLogger {
error.printStackTrace(err); error.printStackTrace(err);
} }
else { else {
err.println(error.getMessage());
if (error instanceof BuildException) {
err.println(error.toString());
}
else {
err.println(error.getMessage());
}
} }
} }




+ 1
- 1
src/main/org/apache/tools/ant/XmlLogger.java View File

@@ -248,7 +248,7 @@ public class XmlLogger implements BuildListener {
} }
messageElement.setAttribute(PRIORITY_ATTR, name); messageElement.setAttribute(PRIORITY_ATTR, name);


Text messageText = doc.createTextNode(event.getMessage());
Text messageText = doc.createCDATASection(event.getMessage());
messageElement.appendChild(messageText); messageElement.appendChild(messageText);


TimedElement parentElement = null; TimedElement parentElement = null;


+ 7
- 0
src/main/org/apache/tools/ant/taskdefs/ExecuteOn.java View File

@@ -330,7 +330,14 @@ public class ExecuteOn extends ExecTask {
} }


} else { // no targetFilePos } else { // no targetFilePos

// 0 --> srcIndex
System.arraycopy(orig, 0, result, 0, srcIndex); System.arraycopy(orig, 0, result, 0, srcIndex);
// srcIndex --> end
System.arraycopy(orig, srcIndex, result,
srcIndex + srcFiles.length,
orig.length - srcIndex);

} }


// fill in source file names // fill in source file names


+ 53
- 27
src/main/org/apache/tools/ant/taskdefs/Javac.java View File

@@ -87,17 +87,17 @@ import java.io.File;
* <p> * <p>
* When this task executes, it will recursively scan the sourcedir and * When this task executes, it will recursively scan the sourcedir and
* destdir looking for Java source files to compile. This task makes its * destdir looking for Java source files to compile. This task makes its
* compile decision based on timestamp.
* compile decision based on timestamp.
* *
* @author James Davidson <a href="mailto:duncan@x180.com">duncan@x180.com</a> * @author James Davidson <a href="mailto:duncan@x180.com">duncan@x180.com</a>
* @author Robin Green <a href="mailto:greenrd@hotmail.com">greenrd@hotmail.com</a> * @author Robin Green <a href="mailto:greenrd@hotmail.com">greenrd@hotmail.com</a>
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
* @author <a href="mailto:jayglanville@home.com">J D Glanville</a> * @author <a href="mailto:jayglanville@home.com">J D Glanville</a>
*/ */


public class Javac extends MatchingTask { public class Javac extends MatchingTask {


private static final String FAIL_MSG
private static final String FAIL_MSG
= "Compile failed, messages should have been provided."; = "Compile failed, messages should have been provided.";


private Path src; private Path src;
@@ -116,6 +116,8 @@ public class Javac extends MatchingTask {
private boolean includeJavaRuntime = false; private boolean includeJavaRuntime = false;
private boolean fork = false; private boolean fork = false;
private boolean nowarn = false; private boolean nowarn = false;
private String memoryInitialSize;
private String memoryMaximumSize;


protected boolean failOnError = true; protected boolean failOnError = true;
protected File[] compileList = new File[0]; protected File[] compileList = new File[0];
@@ -157,7 +159,7 @@ public class Javac extends MatchingTask {
this.destDir = destDir; this.destDir = destDir;
} }


/**
/**
* Gets the destination directory into which the java source files * Gets the destination directory into which the java source files
* should be compiled. * should be compiled.
*/ */
@@ -298,6 +300,30 @@ public class Javac extends MatchingTask {
return deprecation; return deprecation;
} }


/**
* Set the memoryInitialSize flag.
*/
public void setMemoryInitialSize(String memoryInitialSize) {
this.memoryInitialSize = memoryInitialSize;
}

/** Gets the memoryInitialSize flag. */
public String getMemoryInitialSize() {
return memoryInitialSize;
}

/**
* Set the memoryMaximumSize flag.
*/
public void setMemoryMaximumSize(String memoryMaximumSize) {
this.memoryMaximumSize = memoryMaximumSize;
}

/** Gets the memoryMaximumSize flag. */
public String getMemoryMaximumSize() {
return memoryMaximumSize;
}

/** /**
* Set the Java source file encoding name. * Set the Java source file encoding name.
*/ */
@@ -334,21 +360,21 @@ public class Javac extends MatchingTask {
return optimize; return optimize;
} }


/**
/**
* Set the depend flag. * Set the depend flag.
*/
*/
public void setDepend(boolean depend) { public void setDepend(boolean depend) {
this.depend = depend; this.depend = depend;
}
}


/** Gets the depend flag. */ /** Gets the depend flag. */
public boolean getDepend() { public boolean getDepend() {
return depend; return depend;
} }


/**
/**
* Set the verbose flag. * Set the verbose flag.
*/
*/
public void setVerbose(boolean verbose) { public void setVerbose(boolean verbose) {
this.verbose = verbose; this.verbose = verbose;
} }
@@ -404,12 +430,12 @@ public class Javac extends MatchingTask {


/** /**
* Sets whether to fork the javac compiler. * Sets whether to fork the javac compiler.
*/
public void setFork(boolean fork)
*/
public void setFork(boolean fork)
{ {
this.fork = fork;
this.fork = fork;
} }


/** /**
* Sets whether the -nowarn option should be used. * Sets whether the -nowarn option should be used.
@@ -438,12 +464,12 @@ public class Javac extends MatchingTask {
if (list.length == 0) { if (list.length == 0) {
throw new BuildException("srcdir attribute must be set!", location); throw new BuildException("srcdir attribute must be set!", location);
} }
if (destDir != null && !destDir.isDirectory()) { if (destDir != null && !destDir.isDirectory()) {
throw new BuildException("destination directory \"" + destDir + "\" does not exist or is not a directory", location); throw new BuildException("destination directory \"" + destDir + "\" does not exist or is not a directory", location);
} }


// scan source directories and dest directory to build up
// scan source directories and dest directory to build up
// compile lists // compile lists
resetFileLists(); resetFileLists();
for (int i=0; i<list.length; i++) { for (int i=0; i<list.length; i++) {
@@ -458,13 +484,13 @@ public class Javac extends MatchingTask {


scanDir(srcDir, destDir != null ? destDir : srcDir, files); scanDir(srcDir, destDir != null ? destDir : srcDir, files);
} }
// compile the source files // compile the source files


String compiler = project.getProperty("build.compiler"); String compiler = project.getProperty("build.compiler");
if (fork) {
if (compiler != null) {
if (fork) {
if (compiler != null) {
if (isJdkCompiler(compiler)) { if (isJdkCompiler(compiler)) {
log("Since fork is true, ignoring build.compiler setting.", log("Since fork is true, ignoring build.compiler setting.",
Project.MSG_WARN); Project.MSG_WARN);
@@ -473,13 +499,13 @@ public class Javac extends MatchingTask {
else { else {
log("Since build.compiler setting isn't classic or modern, ignoring fork setting.", Project.MSG_WARN); log("Since build.compiler setting isn't classic or modern, ignoring fork setting.", Project.MSG_WARN);
} }
}
}
else { else {
compiler = "extJavac"; compiler = "extJavac";
} }
}
}


if (compiler == null) {
if (compiler == null) {
if (Project.getJavaVersion() != Project.JAVA_1_1 && if (Project.getJavaVersion() != Project.JAVA_1_1 &&
Project.getJavaVersion() != Project.JAVA_1_2) { Project.getJavaVersion() != Project.JAVA_1_2) {
compiler = "modern"; compiler = "modern";
@@ -492,14 +518,14 @@ public class Javac extends MatchingTask {


CompilerAdapter adapter = CompilerAdapterFactory.getCompiler( CompilerAdapter adapter = CompilerAdapterFactory.getCompiler(
compiler, this ); compiler, this );
log("Compiling " + compileList.length +
log("Compiling " + compileList.length +
" source file" " source file"
+ (compileList.length == 1 ? "" : "s") + (compileList.length == 1 ? "" : "s")
+ (destDir != null ? " to " + destDir : "")); + (destDir != null ? " to " + destDir : ""));


// now we need to populate the compiler adapter // now we need to populate the compiler adapter
adapter.setJavac( this ); adapter.setJavac( this );
// finally, lets execute the compiler!! // finally, lets execute the compiler!!
if (!adapter.execute()) { if (!adapter.execute()) {
if (failOnError) { if (failOnError) {
@@ -513,14 +539,14 @@ public class Javac extends MatchingTask {
} }


/** /**
* Clear the list of files to be compiled and copied..
* Clear the list of files to be compiled and copied..
*/ */
protected void resetFileLists() { protected void resetFileLists() {
compileList = new File[0]; compileList = new File[0];
} }


/** /**
* Scans the directory looking for source files to be compiled.
* Scans the directory looking for source files to be compiled.
* The results are returned in the class variable compileList * The results are returned in the class variable compileList
*/ */
protected void scanDir(File srcDir, File destDir, String files[]) { protected void scanDir(File srcDir, File destDir, String files[]) {
@@ -529,7 +555,7 @@ public class Javac extends MatchingTask {
m.setTo("*.class"); m.setTo("*.class");
SourceFileScanner sfs = new SourceFileScanner(this); SourceFileScanner sfs = new SourceFileScanner(this);
File[] newFiles = sfs.restrictAsFiles(files, srcDir, destDir, m); File[] newFiles = sfs.restrictAsFiles(files, srcDir, destDir, m);
if (newFiles.length > 0) { if (newFiles.length > 0) {
File[] newCompileList = new File[compileList.length + File[] newCompileList = new File[compileList.length +
newFiles.length]; newFiles.length];


+ 1
- 2
src/main/org/apache/tools/ant/taskdefs/Javadoc.java View File

@@ -679,14 +679,13 @@ public class Javadoc extends Task {
} }


public String getPackages() { public String getPackages() {
StringBuffer p = new StringBuffer( "\"" );
StringBuffer p = new StringBuffer();
for (int i = 0; i < packages.size(); i++) { for (int i = 0; i < packages.size(); i++) {
if ( i > 0 ) { if ( i > 0 ) {
p.append( ":" ); p.append( ":" );
} }
p.append( packages.elementAt(i).toString() ); p.append( packages.elementAt(i).toString() );
} }
p.append( "\"" );
return p.toString(); return p.toString();
} }
} }


+ 1
- 5
src/main/org/apache/tools/ant/taskdefs/Manifest.java View File

@@ -450,11 +450,6 @@ public class Manifest {
*/ */
public Manifest(InputStream is) throws ManifestException, IOException { public Manifest(InputStream is) throws ManifestException, IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(is)); BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line = reader.readLine();
if (line == null) {
return;
}
// This should be the manifest version // This should be the manifest version
String nextSectionName = mainSection.read(reader); String nextSectionName = mainSection.read(reader);
String readManifestVersion = mainSection.getAttributeValue(ATTRIBUTE_MANIFEST_VERSION); String readManifestVersion = mainSection.getAttributeValue(ATTRIBUTE_MANIFEST_VERSION);
@@ -463,6 +458,7 @@ public class Manifest {
mainSection.removeAttribute(ATTRIBUTE_MANIFEST_VERSION); mainSection.removeAttribute(ATTRIBUTE_MANIFEST_VERSION);
} }


String line = null;
while ((line = reader.readLine()) != null) { while ((line = reader.readLine()) != null) {
if (line.length() == 0) { if (line.length() == 0) {
continue; continue;


+ 12
- 0
src/main/org/apache/tools/ant/taskdefs/Property.java View File

@@ -160,6 +160,18 @@ public class Property extends Task {
} }


public void execute() throws BuildException { public void execute() throws BuildException {
if (name != null) {
if (value == null && ref == null) {
throw new BuildException("You must specify value, location or refid with the name attribute",
location);
}
} else {
if (file == null && resource == null && env == null) {
throw new BuildException("You must specify file, resource or environment when not using the name attribute",
location);
}
}

if ((name != null) && (value != null)) { if ((name != null) && (value != null)) {
addProperty(name, value); addProperty(name, value);
} }


+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java View File

@@ -88,7 +88,6 @@ import org.apache.tools.ant.util.FileUtils;
* @author <a href="mailto:rubys@us.ibm.com">Sam Ruby</a> * @author <a href="mailto:rubys@us.ibm.com">Sam Ruby</a>
* @author <a href="mailto:russgold@acm.org">Russell Gold</a> * @author <a href="mailto:russgold@acm.org">Russell Gold</a>
* @author <a href="stefan.bodewig@epost.de">Stefan Bodewig</a> * @author <a href="stefan.bodewig@epost.de">Stefan Bodewig</a>
* @version $Revision$ $Date$
*/ */
public class XSLTProcess extends MatchingTask { public class XSLTProcess extends MatchingTask {


@@ -268,6 +267,7 @@ public class XSLTProcess extends MatchingTask {
loadClass("org.apache.tools.ant.taskdefs.optional.TraXLiaison"); loadClass("org.apache.tools.ant.taskdefs.optional.TraXLiaison");
liaison = (XSLTLiaison)clazz.newInstance(); liaison = (XSLTLiaison)clazz.newInstance();
} else if (proc.equals("xslp")) { } else if (proc.equals("xslp")) {
log("DEPRECATED - xslp processor is deprecated. Use trax or xalan instead.");
final Class clazz = final Class clazz =
loadClass("org.apache.tools.ant.taskdefs.optional.XslpLiaison"); loadClass("org.apache.tools.ant.taskdefs.optional.XslpLiaison");
liaison = (XSLTLiaison) clazz.newInstance(); liaison = (XSLTLiaison) clazz.newInstance();


+ 29
- 12
src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java View File

@@ -67,7 +67,7 @@ import java.util.Random;
* *
* @author James Davidson <a href="mailto:duncan@x180.com">duncan@x180.com</a> * @author James Davidson <a href="mailto:duncan@x180.com">duncan@x180.com</a>
* @author Robin Green <a href="mailto:greenrd@hotmail.com">greenrd@hotmail.com</a> * @author Robin Green <a href="mailto:greenrd@hotmail.com">greenrd@hotmail.com</a>
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
* @author <a href="mailto:jayglanville@home.com">J D Glanville</a> * @author <a href="mailto:jayglanville@home.com">J D Glanville</a>
*/ */
public abstract class DefaultCompilerAdapter implements CompilerAdapter { public abstract class DefaultCompilerAdapter implements CompilerAdapter {
@@ -92,6 +92,8 @@ public abstract class DefaultCompilerAdapter implements CompilerAdapter {
protected Location location; protected Location location;
protected boolean includeAntRuntime; protected boolean includeAntRuntime;
protected boolean includeJavaRuntime; protected boolean includeJavaRuntime;
protected String memoryInitialSize;
protected String memoryMaximumSize;


protected File[] compileList; protected File[] compileList;
protected static String lSep = System.getProperty("line.separator"); protected static String lSep = System.getProperty("line.separator");
@@ -116,6 +118,8 @@ public abstract class DefaultCompilerAdapter implements CompilerAdapter {
location = attributes.getLocation(); location = attributes.getLocation();
includeAntRuntime = attributes.getIncludeantruntime(); includeAntRuntime = attributes.getIncludeantruntime();
includeJavaRuntime = attributes.getIncludejavaruntime(); includeJavaRuntime = attributes.getIncludejavaruntime();
memoryInitialSize = attributes.getMemoryInitialSize();
memoryMaximumSize = attributes.getMemoryMaximumSize();
} }


public Javac getJavac() { public Javac getJavac() {
@@ -136,7 +140,7 @@ public abstract class DefaultCompilerAdapter implements CompilerAdapter {
classpath.setLocation(destDir); classpath.setLocation(destDir);
} }


// Combine the build classpath with the system classpath, in an
// Combine the build classpath with the system classpath, in an
// order determined by the value of build.classpath // order determined by the value of build.classpath


if (compileClasspath == null) { if (compileClasspath == null) {
@@ -166,7 +170,7 @@ public abstract class DefaultCompilerAdapter implements CompilerAdapter {
classpath.addExisting(new Path(null, classpath.addExisting(new Path(null,
System.getProperty("java.home") System.getProperty("java.home")
+ File.separator + "lib" + File.separator + "lib"
+ File.separator
+ File.separator
+ "classes.zip")); + "classes.zip"));
} else { } else {
// JDK > 1.1 seems to set java.home to the JRE directory. // JDK > 1.1 seems to set java.home to the JRE directory.
@@ -195,7 +199,7 @@ public abstract class DefaultCompilerAdapter implements CompilerAdapter {
+ File.separator + "ui.jar")); + File.separator + "ui.jar"));
} }
} }
return classpath; return classpath;
} }


@@ -206,10 +210,23 @@ public abstract class DefaultCompilerAdapter implements CompilerAdapter {
protected Commandline setupJavacCommandlineSwitches(Commandline cmd) { protected Commandline setupJavacCommandlineSwitches(Commandline cmd) {
Path classpath = getCompileClasspath(); Path classpath = getCompileClasspath();


// we cannot be using Java 1.0 when forking, so we only have to
// distinguish between Java 1.1, and Java 1.2 and higher, as Java 1.1
// has its own parameter format
boolean usingJava1_1 = Project.getJavaVersion().equals(Project.JAVA_1_1);
String memoryParameterPrefix = usingJava1_1 ? "-J-" : "-J-X";
if (memoryInitialSize != null) {
cmd.createArgument().setValue(memoryParameterPrefix+"ms"+memoryInitialSize);
}

if (memoryMaximumSize != null) {
cmd.createArgument().setValue(memoryParameterPrefix+"mx"+memoryMaximumSize);
}

if (attributes.getNowarn()) { if (attributes.getNowarn()) {
cmd.createArgument().setValue("-nowarn"); cmd.createArgument().setValue("-nowarn");
} }
if (deprecation == true) { if (deprecation == true) {
cmd.createArgument().setValue("-deprecation"); cmd.createArgument().setValue("-deprecation");
} }
@@ -218,7 +235,7 @@ public abstract class DefaultCompilerAdapter implements CompilerAdapter {
cmd.createArgument().setValue("-d"); cmd.createArgument().setValue("-d");
cmd.createArgument().setFile(destDir); cmd.createArgument().setFile(destDir);
} }
cmd.createArgument().setValue("-classpath"); cmd.createArgument().setValue("-classpath");


// Just add "sourcepath" to classpath ( for JDK1.1 ) // Just add "sourcepath" to classpath ( for JDK1.1 )
@@ -298,7 +315,7 @@ public abstract class DefaultCompilerAdapter implements CompilerAdapter {
} }


/** /**
* Logs the compilation parameters, adds the files to compile and logs the
* Logs the compilation parameters, adds the files to compile and logs the
* &qout;niceSourceList&quot; * &qout;niceSourceList&quot;
*/ */
protected void logAndAddFilesToCompile(Commandline cmd) { protected void logAndAddFilesToCompile(Commandline cmd) {
@@ -333,10 +350,10 @@ public abstract class DefaultCompilerAdapter implements CompilerAdapter {


try { try {
/* /*
* Many system have been reported to get into trouble with
* Many system have been reported to get into trouble with
* long command lines - no, not only Windows ;-). * long command lines - no, not only Windows ;-).
* *
* POSIX seems to define a lower limit of 4k, so use a temporary
* POSIX seems to define a lower limit of 4k, so use a temporary
* file if the total length of the command line exceeds this limit. * file if the total length of the command line exceeds this limit.
*/ */
if (Commandline.toString(args).length() > 4096) { if (Commandline.toString(args).length() > 4096) {
@@ -361,9 +378,9 @@ public abstract class DefaultCompilerAdapter implements CompilerAdapter {
} else { } else {
commandArray = args; commandArray = args;
} }
try { try {
Execute exe = new Execute(new LogStreamHandler(attributes,
Execute exe = new Execute(new LogStreamHandler(attributes,
Project.MSG_INFO, Project.MSG_INFO,
Project.MSG_WARN)); Project.MSG_WARN));
exe.setAntRun(project); exe.setAntRun(project);
@@ -372,7 +389,7 @@ public abstract class DefaultCompilerAdapter implements CompilerAdapter {
exe.execute(); exe.execute();
return exe.getExitValue(); return exe.getExitValue();
} catch (IOException e) { } catch (IOException e) {
throw new BuildException("Error running " + args[0]
throw new BuildException("Error running " + args[0]
+ " compiler", e, location); + " compiler", e, location);
} }
} finally { } finally {


+ 2
- 2
src/main/org/apache/tools/ant/taskdefs/optional/ejb/BorlandDeploymentTool.java View File

@@ -215,10 +215,10 @@ public class BorlandDeploymentTool extends GenericDeploymentTool implements Exe
*/ */
protected void addVendorFiles(Hashtable ejbFiles, String ddPrefix) { protected void addVendorFiles(Hashtable ejbFiles, String ddPrefix) {


File borlandDD = new File(getConfig().descriptorDir,BAS_DD);
File borlandDD = new File(getConfig().descriptorDir,ddPrefix + BAS_DD);
if (borlandDD.exists()) { if (borlandDD.exists()) {
log("Borland specific file found "+ borlandDD, Project.MSG_VERBOSE); log("Borland specific file found "+ borlandDD, Project.MSG_VERBOSE);
ejbFiles.put(META_DIR + BAS_DD, ddPrefix + borlandDD);
ejbFiles.put(META_DIR + BAS_DD, borlandDD);
} }
else { else {
log("Unable to locate borland deployment descriptor. It was expected to be in " + log("Unable to locate borland deployment descriptor. It was expected to be in " +


+ 23
- 23
src/main/org/apache/tools/ant/taskdefs/optional/ejb/WLRun.java View File

@@ -183,34 +183,34 @@ public class WLRun extends Task {
" is not valid"); " is not valid");
} }


File securityPolicyFile = null;
if (securityPolicy == null) {
securityPolicyFile = new File(weblogicSystemHome, DEFAULT_WL60_POLICY_FILE);
if (beaHome != null) {
executeWLS6();
} else {
executeWLS();
} }
else {
securityPolicyFile = new File(weblogicSystemHome, securityPolicy);
}
private File findSecurityPolicyFile(String defaultSecurityPolicy) {
String securityPolicy = this.securityPolicy;
if (securityPolicy == null) {
securityPolicy = defaultSecurityPolicy;
} }

if (!securityPolicyFile.exists()) {
// OK it maybe an absolute path. Use the project to resolve it
File securityPolicyFile = new File( weblogicSystemHome, securityPolicy );
// If an explicit securityPolicy file was specified, it maybe an
// absolute path. Use the project to resolve it.
if (this.securityPolicy != null && !securityPolicyFile.exists()) {
securityPolicyFile = project.resolveFile(securityPolicy); securityPolicyFile = project.resolveFile(securityPolicy);
if (!securityPolicyFile.exists()) {
throw new BuildException("Security policy " + securityPolicy +
" was not found.");
}
} }


if (beaHome != null) {
executeWLS6(securityPolicyFile);
}
else {
executeWLS(securityPolicyFile);
// If we still can't find it, complain
if (!securityPolicyFile.exists()) {
throw new BuildException("Security policy " + securityPolicy +
" was not found.");
} }
return securityPolicyFile;
} }
private void executeWLS6(File securityPolicyFile) {
private void executeWLS6() {
File securityPolicyFile = findSecurityPolicyFile( DEFAULT_WL60_POLICY_FILE );
if (!beaHome.isDirectory()) { if (!beaHome.isDirectory()) {
throw new BuildException("BEA home " + beaHome.getPath() + throw new BuildException("BEA home " + beaHome.getPath() +
" is not valid"); " is not valid");
@@ -259,8 +259,8 @@ public class WLRun extends Task {
} }
} }
private void executeWLS(File securityPolicyFile) {
private void executeWLS() {
File securityPolicyFile = findSecurityPolicyFile( DEFAULT_WL51_POLICY_FILE );
File propertiesFile = null; File propertiesFile = null;




+ 3
- 1
src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java View File

@@ -586,7 +586,9 @@ public class FTP


FTPFile[] files = ftp.listFiles(remoteFile); FTPFile[] files = ftp.listFiles(remoteFile);


if (files == null)
// For Microsoft's Ftp-Service an Array with length 0 is
// returned if configured to return listings in "MS-DOS"-Format
if (files == null || files.length == 0)
{ {
// If we are sending files, then assume out of date. // If we are sending files, then assume out of date.
// If we are getting files, then throw an error // If we are getting files, then throw an error


+ 2
- 2
src/main/org/apache/tools/ant/taskdefs/rmic/WLRmic.java View File

@@ -78,9 +78,9 @@ public class WLRmic extends DefaultRmicAdapter {
try { try {
// Create an instance of the rmic // Create an instance of the rmic
Class c = Class.forName("weblogic.rmic"); Class c = Class.forName("weblogic.rmic");
Method doRmic = c.getMethod("main",
Method doRmic = c.getMethod("main",
new Class [] { String[].class }); new Class [] { String[].class });
doRmic.invoke(null, new Object[] { });
doRmic.invoke(null, new Object[] {cmd.getArguments() });
return true; return true;
} catch (ClassNotFoundException ex) { } catch (ClassNotFoundException ex) {
throw new BuildException("Cannot use WebLogic rmic, as it is not available"+ throw new BuildException("Cannot use WebLogic rmic, as it is not available"+


+ 3
- 2
src/main/org/apache/tools/ant/types/CommandlineJava.java View File

@@ -221,7 +221,7 @@ public class CommandlineJava implements Cloneable {
* @return the list of all arguments necessary to run the vm. * @return the list of all arguments necessary to run the vm.
*/ */
public String[] getCommandline() { public String[] getCommandline() {
String[] result = new String[size()];
String[] result = new String[size()];
int pos = 0; int pos = 0;
String[] vmArgs = getActualVMCommand().getCommandline(); String[] vmArgs = getActualVMCommand().getCommandline();
// first argument is the java.exe path... // first argument is the java.exe path...
@@ -285,7 +285,8 @@ public class CommandlineJava implements Cloneable {
public int size() { public int size() {
int size = getActualVMCommand().size() + javaCommand.size() + sysProperties.size(); int size = getActualVMCommand().size() + javaCommand.size() + sysProperties.size();
// classpath is "-classpath <classpath>" -> 2 args // classpath is "-classpath <classpath>" -> 2 args
if (classpath != null && classpath.size() > 0) {
Path fullClasspath = classpath != null ? classpath.concatSystemClasspath("ignore") : null;
if (fullClasspath != null && fullClasspath.toString().trim().length() > 0) {
size += 2; size += 2;
} }
// jar execution requires an additional -jar option // jar execution requires an additional -jar option


+ 8
- 9
src/main/org/apache/tools/ant/types/Description.java View File

@@ -70,17 +70,16 @@ import org.apache.tools.ant.Project;
* @version $Revision$ $Date$ * @version $Revision$ $Date$
*/ */
public class Description extends DataType { public class Description extends DataType {
private Project project;
public Description(Project project) {
this.project = project;
}


/** /**
* Adds descriptive text to the project. * Adds descriptive text to the project.
*/ */
public void addText(String text) {
project.setDescription(text);
}
public void addText(String text) {
String currentDescription = project.getDescription();
if (currentDescription == null) {
project.setDescription(text);
} else {
project.setDescription(currentDescription + text);
}
}
} }

+ 11
- 0
src/testcases/org/apache/tools/ant/taskdefs/TaskdefsTest.java View File

@@ -66,6 +66,7 @@ public abstract class TaskdefsTest extends TestCase {
protected Project project; protected Project project;
private StringBuffer logBuffer; private StringBuffer logBuffer;
private StringBuffer fullLogBuffer;
private StringBuffer outBuffer; private StringBuffer outBuffer;
private StringBuffer errBuffer; private StringBuffer errBuffer;
private BuildException buildException; private BuildException buildException;
@@ -78,6 +79,12 @@ public abstract class TaskdefsTest extends TestCase {
return logBuffer.toString(); return logBuffer.toString();
} }


protected String getFullLog() {
return fullLogBuffer.toString();
}


protected void expectBuildException(String taskname, String cause) { protected void expectBuildException(String taskname, String cause) {
expectSpecificBuildException(taskname, cause, null); expectSpecificBuildException(taskname, cause, null);
} }
@@ -136,6 +143,7 @@ public abstract class TaskdefsTest extends TestCase {
protected void configureProject(String filename) { protected void configureProject(String filename) {
logBuffer = new StringBuffer(); logBuffer = new StringBuffer();
fullLogBuffer = new StringBuffer();
project = new Project(); project = new Project();
project.init(); project.init();
project.setUserProperty( "ant.file" , new File(filename).getAbsolutePath() ); project.setUserProperty( "ant.file" , new File(filename).getAbsolutePath() );
@@ -156,6 +164,7 @@ public abstract class TaskdefsTest extends TestCase {
PrintStream err = new PrintStream(new AntOutputStream()); PrintStream err = new PrintStream(new AntOutputStream());
System.setErr(err); System.setErr(err);
logBuffer = new StringBuffer(); logBuffer = new StringBuffer();
fullLogBuffer = new StringBuffer();
buildException = null; buildException = null;
project.executeTarget(targetName); project.executeTarget(targetName);
} finally { } finally {
@@ -253,6 +262,8 @@ public abstract class TaskdefsTest extends TestCase {
{ {
logBuffer.append(event.getMessage()); logBuffer.append(event.getMessage());
} }
fullLogBuffer.append(event.getMessage());
} }
} }




+ 6
- 1
src/testcases/org/apache/tools/ant/taskdefs/optional/AbstractXSLTLiaisonTest.java View File

@@ -62,6 +62,7 @@ import org.w3c.dom.Document;
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilderFactory;
import java.io.File; import java.io.File;
import java.io.FileNotFoundException;
import java.net.URL; import java.net.URL;


/** /**
@@ -85,8 +86,12 @@ public abstract class AbstractXSLTLiaisonTest extends TestCase {
// to override // to override
protected abstract XSLTLiaison createLiaison() throws Exception ; protected abstract XSLTLiaison createLiaison() throws Exception ;


protected File getFile(String name){
/** load the file from the caller classloader that loaded this class */
protected File getFile(String name) throws FileNotFoundException {
URL url = getClass().getResource(name); URL url = getClass().getResource(name);
if (url == null){
throw new FileNotFoundException("Unable to load '" + name + "' from classpath");
}
return new File(url.getFile()); return new File(url.getFile());
} }




+ 102
- 0
src/testcases/org/apache/tools/ant/types/DescriptionTest.java View File

@@ -0,0 +1,102 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Ant", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/

package org.apache.tools.ant.types;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.TaskdefsTest;

import junit.framework.TestCase;
import junit.framework.AssertionFailedError;

import java.io.*;

/**
* FilterSet testing
*
* @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
*/
public class DescriptionTest extends TaskdefsTest {

public DescriptionTest(String name) {
super(name);
}

public void setUp() {
}

public void tearDown() {
}

public void test1() {
configureProject("src/etc/testcases/types/description1.xml");
assertEquals("Single description failed", "Test Project Description", project.getDescription());
}

public void test2() {
configureProject("src/etc/testcases/types/description2.xml");
assertEquals("Multi line description failed", "Multi Line\nProject Description", project.getDescription());
}
public void test3() {
configureProject("src/etc/testcases/types/description3.xml");
assertEquals("Multi instance description failed", "Multi Instance Project Description", project.getDescription());
}
public void test4() {
configureProject("src/etc/testcases/types/description4.xml");
assertEquals("Multi instance nested description failed", "Multi Instance Nested Project Description", project.getDescription());
}
}

+ 4
- 2
src/testcases/org/apache/tools/ant/types/FilterSetTest.java View File

@@ -72,8 +72,6 @@ public class FilterSetTest extends TaskdefsTest {


static private final int BUF_SIZE = 32768; static private final int BUF_SIZE = 32768;
private Project project;

public FilterSetTest(String name) { public FilterSetTest(String name) {
super(name); super(name);
} }
@@ -82,6 +80,10 @@ public class FilterSetTest extends TaskdefsTest {
configureProject("src/etc/testcases/types/filterset.xml"); configureProject("src/etc/testcases/types/filterset.xml");
} }


public void tearDown() {
executeTarget("cleanup");
}

public void test1() { public void test1() {
executeTarget("test1"); executeTarget("test1");
assertTrue("Filterset 1 failed", compareFiles("src/etc/testcases/types/gold/filterset1.txt", assertTrue("Filterset 1 failed", compareFiles("src/etc/testcases/types/gold/filterset1.txt",


Loading…
Cancel
Save