summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2019-06-01 20:51:39 +0300
committerLars Wirzenius <liw@liw.fi>2019-06-01 20:51:39 +0300
commita5ca02964ca988807d8b796a7994feeabe6d6ef9 (patch)
treea2c1c6f83e6bd27120495e63514fa142f361c1ee
parent003f4d7e3cb68b96e505ae45cb64bf5c3d728632 (diff)
downloadfable-poc-a5ca02964ca988807d8b796a7994feeabe6d6ef9.tar.gz
Change: handle steps starting with AND correctly
Also change bindings file so that the keyword (GIVEN, WHEN, THEN, etc) is a dict key, not part of the pattern.
-rwxr-xr-xftt-docgen34
-rw-r--r--muck.yaml52
2 files changed, 50 insertions, 36 deletions
diff --git a/ftt-docgen b/ftt-docgen
index 8241da9..89ed110 100755
--- a/ftt-docgen
+++ b/ftt-docgen
@@ -12,10 +12,26 @@ def format_keyword(line):
keyword = words[0]
return '**{}** '.format(keyword) + line[len(keyword):]
-def format_scenario_step(bind, line):
+def format_scenario_step(bind, line, prev_keyword):
+ debug('step: line={!r} prev_keyword={}'.format(line, prev_keyword))
+ words = line.split()
+ if not words:
+ return line.strip(), prev_keyword
+ keyword = words[0]
+ real_keyword = keyword
+ if keyword.lower() == 'and':
+ if prev_keyword is None:
+ sys.exit('AND may not be used on first step in snippet')
+ real_keyword = prev_keyword
+ line = ' '.join(words[1:])
+ debug(' keyword={!r} rest={!r}'.format(keyword, line))
+
for b in bind:
- m = re.match(b['pattern'], line, re.I)
+ if real_keyword not in b:
+ continue
+ m = re.match(b[real_keyword], line, re.I)
if m and m.end() == len(line):
+ debug(' found binding: {!r}'.format(b))
n = len(m.groups())
if n > 0:
end = 0
@@ -26,13 +42,23 @@ def format_scenario_step(bind, line):
parts.append('_{}_'.format(thispart))
end = m.end(i)
line = ''.join(parts) + line[m.end(n):]
+ line = '{} {}'.format(keyword, line)
+ debug(' match: {!r}'.format(line))
+ break
if not line.strip():
return line
- return format_keyword(line)
+
+ return format_keyword(line), real_keyword
def format_fable_snippet(bind, lines):
- return [format_scenario_step(bind, line) for line in lines]
+ debug('snippet: lines={!r}'.format(lines))
+ prev_keyword = None
+ output = []
+ for line in lines:
+ ln, prev_keyword = format_scenario_step(bind, line, prev_keyword)
+ output.append(ln)
+ return output
def is_fable_snippet(o):
prefix = "```fable\n"
diff --git a/muck.yaml b/muck.yaml
index afc7249..0e1f189 100644
--- a/muck.yaml
+++ b/muck.yaml
@@ -1,32 +1,20 @@
-- pattern: when I fetch resource (?P<id>\S+)
-- pattern: and I fetch resource (?P<id>\S+)
-
-- pattern: then it has revision (?P<revision>\S+)
-- pattern: and it has revision (?P<revision>\S+)
-
-- pattern: then it is mine
-- pattern: and it is mine
-
-- pattern: then remember the resource id as (?P<name>\S+)
-- pattern: and remember the resource id as (?P<name>\S+)
-
-- pattern: then remember the resource revision as (?P<name>\S+)
-- pattern: and remember the resource revision as (?P<name>\S+)
-
-- pattern: given I am (?P<username>\S+)
-- pattern: given a running Muck
-- pattern: then I only get resource (?P<id>\S+)
-- pattern: then I get (?P<json>.+)
-- pattern: "then it doesn't exist"
-- pattern: then it works
-- pattern: then there are no resources in Muck
-
-- pattern: then there is (?P<number>\d+) resource in Muck
-- pattern: then there are (?P<number>\d+) resources in Muck
-
-- pattern: then there are no matches
-- pattern: when I create a resource (?P<json>.+)
-- pattern: when I delete (?P<id>\S+)
-- pattern: when I search for (?P<field>\S+) being (?P<value>.+)
-- pattern: when I update (?P<id>\S+), revision (?P<rev>\S+), with (?P<json>.+)
-- pattern: when Muck is restarted
+- given: I am (?P<username>\S+)
+- given: a running Muck
+- then: "it doesn't exist"
+- then: I get (?P<json>.+)
+- then: I only get resource (?P<id>\S+)
+- then: it has revision (?P<revision>\S+)
+- then: it is mine
+- then: it works
+- then: remember the resource id as (?P<name>\S+)
+- then: remember the resource revision as (?P<name>\S+)
+- then: there are (?P<number>\d+) resources in Muck
+- then: there are no matches
+- then: there are no resources in Muck
+- then: there is (?P<number>\d+) resource in Muck
+- when: I create a resource (?P<json>.+)
+- when: I delete (?P<id>\S+)
+- when: I fetch resource (?P<id>\S+)
+- when: I search for (?P<field>\S+) being (?P<value>.+)
+- when: I update (?P<id>\S+), revision (?P<rev>\S+), with (?P<json>.+)
+- when: Muck is restarted