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 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) (limited to 'ftt-docgen') 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" -- cgit v1.2.1