tapdiffer [-b] legend checkfile


This utility is a TAP producer that compares standard input with a specified checkfile. The output begins with an unnunbered TAP report line in which the checkfile and legend arguments specify the text part.

If the diff is empty the report is a solitary "ok" line. If the diff is nonempty it the report is a "not ok" line followed by the diff in the format of a TAP14 YAML attachment. If the environment variable QUIET is nonempty the YAML section is suppressed.

The -b option, if present, instructs the diff utility to ignore trailing whitespace and trat all runs of whitespace within a line as equivalent to a single space.

A typical Makefile snippet to invoke this on a set of log (.log) and checkfile (.chk) pairs. testing a filter named by FILTER, mibght look like this:

TESTLOADS := $(shell ls *.log | sed '/.log/s///')
	echo "1..$$(ls *.log | wc -l)"
	@for test in $(TESTLOADS); \
	do \
		legend=$$(sed -n -e '/^## /s///p' <$${test}.log); \
		$(FILTER) <"$${test}.log" | ./tapdiffer "$${legend}" "$${test}.chk"; \

	$(MAKE) tap | tapview


tapview is written in pure POSIX shell. It requires a version of diff(1) that acceps the -u and -b options, such as GNU diff. There are no other dependencies.


Alwqys returns 0.


Eric S. Raymond <>. The public repository is at on GitLab.