package org.test4j.spec.scenario.step.txt; import org.test4j.spec.inner.StepType; import org.test4j.spec.scenario.step.txt.LineType; public enum LineType { /** * Given 关键字行 */ Given { @Override public StepType getStepType() { return StepType.Given; } }, /** * When 关键字行 */ When { @Override public StepType getStepType() { return StepType.When; } }, /** * Then关键字行 */ Then { @Override public StepType getStepType() { return StepType.Then; } }, /** * SkipGiven 关键字行 */ SkipGiven { @Override public StepType getStepType() { return StepType.Given; } }, /** * SkipWhen 关键字行 */ SkipWhen { @Override public StepType getStepType() { return StepType.When; } }, /** * SkipThen关键字行 */ SkipThen { @Override public StepType getStepType() { return StepType.Then; } }, /** * GivenTemplate关键字行 */ GivenTemplate { @Override public StepType getStepType() { return StepType.Given; } }, /** * WhenTemplate关键字行 */ WhenTemplate { @Override public StepType getStepType() { return StepType.When; } }, /** * ThenTemplate关键字行 */ ThenTemplate { @Override public StepType getStepType() { return StepType.Then; } }, /** * Story 关键字行 */ Story, /** * 场景前执行步骤 */ BeforeScenario, /** * Scenario 关键字行 */ Scenario, /** * 场景后执行步骤 */ AfterScenario, /** * SkipScenario关键字行 */ SkipScenario, /** * 普通文本行 */ TextLine { @Override public boolean match(String line) { for (LineType type : LineType.values()) { if (type == TextLine) { continue; } boolean match = type.match(line); if (match) { return false; } } return true; } @Override public String getSurfixText(String line) { return line; } }; public static LineType getLineType(String line) { if (line == null) { return TextLine; } String text = line.trim(); for (LineType type : LineType.values()) { if (type != TextLine && type.match(text)) { return type; } } return TextLine; } /** * 返回对应的StepType类型 * * @return */ public StepType getStepType() { return null; } public boolean match(String line) { if (line.equals(this.name())) { return true; } else if (line.startsWith(this.name() + " ")) { return true; } else if (line.startsWith(this.name() + "\t")) { return true; } else { return false; } } public static boolean isScenarioLine(String line) { if (line == null) { return false; } String text = line.trim(); if (Scenario.match(text) || SkipScenario.match(text) || BeforeScenario.match(text) || AfterScenario.match(text)) { return true; } else { return false; } } /** * 是否是模板方法定义行 * * @param line * @return */ public static boolean isTemplateLine(String line) { if (line == null) { return false; } String text = line.trim(); if (GivenTemplate.match(text) || WhenTemplate.match(text) || ThenTemplate.match(text)) { return true; } else { return false; } } /** * 返回去掉关键字后的文本 * * @param line * @return */ public String getSurfixText(String line) { String text = line == null ? "" : line.trim(); int index = this.name().length(); if (text.length() > index) { return text.substring(index).trim(); } else { return ""; } } public static LineType scenarioType(String line) { if (Scenario.match(line)) { return Scenario; } else if (SkipScenario.match(line)) { return SkipScenario; } else if (BeforeScenario.match(line)) { return BeforeScenario; } else if (AfterScenario.match(line)) { return AfterScenario; } else { return null; } }; }