From 0f7cfd5fc4f94446c54bb2712eb0aaf5043f7cd5 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sun, 25 Aug 2013 13:27:01 +0100 Subject: Add test for duplicate scenario names failing --- yarn.tests/duplicate-scenario-names.exit | 1 + yarn.tests/duplicate-scenario-names.script | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 yarn.tests/duplicate-scenario-names.exit create mode 100755 yarn.tests/duplicate-scenario-names.script diff --git a/yarn.tests/duplicate-scenario-names.exit b/yarn.tests/duplicate-scenario-names.exit new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/yarn.tests/duplicate-scenario-names.exit @@ -0,0 +1 @@ +1 diff --git a/yarn.tests/duplicate-scenario-names.script b/yarn.tests/duplicate-scenario-names.script new file mode 100755 index 0000000..770f00a --- /dev/null +++ b/yarn.tests/duplicate-scenario-names.script @@ -0,0 +1,18 @@ +#!/bin/sh + +set -eu + + +cat < "$DATADIR/test.yarn" + SCENARIO foo + THEN nop + + SCENARIO foo + THEN nop + + IMPLEMENTS THEN nop + true +EOF + +./run-yarn "$DATADIR/test.yarn" + -- cgit v1.2.1 From 99eb7132499d14b604d67d8d8104243c3f9a35e6 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sun, 25 Aug 2013 13:38:14 +0100 Subject: Implement check for duplicate scenario names --- yarn | 13 +++++++++++++ yarn.tests/duplicate-scenario-names.stderr | 3 +++ 2 files changed, 16 insertions(+) create mode 100644 yarn.tests/duplicate-scenario-names.stderr diff --git a/yarn b/yarn index 3bb26e8..c13681b 100755 --- a/yarn +++ b/yarn @@ -18,6 +18,7 @@ import cliapp +import collections import logging import os import re @@ -108,6 +109,7 @@ class YarnRunner(cliapp.Application): 'step %Index(step,steps): %String(step_name)') scenarios, implementations = self.parse_scenarios(args) + self.check_for_duplicate_scenario_names(scenarios) self.check_for_thens(scenarios) self.connect_implementations(scenarios, implementations) shell_prelude = self.load_shell_libraries() @@ -158,6 +160,17 @@ class YarnRunner(cliapp.Application): return block_parser.scenarios, block_parser.implementations + def check_for_duplicate_scenario_names(self, scenarios): + counts = collections.Counter() + for s in scenarios: + counts[s.name] += 1 + + duplicates = [name for name in counts if counts[name] > 1] + if duplicates: + duplist = ''.join(' %s\n' % name for name in duplicates) + raise cliapp.AppException( + 'There are scenarios with duplicate names:\n%s' % duplist) + def check_for_thens(self, scenarios): no_thens = [] for scenario in scenarios: diff --git a/yarn.tests/duplicate-scenario-names.stderr b/yarn.tests/duplicate-scenario-names.stderr new file mode 100644 index 0000000..d3fbc95 --- /dev/null +++ b/yarn.tests/duplicate-scenario-names.stderr @@ -0,0 +1,3 @@ +ERROR: There are scenarios with duplicate names: + foo + -- cgit v1.2.1 From 736c408ac2b8768150867b89f4a497edcffd2edd Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sun, 25 Aug 2013 13:38:54 +0100 Subject: Update NEWS --- NEWS | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/NEWS b/NEWS index 92c1e37..2682b85 100644 --- a/NEWS +++ b/NEWS @@ -14,9 +14,13 @@ Version 0.10, released UNRELEASED * A new option, `--timings`, has been added to yarn to report how long each scenario and each step took. +Bug fixes: + * Yarn now complains if a scenario has no THEN steps. Suggested by Richard Maw. +* Yarn now checks for duplicate scenario names. + Version 0.9, released 2013-07-23 -------------------------------- -- cgit v1.2.1