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.setStringValue(stacktrace);
100 noofTestCases++;
101 noofFailures++;
102 totalTime += time;
103 return testcase;
104 }
105
106 public Testcase addTestCaseWithError(String name, double time, String error, String stacktrace) {
107 Testcase testcase = testsuiteDoc.getTestsuite().addNewTestcase();
108 testcase.setName(name);
109 testcase.setTime(time);
110 com.eviware.soapui.junit.ErrorDocument.Error err = testcase.addNewError();
111 err.setType(error);
112 err.setStringValue(stacktrace);
113 noofTestCases++;
114 noofErrors++;
115 totalTime += time;
116 return testcase;
117 }
118
119 private void setSystemProperties(Properties properties) {
120 Set keys = System.getProperties().keySet();
121 for (Object keyO : keys) {
122 String key = keyO.toString();
123 String value = System.getProperty(key);
124 Property prop = properties.addNewProperty();
125 prop.setName(key);
126 prop.setValue(value);
127 }
128 }
129
130 @SuppressWarnings("unchecked")
131 public void save( File file ) throws IOException {
132 finishReport();
133
134 Map prefixes = new HashMap();
135 prefixes.put("", "http://eviware.com/soapui/junit");
136
137 testsuiteDoc.save( file,
138 new XmlOptions()
139 .setSaveOuter()
140 .setCharacterEncoding( "utf-8" )
141 .setUseDefaultNamespace()
142 .setSaveImplicitNamespaces(prefixes));
143 }
144
145 public TestsuiteDocument finishReport()
146 {
147 testsuiteDoc.getTestsuite().setTests(noofTestCases);
148 testsuiteDoc.getTestsuite().setFailures(noofFailures);
149 testsuiteDoc.getTestsuite().setErrors(noofErrors);
150 testsuiteDoc.getTestsuite().setTime( new BigDecimal( totalTime ));
151
152 return testsuiteDoc;
153 }
154 }