package org.test4j.spec.scenario; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.test4j.spec.annotations.StoryType; import org.test4j.spec.exceptions.SkipScenarioException; import org.test4j.spec.inner.IScenario; import org.test4j.spec.inner.IScenarioStep; public abstract class JSpecScenario implements IScenario { protected int index; protected String scenario; protected String description; protected final List<IScenarioStep> steps = new ArrayList<IScenarioStep>(); /** * 本测试场景是否设置跳过 */ protected boolean isSkip = false; /** * 是否是跳过场景 * * @return */ public final boolean isSkip() { return this.isSkip; } @Override public int getIndex() { return index; } @Override public void setIndex(int index) { this.index = index; } public String getScenario() { return scenario; } /** * 返回场景的步骤 * * @return */ public final List<IScenarioStep> getSteps() { return steps; } public final String getName() { return this.scenario; } public final String getDescription() { return description; } /** * 验证场景合法性 */ public void validate() throws Throwable { if (this.isSkip()) { throw new SkipScenarioException(this); } } public static Story parseFrom(StoryType type, String story) { if (type == StoryType.XML) { return XmlJSpecScenario.parseJSpecScenarioFrom(story, "utf-8"); } else { return TxtJSpecScenario.parseJSpecScenarioFrom(story); } } public static Story parseFrom(StoryType type, InputStream stream, String encoding) { if (type == StoryType.XML) { return XmlJSpecScenario.parseJSpecScenarioFrom(stream, encoding); } else { return TxtJSpecScenario.parseJSpecScenarioFrom(stream, encoding); } } @Override public final String toString() { return String.format("%02d - %s", index, this.scenario.replaceAll("\\s", " ")); } }