- Added the
-d
/--debug
flag that disables diffing of expected/actual output and instead passes through script output tostdout
/stderr
. - Added the
--shell-opts
flag for specifying flags to invoke the shell with. By setting--shell-opts='-x'
and--debug
together, this can be used to see shell commands as they're run and their output in real time which can be useful for debugging slow or hanging tests. - Added xUnit XML output support (for better integration of test results with Bamboo and other continuous integration tools).
- Added support for using (esc) on expected out lines that aren't automatically escaped in actual output.
- Added the
$TESTSHELL
environment variable. This allows a test to portably check what shell it was invoked with. - Added an error message for when no tests are found in a directory.
- Changed
Makefile
to install into/usr/local
by default. - Simplified the
Makefile
's targets. The targets available now areall
,build
,check
/test
,clean
,dist
,install
, andquicktest
(for running the test suite without checking test coverage). - Fixed non-ASCII strings not being escaped with
(esc)
on Python 3. - Fixed a crash on tests that don't have a trailing newline.
- Fixed a crash when using
set -x
with zsh.
- Added the long option
--preserve-env
for-E
. - Added support for specifying options in
.cramrc
(configurable with theCRAMRC
environment variable). - Added a
--shell
option to change the shell tests are run with. Contributed by Kamil Kisiel. - Added Arch Linux package metadata (in
contrib/
). Contributed by Andrey Vlasovskikh. - Fixed shell commands unintentionally inheriting Python's
SIGPIPE
handler (causing commands that close pipes to printbroken pipe
messages). - Fixed
EPIPE
under PyPy when applying patches in--interactive
mode. - Added
TESTFILE
test environment variable (set to the name of the current test). - Fixed GNU patch 2.7 compatibility by using relative paths instead of absolute paths. Contributed by Douglas Creager.
- Fixed name clashes in temporary test directories (e.g., when running two tests with the same name in different folders).
- Backwards compatibility: Fixed improper usage of the subprocess library under Python 3. This fixes Python 3.3 support, but breaks support for Python 3.1-3.2.3 due to a bug in Python. If you're using Python 3.0-3.2, you must upgrade to Python 3.2.4 or newer.
- The test format has changed: Matching output not ending in a
newline now requires the
(no-eol)
keyword instead of ending the line in%
. - Matching output containing unprintable characters now requires the
(esc)
keyword. Real output containing unprintable characters will automatically receive(esc)
. - If an expected line matches its real output line exactly, special
matching like
(re)
or(glob)
will be ignored. - Regular expressions ending in a trailing backslash are now considered invalid.
- Added an
--indent
option for changing the default amount of indentation required to specify commands and output. - Added support for specifying command line options in the
CRAM
environment variable. - The
--quiet
and--verbose
options can now be used together. - When running Cram under Python 3, Unicode-specific line break characters will no longer be parsed as newlines.
- Tests are no longer required to end in a trailing newline.
- The test format has changed: Output lines containing regular
expressions must now end in
(re)
or they'll be matched literally. Lines ending with keywords are matched literally first, however. - Regular expressions are now matched from beginning to end. In other
words
\d (re)
is matched as^\d$
. - In addition to
(re)
,(glob)
has been added. It supports*
,?
, and escaping both characters (and backslashes) using\
. - Environment settings have changed: The
-D
flag has been removed,$TESTDIR
is now set to the directory containing the.t
file, and$CRAMTMP
is set to the test runner's temporary directory. -i
/--interactive
now requirespatch(1)
. Instead of.err
files replacing.t
files during merges, diffs are applied usingpatch(1)
. This prevents matching regular expressions and globs from getting clobbered.- Previous
.err
files are now removed when tests pass. - Cram now exits with return code
1
if any tests failed. - If a test exits with return code
80
, it's considered a skipped a test. This is useful for intentionally disabling tests when they only work on certain platforms or in certain settings. - The number of tests, the number of skipped tests, and the number of failed tests are now printed after all tests are finished.
- Added
-q
/--quiet
to suppress diff output. - Added contrib/cram.vim syntax file for Vim. Contributed by Steve Losh.
- Implemented resetting of common environment variables. This behavior
can be disabled using the
-E
flag. - Changed the test runner to first make its own overall random
temporary directory, make
tmp
inside of it and setTMPDIR
, etc. to its path, and run each test with a random temporary working directory inside of that. - Added
--keep-tmpdir
. Temporary directories are named by test filename (along with a random string). - Added
-i
/--interactive
to merge actual output back to into tests interactively. - Added ability to match command output not ending in a newline by
suffixing output in the test with
%
.
- Changed the test runner to run tests with a random temporary working directory.
- Initial release.