1f20b4175b1bce35b58e6d77447ecd230e2b9fcc5the.mindstormpackage org.testng.util; 2f20b4175b1bce35b58e6d77447ecd230e2b9fcc5the.mindstorm 3ad662c0a3971e0461a1aaa7580fd3c7e7a114a02Cédric Beustimport java.util.concurrent.atomic.AtomicInteger; 4ad662c0a3971e0461a1aaa7580fd3c7e7a114a02Cédric Beust 5f20b4175b1bce35b58e6d77447ecd230e2b9fcc5the.mindstormimport org.testng.IRetryAnalyzer; 6f20b4175b1bce35b58e6d77447ecd230e2b9fcc5the.mindstormimport org.testng.ITestResult; 7f20b4175b1bce35b58e6d77447ecd230e2b9fcc5the.mindstorm 8f20b4175b1bce35b58e6d77447ecd230e2b9fcc5the.mindstorm/** 9f20b4175b1bce35b58e6d77447ecd230e2b9fcc5the.mindstorm * An implementation of IRetryAnalyzer that allows you to specify 10f20b4175b1bce35b58e6d77447ecd230e2b9fcc5the.mindstorm * the maximum number of times you want your test to be retried. 110f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin * 12f20b4175b1bce35b58e6d77447ecd230e2b9fcc5the.mindstorm * @author tocman@gmail.com (Jeremie Lenfant-Engelmann) 13f20b4175b1bce35b58e6d77447ecd230e2b9fcc5the.mindstorm */ 14f20b4175b1bce35b58e6d77447ecd230e2b9fcc5the.mindstormpublic abstract class RetryAnalyzerCount implements IRetryAnalyzer { 15f20b4175b1bce35b58e6d77447ecd230e2b9fcc5the.mindstorm 16f20b4175b1bce35b58e6d77447ecd230e2b9fcc5the.mindstorm // Default retry once. 17f20b4175b1bce35b58e6d77447ecd230e2b9fcc5the.mindstorm AtomicInteger count = new AtomicInteger(1); 18f20b4175b1bce35b58e6d77447ecd230e2b9fcc5the.mindstorm 19f20b4175b1bce35b58e6d77447ecd230e2b9fcc5the.mindstorm /** 20f20b4175b1bce35b58e6d77447ecd230e2b9fcc5the.mindstorm * Set the max number of time the method needs to be retried. 21f20b4175b1bce35b58e6d77447ecd230e2b9fcc5the.mindstorm */ 22f20b4175b1bce35b58e6d77447ecd230e2b9fcc5the.mindstorm protected void setCount(int count) { 23f20b4175b1bce35b58e6d77447ecd230e2b9fcc5the.mindstorm this.count.set(count); 24f20b4175b1bce35b58e6d77447ecd230e2b9fcc5the.mindstorm } 25f20b4175b1bce35b58e6d77447ecd230e2b9fcc5the.mindstorm 26f20b4175b1bce35b58e6d77447ecd230e2b9fcc5the.mindstorm /** 276252cfe9c8cb5ced75be4d77b7209eb5f3601b70Tim wu * Return the current counter value 286252cfe9c8cb5ced75be4d77b7209eb5f3601b70Tim wu */ 296252cfe9c8cb5ced75be4d77b7209eb5f3601b70Tim wu protected int getCount(){ 306252cfe9c8cb5ced75be4d77b7209eb5f3601b70Tim wu return this.count.get(); 316252cfe9c8cb5ced75be4d77b7209eb5f3601b70Tim wu } 326252cfe9c8cb5ced75be4d77b7209eb5f3601b70Tim wu 336252cfe9c8cb5ced75be4d77b7209eb5f3601b70Tim wu /** 340f7e671c94aeedee2fbc796b3318d44b0297b6cdnullin * Retries the test if count is not 0. 35f20b4175b1bce35b58e6d77447ecd230e2b9fcc5the.mindstorm * @param result The result of the test. 36f20b4175b1bce35b58e6d77447ecd230e2b9fcc5the.mindstorm */ 379ae4e70bde40b32777755f9294a5b1b06b420005Cédric Beust @Override 38f20b4175b1bce35b58e6d77447ecd230e2b9fcc5the.mindstorm public boolean retry(ITestResult result) { 39ea69c6b70bf7a9d11f327104051039a498e61e83Ryan Schmitt if (count.getAndDecrement() > 0) { 40ea69c6b70bf7a9d11f327104051039a498e61e83Ryan Schmitt return retryMethod(result); 41f20b4175b1bce35b58e6d77447ecd230e2b9fcc5the.mindstorm } 42ea69c6b70bf7a9d11f327104051039a498e61e83Ryan Schmitt return false; 43f20b4175b1bce35b58e6d77447ecd230e2b9fcc5the.mindstorm } 44f20b4175b1bce35b58e6d77447ecd230e2b9fcc5the.mindstorm 45f20b4175b1bce35b58e6d77447ecd230e2b9fcc5the.mindstorm /** 46f20b4175b1bce35b58e6d77447ecd230e2b9fcc5the.mindstorm * The method implemented by the class that test if the test 47f20b4175b1bce35b58e6d77447ecd230e2b9fcc5the.mindstorm * must be retried or not. 48f20b4175b1bce35b58e6d77447ecd230e2b9fcc5the.mindstorm * @param result The result of the test. 49f20b4175b1bce35b58e6d77447ecd230e2b9fcc5the.mindstorm * @return true if the test must be retried, false otherwise. 50f20b4175b1bce35b58e6d77447ecd230e2b9fcc5the.mindstorm */ 51f20b4175b1bce35b58e6d77447ecd230e2b9fcc5the.mindstorm public abstract boolean retryMethod(ITestResult result); 52f20b4175b1bce35b58e6d77447ecd230e2b9fcc5the.mindstorm} 53