protected StepToken createStepToken(String type, String action) { return StepToken.createStep(type, action); }
protected StepToken createStepToken(String line) { int indexOfSpace = line.indexOf(' '); String type = line.substring(0, indexOfSpace).trim(); String action = line.substring(indexOfSpace, line.length()).trim(); return StepToken.createStep(type, action); }
@Test(expected=RecursiveStepMacroException.class) public void testMaxStepDepthForRecursiveMatching() { StepMacro stepMacro = new StepMacro("I have a recursive match"); stepMacro.addStep(StepToken.createStep("Given", "I have a recursive match")); StepToken scenarioStepToken = StepToken.createStep("Given", "I have a recursive match"); stepMacro.processStep(scenarioStepToken, Collections.singletonList(stepMacro), false); }
@Test public void testStepMacroPatternMatch() { StepMacro stepMacro = new StepMacro("I reference a step macro with (\\d+) steps and (\\d+) capture groups"); stepMacro.addStep(StepToken.createStep("Given", "my number of steps is <$1> steps")); stepMacro.addStep(StepToken.createStep("Then", "my number of groups is <$2> groups")); StepToken scenarioStepToken = StepToken.createStep("Given", "I reference a step macro with 2 steps and 2 capture groups"); stepMacro.processStep(scenarioStepToken, Collections.singletonList(stepMacro), false); assertEquals(scenarioStepToken.getChildSteps().size(), 2); assertEquals("my number of steps is 2 steps", scenarioStepToken.getChildSteps().get(0).getAction()); assertEquals("my number of groups is 2 groups", scenarioStepToken.getChildSteps().get(1).getAction()); }
private void addChildSteps(StepToken parentToken, Matcher macroMatcher, List<StepMacro> macros, int depth) { for (StepToken s : steps) { String action = s.getAction(); String type = s.getType(); action = replaceVariablesInMacroStep(macroMatcher, action); action = replaceGroupsInMacroStep(macroMatcher, action); //having replaced any capture groups, create the child step StepToken childToken = StepToken.createStep(type, action); //match the new child step against the list of StepMacros recursively boolean alreadyMatched = false; for ( StepMacro stepMacro : macros) { alreadyMatched = stepMacro.doProcessStep(childToken, macros, depth + 1, alreadyMatched); } parentToken.addChildStep(childToken); } }
@Test public void testMismatchedCaptureGroups() { StepMacro stepMacro = new StepMacro("I reference a step macro with (\\d+) steps and (\\d+) capture groups"); stepMacro.addStep(StepToken.createStep("Given", "my number of steps is <$3> steps")); StepToken scenarioStepToken = StepToken.createStep("Given", "I reference a step macro with 1 steps and 2 capture groups"); try { stepMacro.processStep(scenarioStepToken, Collections.singletonList(stepMacro), false); fail("Expecting mismatched groups exception"); } catch (ChorusException e) { assertEquals("Capture group with index 3 in StepMacro step 'my number of steps is <$3> steps' did not have a " + "matching capture group in the pattern 'I reference a step macro with (\\d+) steps " + "and (\\d+) capture groups'", e.getMessage()); } }
private void createFeatureThree() { ScenarioToken scenarioThree = new ScenarioToken(); scenarioThree.setName("Scenario Three"); StepToken stepSix = scenarioThree.addStep(StepToken.createStep("If", "I add a step to scenario 3")); stepSix.setEndState(StepEndState.TIMEOUT); StepToken stepSeven = scenarioThree.addStep(StepToken.createStep("If", "I add another skipped step to scenario 3")); stepSeven.setEndState(StepEndState.SKIPPED); FeatureToken featureThree = new FeatureToken(); featureThree.setName("Feature Three"); featureThree.addScenario(scenarioThree); listOfFeatures.add(featureThree); }
private void createFeatureTwo() { ScenarioToken scenarioTwo = new ScenarioToken(); scenarioTwo.setName("Scenario Two"); StepToken stepFour = scenarioTwo.addStep(StepToken.createStep("If", "I add a step to scenario 2")); stepFour.setEndState(StepEndState.UNDEFINED); StepToken stepFive = scenarioTwo.addStep(StepToken.createStep("If", "I add another skipped step to scenario 2")); stepFive.setEndState(StepEndState.SKIPPED); FeatureToken featureTwo = new FeatureToken(); featureTwo.setName("Feature Two"); featureTwo.addScenario(scenarioTwo); listOfFeatures.add(featureTwo); }
@Before public void doBefore() { scenarioToken = new ScenarioToken(); scenarioToken.setName("Test Scenario"); stepOne = scenarioToken.addStep(StepToken.createStep("If", "I create a step")); stepTwo = scenarioToken.addStep(StepToken.createStep("If", "I create a second step")); stepThree = StepToken.createStep("If", "I create a step macro child step"); stepTwo.addChildStep(stepThree); scenarioTwo = new ScenarioToken(); stepFour = scenarioTwo.addStep(StepToken.createStep("If", "I add a step to scenario 2")); featureToken = new FeatureToken(); featureToken.addScenario(scenarioToken); featureToken.addScenario(scenarioTwo); featureTwo = new FeatureToken(); executionToken = new ExecutionToken("My test suite name"); testSuite = new TestSuite(executionToken, Arrays.asList(featureToken, featureTwo)); }
@Test //test that a steps from a step macro themselves matched to the list of step macros recursively, creating //a tree structure of steps //any capture groups in the step macro steps should be expanded before this matching occurs public void testRecursiveMatching() { StepMacro stepMacro = new StepMacro("I have a parent (.*) macro"); stepMacro.addStep(StepToken.createStep("", "With a step which matches a child <$1> macro")); StepMacro childStepMacro = new StepMacro("With a step which matches a child step macro"); childStepMacro.addStep(StepToken.createStep("", "Child Step")); StepToken scenarioStepToken = StepToken.createStep("Given", "I have a parent step macro"); stepMacro.processStep(scenarioStepToken, Arrays.asList(stepMacro, childStepMacro), false); assertEquals(scenarioStepToken.getChildSteps().size(), 1); assertEquals("With a step which matches a child step macro", scenarioStepToken.getChildSteps().get(0).getAction()); assertEquals(scenarioStepToken.getChildSteps().get(0).getChildSteps().size(), 1); assertEquals("Child Step", scenarioStepToken.getChildSteps().get(0).getChildSteps().get(0).getAction()); }
private void createFeatureOne() { ScenarioToken scenarioToken = new ScenarioToken(); scenarioToken.setName("Test Scenario"); StepToken stepOne = scenarioToken.addStep(StepToken.createStep("If", "I create a step")); stepOne.setEndState(StepEndState.PASSED); StepToken stepTwo = scenarioToken.addStep(StepToken.createStep("If", "I create a second step")); stepTwo.setEndState(StepEndState.FAILED); StepToken stepChild = StepToken.createStep("If", "I create a step macro child step"); stepChild.setEndState(StepEndState.FAILED); stepTwo.addChildStep(stepChild); StepToken stepGrandchild = StepToken.createStep("If", "I create a step grandchild"); stepGrandchild.setEndState(StepEndState.FAILED); stepGrandchild.setMessage("Failed due to a horrific and unforseen cataclysm"); stepChild.addChildStep(stepGrandchild); StepToken peerStep = StepToken.createStep("If", "I create a peer step which was skipped"); peerStep.setEndState(StepEndState.SKIPPED); stepChild.addChildStep(peerStep); FeatureToken featureToken = new FeatureToken(); featureToken.setName("Feature One"); featureToken.addScenario(scenarioToken); listOfFeatures.add(featureToken); }
private void createFeatureFour() { ScenarioToken scenarioFour = new ScenarioToken(); scenarioFour.setName("Scenario Four"); StepToken step = scenarioFour.addStep(StepToken.createStep("If", "I add a step to scenario 3")); step.setEndState(StepEndState.SKIPPED); FeatureToken featureFour = new FeatureToken(); featureFour.setName("Feature Four Failed No Handler"); featureFour.addScenario(scenarioFour); listOfFeatures.add(featureFour); }
@Override public StepToken unmarshal(StepTokenBean v) throws Exception { StepToken stepToken = StepToken.createStep(v.getType(), v.getAction()); stepToken.setEndState(v.getEndState()); stepToken.setMessage(v.getMessage()); stepToken.setException(v.getException()); stepToken.setStackTrace(v.getStackTrace()); stepToken.setTimeTaken(v.getTimeTaken()); if ( v.getErrorDetails() != null ) { stepToken.setErrorDetails(v.getErrorDetails()); } for ( StepToken c : v.getChildSteps()) { stepToken.addChildStep(c); } return stepToken; }