diff options
-rw-r--r-- | echo.yaml | 3 | ||||
-rw-r--r-- | muck.yaml | 15 | ||||
-rw-r--r-- | subplot.md | 78 | ||||
-rw-r--r-- | subplot.py | 3 | ||||
-rw-r--r-- | subplot.yaml | 34 |
5 files changed, 118 insertions, 15 deletions
@@ -3,15 +3,18 @@ - when: user runs echo with arguments (?P<args>.+) function: run_echo_with_args + regex: true - then: exit code is (?P<exit_code>\d+) function: exit_code_is + regex: true - then: standard output contains a newline function: stdout_is_a_newline - then: standard output contains "(?P<text>.*)" function: stdout_is_text + regex: true - then: standard error is empty function: stderr_is_empty @@ -1,38 +1,47 @@ - given: "a fresh Muck server" function: fixme -- given: "I am (?P<name>\\S+)" +- given: "I am {name}" function: fixme -- given: "I am (?P<name>\\S+), with super capability" +- given: "I am {name}, with super capability" function: fixme - when: "I do POST /res with (?P<json>\\{.*\\})" function: fixme + regex: true - when: "I do PUT /res with Muck-Id: \\{(?P<id>\\S+)\\}, Muck-Revision: \\{(?P<rev>\\S+)\\}, and body (?P<json>\\{.*\\})" function: fixme + regex: true - when: "I do GET /res with Muck-Id: \\{(?P<id>\\S+)\\}" function: fixme + regex: true - when: "I do DELETE /res with Muck-Id: \\{(?P<id>\\S+)\\}" function: fixme + regex: true - when: "I restart Muck" function: fixme + regex: true - then: "response code is (?P<code>\\d+)" function: fixme + regex: true -- then: "header (?P<header>\\S+) is (?P<name>\\S+)" +- then: "header {header} is {name}" function: fixme - then: "header (?P<header>\\S+) matches \\{(?P<name>\\S+)\\}" function: fixme + regex: true - then: "body matches (?P<json>\\{.*\\})" function: fixme + regex: true - then: "revisions \\{(?P<rev1>\\S+)\\} and \\{(?P<rev2>\\S+)\\} are different" function: fixme + regex: true @@ -683,6 +683,84 @@ then bar was done ~~~~ +Capturing parts of steps for functions +----------------------------------------------------------------------------- + +A scenario step binding can capture parts of a scenario step, to be +passed to the function implementing the step as an argument. Captures +can be done using regular expressions. + +### Capture using simple patterns + +~~~scenario +given file simplepattern.md +and file simplepattern.yaml +and file capture.py +when I run sp-codegen --run simplepattern.md -o test.py +then scenario "Simple pattern" was run +and step "given I am Tomjon" was run +and function got Tomjon as an argument +and program finished successfully +~~~ + +~~~~{.file #simplepattern.md .markdown .numberLines} +--- +title: Simple pattern capture +bindings: simplepattern.yaml +functions: capture.py +... + +# Simple pattern + +~~~scenario +given I am Tomjon +~~~ +~~~~ + +~~~{.file #simplepattern.yaml .yaml .numberLines} +- given: I am {name} + function: func +~~~ + +~~~{.file #capture.py .python .numberLines} +def func(ctx, name=None): + print('function got argument name as', name) +~~~ + +### Capture using regular expressions + +~~~scenario +given file regex.md +and file regex.yaml +and file capture.py +when I run sp-codegen --run regex.md -o test.py +then scenario "Regex" was run +and step "given I am Tomjon" was run +and function got Tomjon as an argument +and program finished successfully +~~~ + +~~~~{.file #regex.md .markdown .numberLines} +--- +title: Regex capture +bindings: regex.yaml +functions: capture.py +... + +# Regex + +~~~scenario +given I am Tomjon +~~~ +~~~~ + +~~~{.file #regex.yaml .yaml .numberLines} +- given: I am (?P<name>\S+) + function: func + regex: true +~~~ + + Avoid changing typesetting output file needlessly ----------------------------------------------------------------------------- @@ -66,6 +66,9 @@ def file_contains(ctx, filename=None, pattern=None): content = f.read() assert_eq(pattern in content, True) +def function_got_arg(ctx, arg=None): + stdout_matches(ctx, '\nfunction got arg {}\n'.format(arg)) + def scenario_was_run(ctx, name=None): stdout_matches(ctx, '\nrunning scenario: {}\n'.format(name)) diff --git a/subplot.yaml b/subplot.yaml index 0bb5e23..55e4c6c 100644 --- a/subplot.yaml +++ b/subplot.yaml @@ -1,62 +1,72 @@ -- given: file (?P<filename>\S+) +- given: file {filename} function: create_file - given: file (?P<filename>\S+) has modification time (?P<y>\d+)-(?P<mon>\d+)-(?P<d>\d+) (?P<h>\d+):(?P<min>\d+):(?P<s>\d+) function: touch_file + regex: true -- when: I remember the metadata for (?P<filename>\S+) +- when: I remember the metadata for {filename} function: remember_metadata -- when: I run sp-docgen (?P<md>\S+) -o (?P<output>\S+) +- when: I run sp-docgen {md} -o {output} function: run_docgen -- when: I run sp-docgen (?P<md>\S+) -o (?P<output>\S+) --date=(?P<date>\S+) +- when: I run sp-docgen {md} -o {output} --date={date} function: run_docgen_with_date -- when: I try to run sp-docgen (?P<md>\S+) -o (?P<output>\S+) +- when: I try to run sp-docgen {md} -o {output} function: try_docgen -- when: I run sp-codegen --run (?P<filename>\S+) -o test.py +- when: I run sp-codegen --run {filename} -o test.py function: run_codegen -- when: I try to run sp-codegen --run (?P<filename>\S+) -o test.py +- when: I try to run sp-codegen --run {filename} -o test.py function: try_codegen -- when: I run sp-meta (?P<filename>\S+) +- when: I run sp-meta {filename} function: run_meta -- when: I run pandoc --filter sp-filter (?P<filename>\S+) -o (?P<output>\S+) +- when: I run pandoc --filter sp-filter {filename} -o {output} function: run_pandoc_with_filter - then: exit code is non-zero function: exit_code_nonzero -- then: file (?P<filename>\S+) exists +- then: file {filename} exists function: file_exists -- then: file (?P<filename>\S+) does not exist +- then: file {filename} does not exist function: file_does_not_exist - then: file (?P<filename>\S+) matches /(?P<regex>.+)/ function: file_matches + regex: true - then: file (?P<filename>\S+) contains "(?P<pattern>.+)" function: file_contains + regex: true -- then: (?P<filename>\S+) has the same metadata as before +- then: "{filename} has the same metadata as before" function: has_same_metadata_as_remembered +- then: function got {arg} as an argument + function: function_got_arg + - then: output matches /(?P<pattern>.+)/ function: stdout_matches + regex: true - then: scenario "(?P<name>.+)" was run function: scenario_was_run + regex: true - then: step "(?P<keyword>given|when|then) (?P<name>.+)" was run function: step_was_run + regex: true - then: program finished successfully function: exit_code_zero - then: only files (?P<filenames>.+) exist function: only_these_files_exist + regex: true |