package org.test4j.spec.scenario.step;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import org.test4j.spec.inner.StepType;
import org.test4j.spec.scenario.step.JSpecStep;
import org.test4j.spec.scenario.step.TxtJSpecStep;
import org.test4j.spec.scenario.step.txt.LineType;
import org.test4j.testng.Test4J;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
@SuppressWarnings({ "rawtypes", "serial" })
public class JSpecStepTest extends Test4J {
@Test(groups = "jspec", dataProvider = "dataForJSpecStep")
public void testJSpecStep(String line, final StepType type, final String methodname, final boolean skip) {
LineType lineType = LineType.getLineType(line);
JSpecStep step = new TxtJSpecStep("test", line, lineType);
want.object(step).propertyEqMap(new DataMap() {
{
this.put("type", type);
this.put("method", methodname);
this.put("isSkip", skip);
}
});
}
@DataProvider
public Iterator dataForJSpecStep() {
return new DataIterator() {
{
data("Given test", StepType.Given, "test", false);
data("Given test", StepType.Given, "test", false);
data("SkipGiven test", StepType.Given, "test", true);
data("SkipGiven test method", StepType.Given, "testMethod", true);
data("\tWhen test method", StepType.When, "testMethod", false);
data(" Then\ti am a display", StepType.Then, "iAmADisplay", false);
}
};
}
@Test(dataProvider = "dataForParseStepType")
public void testParseStepType(String line) {
LineType lineType = LineType.getLineType(line);
try {
new TxtJSpecStep("test", line, lineType);
want.fail();
} catch (RuntimeException e) {
String message = e.getMessage();
want.string(message).contains("illegal step type");
}
}
@DataProvider
public Iterator dataForParseStepType() {
return new DataIterator() {
{
data("Giventest");
data("SkipGiventest");
data("Whentest method");
data("SkipWhentest method");
data("Thentest method");
data("SkipThentest method");
}
};
}
@Test
public void testGetArguments_Error() {
JSpecStep step = new TxtJSpecStep("test", "do test", LineType.Given);
step.parseStep("【userName=darui.wudr】【password=ddd】", null);
List<Type> types = new ArrayList<Type>() {
{
add(String.class);
add(String.class);
}
};
try {
step.getArguments(Arrays.asList("userName", "userPass"), types);
want.fail();
} catch (Exception e) {
String error = e.getMessage();
want.string(error).isEqualTo(
"can't find parameter userPass, the existed parameters are [userName,password].");
}
}
@Test
public void testGetArguments() {
JSpecStep step = new TxtJSpecStep("test", "do test", LineType.Given);
step.parseStep("【userName=darui.wudr】【userPass='ddd'】", null);
List<Type> types = new ArrayList<Type>() {
{
add(String.class);
add(String.class);
}
};
Object[] values = step.getArguments(Arrays.asList("userName", "userPass"), types);
want.array(values).reflectionEq(new String[] { "darui.wudr", "ddd" });
}
}