subplot 0.2.0

tools for specifying, documenting, and implementing automated acceptance tests for systems and software
Documentation
- given: an installed subplot
  function: install_subplot
  cleanup: uninstall_subplot

- then: scenario "(?P<name>.+)" was run
  function: scenario_was_run
  regex: true

- then: scenario "(?P<name>.+)" was not run
  function: scenario_was_not_run
  regex: true

- then: step "(?P<keyword>given|when|then) (?P<name>.+)" was run
  function: step_was_run
  regex: true

- then: step "(?P<keyword1>given|when|then) (?P<name1>.+)" was run, and then step "(?P<keyword2>given|when|then) (?P<name2>.+)"
  function: step_was_run_and_then
  regex: true

- then: cleanup for "(?P<keyword1>given|when|then) (?P<name1>.+)" was run, and then for "(?P<keyword2>given|when|then) (?P<name2>.+)"
  function: cleanup_was_run
  regex: true

- then: cleanup for "(?P<keyword>given|when|then) (?P<name>.+)" was not run
  function: cleanup_was_not_run
  regex: true


- then: JSON output matches {filename}
  function: json_output_matches_file

- then: "{filename} does not end in a newline"
  function: file_ends_in_zero_newlines

- then: "{filename} ends in one newline"
  function: file_ends_in_one_newline

- then: "{filename} ends in two newlines"
  function: file_ends_in_two_newlines

# In order to cope with low granularity filesystems, sometimes we need to wait
# for things to happen
- when: I wait until (?P<delay>\d+) seconds? has passed
  function: sleep_seconds
  regex: true
  types:
    delay: uint

# The following are purely descriptive steps and are not used to test anything

- given: the necessary starting conditions
  function: do_nothing

- when: I do the required actions
  function: do_nothing

- then: the desired outcome is achieved
  function: do_nothing