git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@422692 13f79535-47bb-0310-9956-ffa450edef68master
@@ -239,6 +239,7 @@ Tom Cunningham | |||||
Tom Dimock | Tom Dimock | ||||
Tom Eugelink | Tom Eugelink | ||||
Ulrich Schmidt | Ulrich Schmidt | ||||
Victor Toni | |||||
Waldek Herka | Waldek Herka | ||||
Will Wang | Will Wang | ||||
William Ferguson | William Ferguson | ||||
@@ -950,6 +950,10 @@ | |||||
<first>Ulrich</first> | <first>Ulrich</first> | ||||
<last>Schmidt</last> | <last>Schmidt</last> | ||||
</name> | </name> | ||||
<name> | |||||
<first>Victor</first> | |||||
<last>Toni</last> | |||||
</name> | |||||
<name> | <name> | ||||
<first>Will</first> | <first>Will</first> | ||||
<last>Wang</last> | <last>Wang</last> | ||||
@@ -16,7 +16,7 @@ | |||||
or for generating code.</p> | or for generating code.</p> | ||||
<p><b>Note:</b> If you are using JDK 1.4 or higher, this task does not require external libraries | <p><b>Note:</b> If you are using JDK 1.4 or higher, this task does not require external libraries | ||||
not supplied in the Ant distribution. However, often the built in XSL engine is not as up | not supplied in the Ant distribution. However, often the built in XSL engine is not as up | ||||
to date as a fresh download, so an update is still highly recommended. | |||||
to date as a fresh download, so an update is still highly recommended. | |||||
See <a href="../install.html#librarydependencies">Library Dependencies</a> for more information.</p> | See <a href="../install.html#librarydependencies">Library Dependencies</a> for more information.</p> | ||||
<p>It is possible to refine the set of files that are being processed. This can be | <p>It is possible to refine the set of files that are being processed. This can be | ||||
done with the <i>includes</i>, <i>includesfile</i>, <i>excludes</i>, <i>excludesfile</i> and <i>defaultexcludes</i> | done with the <i>includes</i>, <i>includesfile</i>, <i>excludes</i>, <i>excludesfile</i> and <i>defaultexcludes</i> | ||||
@@ -189,6 +189,22 @@ element which is used to perform Entity and URI resolution.</p> | |||||
<em>Since Ant 1.7</em>.</td> | <em>Since Ant 1.7</em>.</td> | ||||
<td valign="top" align="center">No</td> | <td valign="top" align="center">No</td> | ||||
</tr> | </tr> | ||||
<tr> | |||||
<td valign="top">filenameparameter</td> | |||||
<td valign="top">Specifies a xsl parameter for accessing the name | |||||
of the current processed file. If not set, the file name is not | |||||
passed to the transformation. | |||||
<em>Since Ant 1.7</em>.</td> | |||||
<td valign="top" align="center">No</td> | |||||
</tr> | |||||
<tr> | |||||
<td valign="top">filedirparameter</td> | |||||
<td valign="top">Specifies a xsl parameter for accessing the directory | |||||
of the current processed file. If not set, the directory is not | |||||
passed to the transformation. | |||||
<em>Since Ant 1.7</em>.</td> | |||||
<td valign="top" align="center">No</td> | |||||
</tr> | |||||
</table> | </table> | ||||
<h3>Parameters specified as nested elements</h3> | <h3>Parameters specified as nested elements</h3> | ||||
@@ -312,7 +328,7 @@ And in Saxon 7.x: | |||||
<li>http://saxon.sf.net/feature/linenumbering (integer)</li> | <li>http://saxon.sf.net/feature/linenumbering (integer)</li> | ||||
<li>...</li> | <li>...</li> | ||||
</ul> | </ul> | ||||
<blockquote> | |||||
<blockquote> | |||||
<h4>Parameters</h4> | <h4>Parameters</h4> | ||||
<table width="60%" border="1" cellpadding="2" cellspacing="0"> | <table width="60%" border="1" cellpadding="2" cellspacing="0"> | ||||
<tr> | <tr> | ||||
@@ -417,10 +433,33 @@ See <a href="../CoreTypes/resources.html">resources</a> to see the concrete synt | |||||
<param name="set" expression="value"/> | <param name="set" expression="value"/> | ||||
</xslt></pre> | </xslt></pre> | ||||
<h4>Print the current processed file name</h4> | |||||
<pre> | |||||
<project> | |||||
<xslt style="printFilename.xsl" destdir="out" basedir="in" extension=".txt" | |||||
filenameparameter="filename" | |||||
filedirparameter="filedir" | |||||
/> | |||||
</project> | |||||
<xsl:stylesheet | |||||
version="1.0" | |||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> | |||||
<xsl:param name="filename"></xsl:param> | |||||
<xsl:param name="filedir">.</xsl:param> | |||||
<xsl:template match="/"> | |||||
Current file is <xsl:value-of select="$filename"/> in directory <xsl:value-of select="$filedir"/>. | |||||
</xsl:template> | |||||
</xsl:stylesheet> | |||||
</pre> | |||||
</blockquote> | </blockquote> | ||||
<hr> | <hr> | ||||
<p align="center">Copyright © 2000-2006 The Apache Software Foundation. All rights | <p align="center">Copyright © 2000-2006 The Apache Software Foundation. All rights | ||||
Reserved.</p> | Reserved.</p> | ||||
</body> | </body> | ||||
</html> | |||||
</html> |
@@ -11,6 +11,7 @@ | |||||
<target name="teardown"> | <target name="teardown"> | ||||
<delete dir="${out.dir}" failonerror="false" /> | <delete dir="${out.dir}" failonerror="false" /> | ||||
</target> | </target> | ||||
<target name="testStyleIsSet"> | <target name="testStyleIsSet"> | ||||
<xslt in="data.xml" out="${out.dir}/out.xml"/> | <xslt in="data.xml" out="${out.dir}/out.xml"/> | ||||
@@ -128,5 +129,55 @@ | |||||
<param name="set" expression="value"/> | <param name="set" expression="value"/> | ||||
</xslt> | </xslt> | ||||
</target> | </target> | ||||
</project> | |||||
<target name="testFilenameAndFiledirAsParam"> | |||||
<mkdir dir="${out.dir}/xml/dir"/> | |||||
<mkdir dir="${out.dir}/out"/> | |||||
<copy file="data.xml" tofile="${out.dir}/xml/one.xml"/> | |||||
<copy file="data.xml" tofile="${out.dir}/xml/two.xml"/> | |||||
<copy file="data.xml" tofile="${out.dir}/xml/three.xml"/> | |||||
<copy file="data.xml" tofile="${out.dir}/xml/dir/four.xml"/> | |||||
<xslt style="printFilename.xsl" | |||||
destdir="${out.dir}/out" | |||||
basedir="${out.dir}/xml" | |||||
includes="**/*.xml" | |||||
extension=".txt" | |||||
filenameparameter="filename" | |||||
filedirparameter="filedir" | |||||
/> | |||||
</target> | |||||
<target name="testFilenameAsParam"> | |||||
<mkdir dir="${out.dir}/xml/dir"/> | |||||
<mkdir dir="${out.dir}/out"/> | |||||
<copy file="data.xml" tofile="${out.dir}/xml/one.xml"/> | |||||
<copy file="data.xml" tofile="${out.dir}/xml/two.xml"/> | |||||
<copy file="data.xml" tofile="${out.dir}/xml/three.xml"/> | |||||
<copy file="data.xml" tofile="${out.dir}/xml/dir/four.xml"/> | |||||
<xslt style="printFilename.xsl" | |||||
destdir="${out.dir}/out" | |||||
basedir="${out.dir}/xml" | |||||
includes="**/*.xml" | |||||
extension=".txt" | |||||
filenameparameter="filename" | |||||
/> | |||||
</target> | |||||
<target name="testFilenameAsParamNoSetting"> | |||||
<mkdir dir="${out.dir}/xml/dir"/> | |||||
<mkdir dir="${out.dir}/out"/> | |||||
<copy file="data.xml" tofile="${out.dir}/xml/one.xml"/> | |||||
<copy file="data.xml" tofile="${out.dir}/xml/two.xml"/> | |||||
<copy file="data.xml" tofile="${out.dir}/xml/three.xml"/> | |||||
<copy file="data.xml" tofile="${out.dir}/xml/dir/four.xml"/> | |||||
<xslt style="printFilename.xsl" | |||||
destdir="${out.dir}/out" | |||||
basedir="${out.dir}/xml" | |||||
includes="**/*.xml" | |||||
extension=".txt" | |||||
/> <!-- without 'filenameparameter' to check, that the xsl:param is NOT set --> | |||||
</target> | |||||
</project> |
@@ -0,0 +1,22 @@ | |||||
<?xml version="1.0"?> | |||||
<xsl:stylesheet | |||||
version="1.0" | |||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> | |||||
<xsl:output indent="no" method="text"/> | |||||
<xsl:strip-space elements="*"/> | |||||
<xsl:param name="filename">-not-set-</xsl:param> | |||||
<xsl:param name="filedir">-not-set-</xsl:param> | |||||
<!-- use the xsl-parameter --> | |||||
<xsl:template match="/"> | |||||
filename='<xsl:value-of select="$filename"/>' | |||||
filedir ='<xsl:value-of select="$filedir"/>' | |||||
</xsl:template> | |||||
<!-- delete the raw xml data --> | |||||
<xsl:template match="*"/> | |||||
</xsl:stylesheet> |
@@ -63,6 +63,12 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { | |||||
/** extension of the files produced by XSL processing */ | /** extension of the files produced by XSL processing */ | ||||
private String targetExtension = ".html"; | private String targetExtension = ".html"; | ||||
/** name for XSL parameter containing the filename */ | |||||
private String fileNameParameter = null; | |||||
/** name for XSL parameter containing the file directory */ | |||||
public String fileDirParameter = null; | |||||
/** additional parameters to be passed to the stylesheets */ | /** additional parameters to be passed to the stylesheets */ | ||||
private Vector params = new Vector(); | private Vector params = new Vector(); | ||||
@@ -472,6 +478,28 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { | |||||
this.xmlCatalog.addConfiguredXMLCatalog(xmlCatalog); | this.xmlCatalog.addConfiguredXMLCatalog(xmlCatalog); | ||||
} | } | ||||
/** | |||||
* Pass the filename of the current processed file as a xsl parameter | |||||
* to the transformation. This value sets the name of that xsl parameter. | |||||
* | |||||
* @param fileNameParameter name of the xsl parameter retrieving the | |||||
* current file name | |||||
*/ | |||||
public void setFileNameParameter(String fileNameParameter) { | |||||
this.fileNameParameter = fileNameParameter; | |||||
} | |||||
/** | |||||
* Pass the directory name of the current processed file as a xsl parameter | |||||
* to the transformation. This value sets the name of that xsl parameter. | |||||
* | |||||
* @param fileDirParameter name of the xsl parameter retrieving the | |||||
* current file directory | |||||
*/ | |||||
public void setFileDirParameter(String fileDirParameter) { | |||||
this.fileDirParameter = fileDirParameter; | |||||
} | |||||
/** | /** | ||||
* Load processor here instead of in setProcessor - this will be | * Load processor here instead of in setProcessor - this will be | ||||
* called from within execute, so we have access to the latest | * called from within execute, so we have access to the latest | ||||
@@ -623,6 +651,7 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { | |||||
log("Processing " + inF + " to " + outF); | log("Processing " + inF + " to " + outF); | ||||
configureLiaison(stylesheet); | configureLiaison(stylesheet); | ||||
setLiaisonDynamicFileParameters(liaison, inF); | |||||
liaison.transform(inF, outF); | liaison.transform(inF, outF); | ||||
} | } | ||||
} catch (Exception ex) { | } catch (Exception ex) { | ||||
@@ -662,6 +691,7 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { | |||||
log("Processing " + inFile + " to " + outFile, | log("Processing " + inFile + " to " + outFile, | ||||
Project.MSG_INFO); | Project.MSG_INFO); | ||||
configureLiaison(stylesheet); | configureLiaison(stylesheet); | ||||
setLiaisonDynamicFileParameters(liaison, inFile); | |||||
liaison.transform(inFile, outFile); | liaison.transform(inFile, outFile); | ||||
} else { | } else { | ||||
log("Skipping input file " + inFile | log("Skipping input file " + inFile | ||||
@@ -721,7 +751,6 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { | |||||
return outputProperties.elements(); | return outputProperties.elements(); | ||||
} | } | ||||
/** | /** | ||||
* Get the Liason implementation to use in processing. | * Get the Liason implementation to use in processing. | ||||
* | * | ||||
@@ -993,6 +1022,31 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { | |||||
} | } | ||||
} | } | ||||
/** | |||||
* Sets file parameter(s) for directory and filename if the attribute | |||||
* 'filenameparameter' or 'filedirparameter' are set in the task. | |||||
* | |||||
* @param liaison to change parameters for | |||||
* @param inFile to get the additional file information from | |||||
* @throws Exception if an exception occurs on filename lookup | |||||
* | |||||
* @since Ant 1.7 | |||||
*/ | |||||
private void setLiaisonDynamicFileParameters( | |||||
XSLTLiaison liaison, | |||||
File inFile | |||||
) throws Exception { | |||||
String fileName = FileUtils.getRelativePath(baseDir, inFile); | |||||
File file = new File(fileName); | |||||
if (fileNameParameter != null) { | |||||
liaison.addParam(fileNameParameter, inFile.getName()); | |||||
} | |||||
if (fileDirParameter != null) { | |||||
liaison.addParam(fileDirParameter, (file.getParent()!=null) ? file.getParent() : "" ); | |||||
} | |||||
} | |||||
/** | /** | ||||
* Create the factory element to configure a trax liaison. | * Create the factory element to configure a trax liaison. | ||||
* @return the newly created factory element. | * @return the newly created factory element. | ||||
@@ -1148,4 +1202,4 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { | |||||
} | } | ||||
} | } | ||||
} | |||||
} |
@@ -25,6 +25,7 @@ import java.io.FileOutputStream; | |||||
import java.io.IOException; | import java.io.IOException; | ||||
import java.io.InputStream; | import java.io.InputStream; | ||||
import java.io.OutputStream; | import java.io.OutputStream; | ||||
import java.util.Hashtable; | |||||
import java.util.Vector; | import java.util.Vector; | ||||
import java.util.Enumeration; | import java.util.Enumeration; | ||||
import java.net.URL; | import java.net.URL; | ||||
@@ -114,7 +115,7 @@ public class TraXLiaison implements XSLTLiaison3, ErrorListener, XSLTLoggerAware | |||||
private Vector outputProperties = new Vector(); | private Vector outputProperties = new Vector(); | ||||
/** stylesheet parameters */ | /** stylesheet parameters */ | ||||
private Vector params = new Vector(); | |||||
private Hashtable params = new Hashtable(); | |||||
/** factory attributes */ | /** factory attributes */ | ||||
private Vector attributes = new Vector(); | private Vector attributes = new Vector(); | ||||
@@ -177,6 +178,11 @@ public class TraXLiaison implements XSLTLiaison3, ErrorListener, XSLTLoggerAware | |||||
// not sure what could be the need of this... | // not sure what could be the need of this... | ||||
res.setSystemId(JAXPUtils.getSystemId(outfile)); | res.setSystemId(JAXPUtils.getSystemId(outfile)); | ||||
Source src = getSource(fis, infile); | Source src = getSource(fis, infile); | ||||
// set parameters on each transformation, maybe something has changed | |||||
//(e.g. value of file name parameter) | |||||
setTransformationParameters(); | |||||
transformer.transform(src, res); | transformer.transform(src, res); | ||||
} finally { | } finally { | ||||
// make sure to close all handles, otherwise the garbage | // make sure to close all handles, otherwise the garbage | ||||
@@ -320,16 +326,23 @@ public class TraXLiaison implements XSLTLiaison3, ErrorListener, XSLTLoggerAware | |||||
if (uriResolver != null) { | if (uriResolver != null) { | ||||
transformer.setURIResolver(uriResolver); | transformer.setURIResolver(uriResolver); | ||||
} | } | ||||
for (int i = 0; i < params.size(); i++) { | |||||
final String[] pair = (String[]) params.elementAt(i); | |||||
transformer.setParameter(pair[0], pair[1]); | |||||
} | |||||
for (int i = 0; i < outputProperties.size(); i++) { | for (int i = 0; i < outputProperties.size(); i++) { | ||||
final String[] pair = (String[]) outputProperties.elementAt(i); | final String[] pair = (String[]) outputProperties.elementAt(i); | ||||
transformer.setOutputProperty(pair[0], pair[1]); | transformer.setOutputProperty(pair[0], pair[1]); | ||||
} | } | ||||
} | } | ||||
/** | |||||
* Sets the paramters for the transformer. | |||||
*/ | |||||
private void setTransformationParameters() { | |||||
for (final Enumeration enumeration = params.keys(); enumeration.hasMoreElements(); ) { | |||||
final String name = (String) enumeration.nextElement(); | |||||
final String value = (String) params.get(name); | |||||
transformer.setParameter(name, value); | |||||
} | |||||
} | |||||
/** | /** | ||||
* return the Transformer factory associated to this liaison. | * return the Transformer factory associated to this liaison. | ||||
* @return the Transformer factory associated to this liaison. | * @return the Transformer factory associated to this liaison. | ||||
@@ -426,8 +439,7 @@ public class TraXLiaison implements XSLTLiaison3, ErrorListener, XSLTLoggerAware | |||||
* @param value the value of the parameter | * @param value the value of the parameter | ||||
*/ | */ | ||||
public void addParam(String name, String value) { | public void addParam(String name, String value) { | ||||
final String[] pair = new String[]{name, value}; | |||||
params.addElement(pair); | |||||
params.put(name, value); | |||||
} | } | ||||
/** | /** | ||||
@@ -552,4 +564,4 @@ public class TraXLiaison implements XSLTLiaison3, ErrorListener, XSLTLoggerAware | |||||
setOutputProperty(prop.getName(), prop.getValue()); | setOutputProperty(prop.getName(), prop.getValue()); | ||||
} | } | ||||
} | } | ||||
} | |||||
} |
@@ -27,6 +27,10 @@ import java.io.OutputStream; | |||||
import java.net.MalformedURLException; | import java.net.MalformedURLException; | ||||
import java.net.URL; | import java.net.URL; | ||||
import java.text.DecimalFormat; | import java.text.DecimalFormat; | ||||
import java.util.ArrayList; | |||||
import java.util.Arrays; | |||||
import java.util.Iterator; | |||||
import java.util.List; | |||||
import java.util.Random; | import java.util.Random; | ||||
import java.util.Stack; | import java.util.Stack; | ||||
import java.util.StringTokenizer; | import java.util.StringTokenizer; | ||||
@@ -85,7 +89,7 @@ public class FileUtils { | |||||
* | * | ||||
* @return a new instance of FileUtils. | * @return a new instance of FileUtils. | ||||
* @deprecated since 1.7. | * @deprecated since 1.7. | ||||
* Use getFileUtils instead, | |||||
* Use getFileUtils instead, | |||||
* FileUtils do not have state. | * FileUtils do not have state. | ||||
*/ | */ | ||||
public static FileUtils newFileUtils() { | public static FileUtils newFileUtils() { | ||||
@@ -617,7 +621,7 @@ public class FileUtils { | |||||
* | * | ||||
* @return the native version of the specified path or | * @return the native version of the specified path or | ||||
* an empty string if the path is <code>null</code> or empty. | * an empty string if the path is <code>null</code> or empty. | ||||
* | |||||
* | |||||
* @since ant 1.7 | * @since ant 1.7 | ||||
* @see PathTokenizer | * @see PathTokenizer | ||||
*/ | */ | ||||
@@ -1342,5 +1346,139 @@ public class FileUtils { | |||||
file.delete(); | file.delete(); | ||||
} | } | ||||
} | } | ||||
} | |||||
/** | |||||
* Calculates the relative path between to files. | |||||
* <p> | |||||
* Implementation note:<br/> This function my throw an IOException if an | |||||
* I/O error occurs because its use of the canonical pathname may require | |||||
* filesystem queries. | |||||
* </p> | |||||
* | |||||
* @param fromFile | |||||
* the <code>File</code> to calculate the path from | |||||
* @param toFile | |||||
* the <code>File</code> to calculate the path to | |||||
* @return | |||||
* @throws Exception | |||||
* @see {@link File#getCanonicalPath()} | |||||
* | |||||
* @since Ant 1.7 | |||||
*/ | |||||
public static String getRelativePath( | |||||
File fromFile, | |||||
File toFile | |||||
) throws Exception { | |||||
String fromPath = fromFile.getCanonicalPath(); | |||||
String toPath = toFile.getCanonicalPath(); | |||||
// build the path stack info to compare | |||||
String[] fromPathStack = getPathStack(fromPath); | |||||
String[] toPathStack = getPathStack(toPath); | |||||
if (0 < toPathStack.length && 0 < fromPathStack.length) { | |||||
if (!fromPathStack[0].equals(toPathStack[0])) { | |||||
// not the same device (would be "" on Linux/Unix) | |||||
return getPath(Arrays.asList(toPathStack)); | |||||
} | |||||
} else { | |||||
// no comparison possible | |||||
return getPath(Arrays.asList(toPathStack)); | |||||
} | |||||
int minLength = Math | |||||
.min(fromPathStack.length, toPathStack.length); | |||||
int same = 1; | |||||
// get index of parts which are equal | |||||
for (; same < minLength; same++) { | |||||
if (!fromPathStack[same].equals(toPathStack[same])) { | |||||
break; | |||||
} | |||||
} | |||||
List relativePathStack = new ArrayList(); | |||||
// if "from" part is longer, fill it up with ".." | |||||
// to reach path which is equal to both paths | |||||
for (int i = same; i < fromPathStack.length; i++) { | |||||
relativePathStack.add(".."); | |||||
} | |||||
// fill it up path with parts which were not equal | |||||
for (int i = same; i < toPathStack.length; i++) { | |||||
relativePathStack.add(toPathStack[i]); | |||||
} | |||||
return getPath(relativePathStack); | |||||
} | |||||
/** | |||||
* Gets all names of the path as an array of <code>String</code>s. | |||||
* | |||||
* @param path | |||||
* to get names from | |||||
* @return <code>String</code>s, never <code>null</code> | |||||
* | |||||
* @since Ant 1.7 | |||||
*/ | |||||
public static String[] getPathStack(String path) { | |||||
String normalizedPath = path.replace(File.separatorChar, '/'); | |||||
// since Java 1.4 | |||||
//return normalizedPath.split("/"); | |||||
// workaround for Java 1.2-1.3 | |||||
Object[] tokens = StringUtils.split(normalizedPath, '/').toArray(); | |||||
String[] rv = new String[tokens.length]; | |||||
System.arraycopy(tokens, 0, rv, 0, tokens.length); | |||||
return rv; | |||||
} | |||||
/** | |||||
* Gets path from a <code>List</code> of <code>String</code>s. | |||||
* | |||||
* @param pathStack | |||||
* <code>List</code> of <code>String</code>s to be concated | |||||
* as a path. | |||||
* @return <code>String</code>, never <code>null</code> | |||||
* | |||||
* @since Ant 1.7 | |||||
*/ | |||||
public static String getPath(List pathStack) { | |||||
// can safely use '/' because Windows understands '/' as separator | |||||
return getPath(pathStack, '/'); | |||||
} | |||||
/** | |||||
* Gets path from a <code>List</code> of <code>String</code>s. | |||||
* | |||||
* @param pathStack | |||||
* <code>List</code> of <code>String</code>s to be concated | |||||
* as a path. | |||||
* @param separatorChar | |||||
* <code>char</code> to be used as separator between names in | |||||
* path | |||||
* @return <code>String</code>, never <code>null</code> | |||||
* | |||||
* @since Ant 1.7 | |||||
*/ | |||||
public static String getPath(final List pathStack, final char separatorChar) { | |||||
final StringBuffer buffer = new StringBuffer(); | |||||
final Iterator iter = pathStack.iterator(); | |||||
if (iter.hasNext()) { | |||||
buffer.append(iter.next()); | |||||
} | |||||
while (iter.hasNext()) { | |||||
buffer.append(separatorChar); | |||||
buffer.append(iter.next()); | |||||
} | |||||
return buffer.toString(); | |||||
} | |||||
} |
@@ -86,7 +86,6 @@ public class StyleTest extends BuildFileTest { | |||||
"new-value"); | "new-value"); | ||||
} | } | ||||
public void testDefaultMapper() throws Exception { | public void testDefaultMapper() throws Exception { | ||||
testDefaultMapper("testDefaultMapper"); | testDefaultMapper("testDefaultMapper"); | ||||
} | } | ||||
@@ -149,6 +148,32 @@ public class StyleTest extends BuildFileTest { | |||||
expectFileContains("testWithUrlResource", "out/out.xml", "set='value'"); | expectFileContains("testWithUrlResource", "out/out.xml", "set='value'"); | ||||
} | } | ||||
public void testFilenameAsParam() throws Exception { | |||||
executeTarget("testFilenameAsParam"); | |||||
assertFileContains("out/out/one.txt", "filename='one.xml'"); | |||||
assertFileContains("out/out/two.txt", "filename='two.xml'"); | |||||
assertFileContains("out/out/three.txt", "filename='three.xml'"); | |||||
assertFileContains("out/out/dir/four.txt", "filename='four.xml'"); | |||||
assertFileContains("out/out/dir/four.txt", "filedir ='-not-set-'"); | |||||
} | |||||
public void testFilenameAsParamNoSetting() throws Exception { | |||||
executeTarget("testFilenameAsParamNoSetting"); | |||||
assertFileContains("out/out/one.txt", "filename='-not-set-'"); | |||||
assertFileContains("out/out/two.txt", "filename='-not-set-'"); | |||||
assertFileContains("out/out/three.txt", "filename='-not-set-'"); | |||||
assertFileContains("out/out/dir/four.txt", "filename='-not-set-'"); | |||||
} | |||||
public void testFilenameAndFiledirAsParam() throws Exception { | |||||
executeTarget("testFilenameAndFiledirAsParam"); | |||||
assertFileContains("out/out/one.txt", "filename='one.xml'"); | |||||
assertFileContains("out/out/one.txt", "filedir =''"); | |||||
assertFileContains("out/out/dir/four.txt", "filename='four.xml'"); | |||||
assertFileContains("out/out/dir/four.txt", "filedir ='dir'"); | |||||
} | |||||
// ************* copied from ConcatTest ************* | // ************* copied from ConcatTest ************* | ||||
// ------------------------------------------------------ | // ------------------------------------------------------ | ||||
@@ -166,25 +191,23 @@ public class StyleTest extends BuildFileTest { | |||||
finally { | finally { | ||||
FileUtils.close(r); | FileUtils.close(r); | ||||
} | } | ||||
} | } | ||||
private String getFileString(String target, String filename) | |||||
private void expectFileContains( | |||||
String target, String filename, String contains) | |||||
throws IOException | throws IOException | ||||
{ | { | ||||
executeTarget(target); | executeTarget(target); | ||||
return getFileString(filename); | |||||
assertFileContains(filename, contains); | |||||
} | } | ||||
private void expectFileContains( | |||||
String target, String filename, String contains) | |||||
throws IOException | |||||
{ | |||||
String content = getFileString(target, filename); | |||||
private void assertFileContains(String filename, String contains) throws IOException { | |||||
String content = getFileString(filename); | |||||
assertTrue( | assertTrue( | ||||
"expecting file " + filename + " to contain " + | |||||
contains + | |||||
" but got " + content, content.indexOf(contains) > -1); | |||||
"expecting file " + filename | |||||
+ " to contain " + contains | |||||
+ " but got " + content, | |||||
content.indexOf(contains) > -1); | |||||
} | } | ||||
} | |||||
} |