xref: /freebsd/contrib/kyua/doc/manbuild_test.sh (revision 6b13d60bf49ee40626d7e3a5d5a80519f0067307)
1*b0d29bc4SBrooks Davis# Copyright 2014 The Kyua Authors.
2*b0d29bc4SBrooks Davis# All rights reserved.
3*b0d29bc4SBrooks Davis#
4*b0d29bc4SBrooks Davis# Redistribution and use in source and binary forms, with or without
5*b0d29bc4SBrooks Davis# modification, are permitted provided that the following conditions are
6*b0d29bc4SBrooks Davis# met:
7*b0d29bc4SBrooks Davis#
8*b0d29bc4SBrooks Davis# * Redistributions of source code must retain the above copyright
9*b0d29bc4SBrooks Davis#   notice, this list of conditions and the following disclaimer.
10*b0d29bc4SBrooks Davis# * Redistributions in binary form must reproduce the above copyright
11*b0d29bc4SBrooks Davis#   notice, this list of conditions and the following disclaimer in the
12*b0d29bc4SBrooks Davis#   documentation and/or other materials provided with the distribution.
13*b0d29bc4SBrooks Davis# * Neither the name of Google Inc. nor the names of its contributors
14*b0d29bc4SBrooks Davis#   may be used to endorse or promote products derived from this software
15*b0d29bc4SBrooks Davis#   without specific prior written permission.
16*b0d29bc4SBrooks Davis#
17*b0d29bc4SBrooks Davis# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18*b0d29bc4SBrooks Davis# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19*b0d29bc4SBrooks Davis# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20*b0d29bc4SBrooks Davis# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21*b0d29bc4SBrooks Davis# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22*b0d29bc4SBrooks Davis# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23*b0d29bc4SBrooks Davis# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24*b0d29bc4SBrooks Davis# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25*b0d29bc4SBrooks Davis# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26*b0d29bc4SBrooks Davis# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27*b0d29bc4SBrooks Davis# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28*b0d29bc4SBrooks Davis
29*b0d29bc4SBrooks Davis
30*b0d29bc4SBrooks Davis# Absolute path to the uninstalled script.
31*b0d29bc4SBrooks DavisMANBUILD="__MANBUILD__"
32*b0d29bc4SBrooks Davis
33*b0d29bc4SBrooks Davis
34*b0d29bc4SBrooks Davisatf_test_case empty
35*b0d29bc4SBrooks Davisempty_body() {
36*b0d29bc4SBrooks Davis    touch input
37*b0d29bc4SBrooks Davis    atf_check "${MANBUILD}" input output
38*b0d29bc4SBrooks Davis    atf_check cat output
39*b0d29bc4SBrooks Davis}
40*b0d29bc4SBrooks Davis
41*b0d29bc4SBrooks Davis
42*b0d29bc4SBrooks Davisatf_test_case no_replacements
43*b0d29bc4SBrooks Davisno_replacements_body() {
44*b0d29bc4SBrooks Davis    cat >input <<EOF
45*b0d29bc4SBrooks DavisThis is a manpage.
46*b0d29bc4SBrooks Davis
47*b0d29bc4SBrooks DavisWith more than one line.
48*b0d29bc4SBrooks DavisEOF
49*b0d29bc4SBrooks Davis    atf_check "${MANBUILD}" input output
50*b0d29bc4SBrooks Davis    atf_check -o file:input cat output
51*b0d29bc4SBrooks Davis}
52*b0d29bc4SBrooks Davis
53*b0d29bc4SBrooks Davis
54*b0d29bc4SBrooks Davisatf_test_case one_replacement
55*b0d29bc4SBrooks Davisone_replacement_body() {
56*b0d29bc4SBrooks Davis    cat >input <<EOF
57*b0d29bc4SBrooks DavisThis is a manpage.
58*b0d29bc4SBrooks DavisWhere __FOO__ gets replaced.
59*b0d29bc4SBrooks DavisAnd nothing more.
60*b0d29bc4SBrooks DavisEOF
61*b0d29bc4SBrooks Davis    atf_check "${MANBUILD}" -v FOO=this input output
62*b0d29bc4SBrooks Davis    cat >expout <<EOF
63*b0d29bc4SBrooks DavisThis is a manpage.
64*b0d29bc4SBrooks DavisWhere this gets replaced.
65*b0d29bc4SBrooks DavisAnd nothing more.
66*b0d29bc4SBrooks DavisEOF
67*b0d29bc4SBrooks Davis    atf_check -o file:expout cat output
68*b0d29bc4SBrooks Davis}
69*b0d29bc4SBrooks Davis
70*b0d29bc4SBrooks Davis
71*b0d29bc4SBrooks Davisatf_test_case some_replacements
72*b0d29bc4SBrooks Davissome_replacements_body() {
73*b0d29bc4SBrooks Davis    cat >input <<EOF
74*b0d29bc4SBrooks DavisThis is a manpage.
75*b0d29bc4SBrooks DavisWhere __FOO__ gets __BAR__.
76*b0d29bc4SBrooks DavisAnd nothing more.
77*b0d29bc4SBrooks DavisEOF
78*b0d29bc4SBrooks Davis    atf_check "${MANBUILD}" -v FOO=this -v BAR=replaced input output
79*b0d29bc4SBrooks Davis    cat >expout <<EOF
80*b0d29bc4SBrooks DavisThis is a manpage.
81*b0d29bc4SBrooks DavisWhere this gets replaced.
82*b0d29bc4SBrooks DavisAnd nothing more.
83*b0d29bc4SBrooks DavisEOF
84*b0d29bc4SBrooks Davis    atf_check -o file:expout cat output
85*b0d29bc4SBrooks Davis}
86*b0d29bc4SBrooks Davis
87*b0d29bc4SBrooks Davis
88*b0d29bc4SBrooks Davisatf_test_case preserve_tricky_lines
89*b0d29bc4SBrooks Davispreserve_tricky_lines_body() {
90*b0d29bc4SBrooks Davis    cat >input <<EOF
91*b0d29bc4SBrooks DavisBegin
92*b0d29bc4SBrooks Davis    This line is intended.
93*b0d29bc4SBrooks DavisThis other \\
94*b0d29bc4SBrooks Davis    continues later.
95*b0d29bc4SBrooks Davis\*(LtAnd this has strange characters\*(Gt
96*b0d29bc4SBrooks DavisEnd
97*b0d29bc4SBrooks DavisEOF
98*b0d29bc4SBrooks Davis    atf_check "${MANBUILD}" input output
99*b0d29bc4SBrooks Davis    cat >expout <<EOF
100*b0d29bc4SBrooks DavisBegin
101*b0d29bc4SBrooks Davis    This line is intended.
102*b0d29bc4SBrooks DavisThis other \\
103*b0d29bc4SBrooks Davis    continues later.
104*b0d29bc4SBrooks Davis\*(LtAnd this has strange characters\*(Gt
105*b0d29bc4SBrooks DavisEnd
106*b0d29bc4SBrooks DavisEOF
107*b0d29bc4SBrooks Davis    atf_check -o file:expout cat output
108*b0d29bc4SBrooks Davis}
109*b0d29bc4SBrooks Davis
110*b0d29bc4SBrooks Davis
111*b0d29bc4SBrooks Davisatf_test_case includes_ok
112*b0d29bc4SBrooks Davisincludes_ok_body() {
113*b0d29bc4SBrooks Davis    mkdir doc doc/subdir
114*b0d29bc4SBrooks Davis    cat >doc/input <<EOF
115*b0d29bc4SBrooks DavisThis is a manpage.
116*b0d29bc4SBrooks Davis__include__ subdir/chunk
117*b0d29bc4SBrooks DavisThere is more...
118*b0d29bc4SBrooks Davis__include__ chunk
119*b0d29bc4SBrooks DavisAnd done!
120*b0d29bc4SBrooks DavisEOF
121*b0d29bc4SBrooks Davis    cat >doc/subdir/chunk <<EOF
122*b0d29bc4SBrooks DavisThis is the first inclusion
123*b0d29bc4SBrooks Davisand worked __OK__.
124*b0d29bc4SBrooks DavisEOF
125*b0d29bc4SBrooks Davis    cat >doc/chunk <<EOF
126*b0d29bc4SBrooks DavisThis is the second inclusion.
127*b0d29bc4SBrooks DavisEOF
128*b0d29bc4SBrooks Davis    atf_check "${MANBUILD}" -v OK=ok doc/input output
129*b0d29bc4SBrooks Davis    cat >expout <<EOF
130*b0d29bc4SBrooks DavisThis is a manpage.
131*b0d29bc4SBrooks DavisThis is the first inclusion
132*b0d29bc4SBrooks Davisand worked ok.
133*b0d29bc4SBrooks DavisThere is more...
134*b0d29bc4SBrooks DavisThis is the second inclusion.
135*b0d29bc4SBrooks DavisAnd done!
136*b0d29bc4SBrooks DavisEOF
137*b0d29bc4SBrooks Davis    atf_check -o file:expout cat output
138*b0d29bc4SBrooks Davis}
139*b0d29bc4SBrooks Davis
140*b0d29bc4SBrooks Davis
141*b0d29bc4SBrooks Davisatf_test_case includes_parameterized
142*b0d29bc4SBrooks Davisincludes_parameterized_body() {
143*b0d29bc4SBrooks Davis    cat >input <<EOF
144*b0d29bc4SBrooks Davis__include__ chunk value=first
145*b0d29bc4SBrooks Davis__include__ chunk value=second
146*b0d29bc4SBrooks DavisEOF
147*b0d29bc4SBrooks Davis    cat >chunk <<EOF
148*b0d29bc4SBrooks DavisThis is a chunk with value: __value__.
149*b0d29bc4SBrooks DavisEOF
150*b0d29bc4SBrooks Davis    atf_check "${MANBUILD}" input output
151*b0d29bc4SBrooks Davis    cat >expout <<EOF
152*b0d29bc4SBrooks DavisThis is a chunk with value: first.
153*b0d29bc4SBrooks DavisThis is a chunk with value: second.
154*b0d29bc4SBrooks DavisEOF
155*b0d29bc4SBrooks Davis    atf_check -o file:expout cat output
156*b0d29bc4SBrooks Davis}
157*b0d29bc4SBrooks Davis
158*b0d29bc4SBrooks Davis
159*b0d29bc4SBrooks Davisatf_test_case includes_fail
160*b0d29bc4SBrooks Davisincludes_fail_body() {
161*b0d29bc4SBrooks Davis    cat >input <<EOF
162*b0d29bc4SBrooks DavisThis is a manpage.
163*b0d29bc4SBrooks Davis__include__ missing
164*b0d29bc4SBrooks DavisEOF
165*b0d29bc4SBrooks Davis    atf_check -s exit:1 -o ignore \
166*b0d29bc4SBrooks Davis        -e match:"manbuild.sh: Failed to generate output.*left unreplaced" \
167*b0d29bc4SBrooks Davis        "${MANBUILD}" input output
168*b0d29bc4SBrooks Davis    [ ! -f output ] || atf_fail "Output file was generated but it should" \
169*b0d29bc4SBrooks Davis        "not have been"
170*b0d29bc4SBrooks Davis}
171*b0d29bc4SBrooks Davis
172*b0d29bc4SBrooks Davis
173*b0d29bc4SBrooks Davisatf_test_case generate_fail
174*b0d29bc4SBrooks Davisgenerate_fail_body() {
175*b0d29bc4SBrooks Davis    touch input
176*b0d29bc4SBrooks Davis    atf_check -s exit:1 -o ignore \
177*b0d29bc4SBrooks Davis        -e match:"manbuild.sh: Failed to generate output" \
178*b0d29bc4SBrooks Davis        "${MANBUILD}" -v 'malformed&name=value' input output
179*b0d29bc4SBrooks Davis    [ ! -f output ] || atf_fail "Output file was generated but it should" \
180*b0d29bc4SBrooks Davis        "not have been"
181*b0d29bc4SBrooks Davis}
182*b0d29bc4SBrooks Davis
183*b0d29bc4SBrooks Davis
184*b0d29bc4SBrooks Davisatf_test_case validate_fail
185*b0d29bc4SBrooks Davisvalidate_fail_body() {
186*b0d29bc4SBrooks Davis    cat >input <<EOF
187*b0d29bc4SBrooks DavisThis is a manpage.
188*b0d29bc4SBrooks DavisWhere __FOO__ gets replaced.
189*b0d29bc4SBrooks DavisBut where __BAR__ doesn't.
190*b0d29bc4SBrooks DavisEOF
191*b0d29bc4SBrooks Davis    atf_check -s exit:1 -o ignore \
192*b0d29bc4SBrooks Davis        -e match:"manbuild.sh: Failed to generate output.*left unreplaced" \
193*b0d29bc4SBrooks Davis        "${MANBUILD}" -v FOO=this input output
194*b0d29bc4SBrooks Davis    [ ! -f output ] || atf_fail "Output file was generated but it should" \
195*b0d29bc4SBrooks Davis        "not have been"
196*b0d29bc4SBrooks Davis}
197*b0d29bc4SBrooks Davis
198*b0d29bc4SBrooks Davis
199*b0d29bc4SBrooks Davisatf_test_case bad_args
200*b0d29bc4SBrooks Davisbad_args_body() {
201*b0d29bc4SBrooks Davis    atf_check -s exit:1 \
202*b0d29bc4SBrooks Davis        -e match:'manbuild.sh: Must provide input and output names' \
203*b0d29bc4SBrooks Davis        "${MANBUILD}"
204*b0d29bc4SBrooks Davis
205*b0d29bc4SBrooks Davis    atf_check -s exit:1 \
206*b0d29bc4SBrooks Davis        -e match:'manbuild.sh: Must provide input and output names' \
207*b0d29bc4SBrooks Davis        "${MANBUILD}" foo
208*b0d29bc4SBrooks Davis
209*b0d29bc4SBrooks Davis    atf_check -s exit:1 \
210*b0d29bc4SBrooks Davis        -e match:'manbuild.sh: Must provide input and output names' \
211*b0d29bc4SBrooks Davis        "${MANBUILD}" foo bar baz
212*b0d29bc4SBrooks Davis}
213*b0d29bc4SBrooks Davis
214*b0d29bc4SBrooks Davis
215*b0d29bc4SBrooks Davisatf_test_case bad_option
216*b0d29bc4SBrooks Davisbad_option_body() {
217*b0d29bc4SBrooks Davis    atf_check -s exit:1 -e match:'manbuild.sh: Unknown option -Z' \
218*b0d29bc4SBrooks Davis        "${MANBUILD}" -Z
219*b0d29bc4SBrooks Davis}
220*b0d29bc4SBrooks Davis
221*b0d29bc4SBrooks Davis
222*b0d29bc4SBrooks Davisatf_init_test_cases() {
223*b0d29bc4SBrooks Davis    atf_add_test_case empty
224*b0d29bc4SBrooks Davis    atf_add_test_case no_replacements
225*b0d29bc4SBrooks Davis    atf_add_test_case one_replacement
226*b0d29bc4SBrooks Davis    atf_add_test_case some_replacements
227*b0d29bc4SBrooks Davis    atf_add_test_case preserve_tricky_lines
228*b0d29bc4SBrooks Davis    atf_add_test_case includes_ok
229*b0d29bc4SBrooks Davis    atf_add_test_case includes_parameterized
230*b0d29bc4SBrooks Davis    atf_add_test_case includes_fail
231*b0d29bc4SBrooks Davis    atf_add_test_case generate_fail
232*b0d29bc4SBrooks Davis    atf_add_test_case validate_fail
233*b0d29bc4SBrooks Davis    atf_add_test_case bad_args
234*b0d29bc4SBrooks Davis    atf_add_test_case bad_option
235*b0d29bc4SBrooks Davis}
236