1*00b67f09SDavid van Moolenbroek /* $NetBSD: test_helpers.h,v 1.3 2014/12/10 04:38:03 christos Exp $ */ 2*00b67f09SDavid van Moolenbroek 3*00b67f09SDavid van Moolenbroek /* 4*00b67f09SDavid van Moolenbroek * Automated Testing Framework (atf) 5*00b67f09SDavid van Moolenbroek * 6*00b67f09SDavid van Moolenbroek * Copyright (c) 2008 The NetBSD Foundation, Inc. 7*00b67f09SDavid van Moolenbroek * All rights reserved. 8*00b67f09SDavid van Moolenbroek * 9*00b67f09SDavid van Moolenbroek * Redistribution and use in source and binary forms, with or without 10*00b67f09SDavid van Moolenbroek * modification, are permitted provided that the following conditions 11*00b67f09SDavid van Moolenbroek * are met: 12*00b67f09SDavid van Moolenbroek * 1. Redistributions of source code must retain the above copyright 13*00b67f09SDavid van Moolenbroek * notice, this list of conditions and the following disclaimer. 14*00b67f09SDavid van Moolenbroek * 2. Redistributions in binary form must reproduce the above copyright 15*00b67f09SDavid van Moolenbroek * notice, this list of conditions and the following disclaimer in the 16*00b67f09SDavid van Moolenbroek * documentation and/or other materials provided with the distribution. 17*00b67f09SDavid van Moolenbroek * 18*00b67f09SDavid van Moolenbroek * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND 19*00b67f09SDavid van Moolenbroek * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, 20*00b67f09SDavid van Moolenbroek * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 21*00b67f09SDavid van Moolenbroek * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 22*00b67f09SDavid van Moolenbroek * IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY 23*00b67f09SDavid van Moolenbroek * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24*00b67f09SDavid van Moolenbroek * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 25*00b67f09SDavid van Moolenbroek * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26*00b67f09SDavid van Moolenbroek * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 27*00b67f09SDavid van Moolenbroek * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 28*00b67f09SDavid van Moolenbroek * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 29*00b67f09SDavid van Moolenbroek * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30*00b67f09SDavid van Moolenbroek */ 31*00b67f09SDavid van Moolenbroek 32*00b67f09SDavid van Moolenbroek #if defined(TESTS_ATF_ATF_C_TEST_HELPERS_H) 33*00b67f09SDavid van Moolenbroek # error "Cannot include test_helpers.h more than once." 34*00b67f09SDavid van Moolenbroek #else 35*00b67f09SDavid van Moolenbroek # define TESTS_ATF_ATF_C_TEST_HELPERS_H 36*00b67f09SDavid van Moolenbroek #endif 37*00b67f09SDavid van Moolenbroek 38*00b67f09SDavid van Moolenbroek #include <stdbool.h> 39*00b67f09SDavid van Moolenbroek 40*00b67f09SDavid van Moolenbroek #include "atf-c/error_fwd.h" 41*00b67f09SDavid van Moolenbroek 42*00b67f09SDavid van Moolenbroek struct atf_dynstr; 43*00b67f09SDavid van Moolenbroek struct atf_fs_path; 44*00b67f09SDavid van Moolenbroek 45*00b67f09SDavid van Moolenbroek #define CE(stm) ATF_CHECK(!atf_is_error(stm)) 46*00b67f09SDavid van Moolenbroek #define RE(stm) ATF_REQUIRE(!atf_is_error(stm)) 47*00b67f09SDavid van Moolenbroek 48*00b67f09SDavid van Moolenbroek #define HEADER_TC(name, hdrname) \ 49*00b67f09SDavid van Moolenbroek ATF_TC(name); \ 50*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(name, tc) \ 51*00b67f09SDavid van Moolenbroek { \ 52*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", "Tests that the " hdrname " file can " \ 53*00b67f09SDavid van Moolenbroek "be included on its own, without any prerequisites"); \ 54*00b67f09SDavid van Moolenbroek } \ 55*00b67f09SDavid van Moolenbroek ATF_TC_BODY(name, tc) \ 56*00b67f09SDavid van Moolenbroek { \ 57*00b67f09SDavid van Moolenbroek header_check(hdrname); \ 58*00b67f09SDavid van Moolenbroek } 59*00b67f09SDavid van Moolenbroek 60*00b67f09SDavid van Moolenbroek #define BUILD_TC(name, sfile, descr, failmsg) \ 61*00b67f09SDavid van Moolenbroek ATF_TC(name); \ 62*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(name, tc) \ 63*00b67f09SDavid van Moolenbroek { \ 64*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", descr); \ 65*00b67f09SDavid van Moolenbroek } \ 66*00b67f09SDavid van Moolenbroek ATF_TC_BODY(name, tc) \ 67*00b67f09SDavid van Moolenbroek { \ 68*00b67f09SDavid van Moolenbroek build_check_c_o(tc, sfile, failmsg, true); \ 69*00b67f09SDavid van Moolenbroek } 70*00b67f09SDavid van Moolenbroek 71*00b67f09SDavid van Moolenbroek #define BUILD_TC_FAIL(name, sfile, descr, failmsg) \ 72*00b67f09SDavid van Moolenbroek ATF_TC(name); \ 73*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(name, tc) \ 74*00b67f09SDavid van Moolenbroek { \ 75*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", descr); \ 76*00b67f09SDavid van Moolenbroek } \ 77*00b67f09SDavid van Moolenbroek ATF_TC_BODY(name, tc) \ 78*00b67f09SDavid van Moolenbroek { \ 79*00b67f09SDavid van Moolenbroek build_check_c_o(tc, sfile, failmsg, false); \ 80*00b67f09SDavid van Moolenbroek } 81*00b67f09SDavid van Moolenbroek 82*00b67f09SDavid van Moolenbroek void build_check_c_o(const atf_tc_t *, const char *, const char *, const bool); 83*00b67f09SDavid van Moolenbroek void header_check(const char *); 84*00b67f09SDavid van Moolenbroek void get_process_helpers_path(const atf_tc_t *, const bool, 85*00b67f09SDavid van Moolenbroek struct atf_fs_path *); 86*00b67f09SDavid van Moolenbroek bool read_line(int, struct atf_dynstr *); 87*00b67f09SDavid van Moolenbroek void run_h_tc(atf_tc_t *, const char *, const char *, const char *); 88