### Question:
ExecutionFilter { public Optional<FeatureExec> filter(FeatureExec feature) { FluentIterable<String> inheritedTags = feature.tags(); FeatureExec copy = feature.recursiveCopy(matching(inheritedTags.toSet(), tagFilter)); if (copy.scenario().isEmpty()) return Optional.absent(); else return Optional.of(copy); } ExecutionFilter(TagFilter tagFilter); Optional<FeatureExec> filter(FeatureExec feature);  }### Answer:
@Test public void filter_exec() throws Exception { List<FeatureExec> features = loadSample(); TagFilter tagFilter = TagFilter.from("~@wip", "@chocolate"); ExecutionFilter executionFilter = new ExecutionFilter(tagFilter); int scenarioTotal = 0; int scenarioAccepted = 0; for (FeatureExec featureExec : features) { scenarioTotal += featureExec.scenario().size(); Optional<FeatureExec> filteredOpt = executionFilter.filter(featureExec); if (filteredOpt.isPresent()) { FeatureExec filtered = filteredOpt.get(); scenarioAccepted += filtered.scenario().size(); assertThatScenarioAreValid(filtered.scenario(), featureExec.scenario()); } } assertThat(scenarioTotal).isEqualTo(22); assertThat(scenarioAccepted).isEqualTo(8); }