macros.h revision 240116
115103Sphk/* 215103Sphk * Automated Testing Framework (atf) 315103Sphk * 415103Sphk * Copyright (c) 2008 The NetBSD Foundation, Inc. 515103Sphk * All rights reserved. 615103Sphk * 715103Sphk * Redistribution and use in source and binary forms, with or without 815103Sphk * modification, are permitted provided that the following conditions 915103Sphk * are met: 1015103Sphk * 1. Redistributions of source code must retain the above copyright 1115103Sphk * notice, this list of conditions and the following disclaimer. 1215103Sphk * 2. Redistributions in binary form must reproduce the above copyright 1315103Sphk * notice, this list of conditions and the following disclaimer in the 1415103Sphk * documentation and/or other materials provided with the distribution. 1515103Sphk * 1615103Sphk * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND 1715103Sphk * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, 1815103Sphk * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 1915103Sphk * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 2015103Sphk * IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY 2115103Sphk * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2215103Sphk * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 2315103Sphk * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2415103Sphk * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 2515103Sphk * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 2615103Sphk * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 2715103Sphk * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2815103Sphk */ 2915103Sphk 3015103Sphk#if !defined(ATF_C_MACROS_H) 3115103Sphk#define ATF_C_MACROS_H 3215103Sphk 3315103Sphk#include <atf-c/defs.h> 3415103Sphk#include <atf-c/error.h> 3515103Sphk#include <atf-c/tc.h> 3615103Sphk#include <atf-c/tp.h> 3715103Sphk#include <atf-c/utils.h> 38116182Sobrien 39116182Sobrien#define ATF_TC_NAME(tc) \ 40116182Sobrien (atfu_ ## tc ## _tc) 41175417Sjhb 4286190Srwatson#define ATF_TC_PACK_NAME(tc) \ 43169604Swkoszek (atfu_ ## tc ## _tc_pack) 4484611Srwatson 4515103Sphk#define ATF_TC_WITHOUT_HEAD(tc) \ 4615103Sphk static void atfu_ ## tc ## _body(const atf_tc_t *); \ 47169507Swkoszek static atf_tc_t atfu_ ## tc ## _tc; \ 4815103Sphk static atf_tc_pack_t atfu_ ## tc ## _tc_pack = { \ 4915103Sphk .m_ident = #tc, \ 5015103Sphk .m_head = NULL, \ 5187275Srwatson .m_body = atfu_ ## tc ## _body, \ 5287275Srwatson .m_cleanup = NULL, \ 5346155Sphk } 5476078Sjhb 55192895Sjamie#define ATF_TC(tc) \ 56105046Smike static void atfu_ ## tc ## _head(atf_tc_t *); \ 5728918Skato static void atfu_ ## tc ## _body(const atf_tc_t *); \ 5815103Sphk static atf_tc_t atfu_ ## tc ## _tc; \ 5915103Sphk static atf_tc_pack_t atfu_ ## tc ## _tc_pack = { \ 60224159Srwatson .m_ident = #tc, \ 6115103Sphk .m_head = atfu_ ## tc ## _head, \ 6215103Sphk .m_body = atfu_ ## tc ## _body, \ 6315103Sphk .m_cleanup = NULL, \ 6423382Sbde } 6515103Sphk 6615103Sphk#define ATF_TC_WITH_CLEANUP(tc) \ 6715103Sphk static void atfu_ ## tc ## _head(atf_tc_t *); \ 6815103Sphk static void atfu_ ## tc ## _body(const atf_tc_t *); \ 6915103Sphk static void atfu_ ## tc ## _cleanup(const atf_tc_t *); \ 7048891Sphk static atf_tc_t atfu_ ## tc ## _tc; \ 7148891Sphk static atf_tc_pack_t atfu_ ## tc ## _tc_pack = { \ 7215103Sphk .m_ident = #tc, \ 7315103Sphk .m_head = atfu_ ## tc ## _head, \ 7415103Sphk .m_body = atfu_ ## tc ## _body, \ 7515103Sphk .m_cleanup = atfu_ ## tc ## _cleanup, \ 7615103Sphk } 7715103Sphk 7834925Sdufault#define ATF_TC_HEAD(tc, tcptr) \ 7934925Sdufault static \ 8034029Sdufault void \ 8150465Smarcel atfu_ ## tc ## _head(atf_tc_t *tcptr) 8250465Smarcel 8389414Sarr#define ATF_TC_HEAD_NAME(tc) \ 8489414Sarr (atfu_ ## tc ## _head) 8586190Srwatson 8686190Srwatson#define ATF_TC_BODY(tc, tcptr) \ 8786190Srwatson static \ 8886190Srwatson void \ 8950465Smarcel atfu_ ## tc ## _body(const atf_tc_t *tcptr ATF_DEFS_ATTRIBUTE_UNUSED) 90187864Sed 91116105Sjmallett#define ATF_TC_BODY_NAME(tc) \ 92116090Sjmallett (atfu_ ## tc ## _body) 93224159Srwatson 94224159Srwatson#define ATF_TC_CLEANUP(tc, tcptr) \ 9515103Sphk static \ 96224159Srwatson void \ 9746381Sbillf atfu_ ## tc ## _cleanup(const atf_tc_t *tcptr ATF_DEFS_ATTRIBUTE_UNUSED) 9815103Sphk 99187864Sed#define ATF_TC_CLEANUP_NAME(tc) \ 10046381Sbillf (atfu_ ## tc ## _cleanup) 10115103Sphk 102224159Srwatson#define ATF_TP_ADD_TCS(tps) \ 103224159Srwatson static atf_error_t atfu_tp_add_tcs(atf_tp_t *); \ 10415103Sphk int atf_tp_main(int, char **, atf_error_t (*)(atf_tp_t *)); \ 105119203Seivind \ 106119203Seivind int \ 107119203Seivind main(int argc, char **argv) \ 108119203Seivind { \ 109224159Srwatson return atf_tp_main(argc, argv, atfu_tp_add_tcs); \ 110119203Seivind } \ 11115103Sphk static \ 112121307Ssilby atf_error_t \ 11346381Sbillf atfu_tp_add_tcs(atf_tp_t *tps) 11415103Sphk 11586189Srwatson#define ATF_TP_ADD_TC(tp, tc) \ 11646381Sbillf do { \ 11715103Sphk atf_error_t atfu_err; \ 118121307Ssilby char **atfu_config = atf_tp_get_config(tp); \ 11980418Speter if (atfu_config == NULL) \ 12080418Speter return atf_no_memory_error(); \ 121224159Srwatson atfu_err = atf_tc_init_pack(&atfu_ ## tc ## _tc, \ 12246381Sbillf &atfu_ ## tc ## _tc_pack, \ 12315103Sphk (const char *const *)atfu_config); \ 124224159Srwatson atf_utils_free_charpp(atfu_config); \ 125105046Smike if (atf_is_error(atfu_err)) \ 12615103Sphk return atfu_err; \ 127224159Srwatson atfu_err = atf_tp_add_tc(tp, &atfu_ ## tc ## _tc); \ 128202143Sbrooks if (atf_is_error(atfu_err)) \ 129201953Sbrooks return atfu_err; \ 13015103Sphk } while (0) 131224159Srwatson 13246381Sbillf#define ATF_REQUIRE_MSG(x, fmt, ...) \ 13315103Sphk do { \ 13415103Sphk if (!(x)) \ 135224159Srwatson atf_tc_fail_requirement(__FILE__, __LINE__, fmt, ##__VA_ARGS__); \ 13646381Sbillf } while(0) 13715103Sphk 138224159Srwatson#define ATF_CHECK_MSG(x, fmt, ...) \ 13946381Sbillf do { \ 14015103Sphk if (!(x)) \ 14115103Sphk atf_tc_fail_check(__FILE__, __LINE__, fmt, ##__VA_ARGS__); \ 14215103Sphk } while(0) 14315103Sphk 14486189Srwatson#define ATF_REQUIRE(x) \ 14546381Sbillf do { \ 14615103Sphk if (!(x)) \ 147224159Srwatson atf_tc_fail_requirement(__FILE__, __LINE__, "%s", #x " not met"); \ 14846381Sbillf } while(0) 14915103Sphk 150224159Srwatson#define ATF_CHECK(x) \ 15146381Sbillf do { \ 15215103Sphk if (!(x)) \ 153224159Srwatson atf_tc_fail_check(__FILE__, __LINE__, "%s", #x " not met"); \ 15446381Sbillf } while(0) 15515103Sphk 156106605Stmm#define ATF_REQUIRE_EQ(x, y) \ 157169727Skan ATF_REQUIRE_MSG((x) == (y), "%s != %s", #x, #y) 158169727Skan 159176367Santoine#define ATF_CHECK_EQ(x, y) \ 160176367Santoine ATF_CHECK_MSG((x) == (y), "%s != %s", #x, #y) 161169727Skan 162176367Santoine#define ATF_REQUIRE_EQ_MSG(x, y, fmt, ...) \ 163176367Santoine ATF_REQUIRE_MSG((x) == (y), "%s != %s: " fmt, #x, #y, ##__VA_ARGS__) 164176367Santoine 165176367Santoine#define ATF_CHECK_EQ_MSG(x, y, fmt, ...) \ 166176367Santoine ATF_CHECK_MSG((x) == (y), "%s != %s: " fmt, #x, #y, ##__VA_ARGS__) 167169727Skan 168169727Skan#define ATF_REQUIRE_STREQ(x, y) \ 169187864Sed ATF_REQUIRE_MSG(strcmp(x, y) == 0, "%s != %s (%s != %s)", #x, #y, x, y) 170224159Srwatson 171187864Sed#define ATF_CHECK_STREQ(x, y) \ 172169727Skan ATF_CHECK_MSG(strcmp(x, y) == 0, "%s != %s (%s != %s)", #x, #y, x, y) 173169727Skan 174106605Stmm#define ATF_REQUIRE_STREQ_MSG(x, y, fmt, ...) \ 175106605Stmm ATF_REQUIRE_MSG(strcmp(x, y) == 0, "%s != %s (%s != %s): " fmt, \ 176106605Stmm #x, #y, x, y, ##__VA_ARGS__) 177106605Stmm 178106605Stmm#define ATF_CHECK_STREQ_MSG(x, y, fmt, ...) \ 179106605Stmm ATF_CHECK_MSG(strcmp(x, y) == 0, "%s != %s (%s != %s): " fmt, \ 180106605Stmm #x, #y, x, y, ##__VA_ARGS__) 181106605Stmm 182106605Stmm#define ATF_CHECK_ERRNO(exp_errno, bool_expr) \ 183106605Stmm atf_tc_check_errno(__FILE__, __LINE__, exp_errno, #bool_expr, bool_expr) 184106605Stmm 185106605Stmm#define ATF_REQUIRE_ERRNO(exp_errno, bool_expr) \ 186142834Swes atf_tc_require_errno(__FILE__, __LINE__, exp_errno, #bool_expr, bool_expr) 187142834Swes 188142834Swes#endif /* !defined(ATF_C_MACROS_H) */ 189142834Swes