Zephyr Project API  3.2.0
A Scalable Open Source RTOS
ztest_test_new.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2016 Intel Corporation
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
13#ifndef ZEPHYR_TESTSUITE_ZTEST_TEST_H_
14#define ZEPHYR_TESTSUITE_ZTEST_TEST_H_
15
17#include <zephyr/init.h>
18#include <stdbool.h>
19
20#if defined(CONFIG_USERSPACE)
21#define __USERSPACE_FLAGS (K_USER)
22#else
23#define __USERSPACE_FLAGS (0)
24#endif
25
26#ifdef __cplusplus
27extern "C" {
28#endif
29
39};
40
48 const char *test_suite_name;
49 const char *test_name;
51};
52
53extern struct ztest_expected_result_entry _ztest_expected_result_entry_list_start[];
54extern struct ztest_expected_result_entry _ztest_expected_result_entry_list_end[];
55
56#define __ZTEST_EXPECT(_suite_name, _test_name, expectation) \
57 static const STRUCT_SECTION_ITERABLE( \
58 ztest_expected_result_entry, \
59 UTIL_CAT(UTIL_CAT(z_ztest_expected_result_, _suite_name), _test_name)) = { \
60 .test_suite_name = STRINGIFY(_suite_name), \
61 .test_name = STRINGIFY(_test_name), \
62 .expected_result = expectation, \
63 }
64
78#define ZTEST_EXPECT_FAIL(_suite_name, _test_name) \
79 __ZTEST_EXPECT(_suite_name, _test_name, ZTEST_EXPECTED_RESULT_FAIL)
80
94#define ZTEST_EXPECT_SKIP(_suite_name, _test_name) \
95 __ZTEST_EXPECT(_suite_name, _test_name, ZTEST_EXPECTED_RESULT_SKIP)
96
98 const char *test_suite_name;
99 const char *name;
100 void (*test)(void *data);
102
105};
106
107extern struct ztest_unit_test _ztest_unit_test_list_start[];
108extern struct ztest_unit_test _ztest_unit_test_list_end[];
109#define ZTEST_TEST_COUNT (_ztest_unit_test_list_end - _ztest_unit_test_list_start)
110
114struct ztest_suite_stats {
121};
122
134};
135
141typedef void *(*ztest_suite_setup_t)(void);
142
148typedef void (*ztest_suite_before_t)(void *fixture);
149
155typedef void (*ztest_suite_after_t)(void *fixture);
156
162typedef void (*ztest_suite_teardown_t)(void *fixture);
163
171typedef bool (*ztest_suite_predicate_t)(const void *global_state);
172
177struct ztest_suite_node {
179 const char *const name;
180
183
186
189
192
195
198};
199
200extern struct ztest_suite_node _ztest_suite_node_list_start[];
201extern struct ztest_suite_node _ztest_suite_node_list_end[];
202#define ZTEST_SUITE_COUNT (_ztest_suite_node_list_end - _ztest_suite_node_list_start)
203
218#define ZTEST_SUITE(SUITE_NAME, PREDICATE, setup_fn, before_fn, after_fn, teardown_fn) \
219 struct ztest_suite_stats UTIL_CAT(z_ztest_suite_node_stats_, SUITE_NAME); \
220 static const STRUCT_SECTION_ITERABLE(ztest_suite_node, \
221 UTIL_CAT(z_ztest_test_node_, SUITE_NAME)) = { \
222 .name = STRINGIFY(SUITE_NAME), \
223 .setup = (setup_fn), \
224 .before = (before_fn), \
225 .after = (after_fn), \
226 .teardown = (teardown_fn), \
227 .predicate = PREDICATE, \
228 .stats = &UTIL_CAT(z_ztest_suite_node_stats_, SUITE_NAME), \
229 }
235void ztest_run_all(const void *state);
236
244#ifdef ZTEST_UNITTEST
245int z_impl_ztest_run_test_suites(const void *state);
246static inline int ztest_run_test_suites(const void *state)
247{
248 return z_impl_ztest_run_test_suites(state);
249}
250
251#else
252__syscall int ztest_run_test_suites(const void *state);
253#include <syscalls/ztest_test_new.h>
254#endif
255
266
276int z_ztest_run_test_suite(const char *name);
277
286struct ztest_unit_test *z_ztest_get_next_test(const char *suite, struct ztest_unit_test *prev);
287
288/* definitions for use with testing application shared memory */
289#ifdef CONFIG_USERSPACE
290#define ZTEST_DMEM K_APP_DMEM(ztest_mem_partition)
291#define ZTEST_BMEM K_APP_BMEM(ztest_mem_partition)
292#define ZTEST_SECTION K_APP_DMEM_SECTION(ztest_mem_partition)
294#else
295#define ZTEST_DMEM
296#define ZTEST_BMEM
297#define ZTEST_SECTION .data
298#endif
299
317
327
333
334#define Z_TEST(suite, fn, t_options, use_fixture) \
335 struct ztest_unit_test_stats z_ztest_unit_test_stats_##suite##_##fn; \
336 static void _##suite##_##fn##_wrapper(void *data); \
337 static void suite##_##fn( \
338 COND_CODE_1(use_fixture, (struct suite##_fixture *fixture), (void))); \
339 static STRUCT_SECTION_ITERABLE(ztest_unit_test, z_ztest_unit_test_##suite##_##fn) = { \
340 .test_suite_name = STRINGIFY(suite), \
341 .name = STRINGIFY(fn), \
342 .test = (_##suite##_##fn##_wrapper), \
343 .thread_options = t_options, \
344 .stats = &z_ztest_unit_test_stats_##suite##_##fn \
345 }; \
346 static void _##suite##_##fn##_wrapper(void *data) \
347 { \
348 COND_CODE_1(use_fixture, (suite##_##fn((struct suite##_fixture *)data);), \
349 (ARG_UNUSED(data); suite##_##fn();)) \
350 } \
351 static inline void suite##_##fn( \
352 COND_CODE_1(use_fixture, (struct suite##_fixture *fixture), (void)))
353
354#define Z_ZTEST(suite, fn, t_options) Z_TEST(suite, fn, t_options, 0)
355#define Z_ZTEST_F(suite, fn, t_options) Z_TEST(suite, fn, t_options, 1)
356
365#define Z_TEST_SKIP_IFDEF(config) COND_CODE_1(config, (ztest_test_skip()), ())
366
376#define Z_TEST_SKIP_IFNDEF(config) COND_CODE_1(config, (), (ztest_test_skip()))
377
387#define ZTEST(suite, fn) Z_ZTEST(suite, fn, 0)
388
398#define ZTEST_USER(suite, fn) Z_ZTEST(suite, fn, K_USER)
399
409#define ZTEST_F(suite, fn) Z_ZTEST_F(suite, fn, 0)
410
420#define ZTEST_USER_F(suite, fn) Z_ZTEST_F(suite, fn, K_USER)
421
431typedef void (*ztest_rule_cb)(const struct ztest_unit_test *test, void *data);
432
434struct ztest_test_rule {
435 ztest_rule_cb before_each;
436 ztest_rule_cb after_each;
437};
438
458#define ZTEST_RULE(name, before_each_fn, after_each_fn) \
459 static STRUCT_SECTION_ITERABLE(ztest_test_rule, z_ztest_test_rule_##name) = { \
460 .before_each = (before_each_fn), \
461 .after_each = (after_each_fn), \
462 }
463
464extern struct ztest_test_rule _ztest_test_rule_list_start[];
465extern struct ztest_test_rule _ztest_test_rule_list_end[];
466
475
484
490#define ztest_run_test_suite(suite) z_ztest_run_test_suite(STRINGIFY(suite))
491
497 void (*run_all)(const void *state);
499 bool (*should_test_run)(const char *suite, const char *test);
500};
501
506#ifdef __cplusplus
507}
508#endif
509
510#endif /* ZEPHYR_TESTSUITE_ZTEST_TEST_H_ */
void ztest_test_pass(void)
Pass the currently running test.
void(* ztest_rule_cb)(const struct ztest_unit_test *test, void *data)
Test rule callback function signature.
Definition: ztest_test_new.h:431
void ztest_simple_1cpu_after(void *data)
A 'after' function to use in test suites that just need to stop 1cpu.
void ztest_simple_1cpu_before(void *data)
A 'before' function to use in test suites that just need to start 1cpu.
void ztest_test_fail(void)
Fail the currently running test.
void ztest_test_skip(void)
Skip the current test.
state
Definition: http_parser_state.h:29
#define bool
Definition: stdbool.h:13
__UINT32_TYPE__ uint32_t
Definition: stdint.h:90
Memory Partition.
Definition: mem_domain.h:55
Structure for architecture specific APIs.
Definition: ztest_test_new.h:496
void(* run_all)(const void *state)
Definition: ztest_test_new.h:497
bool(* should_suite_run)(const void *state, struct ztest_suite_node *suite)
Definition: ztest_test_new.h:498
bool(* should_test_run)(const char *suite, const char *test)
Definition: ztest_test_new.h:499
A single expectation entry allowing tests to fail/skip and be considered passing.
Definition: ztest_test_new.h:47
const char * test_suite_name
Definition: ztest_test_new.h:48
enum ztest_expected_result expected_result
Definition: ztest_test_new.h:50
const char * test_name
Definition: ztest_test_new.h:49
Definition: ztest_test_deprecated.h:48
const ztest_suite_before_t before
Definition: ztest_test_new.h:185
const ztest_suite_setup_t setup
Definition: ztest_test_new.h:182
struct ztest_suite_stats *const stats
Definition: ztest_test_new.h:197
const ztest_suite_after_t after
Definition: ztest_test_new.h:188
struct unit_test * suite
Definition: ztest_test_deprecated.h:52
const char *const name
Definition: ztest_test_new.h:179
const char * name
Definition: ztest_test_deprecated.h:50
const ztest_suite_teardown_t teardown
Definition: ztest_test_new.h:191
const ztest_suite_predicate_t predicate
Definition: ztest_test_new.h:194
Definition: ztest_test_deprecated.h:35
uint32_t skip_count
Definition: ztest_test_deprecated.h:39
uint32_t fail_count
Definition: ztest_test_deprecated.h:41
uint32_t run_count
Definition: ztest_test_deprecated.h:37
Definition: ztest_test_new.h:123
uint32_t run_count
Definition: ztest_test_new.h:125
uint32_t pass_count
Definition: ztest_test_new.h:131
uint32_t skip_count
Definition: ztest_test_new.h:127
uint32_t duration_worst_ms
Definition: ztest_test_new.h:133
uint32_t fail_count
Definition: ztest_test_new.h:129
Definition: ztest_test_new.h:97
const char * name
Definition: ztest_test_new.h:99
struct ztest_unit_test_stats *const stats
Definition: ztest_test_new.h:104
void(* test)(void *data)
Definition: ztest_test_new.h:100
uint32_t thread_options
Definition: ztest_test_new.h:101
const char * test_suite_name
Definition: ztest_test_new.h:98
static fdata_t data[2]
Definition: test_fifo_contexts.c:15
void *(* ztest_suite_setup_t)(void)
Definition: ztest_test_new.h:141
void(* ztest_suite_after_t)(void *fixture)
Definition: ztest_test_new.h:155
void ztest_run_all(const void *state)
void ztest_verify_all_test_suites_ran(void)
Fails the test if any of the registered tests did not run.
struct k_mem_partition ztest_mem_partition
void(* ztest_suite_teardown_t)(void *fixture)
Definition: ztest_test_new.h:162
int ztest_run_test_suites(const void *state)
void(* ztest_suite_before_t)(void *fixture)
Definition: ztest_test_new.h:148
bool(* ztest_suite_predicate_t)(const void *global_state)
Definition: ztest_test_new.h:171
ztest_expected_result
The expected result of a test.
Definition: ztest_test_new.h:36
@ ZTEST_EXPECTED_RESULT_FAIL
Definition: ztest_test_new.h:37
@ ZTEST_EXPECTED_RESULT_SKIP
Definition: ztest_test_new.h:38