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 java.io.File;
23  import java.io.PrintStream;
24  import java.util.List;
25  import java.util.Timer;
26  
27  /**
28   * @author Kristian Rosenvold
29   */
30  public class ReporterConfiguration
31  {
32      private final List reports;
33  
34      private final File reportsDirectory;
35  
36      private final PrintStream originalSystemOut;
37  
38      private final PrintStream originalSystemErr;
39  
40      private final Integer forkTimeout;
41  
42      /**
43       * A non-null Boolean value
44       */
45      private final Boolean trimStackTrace;
46  
47      private volatile boolean timedOut = false;
48  
49  
50      public ReporterConfiguration( List reports, File reportsDirectory, Boolean trimStackTrace, Integer forkWithTimeout )
51      {
52          this.reports = reports;
53          this.reportsDirectory = reportsDirectory;
54          this.trimStackTrace = trimStackTrace;
55          this.forkTimeout = forkWithTimeout;
56          /*
57          * While this may seem slightly odd, when this object is constructted no user code has been run
58          * (including classloading), and we can be guaranteed that no-one has modified System.out/System.err.
59          * As soon as we start loading user code, all h*ll breaks loose in this respect.
60           */
61          this.originalSystemOut = System.out;
62          this.originalSystemErr = System.err;
63  
64      }
65  
66      // todo: remove once we build with 2.7.2
67      public ReporterConfiguration( List reports, File reportsDirectory, Boolean trimStackTrace )
68      {
69          this( reports, reportsDirectory, trimStackTrace, null );
70      }
71  
72      /**
73       * The directory where reports will be created, normally ${project.build.directory}/surefire-reports
74       *
75       * @return A file pointing at the specified directory
76       */
77      public File getReportsDirectory()
78      {
79          return reportsDirectory;
80      }
81  
82      /**
83       * Indicates if reporting should trim the stack traces.
84       *
85       * @return true if stacktraces should be trimmed in reporting
86       */
87      public Boolean isTrimStackTrace()
88      {
89          return trimStackTrace;
90      }
91  
92      /**
93       * A list of classnames representing runnable reports for this test-run.
94       *
95       * @return A list of strings, each string is a classname of a class
96       *         implementing the org.apache.maven.surefire.report.Reporter interface
97       */
98      public List getReports()
99      {
100         return reports;
101     }
102 
103     /**
104      * The original system out belonging to the (possibly forked) surefire process.
105      * Note that users of Reporter/ReporterFactory should normally not be using this.
106      *
107      * @return A printstream.
108      */
109     public PrintStream getOriginalSystemOut()
110     {
111         return originalSystemOut;
112     }
113 
114     /**
115      * The original system err belonging to the (possibly forked) surefire process.
116      * Note that users of Reporter/ReporterFactory should normally not be using this.
117      *
118      * @return A printstream.
119      */
120     public PrintStream getOriginalSystemErr()
121     {
122         return originalSystemErr;
123     }
124 
125     /**
126      * Indicates that the test is running timed out, meaning this process could be abruptly killed.
127      * This will normally tell the reporter to delete result files upon startup.
128      *
129      * @return true if test run can be killed by timeout
130      */
131     public boolean isForkWithTimeout()
132     {
133         return getForkTimeout() != null;
134     }
135 
136     public Integer getForkTimeout()
137     {
138         return forkTimeout;
139     }
140 
141     public void setTimedOut( boolean timedOut )
142     {
143         this.timedOut = timedOut;
144     }
145 
146     public boolean isTimedOut()
147     {
148         return this.timedOut;
149     }
150 }