subplot 0.11.0

tools for specifying, documenting, and implementing automated acceptance tests for systems and software
Documentation
# Bindings for the runcmd steplibrary

- given: helper script {script} for runcmd
  impl:
    python:
      function: runcmd_helper_script
    rust:
      function: subplotlib::steplibrary::runcmd::helper_script
  types:
    script: file
  doc: |
    Install a helper script from an embedded file.

- given: srcdir is in the PATH
  impl:
    python:
      function: runcmd_helper_srcdir_path
    rust:
      function: subplotlib::steplibrary::runcmd::helper_srcdir_path
  doc: |
    Make sure the source directory of the project being testes is on
    the shell PATH. This makes it easy for tests to invoke programs
    from the source tree.

- when: I run {argv0}{args:text}
  impl:
    python:
      function: runcmd_step
    rust:
      function: subplotlib::steplibrary::runcmd::run
  doc: |
    Run a program, and make sure it succeeds.

- when: I run, in {dirname}, {argv0}{args}
  impl:
    python:
      function: runcmd_step_in
    rust:
      function: subplotlib::steplibrary::runcmd::run_in
  types:
    dirname: path
    argv0: word
    args: text
  doc: |
    Change to a different directory and run a program, and make sure
    it succeeds;

- when: I try to run {argv0}{args:text}
  impl:
    python:
      function: runcmd_try_to_run
    rust:
      function: subplotlib::steplibrary::runcmd::try_to_run
  doc: |
    Run a program, but allow it to fail. Other steps can check if it
    succeeded.

- when: I try to run, in {dirname}, {argv0}{args}
  impl:
    python:
      function: runcmd_try_to_run_in
    rust:
      function: subplotlib::steplibrary::runcmd::try_to_run_in
  types:
    dirname: path
    argv0: word
    args: text
  doc: |
    Change to a different directory and run a program, but allow it to
    fail. Other steps can check if it succeeded.

# Steps to examine exit code of latest command.

- then: exit code is {exit}
  impl:
    python:
      function: runcmd_exit_code_is
    rust:
      function: subplotlib::steplibrary::runcmd::exit_code_is
  types:
    exit: int
  doc: |
    Make sure the latest command run by `lib/runcmd` had a specific
    exit code.

- then: exit code is not {exit}
  impl:
    python:
      function: runcmd_exit_code_is_not
    rust:
      function: subplotlib::steplibrary::runcmd::exit_code_is_not
  types:
    exit: int
  doc: |
    Make sure the latest command run by `lib/runcmd` did not have a
    specific exit code.

- then: command is successful
  impl:
    python:
      function: runcmd_exit_code_is_zero
    rust:
      function: subplotlib::steplibrary::runcmd::exit_code_is_zero
  doc: |
    Make sure the latest command run by `lib/runcmd` indicated the
    command succeeded.

- then: command fails
  impl:
    python:
      function: runcmd_exit_code_is_nonzero
    rust:
      function: subplotlib::steplibrary::runcmd::exit_code_is_nonzero
  doc: |
    Make sure the latest command run by `lib/runcmd` indicated the
    command failed.

# Steps to examine stdout/stderr for exact content.

- then: stdout is exactly "{text:text}"
  impl:
    python:
      function: runcmd_stdout_is
    rust:
      function: subplotlib::steplibrary::runcmd::stdout_is
  doc: |
    Make sure the standard output of the latest command run by
    `lib/runcmd` is exactly as desired.

- then: 'stdout isn''t exactly "{text:text}"'
  impl:
    python:
      function: runcmd_stdout_isnt
    rust:
      function: subplotlib::steplibrary::runcmd::stdout_isnt
  doc: |
    Make sure the standard output of the latest command run by
    `lib/runcmd` is different from what is not wanted.

- then: stderr is exactly "{text:text}"
  impl:
    python:
      function: runcmd_stderr_is
    rust:
      function: subplotlib::steplibrary::runcmd::stderr_is
  doc: |
    Make sure the standard error output of the latest command run by
    `lib/runcmd` is exactly as desired.

- then: 'stderr isn''t exactly "{text:text}"'
  impl:
    python:
      function: runcmd_stderr_isnt
    rust:
      function: subplotlib::steplibrary::runcmd::stderr_isnt
  doc: |
    Make sure the standard error output of the latest command run by
    `lib/runcmd` is different from what is not wanted.

# Steps to examine stdout/stderr for sub-strings.

- then: stdout contains "{text:text}"
  impl:
    python:
      function: runcmd_stdout_contains
    rust:
      function: subplotlib::steplibrary::runcmd::stdout_contains
  doc: |
    Make sure the standard output of the latest command run by
    `lib/runcmd` contains the desired sub-string.

- then: 'stdout doesn''t contain "{text:text}"'
  impl:
    python:
      function: runcmd_stdout_doesnt_contain
    rust:
      function: subplotlib::steplibrary::runcmd::stdout_doesnt_contain
  doc: |
    Make sure the standard output of the latest command run by
    `lib/runcmd` does not contain the sub-string.

- then: stderr contains "{text:text}"
  impl:
    python:
      function: runcmd_stderr_contains
    rust:
      function: subplotlib::steplibrary::runcmd::stderr_contains
  doc: |
    Make sure the standard output of the latest command run by
    `lib/runcmd` contains the desired sub-string.

- then: 'stderr doesn''t contain "{text:text}"'
  impl:
    python:
      function: runcmd_stderr_doesnt_contain
    rust:
      function: subplotlib::steplibrary::runcmd::stderr_doesnt_contain
  doc: |
    Make sure the standard error output of the latest command run by
    `lib/runcmd` does not contain the sub-string.

# Steps to match stdout/stderr against regular expressions.

- then: stdout matches regex {regex:text}
  impl:
    python:
      function: runcmd_stdout_matches_regex
    rust:
      function: subplotlib::steplibrary::runcmd::stdout_matches_regex
  doc: |
    Make sure the standard output of the latest command run by
    `lib/runcmd` matches the desired regular expression.

- then: stdout doesn't match regex {regex:text}
  impl:
    python:
      function: runcmd_stdout_doesnt_match_regex
    rust:
      function: subplotlib::steplibrary::runcmd::stdout_doesnt_match_regex
  doc: |
    Make sure the standard output of the latest command run by
    `lib/runcmd` does not match a regular expression.

- then: stderr matches regex {regex:text}
  impl:
    python:
      function: runcmd_stderr_matches_regex
    rust:
      function: subplotlib::steplibrary::runcmd::stderr_matches_regex
  doc: |
    Make sure the standard error output of the latest command run by
    `lib/runcmd` matches the desired regular expression.

- then: stderr doesn't match regex {regex:text}
  impl:
    python:
      function: runcmd_stderr_doesnt_match_regex
    rust:
      function: subplotlib::steplibrary::runcmd::stderr_doesnt_match_regex
  doc: |
    Make sure the standard error output of the latest command run by
    `lib/runcmd` does not match a regular expression.