aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/java_tools
diff options
context:
space:
mode:
authorGravatar Irina Iancu <elenairina@google.com>2016-08-24 15:03:39 +0000
committerGravatar John Cater <jcater@google.com>2016-08-24 20:01:28 +0000
commit2dddbeeac25ace6f53dd3ce6ac588111c239bdf0 (patch)
tree3ac6aee153986e602f2ee94407a84f212d60ff1d /src/java_tools
parent7e2739074d84937771aa96857a1ae01e7b7f851c (diff)
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=131172156
Diffstat (limited to 'src/java_tools')
-rw-r--r--src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4Runner.java10
-rw-r--r--src/java_tools/junitrunner/java/com/google/testing/junit/runner/model/TestCaseNode.java36
-rw-r--r--src/java_tools/junitrunner/java/com/google/testing/junit/runner/model/TestSuiteModel.java35
3 files changed, 51 insertions, 30 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..d9938c7951 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;
@@ -130,7 +129,10 @@ public class JUnit4Runner {
private static void exitFileActive(@Nullable File file) {
if (file != null) {
try {
- Files.write(new byte[0], file);
+ // Overwrite file content.
+ FileOutputStream outputStream = new FileOutputStream(file, false);
+ outputStream.write(new byte[0]);
+ outputStream.close();
} catch (IOException e) {
throw new RuntimeException("Could not write exit file at " + file, e);
}
@@ -148,7 +150,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..50cb8b7e83 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<Throwable>();
+ 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();
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..543acfe80e 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,19 @@ 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<Description, TestCaseNode>();
+ for (Description key : tests.keySet()) {
+ TestNode testNode = tests.get(key);
+ if (testNode != null && testNode instanceof TestCaseNode) {
+ filteredAndConvertedTests.put(key, (TestCaseNode) testNode);
}
- };
+ }
+ return filteredAndConvertedTests;
}
}