1dnl Copyright 2010 Google Inc. 2dnl All rights reserved. 3dnl 4dnl Redistribution and use in source and binary forms, with or without 5dnl modification, are permitted provided that the following conditions are 6dnl met: 7dnl 8dnl * Redistributions of source code must retain the above copyright 9dnl notice, this list of conditions and the following disclaimer. 10dnl * Redistributions in binary form must reproduce the above copyright 11dnl notice, this list of conditions and the following disclaimer in the 12dnl documentation and/or other materials provided with the distribution. 13dnl * Neither the name of Google Inc. nor the names of its contributors 14dnl may be used to endorse or promote products derived from this software 15dnl without specific prior written permission. 16dnl 17dnl THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18dnl "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19dnl LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 20dnl A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 21dnl OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22dnl SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23dnl LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24dnl DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25dnl THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26dnl (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27dnl OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 29AT_INIT([bootstrapping tests]) 30 31 32m4_define([GUESS_TOPDIR], { 33 old=$(pwd) 34 cd "${at_suite_dir}" 35 # We need to locate a build product, not a source file, because the 36 # test suite may be run outside of the source tree (think distcheck). 37 while test $(pwd) != '/' -a ! -e engine/test_case_test; do 38 cd .. 39 done 40 topdir=$(pwd) 41 cd ${old} 42 echo ${topdir} 43}) 44 45 46m4_define([CREATE_ATF_HELPERS], [ 47 AT_DATA([Kyuafile], [ 48syntax(2) 49test_suite("bootstrap") 50atf_test_program{name="atf_helpers"} 51]) 52 ln -s $(GUESS_TOPDIR)/bootstrap/atf_helpers atf_helpers 53]) 54m4_define([RUN_ATF_HELPERS], 55 [HOME=$(pwd) TESTS="$1" kyua --config=none test --store=bootstrap.db $2]) 56 57 58m4_define([CREATE_PLAIN_HELPERS], [ 59 AT_DATA([Kyuafile], [ 60syntax(2) 61test_suite("bootstrap") 62atf_test_program{name="plain_helpers"} 63]) 64 ln -s $(GUESS_TOPDIR)/bootstrap/plain_helpers plain_helpers 65]) 66m4_define([RUN_PLAIN_HELPER], 67 [HOME=$(pwd) HELPER="$1" kyua --config=none test --store=bootstrap.db]) 68 69 70AT_SETUP([test program crashes in test list]) 71AT_TESTED([kyua]) 72 73CREATE_PLAIN_HELPERS 74AT_CHECK([RUN_PLAIN_HELPER([abort_test_cases_list])], [1], [stdout], []) 75re='plain_helpers:__test_cases_list__.*broken.*Test program list did not return success' 76AT_CHECK([grep "${re}" stdout], [0], [ignore], []) 77 78AT_CLEANUP 79 80 81AT_SETUP([test program prints an empty test list]) 82AT_TESTED([kyua]) 83 84CREATE_PLAIN_HELPERS 85AT_CHECK([RUN_PLAIN_HELPER([empty_test_cases_list])], [1], [stdout], []) 86re='plain_helpers:__test_cases_list__.*broken.*failed to read.*unexpected EOF' 87AT_CHECK([grep "${re}" stdout], [0], [ignore], []) 88 89AT_CLEANUP 90 91 92AT_SETUP([test program with zero test cases]) 93AT_TESTED([kyua]) 94 95CREATE_PLAIN_HELPERS 96AT_CHECK([RUN_PLAIN_HELPER([zero_test_cases])], [1], [stdout], []) 97re='plain_helpers:__test_cases_list__.*broken.*Empty test cases list' 98AT_CHECK([grep "${re}" stdout], [0], [ignore], []) 99 100AT_CLEANUP 101 102 103AT_SETUP([run test case that passes]) 104AT_TESTED([kyua]) 105 106CREATE_ATF_HELPERS 107AT_CHECK([RUN_ATF_HELPERS([passes])], [0], [stdout], []) 108AT_CHECK([grep "atf_helpers:fails" stdout], [1], [], []) 109AT_CHECK([grep "atf_helpers:passes.*passed" stdout], [0], [ignore], []) 110AT_CHECK([grep "atf_helpers:skips" stdout], [1], [], []) 111 112AT_CLEANUP 113 114 115AT_SETUP([run test case that fails]) 116AT_TESTED([kyua]) 117 118CREATE_ATF_HELPERS 119AT_CHECK([RUN_ATF_HELPERS([fails])], [1], [stdout], []) 120AT_CHECK([grep "atf_helpers:fails.*failed.*Failed on purpose" stdout], 121 [0], [ignore], []) 122AT_CHECK([grep "atf_helpers:passes" stdout], [1], [], []) 123AT_CHECK([grep "atf_helpers:skips" stdout], [1], [], []) 124 125AT_CLEANUP 126 127 128AT_SETUP([run test case that skips]) 129AT_TESTED([kyua]) 130 131CREATE_ATF_HELPERS 132AT_CHECK([RUN_ATF_HELPERS([skips])], [0], [stdout], []) 133AT_CHECK([grep "atf_helpers:fails" stdout], [1], [], []) 134AT_CHECK([grep "atf_helpers:passes" stdout], [1], [], []) 135AT_CHECK([grep "atf_helpers:skips.*skipped.*Skipped on purpose" stdout], 136 [0], [ignore], []) 137 138AT_CLEANUP 139 140 141AT_SETUP([run two test cases, success]) 142AT_TESTED([kyua]) 143 144CREATE_ATF_HELPERS 145AT_CHECK([RUN_ATF_HELPERS([passes skips])], [0], [stdout], []) 146AT_CHECK([grep "atf_helpers:fails" stdout], [1], [], []) 147AT_CHECK([grep "atf_helpers:passes.*passed" stdout], [0], [ignore], []) 148AT_CHECK([grep "atf_helpers:skips.*skipped.*Skipped on purpose" stdout], 149 [0], [ignore], []) 150 151AT_CLEANUP 152 153 154AT_SETUP([run two test cases, failure]) 155AT_TESTED([kyua]) 156 157CREATE_ATF_HELPERS 158AT_CHECK([RUN_ATF_HELPERS([fails passes])], [1], [stdout], []) 159AT_CHECK([grep "atf_helpers:fails.*failure.*Failed on purpose" stdout], 160 [1], [], []) 161AT_CHECK([grep "atf_helpers:passes.*passed" stdout], [0], [ignore], []) 162AT_CHECK([grep "atf_helpers:skips" stdout], [1], [], []) 163 164AT_CLEANUP 165 166 167AT_SETUP([run mixed test cases]) 168AT_TESTED([kyua]) 169 170CREATE_ATF_HELPERS 171AT_CHECK([RUN_ATF_HELPERS([fails passes skips])], [1], [stdout], []) 172AT_CHECK([grep "atf_helpers:fails.*failure.*Failed on purpose" stdout], 173 [1], [], []) 174AT_CHECK([grep "atf_helpers:passes.*passed" stdout], [0], [ignore], []) 175AT_CHECK([grep "atf_helpers:skips.*skipped.*Skipped on purpose" stdout], 176 [0], [ignore], []) 177 178AT_CLEANUP 179 180 181AT_SETUP([run tests from build directories]) 182AT_TESTED([kyua]) 183 184CREATE_ATF_HELPERS 185AT_CHECK([mkdir src], [0], [], []) 186AT_CHECK([mv Kyuafile src], [0], [], []) 187AT_CHECK([mkdir obj], [0], [], []) 188AT_CHECK([mv atf_helpers obj], [0], [], []) 189AT_CHECK([RUN_ATF_HELPERS([fails passes skips], 190 [--kyuafile=src/Kyuafile --build-root=obj])], 191 [1], [stdout], []) 192AT_CHECK([grep "atf_helpers:fails.*failure.*Failed on purpose" stdout], 193 [1], [], []) 194AT_CHECK([grep "atf_helpers:passes.*passed" stdout], [0], [ignore], []) 195AT_CHECK([grep "atf_helpers:skips.*skipped.*Skipped on purpose" stdout], 196 [0], [ignore], []) 197 198AT_CLEANUP 199