1 package org.testng.util;
2 
3 import java.util.concurrent.atomic.AtomicInteger;
4 
5 import org.testng.IRetryAnalyzer;
6 import org.testng.ITestResult;
7 
8 /**
9  * An implementation of IRetryAnalyzer that allows you to specify
10  * the maximum number of times you want your test to be retried.
11  *
12  * @author tocman@gmail.com (Jeremie Lenfant-Engelmann)
13  */
14 public abstract class RetryAnalyzerCount implements IRetryAnalyzer {
15 
16   // Default retry once.
17   AtomicInteger count = new AtomicInteger(1);
18 
19   /**
20    * Set the max number of time the method needs to be retried.
21    */
setCount(int count)22   protected void setCount(int count) {
23     this.count.set(count);
24   }
25 
26   /**
27    * Return the current counter value
28    */
getCount()29   protected int getCount(){
30       return this.count.get();
31   }
32 
33   /**
34    * Retries the test if count is not 0.
35    * @param result The result of the test.
36    */
37   @Override
retry(ITestResult result)38   public boolean retry(ITestResult result) {
39     if (count.getAndDecrement() > 0) {
40       return retryMethod(result);
41     }
42     return false;
43   }
44 
45   /**
46    * The method implemented by the class that test if the test
47    * must be retried or not.
48    * @param result The result of the test.
49    * @return true if the test must be retried, false otherwise.
50    */
retryMethod(ITestResult result)51   public abstract boolean retryMethod(ITestResult result);
52 }
53