1c243e490SMarcel Moolenaar# Copyright (c) 2010 The NetBSD Foundation, Inc. 2c243e490SMarcel Moolenaar# All rights reserved. 3c243e490SMarcel Moolenaar# 4c243e490SMarcel Moolenaar# Redistribution and use in source and binary forms, with or without 5c243e490SMarcel Moolenaar# modification, are permitted provided that the following conditions 6c243e490SMarcel Moolenaar# are met: 7c243e490SMarcel Moolenaar# 1. Redistributions of source code must retain the above copyright 8c243e490SMarcel Moolenaar# notice, this list of conditions and the following disclaimer. 9c243e490SMarcel Moolenaar# 2. Redistributions in binary form must reproduce the above copyright 10c243e490SMarcel Moolenaar# notice, this list of conditions and the following disclaimer in the 11c243e490SMarcel Moolenaar# documentation and/or other materials provided with the distribution. 12c243e490SMarcel Moolenaar# 13c243e490SMarcel Moolenaar# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND 14c243e490SMarcel Moolenaar# CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, 15c243e490SMarcel Moolenaar# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 16c243e490SMarcel Moolenaar# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 17c243e490SMarcel Moolenaar# IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY 18c243e490SMarcel Moolenaar# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19c243e490SMarcel Moolenaar# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 20c243e490SMarcel Moolenaar# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 21c243e490SMarcel Moolenaar# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 22c243e490SMarcel Moolenaar# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 23c243e490SMarcel Moolenaar# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 24c243e490SMarcel Moolenaar# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25*0677dfd1SJulio Merino 26*0677dfd1SJulio Merino: ${ATF_SH:="__ATF_SH__"} 27c243e490SMarcel Moolenaar 28c243e490SMarcel Moolenaarcreate_test_program() { 29*0677dfd1SJulio Merino local output="${1}"; shift 30*0677dfd1SJulio Merino echo "#! ${ATF_SH} ${*}" >"${output}" 31*0677dfd1SJulio Merino cat >>"${output}" 32*0677dfd1SJulio Merino chmod +x "${output}" 33c243e490SMarcel Moolenaar} 34c243e490SMarcel Moolenaar 35c243e490SMarcel Moolenaaratf_test_case no_args 36c243e490SMarcel Moolenaarno_args_body() 37c243e490SMarcel Moolenaar{ 38c243e490SMarcel Moolenaar cat >experr <<EOF 39c243e490SMarcel Moolenaaratf-sh: ERROR: No test program provided 401a61beb0SJulio Merinoatf-sh: See atf-sh(1) for usage details. 41c243e490SMarcel MoolenaarEOF 42*0677dfd1SJulio Merino atf_check -s eq:1 -o ignore -e file:experr "${ATF_SH}" 43c243e490SMarcel Moolenaar} 44c243e490SMarcel Moolenaar 45c243e490SMarcel Moolenaaratf_test_case missing_script 46c243e490SMarcel Moolenaarmissing_script_body() 47c243e490SMarcel Moolenaar{ 48c243e490SMarcel Moolenaar cat >experr <<EOF 49c243e490SMarcel Moolenaaratf-sh: ERROR: The test program 'non-existent' does not exist 50c243e490SMarcel MoolenaarEOF 51*0677dfd1SJulio Merino atf_check -s eq:1 -o ignore -e file:experr "${ATF_SH}" non-existent 52c243e490SMarcel Moolenaar} 53c243e490SMarcel Moolenaar 54c243e490SMarcel Moolenaaratf_test_case arguments 55c243e490SMarcel Moolenaararguments_body() 56c243e490SMarcel Moolenaar{ 57c243e490SMarcel Moolenaar create_test_program tp <<EOF 58c243e490SMarcel Moolenaarmain() { 59c243e490SMarcel Moolenaar echo ">>>\${0}<<<" 60c243e490SMarcel Moolenaar while test \${#} -gt 0; do 61c243e490SMarcel Moolenaar echo ">>>\${1}<<<" 62c243e490SMarcel Moolenaar shift 63c243e490SMarcel Moolenaar done 64c243e490SMarcel Moolenaar true 65c243e490SMarcel Moolenaar} 66c243e490SMarcel MoolenaarEOF 67c243e490SMarcel Moolenaar 68c243e490SMarcel Moolenaar cat >expout <<EOF 69c243e490SMarcel Moolenaar>>>./tp<<< 70c243e490SMarcel Moolenaar>>> a b <<< 71c243e490SMarcel Moolenaar>>>foo<<< 72c243e490SMarcel MoolenaarEOF 73c243e490SMarcel Moolenaar atf_check -s eq:0 -o file:expout -e empty ./tp ' a b ' foo 74c243e490SMarcel Moolenaar 75c243e490SMarcel Moolenaar cat >expout <<EOF 76c243e490SMarcel Moolenaar>>>tp<<< 77c243e490SMarcel Moolenaar>>> hello bye <<< 78c243e490SMarcel Moolenaar>>>foo bar<<< 79c243e490SMarcel MoolenaarEOF 80*0677dfd1SJulio Merino atf_check -s eq:0 -o file:expout -e empty "${ATF_SH}" tp \ 81*0677dfd1SJulio Merino ' hello bye ' 'foo bar' 82*0677dfd1SJulio Merino} 83*0677dfd1SJulio Merino 84*0677dfd1SJulio Merinoatf_test_case custom_shell__command_line 85*0677dfd1SJulio Merinocustom_shell__command_line_body() 86*0677dfd1SJulio Merino{ 87*0677dfd1SJulio Merino cat >expout <<EOF 88*0677dfd1SJulio MerinoThis is the custom shell 89*0677dfd1SJulio MerinoThis is the test program 90*0677dfd1SJulio MerinoEOF 91*0677dfd1SJulio Merino 92*0677dfd1SJulio Merino cat >custom-shell <<EOF 93*0677dfd1SJulio Merino#! /bin/sh 94*0677dfd1SJulio Merinoecho "This is the custom shell" 95*0677dfd1SJulio Merinoexec /bin/sh "\${@}" 96*0677dfd1SJulio MerinoEOF 97*0677dfd1SJulio Merino chmod +x custom-shell 98*0677dfd1SJulio Merino 99*0677dfd1SJulio Merino echo 'main() { echo "This is the test program"; }' | create_test_program tp 100*0677dfd1SJulio Merino atf_check -s eq:0 -o file:expout -e empty "${ATF_SH}" -s ./custom-shell tp 101*0677dfd1SJulio Merino} 102*0677dfd1SJulio Merino 103*0677dfd1SJulio Merinoatf_test_case custom_shell__shebang 104*0677dfd1SJulio Merinocustom_shell__shebang_body() 105*0677dfd1SJulio Merino{ 106*0677dfd1SJulio Merino cat >expout <<EOF 107*0677dfd1SJulio MerinoThis is the custom shell 108*0677dfd1SJulio MerinoThis is the test program 109*0677dfd1SJulio MerinoEOF 110*0677dfd1SJulio Merino 111*0677dfd1SJulio Merino cat >custom-shell <<EOF 112*0677dfd1SJulio Merino#! /bin/sh 113*0677dfd1SJulio Merinoecho "This is the custom shell" 114*0677dfd1SJulio Merinoexec /bin/sh "\${@}" 115*0677dfd1SJulio MerinoEOF 116*0677dfd1SJulio Merino chmod +x custom-shell 117*0677dfd1SJulio Merino 118*0677dfd1SJulio Merino echo 'main() { echo "This is the test program"; }' | create_test_program \ 119*0677dfd1SJulio Merino tp "-s$(pwd)/custom-shell" 120*0677dfd1SJulio Merino atf_check -s eq:0 -o file:expout -e empty ./tp 121*0677dfd1SJulio Merino} 122*0677dfd1SJulio Merino 123*0677dfd1SJulio Merinoatf_test_case set_e 124*0677dfd1SJulio Merinoset_e_head() 125*0677dfd1SJulio Merino{ 126*0677dfd1SJulio Merino atf_set "descr" "Simple test to validate that atf-sh works even when" \ 127*0677dfd1SJulio Merino "set -e is enabled" 128*0677dfd1SJulio Merino} 129*0677dfd1SJulio Merinoset_e_body() 130*0677dfd1SJulio Merino{ 131*0677dfd1SJulio Merino cat >custom-shell <<EOF 132*0677dfd1SJulio Merino#! /bin/sh 133*0677dfd1SJulio Merinoexec /bin/sh -e "\${@}" 134*0677dfd1SJulio MerinoEOF 135*0677dfd1SJulio Merino chmod +x custom-shell 136*0677dfd1SJulio Merino 137*0677dfd1SJulio Merino cat >tp <<EOF 138*0677dfd1SJulio Merinoatf_test_case helper 139*0677dfd1SJulio Merinohelper_body() { 140*0677dfd1SJulio Merino atf_skip "reached" 141*0677dfd1SJulio Merino} 142*0677dfd1SJulio Merinoatf_init_test_cases() { 143*0677dfd1SJulio Merino atf_add_test_case helper 144*0677dfd1SJulio Merino} 145*0677dfd1SJulio MerinoEOF 146*0677dfd1SJulio Merino atf_check -s eq:0 -o match:skipped.*reached \ 147*0677dfd1SJulio Merino "${ATF_SH}" -s ./custom-shell tp helper 148c243e490SMarcel Moolenaar} 149c243e490SMarcel Moolenaar 150c243e490SMarcel Moolenaaratf_init_test_cases() 151c243e490SMarcel Moolenaar{ 152c243e490SMarcel Moolenaar atf_add_test_case no_args 153c243e490SMarcel Moolenaar atf_add_test_case missing_script 154c243e490SMarcel Moolenaar atf_add_test_case arguments 155*0677dfd1SJulio Merino atf_add_test_case custom_shell__command_line 156*0677dfd1SJulio Merino atf_add_test_case custom_shell__shebang 157*0677dfd1SJulio Merino atf_add_test_case set_e 158c243e490SMarcel Moolenaar} 159c243e490SMarcel Moolenaar 160c243e490SMarcel Moolenaar# vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4 161