Concurrency bug fix in ResultMap
diff --git a/3rdparty/backport-util-concurrent-2.2.jar b/3rdparty/backport-util-concurrent-2.2.jar
index 338e546..61f54c3 100644
--- a/3rdparty/backport-util-concurrent-2.2.jar
+++ b/3rdparty/backport-util-concurrent-2.2.jar
Binary files differ
diff --git a/3rdparty/backport-util-concurrent-full-2.2.jar b/3rdparty/backport-util-concurrent-full-2.2.jar
new file mode 100644
index 0000000..20a1687
--- /dev/null
+++ b/3rdparty/backport-util-concurrent-full-2.2.jar
Binary files differ
diff --git a/3rdparty/qdox-1.6.1.jar b/3rdparty/qdox-1.6.1.jar
index 8587ae2..76f49e8 100644
--- a/3rdparty/qdox-1.6.1.jar
+++ b/3rdparty/qdox-1.6.1.jar
Binary files differ
diff --git a/3rdparty/qdox-full-1.6.1.jar b/3rdparty/qdox-full-1.6.1.jar
new file mode 100644
index 0000000..a7a9c2c
--- /dev/null
+++ b/3rdparty/qdox-full-1.6.1.jar
Binary files differ
diff --git a/src/main/org/testng/internal/ResultMap.java b/src/jdk14/org/testng/internal/ResultMap.java
similarity index 83%
copy from src/main/org/testng/internal/ResultMap.java
copy to src/jdk14/org/testng/internal/ResultMap.java
index b3288f1..04c94a0 100644
--- a/src/main/org/testng/internal/ResultMap.java
+++ b/src/jdk14/org/testng/internal/ResultMap.java
@@ -5,14 +5,14 @@
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
+import edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap;
import org.testng.IResultMap;
import org.testng.ITestNGMethod;
import org.testng.ITestResult;
public class ResultMap implements IResultMap {
- private Map<ITestResult, ITestNGMethod> m_map =
- new HashMap<ITestResult, ITestNGMethod>();
+ private Map<ITestResult, ITestNGMethod> m_map = new ConcurrentHashMap/*<ITestResult, ITestNGMethod>*/();
public void addResult(ITestResult result, ITestNGMethod method) {
m_map.put(result, method);
diff --git a/src/main/org/testng/internal/ResultMap.java b/src/jdk15/org/testng/internal/ResultMap.java
similarity index 85%
rename from src/main/org/testng/internal/ResultMap.java
rename to src/jdk15/org/testng/internal/ResultMap.java
index b3288f1..31ccaf8 100644
--- a/src/main/org/testng/internal/ResultMap.java
+++ b/src/jdk15/org/testng/internal/ResultMap.java
@@ -5,14 +5,14 @@
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
import org.testng.IResultMap;
import org.testng.ITestNGMethod;
import org.testng.ITestResult;
public class ResultMap implements IResultMap {
- private Map<ITestResult, ITestNGMethod> m_map =
- new HashMap<ITestResult, ITestNGMethod>();
+ private Map<ITestResult, ITestNGMethod> m_map = new ConcurrentHashMap<ITestResult, ITestNGMethod>();
public void addResult(ITestResult result, ITestNGMethod method) {
m_map.put(result, method);
diff --git a/src/main/org/testng/TestRunner.java b/src/main/org/testng/TestRunner.java
index 660d5b4..b49925c 100644
--- a/src/main/org/testng/TestRunner.java
+++ b/src/main/org/testng/TestRunner.java
@@ -990,9 +990,7 @@
//
public void addPassedTest(ITestNGMethod tm, ITestResult tr) {
- synchronized(m_passedTests) {
- m_passedTests.addResult(tr, tm);
- }
+ m_passedTests.addResult(tr, tm);
}
public Set<ITestResult> getPassedTests(ITestNGMethod tm) {
@@ -1000,9 +998,7 @@
}
public void addSkippedTest(ITestNGMethod tm, ITestResult tr) {
- synchronized(m_skippedTests) {
- m_skippedTests.addResult(tr, tm);
- }
+ m_skippedTests.addResult(tr, tm);
}
public void addInvokedMethod(InvokedMethod im) {
@@ -1035,22 +1031,14 @@
// ITestResultNotifier
/////
-// public ITestNGMethod[] getTestMethods() {
-// return m_allTestMethods;
-// }
-
private void logFailedTest(ITestNGMethod method,
ITestResult tr,
boolean withinSuccessPercentage) {
if (withinSuccessPercentage) {
- synchronized(m_failedButWithinSuccessPercentageTests) {
- m_failedButWithinSuccessPercentageTests.addResult(tr, method);
- }
+ m_failedButWithinSuccessPercentageTests.addResult(tr, method);
}
else {
- synchronized(m_failedTests) {
- m_failedTests.addResult(tr, method);
- }
+ m_failedTests.addResult(tr, method);
}
}
@@ -1141,21 +1129,15 @@
private class ConfigurationListener implements IConfigurationListener {
public void onConfigurationFailure(ITestResult itr) {
- synchronized(m_failedConfigurations) {
- m_failedConfigurations.addResult(itr, itr.getMethod());
- }
+ m_failedConfigurations.addResult(itr, itr.getMethod());
}
public void onConfigurationSkip(ITestResult itr) {
- synchronized(m_skippedConfigurations) {
- m_skippedConfigurations.addResult(itr, itr.getMethod());
- }
+ m_skippedConfigurations.addResult(itr, itr.getMethod());
}
public void onConfigurationSuccess(ITestResult itr) {
- synchronized(m_passedConfigurations) {
- m_passedConfigurations.addResult(itr, itr.getMethod());
- }
+ m_passedConfigurations.addResult(itr, itr.getMethod());
}
}
} // TestRunner