diff options
author | Irina Iancu <elenairina@google.com> | 2016-08-30 11:33:45 +0000 |
---|---|---|
committer | Klaus Aehlig <aehlig@google.com> | 2016-08-30 11:36:57 +0000 |
commit | 1b2071f1809e8fd91a238b3b08fc1b32bf24b89b (patch) | |
tree | 4c300a12079a8b933cf15c707b3e7356de025187 /src | |
parent | c5519ba5ed273e8753287a4108a7e9dfceb12854 (diff) |
Cloned from commit 2dddbeeac25ace6f53dd3ce6ac588111c239bdf0 by '[] patch'.
Original change by elenairina@elenairina:incompatible-guava5:667:citc on 2016/08/24 08:03:39.
Original change ignored the fact that LinkedListMultimap and ConcurrentHashMap
handle the get operation differently. The first one returns an empty collection when
there is nothing associated with a given key in the data structure, while the
latter simply returns null.
Removing some of GUAVA dependencies from junit.runner.junit4 and -.model
Bazel users that are using a different Guava version than the one in the
junitrunner jar are getting an IncompatibleClassChangeError. Rewriting
parts of junitrunner code so it won't depend on Guava anymore.
Continuing progress on issue #1150.
--
MOS_MIGRATED_REVID=131695499
Diffstat (limited to 'src')
3 files changed, 55 insertions, 33 deletions
diff --git a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4Runner.java b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4Runner.java index 10447a7b70..1c67697eab 100644 --- a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4Runner.java +++ b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4Runner.java @@ -14,9 +14,7 @@ package com.google.testing.junit.runner.junit4; -import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Supplier; -import com.google.common.io.Files; import com.google.testing.junit.junit4.runner.SuiteTrimmingFilter; import com.google.testing.junit.runner.internal.Stdout; import com.google.testing.junit.runner.model.TestSuiteModel; @@ -34,6 +32,7 @@ import org.junit.runner.notification.RunListener; import org.junit.runner.notification.RunNotifier; import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintStream; import java.util.Set; @@ -129,8 +128,10 @@ public class JUnit4Runner { private static void exitFileActive(@Nullable File file) { if (file != null) { - try { - Files.write(new byte[0], file); + try (FileOutputStream outputStream = new FileOutputStream(file, false)) { + // Overwrite file content. + outputStream.write(new byte[0]); + outputStream.close(); } catch (IOException e) { throw new RuntimeException("Could not write exit file at " + file, e); } @@ -148,7 +149,7 @@ public class JUnit4Runner { } } - @VisibleForTesting + // VisibleForTesting TestSuiteModel getModel() { return modelSupplier.get(); } diff --git a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/model/TestCaseNode.java b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/model/TestCaseNode.java index 74ab90b090..af64e3b2f0 100644 --- a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/model/TestCaseNode.java +++ b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/model/TestCaseNode.java @@ -16,15 +16,11 @@ package com.google.testing.junit.runner.model; import static com.google.testing.junit.runner.util.TestPropertyExporter.INITIAL_INDEX_FOR_REPEATED_PROPERTY; -import com.google.common.collect.ConcurrentHashMultiset; -import com.google.common.collect.LinkedListMultimap; -import com.google.common.collect.ListMultimap; -import com.google.common.collect.Multimaps; -import com.google.common.collect.Multiset; import com.google.testing.junit.runner.model.TestResult.Status; import com.google.testing.junit.runner.util.TestPropertyExporter; import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Queue; @@ -39,10 +35,10 @@ import org.junit.runner.Description; class TestCaseNode extends TestNode implements TestPropertyExporter.Callback { private final TestSuiteNode parent; private final Map<String, String> properties = new ConcurrentHashMap<>(); - private final Multiset<String> repeatedPropertyNames = ConcurrentHashMultiset.create(); + private final Map<String, Integer> repeatedPropertyNamesToRepetitions = new HashMap<>(); private final Queue<Throwable> globalFailures = new ConcurrentLinkedQueue<>(); - private final ListMultimap<Description, Throwable> dynamicTestToFailures = - Multimaps.synchronizedListMultimap(LinkedListMultimap.<Description, Throwable>create()); + private final ConcurrentHashMap<Description, List<Throwable>> dynamicTestToFailures = + new ConcurrentHashMap<>(); @Nullable private volatile TestInterval runTimeInterval = null; private volatile State state = State.INITIAL; @@ -117,11 +113,12 @@ class TestCaseNode extends TestNode implements TestPropertyExporter.Callback { @Override public void dynamicTestFailure(Description test, Throwable throwable, long now) { compareAndSetState(State.INITIAL, State.FINISHED, now); - dynamicTestToFailures.put(test, throwable); + addThrowableToDynamicTestToFailures(test, throwable); } private String getRepeatedPropertyName(String name) { - int index = repeatedPropertyNames.add(name, 1) + INITIAL_INDEX_FOR_REPEATED_PROPERTY; + int index = addNameToRepeatedPropertyNamesAndGetRepetitionsNr(name) + + INITIAL_INDEX_FOR_REPEATED_PROPERTY; return name + index; } @@ -130,6 +127,25 @@ class TestCaseNode extends TestNode implements TestPropertyExporter.Callback { return true; } + private synchronized void addThrowableToDynamicTestToFailures( + Description test, Throwable throwable) { + List<Throwable> throwables = dynamicTestToFailures.get(test); + if (throwables == null) { + throwables = new ArrayList<>(); + dynamicTestToFailures.put(test, throwables); + } + throwables.add(throwable); + } + + private synchronized int addNameToRepeatedPropertyNamesAndGetRepetitionsNr(String name) { + Integer previousRepetitionsNr = repeatedPropertyNamesToRepetitions.get(name); + if (previousRepetitionsNr == null) { + previousRepetitionsNr = 0; + } + repeatedPropertyNamesToRepetitions.put(name, previousRepetitionsNr + 1); + return previousRepetitionsNr; + } + private synchronized boolean compareAndSetState(State fromState, State toState, long now) { if (fromState == null || toState == null || state == null) { throw new NullPointerException(); @@ -198,6 +214,9 @@ class TestCaseNode extends TestNode implements TestPropertyExporter.Callback { // The dynamic test fails if the testcase itself fails or there is // a dynamic failure specifically for the dynamic test. List<Throwable> dynamicFailures = dynamicTestToFailures.get(test); + if (dynamicFailures == null) { + dynamicFailures = new ArrayList<>(); + } boolean failed = !globalFailures.isEmpty() || !dynamicFailures.isEmpty(); return new TestResult.Builder() .name(test.getDisplayName()) @@ -238,4 +257,4 @@ class TestCaseNode extends TestNode implements TestPropertyExporter.Callback { return status; } } -} +}
\ No newline at end of file diff --git a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/model/TestSuiteModel.java b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/model/TestSuiteModel.java index 08be4caeda..c3babe3632 100644 --- a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/model/TestSuiteModel.java +++ b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/model/TestSuiteModel.java @@ -14,13 +14,8 @@ package com.google.testing.junit.runner.model; -import static com.google.common.base.Predicates.notNull; -import static com.google.common.collect.Maps.filterValues; -import static com.google.common.collect.Maps.transformValues; import static java.util.concurrent.TimeUnit.NANOSECONDS; -import com.google.common.base.Function; -import com.google.common.base.Preconditions; import com.google.common.base.Ticker; import com.google.testing.junit.junit4.runner.DynamicTestException; import com.google.testing.junit.runner.sharding.ShardingEnvironment; @@ -30,6 +25,7 @@ import java.io.IOException; import java.io.OutputStream; import java.io.StringWriter; import java.util.Collection; +import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -269,7 +265,9 @@ public class TestSuiteModel { } public TestSuiteModel build(String suiteName, Description... topLevelSuites) { - Preconditions.checkState(!buildWasCalled, "Builder.build() was already called"); + if (buildWasCalled) { + throw new IllegalStateException("Builder.build() was already called"); + } buildWasCalled = true; if (shardingEnvironment.isShardingEnabled()) { shardingFilter = getShardingFilter(topLevelSuites); @@ -317,7 +315,9 @@ public class TestSuiteModel { } private void addTestCase(TestSuiteNode parentSuite, Description testCaseDesc) { - Preconditions.checkArgument(testCaseDesc.isTest()); + if (!testCaseDesc.isTest()) { + throw new IllegalArgumentException(); + } if (!shardingFilter.shouldRun(testCaseDesc)) { return; } @@ -327,16 +327,18 @@ public class TestSuiteModel { } } + /** + * Converts the values of the Map from {@link TestNode} to {@link TestCaseNode} filtering out null + * values. + */ private static Map<Description, TestCaseNode> filterTestCases(Map<Description, TestNode> tests) { - return filterValues(transformValues(tests, toTestCaseNode()), notNull()); - } - - private static Function<TestNode, TestCaseNode> toTestCaseNode() { - return new Function<TestNode, TestCaseNode>() { - @Override - public TestCaseNode apply(TestNode test) { - return test instanceof TestCaseNode ? (TestCaseNode) test : null; + Map<Description, TestCaseNode> filteredAndConvertedTests = new HashMap<>(); + for (Description key : tests.keySet()) { + TestNode testNode = tests.get(key); + if (testNode instanceof TestCaseNode) { + filteredAndConvertedTests.put(key, (TestCaseNode) testNode); } - }; + } + return filteredAndConvertedTests; } -} +}
\ No newline at end of file |