1*b0d29bc4SBrooks Davis# Copyright 2011 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# Location of installed documents. Used to validate the output of the about 31*b0d29bc4SBrooks Davis# messages against the golden files. 32*b0d29bc4SBrooks Davis: "${KYUA_DOCDIR:=__KYUA_DOCDIR__}" 33*b0d29bc4SBrooks Davis 34*b0d29bc4SBrooks Davis 35*b0d29bc4SBrooks Davis# Common code to validate the output of all about information. 36*b0d29bc4SBrooks Davis# 37*b0d29bc4SBrooks Davis# \param file The name of the file with the output. 38*b0d29bc4SBrooks Davischeck_all() { 39*b0d29bc4SBrooks Davis local file="${1}"; shift 40*b0d29bc4SBrooks Davis 41*b0d29bc4SBrooks Davis grep -E 'kyua .*[0-9]+\.[0-9]+' "${file}" || \ 42*b0d29bc4SBrooks Davis atf_fail 'No version reported' 43*b0d29bc4SBrooks Davis grep 'Copyright' "${file}" || atf_fail 'No license reported' 44*b0d29bc4SBrooks Davis grep '^\*[^<>]*$' "${file}" || atf_fail 'No authors reported' 45*b0d29bc4SBrooks Davis grep '^\*.*<.*@.*>$' "${file}" || atf_fail 'No contributors reported' 46*b0d29bc4SBrooks Davis grep 'Homepage' "${file}" || atf_fail 'No homepage reported' 47*b0d29bc4SBrooks Davis} 48*b0d29bc4SBrooks Davis 49*b0d29bc4SBrooks Davis 50*b0d29bc4SBrooks Davisutils_test_case all_topics__installed 51*b0d29bc4SBrooks Davisall_topics__installed_head() { 52*b0d29bc4SBrooks Davis atf_set "require.files" "${KYUA_DOCDIR}/AUTHORS" \ 53*b0d29bc4SBrooks Davis "${KYUA_DOCDIR}/CONTRIBUTORS" "${KYUA_DOCDIR}/LICENSE" 54*b0d29bc4SBrooks Davis} 55*b0d29bc4SBrooks Davisall_topics__installed_body() { 56*b0d29bc4SBrooks Davis atf_check -s exit:0 -o save:stdout -e empty kyua about 57*b0d29bc4SBrooks Davis check_all stdout 58*b0d29bc4SBrooks Davis} 59*b0d29bc4SBrooks Davis 60*b0d29bc4SBrooks Davis 61*b0d29bc4SBrooks Davisutils_test_case all_topics__override 62*b0d29bc4SBrooks Davisall_topics__override_body() { 63*b0d29bc4SBrooks Davis mkdir docs 64*b0d29bc4SBrooks Davis echo "* Author (no email)" >docs/AUTHORS 65*b0d29bc4SBrooks Davis echo "* Contributor <contributor@example.net>" >docs/CONTRIBUTORS 66*b0d29bc4SBrooks Davis echo "Copyright text" >docs/LICENSE 67*b0d29bc4SBrooks Davis export KYUA_DOCDIR=docs 68*b0d29bc4SBrooks Davis atf_check -s exit:0 -o save:stdout -e empty kyua about 69*b0d29bc4SBrooks Davis check_all stdout 70*b0d29bc4SBrooks Davis} 71*b0d29bc4SBrooks Davis 72*b0d29bc4SBrooks Davis 73*b0d29bc4SBrooks Davisutils_test_case topic__authors__installed 74*b0d29bc4SBrooks Davistopic__authors__installed_head() { 75*b0d29bc4SBrooks Davis atf_set "require.files" "${KYUA_DOCDIR}/AUTHORS" \ 76*b0d29bc4SBrooks Davis "${KYUA_DOCDIR}/CONTRIBUTORS" 77*b0d29bc4SBrooks Davis} 78*b0d29bc4SBrooks Davistopic__authors__installed_body() { 79*b0d29bc4SBrooks Davis grep -h '^\* ' "${KYUA_DOCDIR}/AUTHORS" "${KYUA_DOCDIR}/CONTRIBUTORS" \ 80*b0d29bc4SBrooks Davis >expout 81*b0d29bc4SBrooks Davis atf_check -s exit:0 -o file:expout -e empty kyua about authors 82*b0d29bc4SBrooks Davis} 83*b0d29bc4SBrooks Davis 84*b0d29bc4SBrooks Davis 85*b0d29bc4SBrooks Davisutils_test_case topic__authors__override 86*b0d29bc4SBrooks Davistopic__authors__override_body() { 87*b0d29bc4SBrooks Davis mkdir docs 88*b0d29bc4SBrooks Davis echo "* Author (no email)" >docs/AUTHORS 89*b0d29bc4SBrooks Davis echo "* Contributor <contributor@example.net>" >docs/CONTRIBUTORS 90*b0d29bc4SBrooks Davis export KYUA_DOCDIR=docs 91*b0d29bc4SBrooks Davis cat docs/AUTHORS docs/CONTRIBUTORS >expout 92*b0d29bc4SBrooks Davis atf_check -s exit:0 -o file:expout -e empty kyua about authors 93*b0d29bc4SBrooks Davis} 94*b0d29bc4SBrooks Davis 95*b0d29bc4SBrooks Davis 96*b0d29bc4SBrooks Davisutils_test_case topic__license__installed 97*b0d29bc4SBrooks Davistopic__license__installed_head() { 98*b0d29bc4SBrooks Davis atf_set "require.files" "${KYUA_DOCDIR}/LICENSE" 99*b0d29bc4SBrooks Davis} 100*b0d29bc4SBrooks Davistopic__license__installed_body() { 101*b0d29bc4SBrooks Davis atf_check -s exit:0 -o file:"${KYUA_DOCDIR}/LICENSE" -e empty \ 102*b0d29bc4SBrooks Davis kyua about license 103*b0d29bc4SBrooks Davis} 104*b0d29bc4SBrooks Davis 105*b0d29bc4SBrooks Davis 106*b0d29bc4SBrooks Davisutils_test_case topic__license__override 107*b0d29bc4SBrooks Davistopic__license__override_body() { 108*b0d29bc4SBrooks Davis mkdir docs 109*b0d29bc4SBrooks Davis echo "Copyright text" >docs/LICENSE 110*b0d29bc4SBrooks Davis export KYUA_DOCDIR=docs 111*b0d29bc4SBrooks Davis atf_check -s exit:0 -o file:docs/LICENSE -e empty kyua about license 112*b0d29bc4SBrooks Davis} 113*b0d29bc4SBrooks Davis 114*b0d29bc4SBrooks Davis 115*b0d29bc4SBrooks Davisutils_test_case topic__version 116*b0d29bc4SBrooks Davistopic__version_body() { 117*b0d29bc4SBrooks Davis atf_check -s exit:0 -o save:stdout -e empty kyua about version 118*b0d29bc4SBrooks Davis 119*b0d29bc4SBrooks Davis local lines="$(wc -l stdout | awk '{ print $1 }')" 120*b0d29bc4SBrooks Davis [ "${lines}" -eq 1 ] || atf_fail "Version query returned more than one line" 121*b0d29bc4SBrooks Davis 122*b0d29bc4SBrooks Davis grep -E '^kyua (.*) [0-9]+\.[0-9]+$' stdout || \ 123*b0d29bc4SBrooks Davis atf_fail "Invalid version message" 124*b0d29bc4SBrooks Davis} 125*b0d29bc4SBrooks Davis 126*b0d29bc4SBrooks Davis 127*b0d29bc4SBrooks Davisutils_test_case topic__invalid 128*b0d29bc4SBrooks Davistopic__invalid_body() { 129*b0d29bc4SBrooks Davis cat >experr <<EOF 130*b0d29bc4SBrooks DavisUsage error for command about: Invalid about topic 'foo'. 131*b0d29bc4SBrooks DavisType 'kyua help about' for usage information. 132*b0d29bc4SBrooks DavisEOF 133*b0d29bc4SBrooks Davis atf_check -s exit:3 -o empty -e file:experr kyua about foo 134*b0d29bc4SBrooks Davis} 135*b0d29bc4SBrooks Davis 136*b0d29bc4SBrooks Davis 137*b0d29bc4SBrooks Davisutils_test_case too_many_arguments 138*b0d29bc4SBrooks Davistoo_many_arguments_body() { 139*b0d29bc4SBrooks Davis cat >stderr <<EOF 140*b0d29bc4SBrooks DavisUsage error for command about: Too many arguments. 141*b0d29bc4SBrooks DavisType 'kyua help about' for usage information. 142*b0d29bc4SBrooks DavisEOF 143*b0d29bc4SBrooks Davis atf_check -s exit:3 -o empty -e file:stderr kyua about abc def 144*b0d29bc4SBrooks Davis} 145*b0d29bc4SBrooks Davis 146*b0d29bc4SBrooks Davis 147*b0d29bc4SBrooks Davisatf_init_test_cases() { 148*b0d29bc4SBrooks Davis atf_add_test_case all_topics__installed 149*b0d29bc4SBrooks Davis atf_add_test_case all_topics__override 150*b0d29bc4SBrooks Davis atf_add_test_case topic__authors__installed 151*b0d29bc4SBrooks Davis atf_add_test_case topic__authors__override 152*b0d29bc4SBrooks Davis atf_add_test_case topic__license__installed 153*b0d29bc4SBrooks Davis atf_add_test_case topic__license__override 154*b0d29bc4SBrooks Davis atf_add_test_case topic__version 155*b0d29bc4SBrooks Davis atf_add_test_case topic__invalid 156*b0d29bc4SBrooks Davis 157*b0d29bc4SBrooks Davis atf_add_test_case too_many_arguments 158*b0d29bc4SBrooks Davis} 159