// // Created by kifir on 1/6/25. // #include "pch.h" #include #include "log_field.h" namespace { class BitLoggerFieldTest : public ::testing::Test { protected: void SetUp() override; void checkBitLoggerField(bool expected, const char* context); void updateTestBit(bool value); std::unique_ptr m_testOutputChannels; std::unique_ptr m_logField; std::array m_buffer; }; void BitLoggerFieldTest::SetUp() { m_testOutputChannels = std::make_unique(); const uint32_t testCoilStateBlockOffset = ( reinterpret_cast(&m_testOutputChannels->outputRequestPeriod) - reinterpret_cast(m_testOutputChannels.get()) ) - sizeof(uint32_t); ASSERT_EQ( testCoilStateBlockOffset, 660 ) << "`output_channels_generated.h` header was modified significantly. " << "Please check that coil state bits block precedes `outputRequestPeriod` field."; m_logField = std::make_unique(*m_testOutputChannels, testCoilStateBlockOffset, 11, "coilState12", ""); m_buffer.fill(0xAA); ASSERT_THAT(m_buffer, ::testing::ElementsAre(0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA)); } void BitLoggerFieldTest::checkBitLoggerField(const bool expected, const char* const context) { EXPECT_EQ(1, m_logField->writeData(m_buffer.data(), nullptr)) << context; EXPECT_THAT(m_buffer, ::testing::ElementsAre((expected ? 0x01 : 0x00), 0xAA, 0xAA, 0xAA, 0xAA, 0xAA)); } void BitLoggerFieldTest::updateTestBit(const bool value) { m_testOutputChannels->coilState12 = value; } TEST_F(BitLoggerFieldTest, checkBitSwitching) { checkBitLoggerField(false, "default"); updateTestBit(true); checkBitLoggerField(true, "bit is on"); updateTestBit(false); checkBitLoggerField(false, "bit is off"); } }