summaryrefslogtreecommitdiff
path: root/tests/tests/manpages-format
blob: 7ba2f9df3f1ae11703d9564991b0108d5dd4187a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/bin/bash
set -e
autoimport=
. tests/lib

t-dependencies man-db make groff git-debrebase

cd $root

printenv |grep MAKE ||: |t-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"
}

for roff in $manpages; do
	for fmt in txt ps; do
		>$tmp/$roff.$fmt-expected
	done
done

expected () {
	cat >$tmp/$2.$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{^(?:$_)$} }
				qr{^(?=a)b}, <PATS>;
			print STDERR "RE $re\n";
		}
		next if m{$re};
		print STDERR "unexpected: $_";
		$bad = 1;
		END { die "unexpected errors\n" if $bad; }
	' "$@"
}

expected txt dgit.1 <<'END'
.* # table wider than line width
END

prep () {
	fmt=$1
	errs=$tmp/$roff.$fmt-errs
}

check () {
	perl -0777 -i~ -pe 's/\n[ \t]+/ # /' $errs
	not_egrep_vxPf $tmp/$roff.$fmt-expected $errs
}

for roff in $manpages; do
	section=${roff##*.}
	page=${roff%.*}

	prep txt
	run_man
	check

	prep ps
	run_man -Tps
	check
done

t-ok