View Javadoc

1   /*
2    *  soapUI, copyright (C) 2004-2008 eviware.com 
3    *
4    *  soapUI is free software; you can redistribute it and/or modify it under the 
5    *  terms of version 2.1 of the GNU Lesser General Public License as published by 
6    *  the Free Software Foundation.
7    *
8    *  soapUI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without 
9    *  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
10   *  See the GNU Lesser General Public License for more details at gnu.org.
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 }