craml: A CRAM-testing framework for testing shell scripts

CRAM is a is functional testing framework for command line applications. craml is freely inspired by the Python tool, which was itself based on Mercurial's unified test format.

craml is released as a single binary (called craml) and supports the following syntax:

To run the tests described in a <file>, use craml <file>. This will run all the commands in sequence and will generated <file>.corrected if one of the output do not match the expected command outputs.

Non-deterministic Outputs

craml supports non-deterministic outputs:

<-- non-deterministic
  $ <command>
  <output>

In that case, craml <file> will run the command but will not generate <file>.corrected if the new output differs from the one described in the file. Use craml --non-deterministic <file> to come back to the default behaviour.

Non-deterministic Commands

craml supports non-deterministic outputs:

<-- non-deterministic [skip]
  $ <command>
  <output>

In that case, craml <file> will not run the command. Use craml --non-deterministic <file> to come back to the default behaviour.

Exit Codes

craml tests exit codes:

  $ <command>
  <output>
--> exit 10

If <command> does not exit with code 10, then craml <file> will generate <file>.corrected with the right exit code. Note that @@ exit 0 will not be displayed.