summaryrefslogtreecommitdiff
path: root/tests/enumerate-tests
blob: a532b526bfa56efcccaf6000016914a1eb4749e9 (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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#!/bin/bash

set -e

. tests/lib-core
. tests/lib-restricts

mode=$1

test-begin- () {
	whynots=''
}

restriction- () {
	set +e
	whynot=$(t-restriction-$r)
	rc=$?
	whynot="${whynot//
/ / }"
	set -e
	case "$rc.$whynot" in
	0.)	;;
	1.?*)	whynots="$whynots${whynots:+; }$whynot" ;;
	*)	fail "restriction $r for $t gave $rc $whynot !"
	esac
}

dependencies- () {
	:
}

test-done- () {
	case "$whynots" in
	'')	echo $t ;;
	?*)	echo >&2 "SKIP $t $whynots" ;;
	esac
}

finish- () {
	:
}

test-begin-gencontrol () {
	restrictions=''
	dependencies='dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime'
}

restriction-gencontrol () {
	if [ $r = x-dgit-out-of-tree-only ]; then return; fi
	restrictions+=" $r"
}

gencontrol-add-deps () {
	for dep in "$@"; do
		dependencies+="${dependencies:+, }$dep"
	done
}

dependencies-gencontrol () {
	for dep in "$deps"; do
		case "$dep" in
		NO-DGIT) dependencies='chiark-utils-bin, faketime' ;;
		NO-DEFAULT) dependencies='' ;;
		GDR) gencontrol-add-deps \
			git-debrebase git-buildpackage
			;;
		*) gencontrol-add-deps "$dep" ;;
		esac
	done
}

test-done-gencontrol () {
	stanza=$(
		add_Depends="$dependencies" \
		perl <debian/tests/control.in -wpe '
			if (/^(\w+):/) {
				my $h = $1;
				s{$}{ $ENV{"add_$h"} // "" }e;
			}
		' 
		case "$restrictions" in
		?*) echo "Restrictions:$restrictions" ;;
		esac
		)
	key=$(printf "%s" "$stanza" | sha256sum)
	key=${key%% *}
	eval "
		stanza_$key=\"\$stanza\"
		tests_$key+=\" \${t#tests/tests/}\"
	"
	keys=" ${keys/ $key /}"
	keys+=" $key "
}

finish-gencontrol () {
	for key in $keys; do
		eval "
			stanza=\$stanza_$key
			tests=\$tests_$key
		"
		printf "Tests:%s\n%s\n\n" "$tests" "$stanza"
	done
}

seddery () {
	local seddery=$1
	sed <$t -n '
		20q;
		/^: t-enumerate-tests-end$/q;
		'"$seddery"'
	'
}

for t in $(run-parts --list tests/tests); do
	test-begin-$mode
	for r in $(seddery 's/^t-restrict //p'); do
		restriction-$mode
	done
	for deps in $(seddery 's/^t-dependencies //p'); do
		dependencies-$mode
	done
	test-done-$mode
done

finish-$mode