Index: src/main/org/testng/internal/MethodInheritance.java
===================================================================
--- src/main/org/testng/internal/MethodInheritance.java (revision 502)
+++ src/main/org/testng/internal/MethodInheritance.java (working copy)
@@ -102,27 +102,19 @@
// Sort them
sortMethodsByInheritance(l, baseClassToChild);
- // Set methodDependedUpon accordingly
- if (baseClassToChild) {
- for (int i = 1; i < l.size(); i++) {
- ITestNGMethod m1 = l.get(i - 1);
- ITestNGMethod m2 = l.get(i);
+ for (int i = 0; i < l.size(); i++) {
+ ITestNGMethod m1 = l.get(i);
+ // Look for any method further down that is a subclass of this one.
+ // This handles the case when there are multiple BeforeClass/AfterClass
+ // methods in the same class.
+ for (int j = i + 1; j < l.size(); j++) {
+ ITestNGMethod m2 = l.get(j);
if (! equalsEffectiveClass(m1, m2)) {
Utils.log("MethodInheritance", 4, m2 + " DEPENDS ON " + m1);
m2.addMethodDependedUpon(MethodHelper.calculateMethodCanonicalName(m1));
}
}
}
- else {
- for (int i = 0; i < l.size() - 1; i++) {
- ITestNGMethod m1 = l.get(i);
- ITestNGMethod m2 = l.get(i + 1);
- if (! equalsEffectiveClass(m1, m2)) {
- m2.addMethodDependedUpon(MethodHelper.calculateMethodCanonicalName(m1));
- Utils.log("MethodInheritance", 4, m2 + " DEPENDS ON " + m1);
- }
- }
- }
}
}
}
Index: src/main/org/testng/TestRunner.java
===================================================================
--- src/main/org/testng/TestRunner.java (revision 502)
+++ src/main/org/testng/TestRunner.java (working copy)
@@ -536,9 +536,13 @@
List<ITestNGMethod> parallelList= new ArrayList<ITestNGMethod>();
computeTestLists(sequentialList, parallelList);
+
+ int sequentialSize = 0;
+ for (List<ITestNGMethod> methodList: sequentialList) {
+ sequentialSize += methodList.size();
+ }
+ log(3, "Found " + (sequentialSize + parallelList.size()) + " applicable methods");
- log(3, "Found " + (sequentialList.size() + parallelList.size()) + " applicable methods");
-
//
// Create the workers
//
@@ -753,7 +757,9 @@
findAnnotation(cls, org.testng.internal.annotations.ITest.class);
if (test != null) {
if (test.getSequential()) {
- String className = cls.getName();
+ // This must not be cls.getName() because that will sort methods in a super class together
+ // instead of with the instance class itself (i.e. the subclass).
+ String className = tm.getTestClass().getRealClass().getName();
List<ITestNGMethod> list = sequentialAttributeList.get(className);
if (list == null) {
list = new ArrayList<ITestNGMethod>();