You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by dw...@apache.org on 2012/03/09 09:06:09 UTC

svn commit: r1298736 - in /lucene/dev/branches/branch_3x: lucene/test-framework/src/java/org/apache/lucene/util/ solr/test-framework/src/java/org/apache/solr/

Author: dweiss
Date: Fri Mar  9 08:06:08 2012
New Revision: 1298736

URL: http://svn.apache.org/viewvc?rev=1298736&view=rev
Log:
Class rule to store the currently executing test class. Removed Solr's code that pulled this from the stack frames (which wasn't working because rules wrap the actual test code).

Added:
    lucene/dev/branches/branch_3x/lucene/test-framework/src/java/org/apache/lucene/util/StoreClassNameRule.java
Modified:
    lucene/dev/branches/branch_3x/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java
    lucene/dev/branches/branch_3x/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCaseRunner.java
    lucene/dev/branches/branch_3x/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java

Modified: lucene/dev/branches/branch_3x/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java?rev=1298736&r1=1298735&r2=1298736&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java (original)
+++ lucene/dev/branches/branch_3x/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java Fri Mar  9 08:06:08 2012
@@ -209,11 +209,9 @@ public abstract class LuceneTestCase ext
   private static HashMap<String, String> restoreProperties = new HashMap<String,String>();
 
   protected static Map<MockDirectoryWrapper,StackTraceElement[]> stores;
-  
-  /** @deprecated: until we fix no-fork problems in solr tests */
-  @Deprecated
-  static List<String> testClassesRun = new ArrayList<String>();
-  
+
+  private static List<String> testClassesRun = new ArrayList<String>();
+
   private static void initRandom() {
     assert !random.initialized;
     staticSeed = "random".equals(TEST_SEED) ? seedRand.nextLong() : ThreeLongs.fromString(TEST_SEED).l1;
@@ -224,11 +222,20 @@ public abstract class LuceneTestCase ext
   @Deprecated
   private static boolean icuTested = false;
 
+  /**
+   * Stores the currently class under test.
+   */
+  private static final StoreClassNameRule classNameRule = new StoreClassNameRule(); 
+  
   @ClassRule
-  public static TestRule classRules = RuleChain.outerRule(new SystemPropertiesInvariantRule());
+  public static TestRule classRules = RuleChain
+    .outerRule(new SystemPropertiesInvariantRule())
+    .around(classNameRule);
 
   @BeforeClass
   public static void beforeClassLuceneTestCaseJ4() {
+    testClassesRun.add(getTestClass().getSimpleName());
+
     initRandom();
     tempDirs.clear();
     stores = Collections.synchronizedMap(new IdentityHashMap<MockDirectoryWrapper,StackTraceElement[]>());
@@ -1416,6 +1423,13 @@ public abstract class LuceneTestCase ext
     return sb.toString();
   }
 
+  /**
+   * Return the current class being tested.
+   */
+  public static Class<?> getTestClass() {
+    return classNameRule.getTestClass();
+  }
+  
   // recorded seed: for beforeClass
   private static long staticSeed;
   // seed for individual test methods, changed in @before

Modified: lucene/dev/branches/branch_3x/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCaseRunner.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCaseRunner.java?rev=1298736&r1=1298735&r2=1298736&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCaseRunner.java (original)
+++ lucene/dev/branches/branch_3x/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCaseRunner.java Fri Mar  9 08:06:08 2012
@@ -61,7 +61,6 @@ public class LuceneTestCaseRunner extend
     
     Random r = new Random(runnerSeed);
     
-    LuceneTestCase.testClassesRun.add(getTestClass().getJavaClass().getSimpleName());
     testMethods = new ArrayList<FrameworkMethod>();
     for (Method m : getTestClass().getJavaClass().getMethods()) {
       // check if the current test's class has methods annotated with @Ignore

Added: lucene/dev/branches/branch_3x/lucene/test-framework/src/java/org/apache/lucene/util/StoreClassNameRule.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/test-framework/src/java/org/apache/lucene/util/StoreClassNameRule.java?rev=1298736&view=auto
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/test-framework/src/java/org/apache/lucene/util/StoreClassNameRule.java (added)
+++ lucene/dev/branches/branch_3x/lucene/test-framework/src/java/org/apache/lucene/util/StoreClassNameRule.java Fri Mar  9 08:06:08 2012
@@ -0,0 +1,39 @@
+package org.apache.lucene.util;
+
+import org.junit.rules.TestRule;
+import org.junit.runner.Description;
+import org.junit.runners.model.Statement;
+
+public class StoreClassNameRule implements TestRule {
+  private volatile Class<?> testClass;
+
+  @Override
+  public Statement apply(final Statement s, final Description d) {
+    if (!d.isSuite()) {
+      throw new IllegalArgumentException("This is a @ClassRule (applies to suites only).");
+    }
+
+    return new Statement() {
+      @Override
+      public void evaluate() throws Throwable {
+        try {
+          testClass = d.getTestClass();
+          s.evaluate();
+        } finally {
+          testClass = null;
+        }
+      }
+    };
+  }
+  
+  /**
+   * Returns the test class currently executing in this rule.
+   */
+  public Class<?> getTestClass() {
+    Class<?> clz = testClass;
+    if (clz == null) {
+      throw new RuntimeException("The rule is not currently executing.");
+    }
+    return clz;
+  }
+}

Modified: lucene/dev/branches/branch_3x/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java?rev=1298736&r1=1298735&r2=1298736&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java (original)
+++ lucene/dev/branches/branch_3x/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java Fri Mar  9 08:06:08 2012
@@ -179,20 +179,11 @@ public abstract class SolrTestCaseJ4 ext
   }
 
   protected static String getClassName() {
-    StackTraceElement[] stack = new RuntimeException("WhoAmI").fillInStackTrace().getStackTrace();
-    for (int i = stack.length-1; i>=0; i--) {
-      StackTraceElement ste = stack[i];
-      String cname = ste.getClassName();
-      if (cname.indexOf(".lucene.")>=0 || cname.indexOf(".solr.")>=0) {
-        return cname;
-      }
-    }
-    return SolrTestCaseJ4.class.getName();
+    return getTestClass().getName();
   }
 
   protected static String getSimpleClassName() {
-    String cname = getClassName();
-    return cname.substring(cname.lastIndexOf('.')+1);
+    return getTestClass().getSimpleName();
   }
 
   protected static String configString;