blob: 0ef5baf83b939a7cad054fc876a4f0185e3e093e [file] [log] [blame]
package test.retryAnalyzer;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.fail;
import java.util.concurrent.atomic.AtomicInteger;
import org.testng.IRetryAnalyzer;
import org.testng.ITestResult;
import org.testng.TestNG;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import com.google.common.collect.ConcurrentHashMultiset;
import com.google.common.collect.Multiset;
/**
* retryAnalyzer parameter unit tests.
* @author tocman@gmail.com (Jeremie Lenfant-Engelmann)
*
*/
public final class InvocationCountTest implements IRetryAnalyzer {
static final Multiset<String> invocations = ConcurrentHashMultiset.create();
private static final AtomicInteger retriesRemaining = new AtomicInteger(100);
private int r1 = 0;
private int r2 = 0;
private int r3 = 0;
private int r7 = 0;
private static int value = 42;
@Test(retryAnalyzer = InvocationCountTest.class)
public void testAnnotationWithNoRetries() {
}
@Test(retryAnalyzer = InvocationCountTest.class)
public void testAnnotationWithOneRetry() {
if (r1++ < 1) {
fail();
}
}
@Test(retryAnalyzer = InvocationCountTest.class)
public void testAnnotationWithSevenRetries() {
if (r7++ < 7) {
fail();
}
}
@Test(retryAnalyzer = ThreeRetries.class, successPercentage = 0)
public void failAfterThreeRetries() {
fail();
}
@Test(dependsOnMethods = {
"testAnnotationWithNoRetries",
"testAnnotationWithOneRetry",
"testAnnotationWithSevenRetries",
"failAfterThreeRetries"
}, alwaysRun = true)
public void checkInvocationCounts() {
assertEquals(invocations.count("testAnnotationWithNoRetries"), 0);
assertEquals(invocations.count("testAnnotationWithOneRetry"), 1);
assertEquals(invocations.count("testAnnotationWithSevenRetries"), 7);
assertEquals(invocations.count("failAfterThreeRetries"), 4);
}
@DataProvider(name="dataProvider")
private Object[][] dataProvider() {
return new Object[][] { { 1, false }, { 0, true }, { 0, true },
{ 1, false } };
}
@DataProvider(name="dataProvider2")
private Object[][] dataProvider2() {
value = 42;
return new Object[][] { { true }, { true } };
}
@Test(retryAnalyzer = InvocationCountTest.class, dataProvider = "dataProvider")
public void testAnnotationWithDataProvider(int paf, boolean test) {
if (paf == 1 && test == false) {
if (r2 >= 1) {
r2--;
fail();
}
}
}
@Test(retryAnalyzer = InvocationCountTest.class, dataProvider = "dataProvider2")
public void testAnnotationWithDataProviderAndRecreateParameters(boolean dummy) {
if (r3 == 1) {
this.value = 0;
r3--;
fail();
} else if (r3 == 0) {
assertEquals(this.value, 42);
}
}
@Test
public void withFactory() {
TestNG tng = new TestNG();
tng.setVerbose(0);
tng.setTestClasses(new Class[] { MyFactory.class});
FactoryTest.m_count = 0;
tng.run();
assertEquals(FactoryTest.m_count, 4);
}
@Override
public boolean retry(ITestResult result) {
invocations.add(result.getName());
return retriesRemaining.getAndDecrement() >= 0;
}
public static class ThreeRetries implements IRetryAnalyzer {
private final AtomicInteger remainingRetries = new AtomicInteger(3);
@Override
public boolean retry(ITestResult result) {
invocations.add(result.getName());
return remainingRetries.getAndDecrement() > 0;
}
}
}