X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Fecoli_test.h;h=94cd0b9ba78a93ac4d716ef8f639d0af4e4418ca;hb=dec2d7fa17ae1e8b3d1dec8e396d057757baf4f3;hp=01158379a8b598350d6902474cb2a5f500033eb8;hpb=575fd5b430d5f1557d9a6bdb19c037efaf023759;p=protos%2Flibecoli.git diff --git a/lib/ecoli_test.h b/lib/ecoli_test.h index 0115837..94cd0b9 100644 --- a/lib/ecoli_test.h +++ b/lib/ecoli_test.h @@ -1,28 +1,5 @@ -/* - * Copyright (c) 2016, Olivier MATZ - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the University of California, Berkeley nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright 2016, Olivier MATZ */ #ifndef ECOLI_TEST_ @@ -31,15 +8,18 @@ #include #include -#include -// XXX check if already exists? +struct ec_node; +enum ec_comp_type; + #define EC_TEST_REGISTER(t) \ static void ec_test_init_##t(void); \ static void __attribute__((constructor, used)) \ ec_test_init_##t(void) \ { \ - ec_test_register(&t); \ + if (ec_test_register(&t) < 0) \ + fprintf(stderr, "cannot register test %s\n", \ + t.name); \ } /** @@ -64,8 +44,10 @@ struct ec_test { * @param test * A pointer to a ec_test structure describing the test * to be registered. + * @return + * 0 on success, -1 on error (errno is set). */ -void ec_test_register(struct ec_test *test); +int ec_test_register(struct ec_test *test); int ec_test_all(void); int ec_test_one(const char *name); @@ -74,14 +56,18 @@ int ec_test_one(const char *name); int ec_test_check_parse(struct ec_node *node, int expected, ...); #define EC_TEST_ERR(fmt, ...) \ - ec_log(EC_LOG_ERR, "%s:%d: error: " fmt "\n", \ + EC_LOG(EC_LOG_ERR, "%s:%d: error: " fmt "\n", \ __FILE__, __LINE__, ##__VA_ARGS__); \ -#define EC_TEST_ASSERT(cond, args...) \ - do { \ - if (!(cond)) \ - EC_TEST_ERR("assertion failure: " #cond); \ - } while (0) +#define EC_TEST_CHECK(cond, fmt, ...) ({ \ + int ret_ = 0; \ + if (!(cond)) { \ + EC_TEST_ERR("(" #cond ") is wrong. " fmt \ + ##__VA_ARGS__); \ + ret_ = -1; \ + } \ + ret_; \ +}) /* node, input, [expected1, expected2, ...] */ #define EC_TEST_CHECK_PARSE(node, args...) ({ \ @@ -91,10 +77,18 @@ int ec_test_check_parse(struct ec_node *node, int expected, ...); ret_; \ }) -int ec_test_check_complete(struct ec_node *node, ...); +int ec_test_check_complete(struct ec_node *node, + enum ec_comp_type type, ...); #define EC_TEST_CHECK_COMPLETE(node, args...) ({ \ - int ret_ = ec_test_check_complete(node, args); \ + int ret_ = ec_test_check_complete(node, EC_COMP_FULL, args); \ + if (ret_) \ + EC_TEST_ERR("complete test failed"); \ + ret_; \ +}) + +#define EC_TEST_CHECK_COMPLETE_PARTIAL(node, args...) ({ \ + int ret_ = ec_test_check_complete(node, EC_COMP_PARTIAL, args); \ if (ret_) \ EC_TEST_ERR("complete test failed"); \ ret_; \