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 <[email protected]> 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 _______________________________________________ pkg-java-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-java-commits

