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