#include #include "data_manager.h" #include "test_runner.h" #include "barometer.h" #include "timer.h" #include "unity.h" static int mock_baro_called; static void reset_mock_get_baro(void) { mock_baro_called = 0; } static float set_mock_get_baro(void) { mock_baro_called = 1; return 1.0; }; static struct barometer mock_barometer = { .read_pressure = set_mock_get_baro, }; /* Test the initial barometer "setting" just after init */ RUNNER_DECLARE_TEST(test_data_manager_init_setting) { struct data_ctx ctx; struct timer timer; get_system_timer(&timer); data_manager_init(&ctx, &timer, &mock_barometer); /* FIXME kinda gross that this baro setting is hard-coded */ TEST_ASSERT_FLOAT_WITHIN(FLT_EPSILON, 1013.25, ctx.setting); } /* Test that initialising the data manager triggers a read of the barometer */ RUNNER_DECLARE_TEST(test_data_manager_init_reads_barometer) { struct data_ctx ctx; struct timer timer; get_system_timer(&timer); reset_mock_get_baro(); data_manager_init(&ctx, &timer, &mock_barometer); TEST_ASSERT_EQUAL(1, mock_baro_called); } /* Test that re-initialising the data manager triggers a read of the * barometer. I.e. reading the baro is not sticky */ RUNNER_DECLARE_TEST(test_data_manager_reinit_reads_barometer) { struct data_ctx ctx; struct timer timer; get_system_timer(&timer); /* initialise it once */ data_manager_init(&ctx, &timer, &mock_barometer); reset_mock_get_baro(); /* initialise it again */ data_manager_init(&ctx, &timer, &mock_barometer); TEST_ASSERT_EQUAL(1, mock_baro_called); }