Zephyr API Documentation  3.5.0
A Scalable Open Source RTOS
3.5.0
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
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>
19#include <stdbool.h>
20
21#if defined(CONFIG_USERSPACE)
22#define __USERSPACE_FLAGS (K_USER)
23#else
24#define __USERSPACE_FLAGS (0)
25#endif
26
27#ifdef __cplusplus
28extern "C" {
29#endif
30
40};
41
49 const char *test_suite_name;
50 const char *test_name;
52};
53
54extern struct ztest_expected_result_entry _ztest_expected_result_entry_list_start[];
55extern struct ztest_expected_result_entry _ztest_expected_result_entry_list_end[];
56
57#define __ZTEST_EXPECT(_suite_name, _test_name, expectation) \
58 static const STRUCT_SECTION_ITERABLE( \
59 ztest_expected_result_entry, \
60 UTIL_CAT(UTIL_CAT(z_ztest_expected_result_, _suite_name), _test_name)) = { \
61 .test_suite_name = STRINGIFY(_suite_name), \
62 .test_name = STRINGIFY(_test_name), \
63 .expected_result = expectation, \
64 }
65
79#define ZTEST_EXPECT_FAIL(_suite_name, _test_name) \
80 __ZTEST_EXPECT(_suite_name, _test_name, ZTEST_EXPECTED_RESULT_FAIL)
81
95#define ZTEST_EXPECT_SKIP(_suite_name, _test_name) \
96 __ZTEST_EXPECT(_suite_name, _test_name, ZTEST_EXPECTED_RESULT_SKIP)
97
99 const char *test_suite_name;
100 const char *name;
101 void (*test)(void *data);
103
106};
107
108extern struct ztest_unit_test _ztest_unit_test_list_start[];
109extern struct ztest_unit_test _ztest_unit_test_list_end[];
110#define ZTEST_TEST_COUNT (_ztest_unit_test_list_end - _ztest_unit_test_list_start)
111
115struct ztest_suite_stats {
122};
123
135};
136
142typedef void *(*ztest_suite_setup_t)(void);
143
149typedef void (*ztest_suite_before_t)(void *fixture);
150
156typedef void (*ztest_suite_after_t)(void *fixture);
157
163typedef void (*ztest_suite_teardown_t)(void *fixture);
164
172typedef bool (*ztest_suite_predicate_t)(const void *global_state);
173
178struct ztest_suite_node {
180 const char *const name;
181
184
187
190
193
196
199};
200
201extern struct ztest_suite_node _ztest_suite_node_list_start[];
202extern struct ztest_suite_node _ztest_suite_node_list_end[];
203#define ZTEST_SUITE_COUNT (_ztest_suite_node_list_end - _ztest_suite_node_list_start)
204
219#define ZTEST_SUITE(SUITE_NAME, PREDICATE, setup_fn, before_fn, after_fn, teardown_fn) \
220 struct ztest_suite_stats UTIL_CAT(z_ztest_suite_node_stats_, SUITE_NAME); \
221 static const STRUCT_SECTION_ITERABLE(ztest_suite_node, \
222 UTIL_CAT(z_ztest_test_node_, SUITE_NAME)) = { \
223 .name = STRINGIFY(SUITE_NAME), \
224 .setup = (setup_fn), \
225 .before = (before_fn), \
226 .after = (after_fn), \
227 .teardown = (teardown_fn), \
228 .predicate = PREDICATE, \
229 .stats = &UTIL_CAT(z_ztest_suite_node_stats_, SUITE_NAME), \
230 }
236void ztest_run_all(const void *state);
237
249};
262};
263
271#ifdef ZTEST_UNITTEST
272int z_impl_ztest_run_test_suites(const void *state);
273static inline int ztest_run_test_suites(const void *state)
274{
275 return z_impl_ztest_run_test_suites(state);
276}
277
278#else
279__syscall int ztest_run_test_suites(const void *state);
280#endif
281
282#ifdef ZTEST_UNITTEST
283void z_impl___ztest_set_test_result(enum ztest_result new_result);
284static inline void __ztest_set_test_result(enum ztest_result new_result)
285{
286 z_impl___ztest_set_test_result(new_result);
287}
288
289void z_impl___ztest_set_test_phase(enum ztest_phase new_phase);
290static inline void __ztest_set_test_phase(enum ztest_phase new_phase)
291{
292 z_impl___ztest_set_test_phase(new_phase);
293}
294#else
295__syscall void __ztest_set_test_result(enum ztest_result new_result);
296__syscall void __ztest_set_test_phase(enum ztest_phase new_phase);
297#endif
298
299#ifndef ZTEST_UNITTEST
300#include <syscalls/ztest_test_new.h>
301#endif
302
313
323int z_ztest_run_test_suite(const char *name);
324
333struct ztest_unit_test *z_ztest_get_next_test(const char *suite, struct ztest_unit_test *prev);
334
335/* definitions for use with testing application shared memory */
336#ifdef CONFIG_USERSPACE
337#define ZTEST_DMEM K_APP_DMEM(ztest_mem_partition)
338#define ZTEST_BMEM K_APP_BMEM(ztest_mem_partition)
339#define ZTEST_SECTION K_APP_DMEM_SECTION(ztest_mem_partition)
341#else
342#define ZTEST_DMEM
343#define ZTEST_BMEM
344#define ZTEST_SECTION .data
345#endif
346
364
374
380
381
383
384#define Z_TEST(suite, fn, t_options, use_fixture) \
385 struct ztest_unit_test_stats z_ztest_unit_test_stats_##suite##_##fn; \
386 static void _##suite##_##fn##_wrapper(void *data); \
387 static void suite##_##fn( \
388 COND_CODE_1(use_fixture, (struct suite##_fixture *fixture), (void))); \
389 static STRUCT_SECTION_ITERABLE(ztest_unit_test, z_ztest_unit_test__##suite##__##fn) = { \
390 .test_suite_name = STRINGIFY(suite), \
391 .name = STRINGIFY(fn), \
392 .test = (_##suite##_##fn##_wrapper), \
393 .thread_options = t_options, \
394 .stats = &z_ztest_unit_test_stats_##suite##_##fn \
395 }; \
396 static void _##suite##_##fn##_wrapper(void *wrapper_data) \
397 { \
398 COND_CODE_1(use_fixture, (suite##_##fn((struct suite##_fixture *)wrapper_data);), \
399 (ARG_UNUSED(wrapper_data); suite##_##fn();)) \
400 } \
401 static inline void suite##_##fn( \
402 COND_CODE_1(use_fixture, (struct suite##_fixture *fixture), (void)))
403
404#define Z_ZTEST(suite, fn, t_options) Z_TEST(suite, fn, t_options, 0)
405#define Z_ZTEST_F(suite, fn, t_options) Z_TEST(suite, fn, t_options, 1)
406
415#define Z_TEST_SKIP_IFDEF(config) COND_CODE_1(config, (ztest_test_skip()), ())
416
426#define Z_TEST_SKIP_IFNDEF(config) COND_CODE_1(config, (), (ztest_test_skip()))
427
437#define ZTEST(suite, fn) Z_ZTEST(suite, fn, 0)
438
448#define ZTEST_USER(suite, fn) Z_ZTEST(suite, fn, K_USER)
449
459#define ZTEST_F(suite, fn) Z_ZTEST_F(suite, fn, 0)
460
470#define ZTEST_USER_F(suite, fn) Z_ZTEST_F(suite, fn, K_USER)
471
481typedef void (*ztest_rule_cb)(const struct ztest_unit_test *test, void *data);
482
484struct ztest_test_rule {
485 ztest_rule_cb before_each;
486 ztest_rule_cb after_each;
487};
488
508#define ZTEST_RULE(name, before_each_fn, after_each_fn) \
509 static STRUCT_SECTION_ITERABLE(ztest_test_rule, z_ztest_test_rule_##name) = { \
510 .before_each = (before_each_fn), \
511 .after_each = (after_each_fn), \
512 }
513
514extern struct ztest_test_rule _ztest_test_rule_list_start[];
515extern struct ztest_test_rule _ztest_test_rule_list_end[];
516
525
533void ztest_simple_1cpu_after(void *data);
534
540#define ztest_run_test_suite(suite) z_ztest_run_test_suite(STRINGIFY(suite))
541
547 void (*run_all)(const void *state);
548 bool (*should_suite_run)(const void *state, struct ztest_suite_node *suite);
549 bool (*should_test_run)(const char *suite, const char *test);
550};
551
556#ifdef __cplusplus
557}
558#endif
559
560#endif /* ZEPHYR_TESTSUITE_ZTEST_TEST_H_ */
void ztest_test_pass(void)
Pass the currently running test.
void ztest_skip_failed_assumption(void)
void(* ztest_rule_cb)(const struct ztest_unit_test *test, void *data)
Test rule callback function signature.
Definition: ztest_test_new.h:481
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: 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:546
void(* run_all)(const void *state)
Definition: ztest_test_new.h:547
bool(* should_suite_run)(const void *state, struct ztest_suite_node *suite)
Definition: ztest_test_new.h:548
bool(* should_test_run)(const char *suite, const char *test)
Definition: ztest_test_new.h:549
A single expectation entry allowing tests to fail/skip and be considered passing.
Definition: ztest_test_new.h:48
const char * test_suite_name
The test suite's name for the expectation.
Definition: ztest_test_new.h:49
enum ztest_expected_result expected_result
The expectation.
Definition: ztest_test_new.h:51
const char * test_name
The test's name for the expectation.
Definition: ztest_test_new.h:50
A single node of test suite.
Definition: ztest_test_deprecated.h:49
const ztest_suite_before_t before
Before function.
Definition: ztest_test_new.h:186
const ztest_suite_setup_t setup
Setup function.
Definition: ztest_test_new.h:183
struct ztest_suite_stats *const stats
Stats.
Definition: ztest_test_new.h:198
const ztest_suite_after_t after
After function.
Definition: ztest_test_new.h:189
const char *const name
The name of the test suite.
Definition: ztest_test_new.h:180
const char * name
The name of the test suite.
Definition: ztest_test_deprecated.h:51
const ztest_suite_teardown_t teardown
Teardown function.
Definition: ztest_test_new.h:192
const ztest_suite_predicate_t predicate
Optional predicate filter.
Definition: ztest_test_new.h:195
Stats about a ztest suite.
Definition: ztest_test_deprecated.h:36
uint32_t skip_count
The number of times that the suite was skipped.
Definition: ztest_test_deprecated.h:40
uint32_t fail_count
The number of times that the suite failed.
Definition: ztest_test_deprecated.h:42
uint32_t run_count
The number of times that the suite ran.
Definition: ztest_test_deprecated.h:38
Definition: ztest_test_new.h:124
uint32_t run_count
The number of times that the test ran.
Definition: ztest_test_new.h:126
uint32_t pass_count
The number of times that the test passed.
Definition: ztest_test_new.h:132
uint32_t skip_count
The number of times that the test was skipped.
Definition: ztest_test_new.h:128
uint32_t duration_worst_ms
The longest duration of the test across multiple times.
Definition: ztest_test_new.h:134
uint32_t fail_count
The number of times that the test failed.
Definition: ztest_test_new.h:130
Definition: ztest_test_new.h:98
const char * name
Definition: ztest_test_new.h:100
struct ztest_unit_test_stats *const stats
Stats.
Definition: ztest_test_new.h:105
uint32_t thread_options
Definition: ztest_test_new.h:102
const char * test_suite_name
Definition: ztest_test_new.h:99
void *(* ztest_suite_setup_t)(void)
Setup function to run before running this suite.
Definition: ztest_test_new.h:142
void(* ztest_suite_after_t)(void *fixture)
Function to run after each test in this suite.
Definition: ztest_test_new.h:156
void ztest_run_all(const void *state)
Default entry point for running or listing registered unit tests.
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
ztest_phase
Each enum member represents a distinct phase of execution for the test binary.
Definition: ztest_test_new.h:255
@ TEST_PHASE_TEST
Definition: ztest_test_new.h:258
@ TEST_PHASE_AFTER
Definition: ztest_test_new.h:259
@ TEST_PHASE_BEFORE
Definition: ztest_test_new.h:257
@ TEST_PHASE_SETUP
Definition: ztest_test_new.h:256
@ TEST_PHASE_TEARDOWN
Definition: ztest_test_new.h:260
@ TEST_PHASE_FRAMEWORK
Definition: ztest_test_new.h:261
void(* ztest_suite_teardown_t)(void *fixture)
Teardown function to run after running this suite.
Definition: ztest_test_new.h:163
int ztest_run_test_suites(const void *state)
Run the registered unit tests which return true from their predicate function.
ztest_result
The result of the current running test.
Definition: ztest_test_new.h:242
@ ZTEST_RESULT_SKIP
Definition: ztest_test_new.h:246
@ ZTEST_RESULT_PENDING
Definition: ztest_test_new.h:243
@ ZTEST_RESULT_PASS
Definition: ztest_test_new.h:244
@ ZTEST_RESULT_FAIL
Definition: ztest_test_new.h:245
@ ZTEST_RESULT_SUITE_FAIL
Definition: ztest_test_new.h:248
@ ZTEST_RESULT_SUITE_SKIP
Definition: ztest_test_new.h:247
void(* ztest_suite_before_t)(void *fixture)
Function to run before each test in this suite.
Definition: ztest_test_new.h:149
bool(* ztest_suite_predicate_t)(const void *global_state)
An optional predicate function to determine if the test should run.
Definition: ztest_test_new.h:172
ztest_expected_result
The expected result of a test.
Definition: ztest_test_new.h:37
@ ZTEST_EXPECTED_RESULT_FAIL
Expect a test to fail.
Definition: ztest_test_new.h:38
@ ZTEST_EXPECTED_RESULT_SKIP
Expect a test to pass.
Definition: ztest_test_new.h:39