From d8ece524dae6bfc9ac58d0630dc179cea2a1a06d Mon Sep 17 00:00:00 2001 From: Dawid Weiss Date: Wed, 3 Jul 2013 12:57:55 +0000 Subject: [PATCH] LUCENE-5059: Report -Dtests.method properly when Repeat annotation is used (strip augmentations). git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1499376 13f79535-47bb-0310-9956-ffa450edef68 --- .../TestReproduceMessageWithRepeated.java | 53 +++++++++++++++++++ .../util/RunListenerPrintReproduceInfo.java | 17 +++++- 2 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 lucene/core/src/test/org/apache/lucene/util/junitcompat/TestReproduceMessageWithRepeated.java diff --git a/lucene/core/src/test/org/apache/lucene/util/junitcompat/TestReproduceMessageWithRepeated.java b/lucene/core/src/test/org/apache/lucene/util/junitcompat/TestReproduceMessageWithRepeated.java new file mode 100644 index 00000000000..8b07c6a2828 --- /dev/null +++ b/lucene/core/src/test/org/apache/lucene/util/junitcompat/TestReproduceMessageWithRepeated.java @@ -0,0 +1,53 @@ +package org.apache.lucene.util.junitcompat; + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.JUnitCore; + +import com.carrotsearch.randomizedtesting.annotations.Repeat; + +/** + * Test reproduce message is right with {@link Repeat} annotation. + */ +public class TestReproduceMessageWithRepeated extends WithNestedTests { + public static class Nested extends AbstractNestedTest { + @Test + @Repeat(iterations = 10) + public void testMe() { + throw new RuntimeException("bad"); + } + } + + public TestReproduceMessageWithRepeated() { + super(true); + } + + @Test + public void testRepeatedMessage() throws Exception { + String syserr = runAndReturnSyserr(); + Assert.assertTrue(syserr.contains(" -Dtests.method=testMe ")); + } + + private String runAndReturnSyserr() { + JUnitCore.runClasses(Nested.class); + String err = getSysErr(); + return err; + } +} diff --git a/lucene/test-framework/src/java/org/apache/lucene/util/RunListenerPrintReproduceInfo.java b/lucene/test-framework/src/java/org/apache/lucene/util/RunListenerPrintReproduceInfo.java index fa7754eaf57..32f2cc0b802 100644 --- a/lucene/test-framework/src/java/org/apache/lucene/util/RunListenerPrintReproduceInfo.java +++ b/lucene/test-framework/src/java/org/apache/lucene/util/RunListenerPrintReproduceInfo.java @@ -88,12 +88,27 @@ public final class RunListenerPrintReproduceInfo extends RunListener { @Override public void testFinished(Description description) throws Exception { if (testFailed) { - reportAdditionalFailureInfo(description.getMethodName()); + reportAdditionalFailureInfo( + stripTestNameAugmentations( + description.getMethodName())); } scope = LifecycleScope.SUITE; testFailed = false; } + /** + * The {@link Description} object in JUnit does not expose the actual test method, + * instead it has the concept of a unique "name" of a test. To run the same method (tests) + * repeatedly, randomizedtesting must make those "names" unique: it appends the current iteration + * and seeds to the test method's name. We strip this information here. + */ + private String stripTestNameAugmentations(String methodName) { + if (methodName != null) { + methodName = methodName.replaceAll("\\s*\\{.+?\\}", ""); + } + return methodName; + } + @Override public void testRunFinished(Result result) throws Exception { if (printDiagnosticsAfterClass || LuceneTestCase.VERBOSE) {