001: // Copyright (c) 2002-2005 Canoo Engineering AG, Switzerland.
002: package com.canoo.webtest.reporting;
003:
004: import java.io.File;
005: import java.io.IOException;
006: import java.io.StringWriter;
007: import java.util.ArrayList;
008: import java.util.Collections;
009: import java.util.Iterator;
010: import java.util.List;
011:
012: import junit.framework.TestCase;
013:
014: import org.apache.log4j.Logger;
015: import org.apache.tools.ant.BuildException;
016: import org.apache.tools.ant.Project;
017: import org.apache.tools.ant.Target;
018: import org.w3c.dom.Document;
019:
020: import com.canoo.webtest.ant.TestStepSequence;
021: import com.canoo.webtest.ant.WebtestTask;
022: import com.canoo.webtest.engine.Configuration;
023: import com.canoo.webtest.self.ErrorStepStub;
024: import com.canoo.webtest.self.StepStub;
025: import com.canoo.webtest.self.TestBlock;
026: import com.canoo.webtest.self.ThrowAssert;
027: import com.canoo.webtest.self.VerifyParameterErrorStepStub;
028: import com.canoo.webtest.steps.Step;
029:
030: /**
031: * Unit tests for {@link XmlReporter}.
032: * @author Unknown
033: * @author Marc Guillemot
034: */
035: public class XmlReporterTest extends TestCase {
036: private static final Logger LOG = Logger
037: .getLogger(XmlReporterTest.class);
038:
039: private RootStepResult fResultInfo;
040: private Project fProject;
041: private Target fTarget;
042:
043: public void setUp() {
044: fProject = new Project();
045: fTarget = new Target();
046:
047: final List steps = new ArrayList();
048: final Step step1 = new StepStub();
049: step1.setDescription("h\u00fcg\u00f6");
050: step1.setProject(fProject);
051: step1.setOwningTarget(fTarget);
052: steps.add(step1);
053:
054: final Step step2 = new ErrorStepStub();
055: step2.setProject(fProject);
056: step2.setOwningTarget(fTarget);
057: steps.add(step2);
058:
059: fResultInfo = createResultInfo(steps);
060: }
061:
062: private RootStepResult createResultInfo(final List liSteps) {
063: final StepExecutionListener[] tabListener = { null };
064: final WebtestTask webtest = new WebtestTask() {
065: protected void writeTestReportIfNeeded(RootStepResult result) {
066: };
067:
068: protected void stopBuildIfNeeded(
069: RootStepResult webTestResult, Configuration config) {
070: };
071:
072: public void execute() throws BuildException {
073: super .execute();
074: tabListener[0] = getResultBuilderListener();
075: }
076: };
077: webtest.setProject(fProject);
078: webtest.setOwningTarget(fTarget);
079: webtest.setName("Dummy Test Spec");
080:
081: final Configuration config = new Configuration();
082: config.setProject(fProject);
083: config.setOwningTarget(fTarget);
084: config.setHost("myHost");
085: webtest.addConfig(config);
086:
087: // make access to result info, executeSteps should not be made public
088: final TestStepSequence steps = new TestStepSequence();
089: steps.setTaskName("steps");
090: steps.setProject(fProject);
091: steps.setOwningTarget(fTarget);
092: webtest.addSteps(steps);
093:
094: for (final Iterator iter = liSteps.iterator(); iter.hasNext();) {
095: final Step step = (Step) iter.next();
096: step.setProject(fProject);
097: steps.addStep(step);
098: }
099:
100: webtest.execute();
101:
102: return tabListener[0].getRootResult();
103: }
104:
105: public void testCreateNewFile() throws Exception {
106: final Document doc = getGeneratedDocument(new File(
107: "nonExisting.xml"), fResultInfo);
108: assertNotNull("doc", doc);
109: assertMergedDocument(doc);
110: }
111:
112: private Document getGeneratedDocument(final File resultFile,
113: final RootStepResult resultInfo) throws Exception {
114: final Document docs[] = { null };
115: final XmlReporter reporter = new XmlReporter() {
116: protected File getResultFile(final RootStepResult resultInfo) {
117: return resultFile;
118: }
119:
120: protected void writeXmlFile(final Document doc,
121: final File outfile) throws Exception {
122: docs[0] = doc;
123: }
124: };
125: reporter.generateReport(resultInfo);
126:
127: return docs[0];
128: }
129:
130: public void testOpenExistingFile() throws Exception {
131: final Document doc = getGeneratedDocument(new File(
132: "resources/testExistingNodes.xml"), fResultInfo);
133: assertNotNull("doc", doc);
134:
135: assertMergedDocument(doc);
136: assertTrue(generateXml(doc).indexOf("endtime") > -1);
137: }
138:
139: /**
140: * endtime should appear in report even if test no successfull (this is a change compared to
141: * previous WebTest reporting, but a not successfull webtest still have an end!)
142: * @throws Exception if the test fails
143: */
144: public void testOpenExistingFileWithNotCompletedStep()
145: throws Exception {
146: // add another step which won't be executed because second step failed
147: fResultInfo.addChild(new StepResult("myNotCompletedTask"));
148: final Document doc = getGeneratedDocument(new File(
149: "resources/testExistingNodes.xml"), fResultInfo);
150: assertNotNull("doc", doc);
151: assertTrue(generateXml(doc).indexOf("endtime") > -1);
152: }
153:
154: public void testOpenExistingFileWithStepErrorInParameterValidation()
155: throws Exception {
156: final Step step1 = new VerifyParameterErrorStepStub();
157: fResultInfo = createResultInfo(Collections.singletonList(step1));
158:
159: final Document doc = getGeneratedDocument(new File(
160: "resources/testExistingNodes.xml"), fResultInfo);
161: assertTrue(generateXml(doc).indexOf("endtime") > -1);
162: }
163:
164: public void testOpenExistingFileWrongRootNode() throws Exception {
165: final XmlReporter xmlReporter = new XmlReporter();
166: ThrowAssert.assertThrows("bad root",
167: ReportCreationException.class, new TestBlock() {
168: public void call() throws Exception {
169: xmlReporter.readXmlFile(new File(
170: "resources/testWrongRootNode.xml"));
171: }
172: });
173: }
174:
175: public void testReportException() {
176: String message = "my message";
177: Exception e = new RuntimeException(message);
178: ReportCreationException reportCreationException = new ReportCreationException(
179: e);
180: assertEquals(message, reportCreationException.getMessage());
181: assertSame(e, reportCreationException.getInitialThrowable());
182: }
183:
184: private void assertMergedDocument(Document doc) throws IOException {
185: assertTrue(generateXml(doc).indexOf("Dummy Test Spec") > -1);
186: }
187:
188: private String generateXml(final Document doc) throws IOException {
189: final StringWriter writer = new StringWriter();
190: new XmlReporter().writeXmlFile(doc, writer);
191: final String mergedDoc = writer.toString();
192: LOG.debug(mergedDoc);
193: return mergedDoc;
194: }
195: }
|