blob: 4e03fcf4308fa3803869febbf0c2d1aed8d001b3 [file] [edit]
/* Copyright 2020 The Chromium OS Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef LITHIUM_MOCK_H_
#define LITHIUM_MOCK_H_
#include <stdbool.h>
#include "macrolib.h"
#include "unit.h"
/**
* Lithium Mock
* ============
*/
#ifdef LITHIUM_TEST_BUILD
#define LI_MOCKABLE_STORAGE_T(data_type) \
struct { \
bool mocked; \
typeof(data_type) value; \
}
#define LI_SETUP_MOCK(expr_id, data) \
do { \
(expr_id).mocked = true; \
(expr_id).value = (data); \
} while (0)
#define LI_MOCKABLE(expr_id, default_value) \
((expr_id).mocked ? (expr_id).value : (default_value))
#else
/* Empty macros for non-test builds */
#define LI_MOCKABLE_STORAGE_T(data_type) \
__maybe_unused struct { \
}
#define LI_SETUP_MOCK(expr_id, data) \
do { \
(void)(data); \
extern void __error_if_used( \
"LI_SETUP_MOCK cannot be used unless " \
"LITHIUM_TEST_BUILD is defined.") \
_li_setup_mock_fail(void); \
_li_setup_mock_fail(); \
} while (0)
#define LI_MOCKABLE(expr_id, default_value) (default_value)
#endif /* LITHIUM_TEST_BUILD */
#endif /* LITHIUM_MOCK_H_ */