View Javadoc
1   package org.apache.maven.surefire.report;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *     http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import org.apache.maven.surefire.util.internal.ImmutableMap;
23  
24  import java.util.Collections;
25  import java.util.Map;
26  
27  /**
28   * @author Kristian Rosenvold
29   */
30  public class SimpleReportEntry
31      implements TestSetReportEntry
32  {
33      private final Map<String, String> systemProperties;
34  
35      private final String source;
36  
37      private final String name;
38  
39      private final StackTraceWriter stackTraceWriter;
40  
41      private final Integer elapsed;
42  
43      private final String message;
44  
45      public SimpleReportEntry()
46      {
47          this( null, null );
48      }
49  
50      public SimpleReportEntry( String source, String name )
51      {
52          this( source, name, null, null );
53      }
54  
55      public SimpleReportEntry( String source, String name, Map<String, String> systemProperties )
56      {
57          this( source, name, null, null, systemProperties );
58      }
59  
60      private SimpleReportEntry( String source, String name, StackTraceWriter stackTraceWriter )
61      {
62          this( source, name, stackTraceWriter, null );
63      }
64  
65      public SimpleReportEntry( String source, String name, Integer elapsed )
66      {
67          this( source, name, null, elapsed );
68      }
69  
70      public SimpleReportEntry( String source, String name, String message )
71      {
72          this( source, name, null, null, message, Collections.<String, String>emptyMap() );
73      }
74  
75      protected SimpleReportEntry( String source, String name, StackTraceWriter stackTraceWriter, Integer elapsed,
76                                   String message, Map<String, String> systemProperties )
77      {
78          if ( source == null )
79          {
80              source = "null";
81          }
82          if ( name == null )
83          {
84              name = "null";
85          }
86  
87          this.source = source;
88  
89          this.name = name;
90  
91          this.stackTraceWriter = stackTraceWriter;
92  
93          this.message = message;
94  
95          this.elapsed = elapsed;
96  
97          this.systemProperties = new ImmutableMap<String, String>( systemProperties );
98      }
99  
100     public SimpleReportEntry( String source, String name, StackTraceWriter stackTraceWriter, Integer elapsed )
101     {
102         this( source, name, stackTraceWriter, elapsed, Collections.<String, String>emptyMap() );
103     }
104 
105     public SimpleReportEntry( String source, String name, StackTraceWriter stackTraceWriter, Integer elapsed,
106                               Map<String, String> systemProperties )
107     {
108         this( source, name, stackTraceWriter, elapsed, safeGetMessage( stackTraceWriter ), systemProperties );
109     }
110 
111     public static SimpleReportEntry assumption( String source, String name, String message )
112     {
113         return new SimpleReportEntry( source, name, message );
114     }
115 
116     public static SimpleReportEntry ignored( String source, String name, String message )
117     {
118         return new SimpleReportEntry( source, name, message );
119     }
120 
121     public static SimpleReportEntry withException( String source, String name, StackTraceWriter stackTraceWriter )
122     {
123         return new SimpleReportEntry( source, name, stackTraceWriter );
124     }
125 
126     private static String safeGetMessage( StackTraceWriter stackTraceWriter )
127     {
128         try
129         {
130             SafeThrowable t = stackTraceWriter == null ? null : stackTraceWriter.getThrowable();
131             return t == null ? null : t.getMessage();
132         }
133         catch ( Throwable t )
134         {
135             return t.getMessage();
136         }
137     }
138 
139     @Override
140     public String getSourceName()
141     {
142         return source;
143     }
144 
145     @Override
146     public String getName()
147     {
148         return name;
149     }
150 
151     @Override
152     public String getGroup()
153     {
154         return null;
155     }
156 
157     @Override
158     public StackTraceWriter getStackTraceWriter()
159     {
160         return stackTraceWriter;
161     }
162 
163     @Override
164     public Integer getElapsed()
165     {
166         return elapsed;
167     }
168 
169     @Override
170     public String toString()
171     {
172         return "ReportEntry{" + "source='" + source + '\'' + ", name='" + name + '\'' + ", stackTraceWriter="
173             + stackTraceWriter + ", elapsed=" + elapsed + ",message=" + message + '}';
174     }
175 
176     @Override
177     public String getMessage()
178     {
179         return message;
180     }
181 
182     @Override
183     public boolean equals( Object o )
184     {
185         if ( this == o )
186         {
187             return true;
188         }
189         if ( o == null || getClass() != o.getClass() )
190         {
191             return false;
192         }
193 
194         SimpleReportEntry that = (SimpleReportEntry) o;
195         return isElapsedTimeEqual( that ) && isNameEqual( that ) && isSourceEqual( that ) && isStackEqual( that );
196     }
197 
198     @Override
199     public int hashCode()
200     {
201         int result = source != null ? source.hashCode() : 0;
202         result = 31 * result + ( name != null ? name.hashCode() : 0 );
203         result = 31 * result + ( stackTraceWriter != null ? stackTraceWriter.hashCode() : 0 );
204         result = 31 * result + ( elapsed != null ? elapsed.hashCode() : 0 );
205         return result;
206     }
207 
208     @Override
209     public String getNameWithGroup()
210     {
211         return getName();
212     }
213 
214     @Override
215     public Map<String, String> getSystemProperties()
216     {
217         return systemProperties;
218     }
219 
220     private boolean isElapsedTimeEqual( SimpleReportEntry en )
221     {
222         return elapsed != null ? elapsed.equals( en.elapsed ) : en.elapsed == null;
223     }
224 
225     private boolean isNameEqual( SimpleReportEntry en )
226     {
227         return name != null ? name.equals( en.name ) : en.name == null;
228     }
229 
230     private boolean isSourceEqual( SimpleReportEntry en )
231     {
232         return source != null ? source.equals( en.source ) : en.source == null;
233     }
234 
235     private boolean isStackEqual( SimpleReportEntry en )
236     {
237         return stackTraceWriter != null ? stackTraceWriter.equals( en.stackTraceWriter ) : en.stackTraceWriter == null;
238     }
239 }