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