View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    * 
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   * 
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  
18  package org.apache.log4j.util;
19  
20  import java.util.regex.Pattern;
21  
22  
23  public class JunitTestRunnerFilter implements Filter {
24  
25    private static final String[] PATTERNS = {
26            "at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner",
27            "at org.apache.tools.ant",
28            "at junit.textui.TestRunner",
29            "at com.intellij.rt.execution.junit",
30            "at java.lang.reflect.Method.invoke",
31            "at org.apache.maven.",
32            "at org.codehaus.",
33  		  "at org.junit.internal.runners."
34    };
35    private final Pattern[] patterns;
36  
37    public JunitTestRunnerFilter() {
38        patterns = new Pattern[PATTERNS.length];
39        for (int i = 0; i < PATTERNS.length; i++) {
40            patterns[i] = Pattern.compile(PATTERNS[i]);
41        }
42  
43    }
44  
45    /***
46     * Filter out stack trace lines coming from the various JUnit TestRunners.
47     */
48    public String filter(String in) {
49      if (in == null) {
50        return null;
51      }
52  
53        //
54        //  restore the one instance of Method.invoke that we actually want
55        //
56      if (in.indexOf("at junit.framework.TestCase.runTest") != -1) {
57          return "\tat java.lang.reflect.Method.invoke(X)\n" + in;
58      }
59  
60      for (int i = 0; i < patterns.length; i++) {
61          if(patterns[i].matcher(in).find()) {
62              return null;
63          }
64      }
65      return in;
66    }
67  }