From a5ca02964ca988807d8b796a7994feeabe6d6ef9 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sat, 1 Jun 2019 20:51:39 +0300 Subject: 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. --- ftt-docgen | 34 ++++++++++++++++++++++++++++++---- muck.yaml | 52 ++++++++++++++++++++-------------------------------- 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\S+) -- pattern: and I fetch resource (?P\S+) - -- pattern: then it has revision (?P\S+) -- pattern: and it has revision (?P\S+) - -- pattern: then it is mine -- pattern: and it is mine - -- pattern: then remember the resource id as (?P\S+) -- pattern: and remember the resource id as (?P\S+) - -- pattern: then remember the resource revision as (?P\S+) -- pattern: and remember the resource revision as (?P\S+) - -- pattern: given I am (?P\S+) -- pattern: given a running Muck -- pattern: then I only get resource (?P\S+) -- pattern: then I get (?P.+) -- pattern: "then it doesn't exist" -- pattern: then it works -- pattern: then there are no resources in Muck - -- pattern: then there is (?P\d+) resource in Muck -- pattern: then there are (?P\d+) resources in Muck - -- pattern: then there are no matches -- pattern: when I create a resource (?P.+) -- pattern: when I delete (?P\S+) -- pattern: when I search for (?P\S+) being (?P.+) -- pattern: when I update (?P\S+), revision (?P\S+), with (?P.+) -- pattern: when Muck is restarted +- given: I am (?P\S+) +- given: a running Muck +- then: "it doesn't exist" +- then: I get (?P.+) +- then: I only get resource (?P\S+) +- then: it has revision (?P\S+) +- then: it is mine +- then: it works +- then: remember the resource id as (?P\S+) +- then: remember the resource revision as (?P\S+) +- then: there are (?P\d+) resources in Muck +- then: there are no matches +- then: there are no resources in Muck +- then: there is (?P\d+) resource in Muck +- when: I create a resource (?P.+) +- when: I delete (?P\S+) +- when: I fetch resource (?P\S+) +- when: I search for (?P\S+) being (?P.+) +- when: I update (?P\S+), revision (?P\S+), with (?P.+) +- when: Muck is restarted -- cgit v1.2.1