[testng] 264/355: Fix #425 Wrong invocation order with lastTimeOnly

Eugene Zhukov eugene-guest at moszumanska.debian.org
Tue Aug 18 10:20:13 UTC 2015


This is an automated email from the git hooks/post-receive script.

eugene-guest pushed a commit to annotated tag OpenBSD
in repository testng.

commit ce11604bda708dbd2c42435e77027d5c360c9fa9
Author: Julien Herr <julien.herr at alcatel-lucent.com>
Date:   Wed May 6 23:49:42 2015 +0200

    Fix #425 Wrong invocation order with lastTimeOnly
---
 src/main/java/org/testng/ITestNGMethod.java               |  8 ++++++++
 src/main/java/org/testng/internal/BaseTestMethod.java     | 13 +++++++++++--
 src/main/java/org/testng/internal/ClonedMethod.java       |  5 +++++
 src/main/java/org/testng/internal/Invoker.java            |  6 +++---
 src/main/java/org/testng/internal/TestNGMethod.java       | 11 +++++++++++
 src/test/java/org/testng/internal/MethodInstanceTest.java |  5 +++++
 6 files changed, 43 insertions(+), 5 deletions(-)

diff --git a/src/main/java/org/testng/ITestNGMethod.java b/src/main/java/org/testng/ITestNGMethod.java
index b91426d..f0db926 100755
--- a/src/main/java/org/testng/ITestNGMethod.java
+++ b/src/main/java/org/testng/ITestNGMethod.java
@@ -165,6 +165,14 @@ public interface ITestNGMethod extends Comparable, Serializable, Cloneable {
   void setInvocationCount(int count);
 
   /**
+   * @return the total number of thimes this method needs to be invoked, including possible
+   *         clones of this method - this is relevant when threadPoolSize is bigger than 1
+   *         where each clone of this method is only invoked once individually, i.e.
+   *         {@link org.testng.ITestNGMethod#getInvocationCount()} would always return 1.
+   */
+  int getTotalInvocationCount();
+
+  /**
    * @return the success percentage for this method (between 0 and 100).
    */
   int getSuccessPercentage();
diff --git a/src/main/java/org/testng/internal/BaseTestMethod.java b/src/main/java/org/testng/internal/BaseTestMethod.java
index e0ded14..39b635d 100755
--- a/src/main/java/org/testng/internal/BaseTestMethod.java
+++ b/src/main/java/org/testng/internal/BaseTestMethod.java
@@ -153,8 +153,8 @@ public abstract class BaseTestMethod implements ITestNGMethod {
     int result = -2;
     Class<?> thisClass = getRealClass();
     Class<?> otherClass = ((ITestNGMethod) o).getRealClass();
-    if (this == o) {
-      result = 0;
+    if (this == o) {
+      result = 0;
     } else if (thisClass.isAssignableFrom(otherClass)) {
       result = -1;
     } else if (otherClass.isAssignableFrom(thisClass)) {
@@ -347,6 +347,15 @@ public abstract class BaseTestMethod implements ITestNGMethod {
   }
 
   /**
+   * {@inheritDoc}
+   * @return the number of times this method or one of its clones must be invoked.
+   */
+  @Override
+  public int getTotalInvocationCount() {
+    return 1;
+  }
+
+  /**
    * {@inheritDoc} Default value for successPercentage.
    */
   @Override
diff --git a/src/main/java/org/testng/internal/ClonedMethod.java b/src/main/java/org/testng/internal/ClonedMethod.java
index ccdcc6a..29b7265 100755
--- a/src/main/java/org/testng/internal/ClonedMethod.java
+++ b/src/main/java/org/testng/internal/ClonedMethod.java
@@ -105,6 +105,11 @@ public class ClonedMethod implements ITestNGMethod {
   }
 
   @Override
+  public int getTotalInvocationCount() {
+    return 1;
+  }
+
+  @Override
   public long getInvocationTimeOut() {
     return m_method.getInvocationTimeOut();
   }
diff --git a/src/main/java/org/testng/internal/Invoker.java b/src/main/java/org/testng/internal/Invoker.java
index 8a15ae7..f699c5a 100644
--- a/src/main/java/org/testng/internal/Invoker.java
+++ b/src/main/java/org/testng/internal/Invoker.java
@@ -796,12 +796,12 @@ public class Invoker implements IInvoker {
         // If we have parameters, set the boolean if we are about to run
         // the last invocation
         if (tm.getParameterInvocationCount() > 0) {
-          isLast = current == tm.getParameterInvocationCount();
+          isLast = current == tm.getParameterInvocationCount() * tm.getTotalInvocationCount();
         }
         // If we have invocationCount > 1, set the boolean if we are about to
         // run the last invocation
-        else if (tm.getInvocationCount() > 1) {
-          isLast = current == tm.getInvocationCount();
+        else if (tm.getTotalInvocationCount() > 1) {
+          isLast = current == tm.getTotalInvocationCount();
         }
         if (! cm.isLastTimeOnly() || (cm.isLastTimeOnly() && isLast)) {
           result.add(m);
diff --git a/src/main/java/org/testng/internal/TestNGMethod.java b/src/main/java/org/testng/internal/TestNGMethod.java
index d364696..7e86ef9 100755
--- a/src/main/java/org/testng/internal/TestNGMethod.java
+++ b/src/main/java/org/testng/internal/TestNGMethod.java
@@ -29,6 +29,7 @@ public class TestNGMethod extends BaseTestMethod implements Serializable {
   private static final long serialVersionUID = -1742868891986775307L;
   private int m_threadPoolSize = 0;
   private int m_invocationCount = 1;
+  private int m_totalInvocationCount = m_invocationCount;
   private int m_successPercentage = 100;
 
   /**
@@ -62,6 +63,14 @@ public class TestNGMethod extends BaseTestMethod implements Serializable {
    * {@inheritDoc}
    */
   @Override
+  public int getTotalInvocationCount() {
+    return m_totalInvocationCount;
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
   public int getSuccessPercentage() {
     return m_successPercentage;
   }
@@ -96,6 +105,7 @@ public class TestNGMethod extends BaseTestMethod implements Serializable {
         m_successPercentage = testAnnotation.getSuccessPercentage();
 
         setInvocationCount(testAnnotation.getInvocationCount());
+        m_totalInvocationCount = testAnnotation.getInvocationCount();
         setThreadPoolSize(testAnnotation.getThreadPoolSize());
         setAlwaysRun(testAnnotation.getAlwaysRun());
         setDescription(findDescription(testAnnotation, xmlTest));
@@ -185,6 +195,7 @@ public class TestNGMethod extends BaseTestMethod implements Serializable {
     clone.setEnabled(getEnabled());
     clone.setParameterInvocationCount(getParameterInvocationCount());
     clone.setInvocationCount(getInvocationCount());
+    clone.m_totalInvocationCount = getTotalInvocationCount();
     clone.m_successPercentage = getSuccessPercentage();
     clone.setTimeOut(getTimeOut());
     clone.setRetryAnalyzer(getRetryAnalyzer());
diff --git a/src/test/java/org/testng/internal/MethodInstanceTest.java b/src/test/java/org/testng/internal/MethodInstanceTest.java
index 36bf2e1..f3c81dc 100644
--- a/src/test/java/org/testng/internal/MethodInstanceTest.java
+++ b/src/test/java/org/testng/internal/MethodInstanceTest.java
@@ -406,6 +406,11 @@ public class MethodInstanceTest {
     }
 
     @Override
+    public int getTotalInvocationCount() {
+      return 0;
+    }
+
+    @Override
     public void setInvocationCount(int count) {
     }
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/testng.git



More information about the pkg-java-commits mailing list