umagesh 2003/04/14 08:37:48
Modified: . WHATSNEW
docs/manual/CoreTypes filterchain.html
src/main/org/apache/tools/ant/filters HeadFilter.java
TailFilter.java
Added: src/etc/testcases/filters head-tail.xml
src/etc/testcases/filters/expected head-tail.head.test
head-tail.headAllSkip.test head-tail.headLines.test
head-tail.headLinesSkip.test
head-tail.headSkip.test head-tail.headtail.test
head-tail.tail.test head-tail.tailAllSkip.test
head-tail.tailLines.test
head-tail.tailLinesSkip.test
head-tail.tailSkip.test
src/etc/testcases/filters/input head-tail.small.test
head-tail.test
src/testcases/org/apache/tools/ant/filters HeadTailTest.java
Log:
New "skip" attribute for HeadFilter and TailFilter
PR: 18849
Submitted by: [EMAIL PROTECTED] (Jan Mat�rne)
Revision Changes Path
1.396 +3 -0 ant/WHATSNEW
Index: WHATSNEW
===================================================================
RCS file: /home/cvs/ant/WHATSNEW,v
retrieving revision 1.395
retrieving revision 1.396
diff -u -r1.395 -r1.396
--- WHATSNEW 14 Apr 2003 07:53:06 -0000 1.395
+++ WHATSNEW 14 Apr 2003 15:37:42 -0000 1.396
@@ -32,6 +32,9 @@
Fixed bugs:
-----------
+* A new attribute named skip is added to the TailFilter and
+ HeadFilter filter readers.
+
* Expand tasks did not behave as expected with PatternSets.
* <property environment=... /> now works on OS/400.
1.6 +133 -2 ant/docs/manual/CoreTypes/filterchain.html
Index: filterchain.html
===================================================================
RCS file: /home/cvs/ant/docs/manual/CoreTypes/filterchain.html,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- filterchain.html 14 Mar 2003 13:45:16 -0000 1.5
+++ filterchain.html 14 Apr 2003 15:37:44 -0000 1.6
@@ -240,7 +240,14 @@
<TR>
<TD vAlign=top>lines</TD>
<TD vAlign=top align="center">Number of lines to be read.
- Defaults to "10"</TD>
+ Defaults to "10" <BR> A negative value means that all lines are
+ passed (useful with <I>skip</I>)</TD>
+ <TD vAlign=top align="center">No</TD>
+ </TR>
+ <TR>
+ <TD vAlign=top>skip</TD>
+ <TD vAlign=top align="center">Number of lines to be skipped (from the
beginning).
+ Defaults to "0"</TD>
<TD vAlign=top align="center">No</TD>
</TR>
</TABLE>
@@ -267,6 +274,19 @@
</loadfile>
</PRE></BLOCKQUOTE>
+This stores the first 15 lines, skipping the first 2 lines, of the supplied
data
+in the porperty ${src.file.head}. (Means: lines 3-17)
+<BLOCKQUOTE><PRE>
+<loadfile srcfile="${src.file}"
property="${src.file.head}">
+ <filterchain>
+ <headfilter lines="15" skip="2"/>
+ </filterchain>
+</loadfile>
+</PRE></BLOCKQUOTE>
+
+See the testcases for more examples
(<I>src\etc\testcases\filters\head-tail.xml</I> in the
+source distribution).
+
<H3><a name="linecontains">LineContains</a></H3>
This filter includes only those lines that contain all the user-specified
@@ -602,11 +622,110 @@
<TR>
<TD vAlign=top>lines</TD>
<TD vAlign=top align="center">Number of lines to be read.
- Defaults to "10"</TD>
+ Defaults to "10" <BR> A negative value means that all lines are
+ passed (useful with <I>skip</I>)</TD>
+ <TD vAlign=top align="center">No</TD>
+ </TR>
+ <TR>
+ <TD vAlign=top>skip</TD>
+ <TD vAlign=top align="center">Number of lines to be skipped (from the
end).
+ Defaults to "0" </TD>
<TD vAlign=top align="center">No</TD>
</TR>
</TABLE>
<P>
+
+<H4>Background:</H4>
+With HeadFilter and TailFilter you can extract each part of a text file you
want.
+This graphic shows the dependencies:
+
+<TABLE cellSpacing=0 cellPadding=2 border=1>
+<TR>
+ <TH> Content </TH>
+ <TH></TH>
+ <TH></TH>
+ <TH></TH>
+ <TH> Filter </TH>
+</TR>
+<TR>
+ <TD> Line 1 </TD>
+ <TD rowspan="2" bgcolor="#C0C0C0"> </TD>
+ <TD rowspan="9" bgcolor="#FF00FF"> </TD>
+ <TD rowspan="4"> </TD>
+ <TD rowspan="11">
+ <TABLE>
+ <TR>
+ <TD bgcolor="#C0C0C0"> </TD>
+ <TD><PRE><filterchain>
+ <headfilter lines="2"/>
+</filterchain></PRE></TD>
+ </TR>
+ <TR>
+ <TD bgcolor="#FF00FF"> </TD>
+ <TD><PRE><filterchain>
+ <tailfilter lines="-1" skip="2"/>
+</filterchain></PRE></TD>
+ </TR>
+ <TR>
+ <TD bgcolor="#008000"> </TD>
+ <TD><PRE><filterchain>
+ <headfilter lines="-1" skip="2"/>
+</filterchain></PRE></TD>
+ </TR>
+ <TR>
+ <TD bgcolor="#0000FF"> </TD>
+ <TD><PRE><filterchain>
+ <headfilter lines="-1" skip="2"/>
+ <tailfilter lines="-1" skip="2"/>
+</filterchain></PRE></TD>
+ </TR>
+ <TR>
+ <TD bgcolor="#00FF00"> </TD>
+ <TD><PRE><filterchain>
+ <tailfilter lines="2"/>
+</filterchain></PRE></TD>
+ </TR>
+ </TABLE>
+ </TD>
+</TR>
+<TR>
+ <TD> Line 2 </TD>
+</TR>
+<TR>
+ <TD> Line 3 </TD>
+ <TD rowspan="9" bgcolor="#008000"> </TD>
+</TR>
+<TR>
+ <TD> Line 4 </TD>
+</TR>
+<TR>
+ <TD> Line 5 </TD>
+ <TD rowspan="3" bgcolor="#0000FF"> </TD>
+</TR>
+<TR>
+ <TD> Lines ... </TD>
+</TR>
+<TR>
+ <TD> Line 95 </TD>
+</TR>
+<TR>
+ <TD> Line 96 </TD>
+ <TD rowspan="4"> </TD>
+</TR>
+<TR>
+ <TD> Line 97 </TD>
+</TR>
+<TR>
+ <TD> Line 98 </TD>
+ <TD rowspan="2" bgcolor="#00FF00"> </TD>
+</TR>
+<TR>
+ <TD> Line 99 </TD>
+</TR>
+</TABLE>
+
+
+
<H4>Examples:</H4>
This stores the last 15 lines of the supplied data in the property
${src.file.tail}
@@ -651,6 +770,18 @@
<filterchain>
<headfilter lines="15"/>
<tailfilter lines="5"/>
+ </filterchain>
+</loadfile>
+</PRE></BLOCKQUOTE>
+
+
+This stores the last 10 lines, skipping the last 2 lines, of the supplied
data
+in the porperty ${src.file.head}. (Means: if supplied data contains 60 lines,
+lines 49-58 are extracted)
+<BLOCKQUOTE><PRE>
+<loadfile srcfile="${src.file}"
property="${src.file.head}">
+ <filterchain>
+ <tailfilter lines="10" skip="2"/>
</filterchain>
</loadfile>
</PRE></BLOCKQUOTE>
1.1 ant/src/etc/testcases/filters/head-tail.xml
Index: head-tail.xml
===================================================================
<?xml version="1.0"?>
<project default="cleanup" basedir=".">
<target name="init">
<mkdir dir="result" />
</target>
<target name="cleanup">
<delete dir="result"/>
</target>
<!-- Testcases for HeadFilter -->
<target name="testHead" depends="init">
<copy file="input/head-tail.test" tofile="result/head-tail.head.test">
<filterchain>
<headfilter/>
</filterchain>
</copy>
</target>
<target name="testHeadLines" depends="init">
<copy file="input/head-tail.test"
tofile="result/head-tail.headLines.test">
<filterchain>
<headfilter lines="2"/>
</filterchain>
</copy>
</target>
<target name="testHeadSkip" depends="init">
<copy file="input/head-tail.test" tofile="result/head-tail.headSkip.test">
<filterchain>
<headfilter skip="2"/>
</filterchain>
</copy>
</target>
<target name="testHeadLinesSkip" depends="init">
<copy file="input/head-tail.test"
tofile="result/head-tail.headLinesSkip.test">
<filterchain>
<headfilter lines="2" skip="2"/>
</filterchain>
</copy>
</target>
<target name="testHeadAllSkip" depends="init">
<copy file="input/head-tail.test"
tofile="result/head-tail.headAllSkip.test">
<filterchain>
<headfilter lines="-1" skip="2"/>
</filterchain>
</copy>
</target>
<!-- Testcases for TailFilter -->
<target name="testTail" depends="init">
<copy file="input/head-tail.test" tofile="result/head-tail.tail.test">
<filterchain>
<tailfilter/>
</filterchain>
</copy>
</target>
<target name="testTailLines" depends="init">
<copy file="input/head-tail.test"
tofile="result/head-tail.tailLines.test">
<filterchain>
<tailfilter lines="2"/>
</filterchain>
</copy>
</target>
<target name="testTailSkip" depends="init">
<copy file="input/head-tail.test" tofile="result/head-tail.tailSkip.test">
<filterchain>
<tailfilter skip="2"/>
</filterchain>
</copy>
</target>
<target name="testTailLinesSkip" depends="init">
<copy file="input/head-tail.test"
tofile="result/head-tail.tailLinesSkip.test">
<filterchain>
<tailfilter lines="2" skip="2"/>
</filterchain>
</copy>
</target>
<target name="testTailAllSkip" depends="init">
<copy file="input/head-tail.test"
tofile="result/head-tail.tailAllSkip.test">
<filterchain>
<tailfilter lines="-1" skip="2"/>
</filterchain>
</copy>
</target>
<!-- Testcases for combined scenarios -->
<target name="testHeadTail" depends="init">
<copy file="input/head-tail.test" tofile="result/head-tail.headtail.test">
<filterchain>
<headfilter lines="4"/>
<tailfilter lines="2"/>
</filterchain>
</copy>
</target>
</project>
1.1
ant/src/etc/testcases/filters/expected/head-tail.head.test
Index: head-tail.head.test
===================================================================
Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9
Line 10
1.1
ant/src/etc/testcases/filters/expected/head-tail.headAllSkip.test
Index: head-tail.headAllSkip.test
===================================================================
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9
Line 10
Line 11
Line 12
Line 13
Line 14
Line 15
Line 16
Line 17
Line 18
Line 19
Line 20
Line 21
Line 22
Line 23
Line 24
Line 25
Line 26
Line 27
Line 28
Line 29
Line 30
Line 31
Line 32
Line 33
Line 34
Line 35
Line 36
Line 37
Line 38
Line 39
Line 40
Line 41
Line 42
Line 43
Line 44
Line 45
Line 46
Line 47
Line 48
Line 49
Line 50
Line 51
Line 52
Line 53
Line 54
Line 55
Line 56
Line 57
Line 58
Line 59
Line 60
1.1
ant/src/etc/testcases/filters/expected/head-tail.headLines.test
Index: head-tail.headLines.test
===================================================================
Line 1
Line 2
1.1
ant/src/etc/testcases/filters/expected/head-tail.headLinesSkip.test
Index: head-tail.headLinesSkip.test
===================================================================
Line 3
Line 4
1.1
ant/src/etc/testcases/filters/expected/head-tail.headSkip.test
Index: head-tail.headSkip.test
===================================================================
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9
Line 10
Line 11
Line 12
1.1
ant/src/etc/testcases/filters/expected/head-tail.headtail.test
Index: head-tail.headtail.test
===================================================================
Line 4
1.1
ant/src/etc/testcases/filters/expected/head-tail.tail.test
Index: head-tail.tail.test
===================================================================
Line 51
Line 52
Line 53
Line 54
Line 55
Line 56
Line 57
Line 58
Line 59
Line 60
1.1
ant/src/etc/testcases/filters/expected/head-tail.tailAllSkip.test
Index: head-tail.tailAllSkip.test
===================================================================
Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9
Line 10
Line 11
Line 12
Line 13
Line 14
Line 15
Line 16
Line 17
Line 18
Line 19
Line 20
Line 21
Line 22
Line 23
Line 24
Line 25
Line 26
Line 27
Line 28
Line 29
Line 30
Line 31
Line 32
Line 33
Line 34
Line 35
Line 36
Line 37
Line 38
Line 39
Line 40
Line 41
Line 42
Line 43
Line 44
Line 45
Line 46
Line 47
Line 48
Line 49
Line 50
Line 51
Line 52
Line 53
Line 54
Line 55
Line 56
Line 57
Line 58
1.1
ant/src/etc/testcases/filters/expected/head-tail.tailLines.test
Index: head-tail.tailLines.test
===================================================================
Line 59
Line 60
1.1
ant/src/etc/testcases/filters/expected/head-tail.tailLinesSkip.test
Index: head-tail.tailLinesSkip.test
===================================================================
Line 57
Line 58
1.1
ant/src/etc/testcases/filters/expected/head-tail.tailSkip.test
Index: head-tail.tailSkip.test
===================================================================
Line 49
Line 50
Line 51
Line 52
Line 53
Line 54
Line 55
Line 56
Line 57
Line 58
1.1 ant/src/etc/testcases/filters/input/head-tail.small.test
Index: head-tail.small.test
===================================================================
Line 1
Line 2
Line 3
Line 4
Line 5
1.1 ant/src/etc/testcases/filters/input/head-tail.test
Index: head-tail.test
===================================================================
Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9
Line 10
Line 11
Line 12
Line 13
Line 14
Line 15
Line 16
Line 17
Line 18
Line 19
Line 20
Line 21
Line 22
Line 23
Line 24
Line 25
Line 26
Line 27
Line 28
Line 29
Line 30
Line 31
Line 32
Line 33
Line 34
Line 35
Line 36
Line 37
Line 38
Line 39
Line 40
Line 41
Line 42
Line 43
Line 44
Line 45
Line 46
Line 47
Line 48
Line 49
Line 50
Line 51
Line 52
Line 53
Line 54
Line 55
Line 56
Line 57
Line 58
Line 59
Line 60
1.8 +46 -11 ant/src/main/org/apache/tools/ant/filters/HeadFilter.java
Index: HeadFilter.java
===================================================================
RCS file:
/home/cvs/ant/src/main/org/apache/tools/ant/filters/HeadFilter.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- HeadFilter.java 10 Feb 2003 14:13:32 -0000 1.7
+++ HeadFilter.java 14 Apr 2003 15:37:47 -0000 1.8
@@ -1,7 +1,7 @@
/*
* The Apache Software License, Version 1.1
*
- * Copyright (c) 2002 The Apache Software Foundation. All rights
+ * Copyright (c) 2002-2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -76,15 +76,21 @@
/** Parameter name for the number of lines to be returned. */
private static final String LINES_KEY = "lines";
+ /** Parameter name for the number of lines to be skipped. */
+ private static final String SKIP_KEY = "skip";
+
/** Number of lines currently read in. */
private long linesRead = 0;
/** Number of lines to be returned in the filtered stream. */
private long lines = 10;
+ /** Number of lines to be skipped. */
+ private long skip = 0;
+
/**
* Constructor for "dummy" instances.
- *
+ *
* @see BaseFilterReader#BaseFilterReader()
*/
public HeadFilter() {
@@ -104,14 +110,14 @@
/**
* Returns the next character in the filtered stream. If the desired
* number of lines have already been read, the resulting stream is
- * effectively at an end. Otherwise, the next character from the
+ * effectively at an end. Otherwise, the next character from the
* underlying stream is read and returned.
- *
+ *
* @return the next character in the resulting stream, or -1
* if the end of the resulting stream has been reached
- *
+ *
* @exception IOException if the underlying stream throws an IOException
- * during reading
+ * during reading
*/
public final int read() throws IOException {
if (!getInitialized()) {
@@ -121,7 +127,13 @@
int ch = -1;
- if (linesRead < lines) {
+ // skip the lines (if set)
+ while (skip > 0) {
+ for (int tmp = in.read(); tmp != '\n'; tmp = in.read());
+ skip--;
+ }
+
+ if ( (linesRead < lines) || (lines < 0) ){
ch = in.read();
@@ -135,7 +147,7 @@
/**
* Sets the number of lines to be returned in the filtered stream.
- *
+ *
* @param lines the number of lines to be returned in the filtered stream
*/
public final void setLines(final long lines) {
@@ -144,7 +156,7 @@
/**
* Returns the number of lines to be returned in the filtered stream.
- *
+ *
* @return the number of lines to be returned in the filtered stream
*/
private final long getLines() {
@@ -152,18 +164,37 @@
}
/**
+ * Sets the number of lines to be skipped in the filtered stream.
+ *
+ * @param lines the number of lines to be skipped in the filtered stream
+ */
+ public final void setSkip(final long skip) {
+ this.skip = skip;
+ }
+
+ /**
+ * Returns the number of lines to be skipped in the filtered stream.
+ *
+ * @return the number of lines to be skipped in the filtered stream
+ */
+ private final long getSkip() {
+ return skip;
+ }
+
+ /**
* Creates a new HeadFilter using the passed in
* Reader for instantiation.
- *
+ *
* @param rdr A Reader object providing the underlying stream.
* Must not be <code>null</code>.
- *
+ *
* @return a new filter based on this configuration, but filtering
* the specified reader
*/
public final Reader chain(final Reader rdr) {
HeadFilter newFilter = new HeadFilter(rdr);
newFilter.setLines(getLines());
+ newFilter.setSkip(getSkip());
newFilter.setInitialized(true);
return newFilter;
}
@@ -178,6 +209,10 @@
for (int i = 0; i < params.length; i++) {
if (LINES_KEY.equals(params[i].getName())) {
lines = new Long(params[i].getValue()).longValue();
+ break;
+ }
+ if (SKIP_KEY.equals(params[i].getName())) {
+ skip = new Long(params[i].getValue()).longValue();
break;
}
}
1.8 +69 -18 ant/src/main/org/apache/tools/ant/filters/TailFilter.java
Index: TailFilter.java
===================================================================
RCS file:
/home/cvs/ant/src/main/org/apache/tools/ant/filters/TailFilter.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- TailFilter.java 10 Feb 2003 14:13:32 -0000 1.7
+++ TailFilter.java 14 Apr 2003 15:37:47 -0000 1.8
@@ -1,7 +1,7 @@
/*
* The Apache Software License, Version 1.1
*
- * Copyright (c) 2002 The Apache Software Foundation. All rights
+ * Copyright (c) 2002-2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -78,12 +78,18 @@
/** Parameter name for the number of lines to be returned. */
private static final String LINES_KEY = "lines";
+ /** Parameter name for the number of lines to be skipped. */
+ private static final String SKIP_KEY = "skip";
+
/** Number of lines currently read in. */
private long linesRead = 0;
/** Number of lines to be returned in the filtered stream. */
private long lines = 10;
+ /** Number of lines to be skipped. */
+ private long skip = 0;
+
/** Buffer to hold in characters read ahead. */
private char[] buffer = new char[4096];
@@ -98,7 +104,7 @@
/**
* Constructor for "dummy" instances.
- *
+ *
* @see BaseFilterReader#BaseFilterReader()
*/
public TailFilter() {
@@ -121,12 +127,12 @@
* Otherwise, the stream is read to the end and buffered (with the buffer
* growing as necessary), then the appropriate position in the buffer is
* set to read from.
- *
+ *
* @return the next character in the resulting stream, or -1
* if the end of the resulting stream has been reached
- *
+ *
* @exception IOException if the underlying stream throws an IOException
- * during reading
+ * during reading
*/
public final int read() throws IOException {
if (!getInitialized()) {
@@ -152,16 +158,18 @@
}
}
- if (ch == '\n' || ch == -1) {
- ++linesRead;
-
- if (linesRead == lines) {
- int i = 0;
- for (i = returnedCharPos + 1;
- buffer[i] != 0 && buffer[i] != '\n'; i++) {
+ if (lines > 0) {
+ if (ch == '\n' || ch == -1) {
+ ++linesRead;
+
+ if ((linesRead == lines + skip)) {
+ int i = 0;
+ for (i = returnedCharPos + 1;
+ buffer[i] != 0 && buffer[i] != '\n'; i++) {
+ }
+ returnedCharPos = i;
+ --linesRead;
}
- returnedCharPos = i;
- --linesRead;
}
}
if (ch == -1) {
@@ -174,6 +182,26 @@
completedReadAhead = true;
}
+ // Because the complete stream is read into the buffer I can delete
+ // the "skip lines" from back to the beginning.
+ if (skip > 0) {
+ // searching...
+ int i;
+ for (i = buffer.length - 1; skip > 0; i--) {
+ if (buffer[i]=='\n') {
+ skip--;
+ }
+ }
+
+ // cut the buffer to the new length
+ char[] newBuffer = new char[i];
+ System.arraycopy(buffer, 0, newBuffer, 0, i);
+ buffer = newBuffer;
+
+ // don�t forget to set the "lastposition" new
+ bufferPos = i;
+ }
+
++returnedCharPos;
if (returnedCharPos >= bufferPos) {
return -1;
@@ -184,7 +212,7 @@
/**
* Sets the number of lines to be returned in the filtered stream.
- *
+ *
* @param lines the number of lines to be returned in the filtered stream
*/
public final void setLines(final long lines) {
@@ -193,7 +221,7 @@
/**
* Returns the number of lines to be returned in the filtered stream.
- *
+ *
* @return the number of lines to be returned in the filtered stream
*/
private final long getLines() {
@@ -201,18 +229,37 @@
}
/**
+ * Sets the number of lines to be skipped in the filtered stream.
+ *
+ * @param lines the number of lines to be skipped in the filtered stream
+ */
+ public final void setSkip(final long skip) {
+ this.skip = skip;
+ }
+
+ /**
+ * Returns the number of lines to be skipped in the filtered stream.
+ *
+ * @return the number of lines to be skipped in the filtered stream
+ */
+ private final long getSkip() {
+ return skip;
+ }
+
+ /**
* Creates a new TailFilter using the passed in
* Reader for instantiation.
- *
+ *
* @param rdr A Reader object providing the underlying stream.
* Must not be <code>null</code>.
- *
+ *
* @return a new filter based on this configuration, but filtering
* the specified reader
*/
public final Reader chain(final Reader rdr) {
TailFilter newFilter = new TailFilter(rdr);
newFilter.setLines(getLines());
+ newFilter.setSkip(getSkip());
newFilter.setInitialized(true);
return newFilter;
}
@@ -227,6 +274,10 @@
for (int i = 0; i < params.length; i++) {
if (LINES_KEY.equals(params[i].getName())) {
setLines(new Long(params[i].getValue()).longValue());
+ break;
+ }
+ if (SKIP_KEY.equals(params[i].getName())) {
+ skip = new Long(params[i].getValue()).longValue();
break;
}
}
1.1
ant/src/testcases/org/apache/tools/ant/filters/HeadTailTest.java
Index: HeadTailTest.java
===================================================================
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2003 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 "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 [EMAIL PROTECTED]
*
* 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.filters;
import java.io.File;
import java.io.IOException;
import org.apache.tools.ant.BuildFileTest;
import org.apache.tools.ant.util.FileUtils;
/** JUnit Testcases for TailFilter and HeadFilter
* @author <a href="mailto:[EMAIL PROTECTED]">Jan Mat�rne</a>
*/
/* I wrote the testcases in one java file because I want also to test the
* combined behaviour (see end of the class).
*/
public class HeadTailTest extends BuildFileTest {
public HeadTailTest(String name) {
super(name);
}
public void setUp() {
configureProject("src/etc/testcases/filters/head-tail.xml");
}
public void tearDown() {
executeTarget("cleanup");
}
public void testHead() throws IOException {
executeTarget("testHead");
File expected =
getProject().resolveFile("expected/head-tail.head.test");
File result = getProject().resolveFile("result/head-tail.head.test");
FileUtils fu = FileUtils.newFileUtils();
assertTrue("testHead: Result not like expected",
fu.contentEquals(expected, result));
}
public void testHeadLines() throws IOException {
executeTarget("testHeadLines");
File expected =
getProject().resolveFile("expected/head-tail.headLines.test");
File result =
getProject().resolveFile("result/head-tail.headLines.test");
FileUtils fu = FileUtils.newFileUtils();
assertTrue("testHeadLines: Result not like expected",
fu.contentEquals(expected, result));
}
public void testHeadSkip() throws IOException {
executeTarget("testHeadSkip");
File expected =
getProject().resolveFile("expected/head-tail.headSkip.test");
File result =
getProject().resolveFile("result/head-tail.headSkip.test");
FileUtils fu = FileUtils.newFileUtils();
assertTrue("testHeadSkip: Result not like expected",
fu.contentEquals(expected, result));
}
public void testHeadLinesSkip() throws IOException {
executeTarget("testHeadLinesSkip");
File expected =
getProject().resolveFile("expected/head-tail.headLinesSkip.test");
File result =
getProject().resolveFile("result/head-tail.headLinesSkip.test");
FileUtils fu = FileUtils.newFileUtils();
assertTrue("testHeadLinesSkip: Result not like expected",
fu.contentEquals(expected, result));
}
public void testTail() throws IOException {
executeTarget("testTail");
File expected =
getProject().resolveFile("expected/head-tail.tail.test");
File result = getProject().resolveFile("result/head-tail.tail.test");
FileUtils fu = FileUtils.newFileUtils();
assertTrue("testTail: Result not like expected",
fu.contentEquals(expected, result));
}
public void testTailLines() throws IOException {
executeTarget("testTailLines");
File expected =
getProject().resolveFile("expected/head-tail.tailLines.test");
File result =
getProject().resolveFile("result/head-tail.tailLines.test");
FileUtils fu = FileUtils.newFileUtils();
assertTrue("testTailLines: Result not like expected",
fu.contentEquals(expected, result));
}
public void testTailSkip() throws IOException {
executeTarget("testTailSkip");
File expected =
getProject().resolveFile("expected/head-tail.tailSkip.test");
File result =
getProject().resolveFile("result/head-tail.tailSkip.test");
FileUtils fu = FileUtils.newFileUtils();
assertTrue("testTailSkip: Result not like expected",
fu.contentEquals(expected, result));
}
public void testTailLinesSkip() throws IOException {
executeTarget("testTailLinesSkip");
File expected =
getProject().resolveFile("expected/head-tail.tailLinesSkip.test");
File result =
getProject().resolveFile("result/head-tail.tailLinesSkip.test");
FileUtils fu = FileUtils.newFileUtils();
assertTrue("testTailLinesSkip: Result not like expected",
fu.contentEquals(expected, result));
}
public void testHeadTail() throws IOException {
executeTarget("testHeadTail");
File expected =
getProject().resolveFile("expected/head-tail.headTail.test");
File result =
getProject().resolveFile("result/head-tail.headTail.test");
FileUtils fu = FileUtils.newFileUtils();
assertTrue("testHeadTail: Result not like expected",
fu.contentEquals(expected, result));
}
}