blob: a3dfed9f41b917cee3b8f38a40bdfb505321109e [file] [edit]
/* Copyright 2025 The ChromiumOS Authors
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef TESTS_FUTILITY_UNIT_TESTS_H_
#define TESTS_FUTILITY_UNIT_TESTS_H_
#define __USE_GNU
#include <stdlib.h>
#include <string.h>
#include "futility.h"
#include "common/tests.h"
/* Test data must be placed in `SOURCE_TEST_DATA_DIR`. Unit tests must copy data to
`WORK_COPY_TEST_DATA_DIR` and only use the copied data via
`GET_WORK_COPY_TEST_DATA_FILE_PATH()` macro. */
#define SOURCE_TEST_DATA_DIR "tests/futility/data/"
#define GET_SOURCE_TEST_DATA_FILE_PATH(item) SOURCE_TEST_DATA_DIR item
#define WORK_COPY_TEST_DATA_DIR "tests/futility/data_copy/"
#define GET_WORK_COPY_TEST_DATA_FILE_PATH(item) WORK_COPY_TEST_DATA_DIR item
enum unit_result {
UNIT_FAIL = 0,
UNIT_SUCCESS = 1
};
/* IMPORTANT! Every function that uses `ASSERT` has to implement `unit_cleanup` label. The
function must also start with `UNIT_TEST_BEGIN` and end with `UNIT_TEST_RETURN` */
/* This should be called once at the beginning of any function that uses ASSERT. */
#define UNIT_TEST_BEGIN int __unit_test_return_value = UNIT_SUCCESS
/* This should be called once at the end of any function that uses ASSERT. */
#define UNIT_TEST_RETURN return __unit_test_return_value
/* If assertion fails, will set the result of the current unit test to UNIT_FAIL and go to
`unit_cleanup`. To use this, `UNIT_TEST_BEGIN` has to be called at the beginning of the
function. */
#define UNIT_ASSERT(value) \
do { \
if ((value) != UNIT_SUCCESS) { \
TEST_EQ(0, 1, "Assertion failed: " #value); \
__unit_test_return_value = UNIT_FAIL; \
goto unit_cleanup; \
} \
} while (0)
#endif