public boolean isStartOrEndScenario() { return isFeatureStartScenario() || isFeatureEndScenario(); }
private void removeFeatureIfNoScenariosMatchTags(String filterExpression, Iterator<FeatureToken> fi) { //remove all filtered scenarios from this feature FeatureToken feature = fi.next(); int startOrEndCount = 0; for (Iterator<ScenarioToken> si = feature.getScenarios().iterator(); si.hasNext(); ) { ScenarioToken scenario = si.next(); if ( scenario.isFeatureStartScenario() || scenario.isFeatureEndScenario() ) { log.trace("Not removing since this is a start or end feature scenario"); startOrEndCount ++; } else if (! tagExpressionEvaluator.shouldRunScenarioWithTags(filterExpression, scenario.getTags())) { log.debug("Removing scenario " + scenario + " which does not match tag " + filterExpression); si.remove(); } } //if there are no scenarios left (apart from special start or end feature scenarios which are never tagged), //then remove this feature from the list to run if (feature.getScenarios().size() == startOrEndCount) { log.debug("Will not run feature " + fi + " which does not have any scenarios which " + "passed the tag filter " + filterExpression); fi.remove(); } }
private void runScenarios(ExecutionToken executionToken, FeatureToken feature, List<ScenarioToken> scenarios, HandlerManager handlerManager, boolean skipAllScenarios) throws Exception { log.debug("Now running scenarios " + scenarios + " for feature " + feature); for (Iterator<ScenarioToken> iterator = scenarios.iterator(); iterator.hasNext(); ) { ScenarioToken scenario = iterator.next(); boolean skip = false; if ( skipAllScenarios ) { log.warn("Skipping scenario " + scenario); skip = true; } else if ( feature.isFeatureStartScenarioFailed() && ! scenario.isFeatureStartScenario() && ! scenario.isFeatureEndScenario()) { log.warn("Skipping scenario " + scenario + " since " + KeyWord.FEATURE_START_SCENARIO_NAME + " failed"); skip = true; } runScenario( executionToken, handlerManager, scenario, skip ); } }