1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.report;
14
15 import java.io.File;
16 import java.io.IOException;
17 import java.math.BigDecimal;
18 import java.util.HashMap;
19 import java.util.Map;
20 import java.util.Set;
21
22 import org.apache.xmlbeans.XmlOptions;
23
24 import com.eviware.soapui.junit.Properties;
25 import com.eviware.soapui.junit.Property;
26 import com.eviware.soapui.junit.Testcase;
27 import com.eviware.soapui.junit.Testsuite;
28 import com.eviware.soapui.junit.TestsuiteDocument;
29 import com.eviware.soapui.junit.FailureDocument.Failure;
30
31 /***
32 * Wrapper for a number of Test runs
33 */
34
35 public class JUnitReport {
36 TestsuiteDocument testsuiteDoc;
37 int noofTestCases, noofFailures, noofErrors;
38 double totalTime;
39 StringBuffer systemOut;
40 StringBuffer systemErr;
41
42 public JUnitReport(){
43 systemOut = new StringBuffer();
44 systemErr = new StringBuffer();
45
46 testsuiteDoc = TestsuiteDocument.Factory.newInstance();
47 Testsuite testsuite = testsuiteDoc.addNewTestsuite();
48 Properties properties = testsuite.addNewProperties();
49 setSystemProperties(properties);
50 }
51
52 public void setTotalTime(double time) {
53 testsuiteDoc.getTestsuite().setTime(new BigDecimal(time));
54 }
55
56 public void setTestSuiteName(String name) {
57 testsuiteDoc.getTestsuite().setName(name);
58 }
59
60 public void setNoofErrorsInTestSuite(int errors) {
61 testsuiteDoc.getTestsuite().setErrors(errors);
62 }
63
64 public void setNoofFailuresInTestSuite(int failures) {
65 testsuiteDoc.getTestsuite().setFailures(failures);
66 }
67
68 public void systemOut(String systemout) {
69 systemOut.append(systemout);
70 }
71
72 public void systemErr(String systemerr) {
73 systemErr.append(systemerr);
74 }
75
76 public void setSystemOut(String systemout) {
77 testsuiteDoc.getTestsuite().setSystemOut(systemout);
78 }
79
80 public void setSystemErr(String systemerr) {
81 testsuiteDoc.getTestsuite().setSystemErr(systemerr);
82 }
83
84 public Testcase addTestCase(String name, double time) {
85 Testcase testcase = testsuiteDoc.getTestsuite().addNewTestcase();
86 testcase.setName(name);
87 testcase.setTime(time);
88 noofTestCases++;
89 totalTime += time;
90 return testcase;
91 }
92
93 public Testcase addTestCaseWithFailure(String name, double time, String failure, String stacktrace) {
94 Testcase testcase = testsuiteDoc.getTestsuite().addNewTestcase();
95 testcase.setName(name);
96 testcase.setTime(time);
97 Failure fail = testcase.addNewFailure();
98 fail.setType(failure);
99 fail.setMessage(failure);
100 fail.setStringValue(stacktrace);
101 noofTestCases++;
102 noofFailures++;
103 totalTime += time;
104 return testcase;
105 }
106
107 public Testcase addTestCaseWithError(String name, double time, String error, String stacktrace) {
108 Testcase testcase = testsuiteDoc.getTestsuite().addNewTestcase();
109 testcase.setName(name);
110 testcase.setTime(time);
111 com.eviware.soapui.junit.ErrorDocument.Error err = testcase.addNewError();
112 err.setType(error);
113 err.setMessage(error);
114 err.setStringValue(stacktrace);
115 noofTestCases++;
116 noofErrors++;
117 totalTime += time;
118 return testcase;
119 }
120
121 private void setSystemProperties(Properties properties) {
122 Set keys = System.getProperties().keySet();
123 for (Object keyO : keys) {
124 String key = keyO.toString();
125 String value = System.getProperty(key);
126 Property prop = properties.addNewProperty();
127 prop.setName(key);
128 prop.setValue(value);
129 }
130 }
131
132 @SuppressWarnings("unchecked")
133 public void save( File file ) throws IOException {
134 finishReport();
135
136 Map prefixes = new HashMap();
137 prefixes.put("", "http://eviware.com/soapui/junit");
138
139 testsuiteDoc.save( file,
140 new XmlOptions()
141 .setSaveOuter()
142 .setCharacterEncoding( "utf-8" )
143 .setUseDefaultNamespace()
144 .setSaveImplicitNamespaces(prefixes));
145 }
146
147 public TestsuiteDocument finishReport()
148 {
149 testsuiteDoc.getTestsuite().setTests(noofTestCases);
150 testsuiteDoc.getTestsuite().setFailures(noofFailures);
151 testsuiteDoc.getTestsuite().setErrors(noofErrors);
152 testsuiteDoc.getTestsuite().setTime( new BigDecimal( totalTime ));
153
154 return testsuiteDoc;
155 }
156 }