View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.maven.plugins.surefire.report;
20  
21  import java.io.File;
22  import java.io.UnsupportedEncodingException;
23  import java.net.URL;
24  import java.net.URLDecoder;
25  import java.util.ArrayList;
26  import java.util.List;
27  import java.util.Map;
28  
29  import junit.framework.TestCase;
30  import org.apache.maven.plugin.surefire.log.api.NullConsoleLogger;
31  
32  import static java.util.Collections.singletonList;
33  
34  /**
35   *
36   */
37  @SuppressWarnings("checkstyle:magicnumber")
38  public class SurefireReportParserTest extends TestCase {
39      public void testParseXMLReportFiles() throws Exception {
40          SurefireReportParser parser = new SurefireReportParser(singletonList(getTestDir()), new NullConsoleLogger());
41  
42          List<ReportTestSuite> suites = parser.parseXMLReportFiles();
43  
44          assertEquals(8, suites.size());
45  
46          for (ReportTestSuite suite : suites) {
47              assertNotNull(suite.getName() + " was not correctly parsed", suite.getTestCases());
48              assertNotNull(suite.getName());
49              assertNotNull(suite.getPackageName());
50          }
51      }
52  
53      private File getTestDir() throws UnsupportedEncodingException {
54          URL resource = getClass().getResource("/test-reports");
55          // URLDecoder.decode necessary for JDK 1.5+, where spaces are escaped to %20
56          return new File(URLDecoder.decode(resource.getPath(), "UTF-8")).getAbsoluteFile();
57      }
58  
59      public void testGetSummary() throws Exception {
60          ReportTestSuite tSuite1 = new ReportTestSuite()
61                  .setNumberOfErrors(10)
62                  .setNumberOfFailures(20)
63                  .setNumberOfSkipped(2)
64                  .setTimeElapsed(1.0f)
65                  .setNumberOfTests(100);
66  
67          ReportTestSuite tSuite2 = new ReportTestSuite()
68                  .setNumberOfErrors(10)
69                  .setNumberOfFailures(20)
70                  .setNumberOfSkipped(2)
71                  .setTimeElapsed(1.0f)
72                  .setNumberOfTests(100);
73  
74          List<ReportTestSuite> suites = new ArrayList<>();
75  
76          suites.add(tSuite1);
77  
78          suites.add(tSuite2);
79  
80          SurefireReportParser parser = new SurefireReportParser(null, new NullConsoleLogger());
81  
82          Map<String, Object> testMap = parser.getSummary(suites);
83  
84          assertEquals(20, (int) testMap.get("totalErrors"));
85  
86          assertEquals(40, (int) testMap.get("totalFailures"));
87  
88          assertEquals(200, (int) testMap.get("totalTests"));
89  
90          assertEquals(4, (int) testMap.get("totalSkipped"));
91  
92          assertEquals(2.0f, (float) testMap.get("totalElapsedTime"));
93  
94          assertEquals(0.68f, (float) testMap.get("totalPercentage"));
95      }
96  
97      public void testGetSuitesGroupByPackage() {
98          ReportTestSuite tSuite1 = new ReportTestSuite();
99  
100         ReportTestSuite tSuite2 = new ReportTestSuite();
101 
102         ReportTestSuite tSuite3 = new ReportTestSuite();
103 
104         tSuite1.setPackageName("Package1");
105 
106         tSuite2.setPackageName("Package1");
107 
108         tSuite3.setPackageName("Package2");
109 
110         List<ReportTestSuite> suites = new ArrayList<>();
111 
112         suites.add(tSuite1);
113 
114         suites.add(tSuite2);
115 
116         suites.add(tSuite3);
117 
118         SurefireReportParser parser = new SurefireReportParser(null, new NullConsoleLogger());
119 
120         Map<String, List<ReportTestSuite>> groupMap = parser.getSuitesGroupByPackage(suites);
121 
122         assertEquals(2, groupMap.size());
123 
124         assertEquals(tSuite1, groupMap.get("Package1").get(0));
125 
126         assertEquals(tSuite2, groupMap.get("Package1").get(1));
127 
128         assertEquals(tSuite3, groupMap.get("Package2").get(0));
129     }
130 
131     public void testComputePercentage() throws Exception {
132         SurefireReportParser parser = new SurefireReportParser(null, new NullConsoleLogger());
133 
134         assertEquals(0.7f, (float) parser.computePercentage(100, 20, 10, 0));
135     }
136 
137     public void testGetFailureDetails() {
138         ReportTestSuite tSuite1 = new ReportTestSuite();
139 
140         ReportTestSuite tSuite2 = new ReportTestSuite();
141 
142         ReportTestCase tCase1 = new ReportTestCase();
143 
144         ReportTestCase tCase2 = new ReportTestCase();
145 
146         ReportTestCase tCase3 = new ReportTestCase();
147 
148         tCase1.setFailure(null, IllegalArgumentException.class.getName());
149 
150         tCase3.setFailure("index: 0, size: 0", IndexOutOfBoundsException.class.getName());
151 
152         List<ReportTestCase> tCases = new ArrayList<>();
153 
154         List<ReportTestCase> tCases2 = new ArrayList<>();
155 
156         tCases.add(tCase1);
157 
158         tCases.add(tCase2);
159 
160         tCases2.add(tCase3);
161 
162         tSuite1.setTestCases(tCases);
163 
164         tSuite2.setTestCases(tCases2);
165 
166         List<ReportTestSuite> suites = new ArrayList<>();
167 
168         suites.add(tSuite1);
169 
170         suites.add(tSuite2);
171 
172         SurefireReportParser parser = new SurefireReportParser(null, new NullConsoleLogger());
173 
174         List<ReportTestCase> failures = parser.getFailureDetails(suites);
175 
176         assertEquals(2, failures.size());
177 
178         assertEquals(tCase1, failures.get(0));
179 
180         assertEquals(tCase3, failures.get(1));
181     }
182 }