You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by bo...@apache.org on 2008/04/08 12:44:47 UTC
svn commit: r645841 - in /ant/antlibs/antunit/trunk/src:
etc/testcases/listener/xmllistener.xml
main/org/apache/ant/antunit/listener/XMLAntUnitListener.java
tests/junit/org/apache/ant/antunit/listener/XMLListenerTest.java
Author: bodewig
Date: Tue Apr 8 03:44:46 2008
New Revision: 645841
URL: http://svn.apache.org/viewvc?rev=645841&view=rev
Log:
Add logging of messages to xmllistener, based on code submitted by David Jackman
Added:
ant/antlibs/antunit/trunk/src/etc/testcases/listener/xmllistener.xml (with props)
ant/antlibs/antunit/trunk/src/tests/junit/org/apache/ant/antunit/listener/XMLListenerTest.java (with props)
Modified:
ant/antlibs/antunit/trunk/src/main/org/apache/ant/antunit/listener/XMLAntUnitListener.java
Added: ant/antlibs/antunit/trunk/src/etc/testcases/listener/xmllistener.xml
URL: http://svn.apache.org/viewvc/ant/antlibs/antunit/trunk/src/etc/testcases/listener/xmllistener.xml?rev=645841&view=auto
==============================================================================
--- ant/antlibs/antunit/trunk/src/etc/testcases/listener/xmllistener.xml (added)
+++ ant/antlibs/antunit/trunk/src/etc/testcases/listener/xmllistener.xml Tue Apr 8 03:44:46 2008
@@ -0,0 +1,304 @@
+<?xml version="1.0"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project name="xmllistener-test"
+ default="all"
+ xmlns:au="antlib:org.apache.ant.antunit">
+
+ <macrodef name="assertFileContains">
+ <attribute name="file" description="File to compare" />
+ <attribute name="value" description="Text to look for in the file" />
+ <attribute name="casesensitive" default="true"/>
+ <attribute name="message"
+ default="Expected file '@{file}' to contain value '@{value}'."/>
+ <sequential>
+ <au:assertTrue message="@{message}">
+ <isfileselected file="@{file}">
+ <contains text="@{value}" casesensitive="@{casesensitive}" />
+ </isfileselected>
+ </au:assertTrue>
+ </sequential>
+ </macrodef>
+
+ <macrodef name="assertFileDoesntContain">
+ <attribute name="file" description="File to compare" />
+ <attribute name="value" description="Text to look for in the file" />
+ <attribute name="casesensitive" default="true"/>
+ <attribute name="message"
+ default="Expected file '@{file}' to not contain value '@{value}'."/>
+ <sequential>
+ <au:assertTrue message="@{message}">
+ <not>
+ <isfileselected file="@{file}">
+ <contains text="@{value}" casesensitive="@{casesensitive}" />
+ </isfileselected>
+ </not>
+ </au:assertTrue>
+ </sequential>
+ </macrodef>
+
+ <macrodef name="assertFileContainsRegExp">
+ <attribute name="file" description="File to compare" />
+ <attribute name="value" description="Regular expression to look for in the file" />
+ <attribute name="message"
+ default="Expected file '@{file}' to contain the regular expression '@{value}'."/>
+ <sequential>
+ <au:assertTrue message="@{message}">
+ <isfileselected file="@{file}">
+ <containsregexp expression="@{value}" />
+ </isfileselected>
+ </au:assertTrue>
+ </sequential>
+ </macrodef>
+
+ <macrodef name="assertFileDoesntContainRegExp">
+ <attribute name="file" description="File to compare" />
+ <attribute name="value" description="Regular expression to look for in the file" />
+ <attribute name="message"
+ default="Expected file '@{file}' to not contain the regular expression '@{value}'."/>
+ <sequential>
+ <au:assertTrue message="@{message}">
+ <not>
+ <isfileselected file="@{file}">
+ <containsregexp expression="@{value}" />
+ </isfileselected>
+ </not>
+ </au:assertTrue>
+ </sequential>
+ </macrodef>
+
+ <macrodef name="assertDoesntMatch" backtrace="false">
+ <attribute name="string"/>
+ <attribute name="pattern"/>
+ <attribute name="casesensitive" default="true"/>
+ <attribute name="singleline" default="false"/>
+ <attribute name="multiline" default="false"/>
+ <attribute name="message"
+ default="Expected '@{string}' to match pattern '@{pattern}'"/>
+ <sequential>
+ <au:assertTrue message="@{message}">
+ <not>
+ <matches string="@{string}" pattern="@{pattern}"
+ casesensitive="@{casesensitive}"
+ singleline="@{singleline}"
+ multiline="@{multiline}"/>
+ </not>
+ </au:assertTrue>
+ </sequential>
+ </macrodef>
+
+ <macrodef name="clean">
+ <sequential>
+ <delete file="${reportfile}" quiet="true" />
+ </sequential>
+ </macrodef>
+
+
+ <!-- This is the name of the report the XML listener generates -->
+ <property name="reportfile" value="TEST-xmllistener_xml.xml" />
+
+ <target name="showdefault">
+ <clean/>
+ <au:antunit failOnError="false">
+ <file file="${ant.file}" />
+ <au:xmllistener />
+ </au:antunit>
+ <assertFileDoesntContain file="${reportfile}" value="errormessage" message="Should not have shown error message" />
+ <assertFileDoesntContain file="${reportfile}" value="warningmessage" message="Should not have shown warning message" />
+ <assertFileDoesntContain file="${reportfile}" value="infomessage" message="Should not have shown info message" />
+ <assertFileDoesntContain file="${reportfile}" value="verbosemessage" message="Should not have shown verbose message" />
+ <assertFileDoesntContain file="${reportfile}" value="debugmessage" message="Should not have shown debug message" />
+ <clean/>
+ </target>
+
+ <target name="showerror">
+ <clean/>
+ <au:antunit failOnError="false">
+ <file file="${ant.file}" />
+ <au:xmllistener logLevel="error" />
+ </au:antunit>
+ <assertFileContains file="${reportfile}" value="errormessage" message="Should have shown error message" />
+ <assertFileDoesntContain file="${reportfile}" value="warningmessage" message="Should not have shown warning message" />
+ <assertFileDoesntContain file="${reportfile}" value="infomessage" message="Should not have shown info message" />
+ <assertFileDoesntContain file="${reportfile}" value="verbosemessage" message="Should not have shown verbose message" />
+ <assertFileDoesntContain file="${reportfile}" value="debugmessage" message="Should not have shown debug message" />
+ <clean/>
+ </target>
+
+ <target name="showwarning">
+ <clean/>
+ <au:antunit failOnError="false">
+ <file file="${ant.file}" />
+ <au:xmllistener logLevel="warning" />
+ </au:antunit>
+ <assertFileContains file="${reportfile}" value="errormessage" message="Should have shown error message" />
+ <assertFileContains file="${reportfile}" value="warningmessage" message="Should have shown warning message" />
+ <assertFileDoesntContain file="${reportfile}" value="infomessage" message="Should not have shown info message" />
+ <assertFileDoesntContain file="${reportfile}" value="verbosemessage" message="Should not have shown verbose message" />
+ <assertFileDoesntContain file="${reportfile}" value="debugmessage" message="Should not have shown debug message" />
+ <clean/>
+ </target>
+
+ <target name="showinfo">
+ <clean/>
+ <au:antunit failOnError="false">
+ <file file="${ant.file}" />
+ <au:xmllistener logLevel="info" />
+ </au:antunit>
+ <assertFileContains file="${reportfile}" value="errormessage" message="Should have shown error message" />
+ <assertFileContains file="${reportfile}" value="warningmessage" message="Should have shown warning message" />
+ <assertFileContains file="${reportfile}" value="infomessage" message="Should have shown info message" />
+ <assertFileDoesntContain file="${reportfile}" value="verbosemessage" message="Should not have shown verbose message" />
+ <assertFileDoesntContain file="${reportfile}" value="debugmessage" message="Should not have shown debug message" />
+ <clean/>
+ </target>
+
+ <target name="showverbose">
+ <clean/>
+ <au:antunit failOnError="false">
+ <file file="${ant.file}" />
+ <au:xmllistener logLevel="verbose" />
+ </au:antunit>
+ <assertFileContains file="${reportfile}" value="errormessage" message="Should have shown error message" />
+ <assertFileContains file="${reportfile}" value="warningmessage" message="Should have shown warning message" />
+ <assertFileContains file="${reportfile}" value="infomessage" message="Should have shown info message" />
+ <assertFileContains file="${reportfile}" value="verbosemessage" message="Should have shown verbose message" />
+ <assertFileDoesntContain file="${reportfile}" value="debugmessage" message="Should not have shown debug message" />
+ <clean/>
+ </target>
+
+ <target name="showdebug">
+ <clean/>
+ <au:antunit failOnError="false">
+ <file file="${ant.file}" />
+ <au:xmllistener logLevel="debug" />
+ </au:antunit>
+ <assertFileContains file="${reportfile}" value="errormessage" message="Should have shown error message" />
+ <assertFileContains file="${reportfile}" value="warningmessage" message="Should have shown warning message" />
+ <assertFileContains file="${reportfile}" value="infomessage" message="Should have shown info message" />
+ <assertFileContains file="${reportfile}" value="verbosemessage" message="Should have shown verbose message" />
+ <assertFileContains file="${reportfile}" value="debugmessage" message="Should have shown debug message" />
+ <clean/>
+ </target>
+
+ <target name="shownone">
+ <clean/>
+ <au:antunit failOnError="false">
+ <file file="${ant.file}" />
+ <au:xmllistener logLevel="none" />
+ </au:antunit>
+ <assertFileDoesntContain file="${reportfile}" value="errormessage" message="Should not have shown error message" />
+ <assertFileDoesntContain file="${reportfile}" value="warningmessage" message="Should not have shown warning message" />
+ <assertFileDoesntContain file="${reportfile}" value="infomessage" message="Should not have shown info message" />
+ <assertFileDoesntContain file="${reportfile}" value="verbosemessage" message="Should not have shown verbose message" />
+ <assertFileDoesntContain file="${reportfile}" value="debugmessage" message="Should not have shown debug message" />
+ <clean/>
+ </target>
+
+ <target name="-createreport">
+ <clean/>
+ <au:antunit failOnError="false">
+ <file file="${ant.file}" />
+ <au:xmllistener logLevel="info"/>
+ </au:antunit>
+ </target>
+
+ <property name="systemoutstart" value="<system-out><!\[CDATA\[" />
+ <property name="systemoutend" value="\]\]></system-out>" />
+
+ <target name="stdoutplacement" depends="-createreport">
+ <loadfile property="reportxml" srcFile="${reportfile}" />
+ <au:assertMatches string="${reportxml}" pattern="${systemoutstart}.*${systemoutend}" singleline="true"
+ message="Standard output element not present" />
+ <assertDoesntMatch string="${reportxml}" pattern="${systemoutstart}.*<testcase" singleline="true"
+ message="Standard output element should be after all testcase elements" />
+ <au:assertMatches string="${reportxml}" pattern="${systemoutend}.*<tests" singleline="true"
+ message="Standard output element should be before tests element" />
+ <clean/>
+ </target>
+
+ <target name="setupteardown" depends="-createreport">
+ <loadfile property="reportxml" srcFile="${reportfile}" />
+ <au:assertMatches string="${reportxml}" pattern="${systemoutstart}.*setUp.*${systemoutend}" singleline="true"
+ message="setUp message not present" />
+ <au:assertMatches string="${reportxml}" pattern="${systemoutstart}.*setUp.*setUp.*${systemoutend}" singleline="true"
+ message="Two setUp messages not present" />
+ <assertDoesntMatch string="${reportxml}" pattern="${systemoutstart}.*setUp.*setUp.*setUp.*${systemoutend}" singleline="true"
+ message="Too many setUp messages present" />
+ <au:assertMatches string="${reportxml}" pattern="${systemoutstart}.*tearDown.*${systemoutend}" singleline="true"
+ message="tearDown message not present" />
+ <au:assertMatches string="${reportxml}" pattern="${systemoutstart}.*tearDown.*tearDown.*${systemoutend}" singleline="true"
+ message="Two tearDown messages not present" />
+ <assertDoesntMatch string="${reportxml}" pattern="${systemoutstart}.*tearDown.*tearDown.*tearDown.*${systemoutend}" singleline="true"
+ message="Too many tearDown messages present" />
+ <clean/>
+ </target>
+
+ <target name="suitesetupteardown" depends="-createreport">
+ <loadfile property="reportxml" srcFile="${reportfile}" />
+ <au:assertMatches string="${reportxml}" pattern="${systemoutstart}.*suiteSetUp.*${systemoutend}" singleline="true"
+ message="suiteSetUp message not present" />
+ <assertDoesntMatch string="${reportxml}" pattern="${systemoutstart}.*suiteSetUp.*suiteSetUp.*${systemoutend}" singleline="true"
+ message="Too many suiteSetUp messages present" />
+ <au:assertMatches string="${reportxml}" pattern="${systemoutstart}.*suiteTearDown.*${systemoutend}" singleline="true"
+ message="suiteTearDown message not present" />
+ <assertDoesntMatch string="${reportxml}" pattern="${systemoutstart}.*suiteTearDown.*suiteTearDown.*${systemoutend}" singleline="true"
+ message="Too many suiteTearDown messages present" />
+ <clean/>
+ </target>
+
+ <target name="badcharacters" depends="-createreport">
+ <loadfile property="reportxml" srcFile="${reportfile}" />
+ <au:assertMatches string="${reportxml}" pattern="${systemoutstart}.*&#x5d;&#x5d;&gt;.*${systemoutend}" singleline="true"
+ message="Bad characters not escaped" />
+ <clean/>
+ </target>
+
+
+ <target name="suiteSetUp">
+ <echo>suiteSetUp</echo>
+ </target>
+
+ <target name="suiteTearDown">
+ <echo>suiteTearDown</echo>
+ </target>
+
+ <target name="setUp">
+ <echo>setUp</echo>
+ </target>
+
+ <target name="tearDown">
+ <echo>tearDown</echo>
+ </target>
+
+ <target name="testEcho">
+ <echo level="debug">debugmessage</echo>
+ <echo level="verbose">verbosemessage</echo>
+ <echo level="info">infomessage</echo>
+ <echo level="warning">warningmessage</echo>
+ <echo level="error">errormessage</echo>
+ </target>
+
+ <target name="test2">
+ <echo>test2</echo>
+ <echo>bad characters: ]]></echo>
+ </target>
+
+</project>
Propchange: ant/antlibs/antunit/trunk/src/etc/testcases/listener/xmllistener.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: ant/antlibs/antunit/trunk/src/etc/testcases/listener/xmllistener.xml
------------------------------------------------------------------------------
svn:executable = *
Modified: ant/antlibs/antunit/trunk/src/main/org/apache/ant/antunit/listener/XMLAntUnitListener.java
URL: http://svn.apache.org/viewvc/ant/antlibs/antunit/trunk/src/main/org/apache/ant/antunit/listener/XMLAntUnitListener.java?rev=645841&r1=645840&r2=645841&view=diff
==============================================================================
--- ant/antlibs/antunit/trunk/src/main/org/apache/ant/antunit/listener/XMLAntUnitListener.java (original)
+++ ant/antlibs/antunit/trunk/src/main/org/apache/ant/antunit/listener/XMLAntUnitListener.java Tue Apr 8 03:44:46 2008
@@ -30,6 +30,7 @@
import org.apache.ant.antunit.AssertionFailedException;
+import org.apache.tools.ant.BuildEvent;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Location;
import org.apache.tools.ant.Project;
@@ -53,6 +54,10 @@
private Document doc;
private Element root;
private Element currentTest;
+ /**
+ * Collects log messages.
+ */
+ private StringBuffer log = new StringBuffer();
public XMLAntUnitListener() {
super(new BaseAntUnitListener.SendLogTo(SendLogTo.FILE), "xml");
@@ -92,8 +97,14 @@
public void endTestSuite(Project testProject, String buildFile) {
try {
- Element e = DOMUtils.createChildElement(root,
- XMLConstants.ATTR_TESTS);
+ Element e;
+ if (log.length() > 0) {
+ e = DOMUtils.createChildElement(root, XMLConstants.SYSTEM_OUT);
+ DOMUtils.appendCDATA(e, log.toString());
+ log.setLength(0);
+ domWri.write(e, wri, 1, INDENT);
+ }
+ e = DOMUtils.createChildElement(root, XMLConstants.ATTR_TESTS);
DOMUtils.appendText(e, String.valueOf(runCount));
domWri.write(e, wri, 1, INDENT);
e = DOMUtils.createChildElement(root, XMLConstants.ATTR_FAILURES);
@@ -178,6 +189,11 @@
} catch (IOException ex) {
throw new BuildException(ex);
}
+ }
+
+ protected void messageLogged(BuildEvent event) {
+ log.append(event.getMessage());
+ log.append(System.getProperty("line.separator"));
}
/**
Added: ant/antlibs/antunit/trunk/src/tests/junit/org/apache/ant/antunit/listener/XMLListenerTest.java
URL: http://svn.apache.org/viewvc/ant/antlibs/antunit/trunk/src/tests/junit/org/apache/ant/antunit/listener/XMLListenerTest.java?rev=645841&view=auto
==============================================================================
--- ant/antlibs/antunit/trunk/src/tests/junit/org/apache/ant/antunit/listener/XMLListenerTest.java (added)
+++ ant/antlibs/antunit/trunk/src/tests/junit/org/apache/ant/antunit/listener/XMLListenerTest.java Tue Apr 8 03:44:46 2008
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.ant.antunit.listener;
+
+import org.apache.tools.ant.BuildFileTest;
+
+/**
+ * Tests the plain listener.
+ */
+public class XMLListenerTest extends BuildFileTest {
+ protected void setUp() throws Exception {
+ configureProject("src/etc/testcases/listener/xmllistener.xml");
+ }
+
+ public void testStdoutPlacement() {
+ executeTarget("stdoutplacement");
+ }
+
+ public void testShowDefault() {
+ executeTarget("showdefault");
+ }
+
+ public void testShowError() {
+ executeTarget("showerror");
+ }
+
+ public void testShowWarning() {
+ executeTarget("showwarning");
+ }
+
+ public void testShowInfo() {
+ executeTarget("showinfo");
+ }
+
+ public void testShowVerbose() {
+ executeTarget("showverbose");
+ }
+
+ public void testShowDebug() {
+ executeTarget("showdebug");
+ }
+
+ public void testShowNone() {
+ executeTarget("shownone");
+ }
+
+ public void testSetUpTearDown() {
+ executeTarget("setupteardown");
+ }
+
+ /*
+ public void testSuiteSetUpTearDown() {
+ executeTarget("suitesetupteardown");
+ }
+ */
+
+ public void testBadCharacters() {
+ executeTarget("badcharacters");
+ }
+
+}
\ No newline at end of file
Propchange: ant/antlibs/antunit/trunk/src/tests/junit/org/apache/ant/antunit/listener/XMLListenerTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: ant/antlibs/antunit/trunk/src/tests/junit/org/apache/ant/antunit/listener/XMLListenerTest.java
------------------------------------------------------------------------------
svn:executable = *