blob: 58a310c72cb3529cbe1a638f66c492ae54f11815 [file] [log] [blame]
/*
* 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
*
* https://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 java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
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;
/**
* A test listener for <antunit> modelled after the Plain JUnit
* test listener that is part of Ant.
*/
public class PlainAntUnitListener extends BaseAntUnitListener {
private OutputStream out;
/**
* Helper to store intermediate output.
*/
private StringWriter inner;
/**
* Convenience layer on top of {@link #inner inner}.
*/
private PrintWriter wri;
/**
* Collects log messages.
*/
private StringBuffer log = new StringBuffer();
private static final String NEW_LINE = System.getProperty("line.separator");
public PlainAntUnitListener() {
super(new BaseAntUnitListener.SendLogTo(SendLogTo.ANT_LOG), "txt");
}
/**
* Where to send the test report.
*/
public void setSendLogTo(BaseAntUnitListener.SendLogTo logTo) {
super.setSendLogTo(logTo);
}
public void startTestSuite(Project testProject, String buildFile) {
super.startTestSuite(testProject, buildFile);
inner = new StringWriter();
wri = new PrintWriter(inner);
out = getOut(buildFile);
StringBuilder sb = new StringBuilder("Build File: ").append(buildFile).append(NEW_LINE);
try {
out.write(sb.toString().getBytes());
out.flush();
} catch (IOException ex) {
throw new BuildException("Unable to write output", ex);
}
}
public void endTestSuite(Project testProject, String buildFile) {
long runTime = System.currentTimeMillis() - start;
StringBuilder sb = new StringBuilder("Tests run: ");
sb.append(runCount);
sb.append(", Failures: ");
sb.append(failureCount);
sb.append(", Errors: ");
sb.append(errorCount);
sb.append(", Time elapsed: ");
sb.append(nf.format(runTime/ 1000.0));
sb.append(" sec");
sb.append(NEW_LINE);
if (log.length() > 0) {
sb.append("------------- Log Output ---------------");
sb.append(NEW_LINE);
sb.append(log.toString());
log.setLength(0);
sb.append("------------- ---------------- ---------------");
sb.append(NEW_LINE);
}
if (out != null) {
try {
out.write(sb.toString().getBytes());
wri.close();
out.write(inner.toString().getBytes());
out.flush();
} catch (IOException ioex) {
throw new BuildException("Unable to write output", ioex);
} finally {
close(out);
}
}
}
public void startTest(String target) {
super.startTest(target);
wri.print("Target: " + target + " ");
}
public void endTest(String target) {
double seconds = (System.currentTimeMillis() - testStart) / 1000.0;
wri.println("took " + nf.format(seconds) + " sec");
}
public void addFailure(String target, AssertionFailedException ae) {
super.addFailure(target, ae);
formatError(" FAILED", ae);
}
public void addError(String target, Throwable ae) {
super.addError(target, ae);
formatError(" caused an ERROR", ae);
}
private void formatError(String type, Throwable t) {
wri.println(type);
Location l = getLocation(t);
if (l.getLineNumber() != 0) {
wri.print("\tat line " + l.getLineNumber());
if (l.getColumnNumber() != 0) {
wri.print(", column " + l.getColumnNumber());
}
wri.println();
}
wri.println("\tMessage: " + t.getMessage());
wri.print("\t");
}
protected void messageLogged(BuildEvent event) {
log.append(event.getMessage());
log.append(NEW_LINE);
}
}