/*
* Copyright (c) 2011-2014 The original author or authors
* ------------------------------------------------------
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Apache License v2.0 which accompanies this distribution.
*
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* The Apache License v2.0 is available at
* http://www.opensource.org/licenses/apache2.0.php
*
* You may elect to redistribute this code under either of these licenses.
*/
package io.vertx.test.core;
/**
* @author <a href="http://tfox.org">Tim Fox</a>
*/
import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;
public class RepeatRule implements TestRule {
private static class RepeatStatement extends Statement {
private final int times;
private final Statement statement;
private RepeatStatement( int times, Statement statement ) {
this.times = times;
this.statement = statement;
}
@Override
public void evaluate() throws Throwable {
for( int i = 0; i < times; i++ ) {
System.out.println("*** Iteration " + (i + 1) + "/" + times + " of test");
statement.evaluate();
}
}
}
@Override
public Statement apply( Statement statement, Description description ) {
Statement result = statement;
Repeat repeat = description.getAnnotation(Repeat.class);
if( repeat != null ) {
int times = repeat.times();
result = new RepeatStatement( times, statement );
}
return result;
}
}