chiark / gitweb /
test suite: manpages-format: New test
[dgit.git] / tests / tests / manpages-format
diff --git a/tests/tests/manpages-format b/tests/tests/manpages-format
new file mode 100755 (executable)
index 0000000..4b9585f
--- /dev/null
@@ -0,0 +1,61 @@
+#!/bin/bash
+set -e
+autoimport=
+. tests/lib
+
+t-dependencies man-db make groff git-debrebase
+
+cd $root
+
+printenv |grep MAKE ||: |sort
+manpages=$(MAKEFLAGS= MAKELEVEL= make list-manpages)
+
+export MANWIDTH=80
+
+run_man () {
+       if [ "x${DGIT_MANPAGES_SOURCE_DIR}" = x ]; then
+               cmd='man "$@" $section $page'
+       else
+               make $roff >&2
+               cmd='man "$@" -l $roff'
+       fi
+       eval "$cmd 2>&1 >/dev/null |tee $errs >&2"
+}
+
+for roff in $manpages; do
+       >$tmp/$roff.expected
+done
+
+expected () {
+       cat >$tmp/$1.expected
+}
+
+not_egrep_vxPf () {
+       # egrep -vxPf does not work, so we reimplement it
+       perl -ne '
+               BEGIN () {
+                       open PATS, shift @ARGV or die $!;
+                       $re = join "|", map { chomp; qr{^(?:$_)$} } <PATS>;
+               }
+               next if m{$re};
+               print STDERR "unexpected: $_";
+               $bad = 1;
+               END { die "unexpected, re= $re\n" if $bad; }
+       ' "$@"
+}
+
+expected dgit.1 <<'END'
+.* # table wider than line width
+END
+
+for roff in $manpages; do
+       section=${roff##*.}
+       page=${roff%.*}
+
+       errs=$tmp/$roff.errs
+       run_man >/dev/null
+       perl -0777 -i~ -pe 's/\n[ \t]+/ # /' $errs
+       not_egrep_vxPf $tmp/$roff.expected $errs
+done
+
+t-ok