Files
qt-migration-legatus/qt6-after/qt6-migrated-legatus/TetraIF/PrtCnv/unittest/PrtCnvStoredTelegramTest.cpp
T
2026-09-12 13:54:34 +02:00

101 lines
2.8 KiB
C++

/**
* @file PrtCnvStoredTelegramTest.cpp
* @brief Unit tests for PrtCnv::PrtCnvStoredTelegram.
*
* PrtCnvStoredTelegram is a small value holder pairing a radio telegram with
* the database bookkeeping the DB thread needs. These tests pin down its
* defaults and its copy behaviour (the telegram is shared, not cloned).
*/
#include <gtest/gtest.h>
#include <memory>
#include "PrtCnvStoredTelegram.hpp"
#include <CoPrtCnv/CoPrtCnvRadioTelegram.hpp>
#include <CoPrtCnv/tetra_telegram_ids.h>
using PrtCnv::PrtCnvStoredTelegram;
using N_CoPrtCnv::CoPrtCnvRadioTelegram;
namespace
{
// CoPrtCnvRadioTelegram has no default constructor; the telegram-id constructor
// is the cheapest way to obtain a well-formed instance.
std::shared_ptr<CoPrtCnvRadioTelegram> makeTelegram()
{
return std::make_shared<CoPrtCnvRadioTelegram>(GEF_GEFECHTSFELDTELEGRAMM, uint16_t(8), uint16_t(0));
}
} // namespace
TEST(PrtCnvStoredTelegramTest, ConstructorStoresTelegramAndDefaults)
{
const std::shared_ptr<CoPrtCnvRadioTelegram> telegram = makeTelegram();
const PrtCnvStoredTelegram stored(telegram);
EXPECT_EQ(stored.m_RadioTelegram, telegram);
EXPECT_EQ(stored.m_Id, 0);
EXPECT_FALSE(stored.m_WriteCounterChanged);
}
TEST(PrtCnvStoredTelegramTest, CopyKeepsTheSameTelegramInstance)
{
const std::shared_ptr<CoPrtCnvRadioTelegram> telegram = makeTelegram();
PrtCnvStoredTelegram original(telegram);
original.m_Id = 123;
original.m_WriteCounterChanged = true;
const PrtCnvStoredTelegram copy(original);
EXPECT_EQ(copy.m_RadioTelegram, original.m_RadioTelegram);
EXPECT_EQ(copy.m_Id, 123);
EXPECT_TRUE(copy.m_WriteCounterChanged);
}
TEST(PrtCnvStoredTelegramTest, AssignmentCopiesEveryField)
{
const std::shared_ptr<CoPrtCnvRadioTelegram> telegram = makeTelegram();
PrtCnvStoredTelegram source(telegram);
source.m_Id = 789;
source.m_WriteCounterChanged = true;
PrtCnvStoredTelegram target(makeTelegram());
target = source;
EXPECT_EQ(target.m_RadioTelegram, telegram);
EXPECT_EQ(target.m_Id, 789);
EXPECT_TRUE(target.m_WriteCounterChanged);
}
TEST(PrtCnvStoredTelegramTest, MovingLeavesTheTargetHoldingTheTelegram)
{
const std::shared_ptr<CoPrtCnvRadioTelegram> telegram = makeTelegram();
PrtCnvStoredTelegram original(telegram);
original.m_Id = 456;
original.m_WriteCounterChanged = true;
const PrtCnvStoredTelegram moved(std::move(original));
EXPECT_EQ(moved.m_RadioTelegram, telegram);
EXPECT_EQ(moved.m_Id, 456);
EXPECT_TRUE(moved.m_WriteCounterChanged);
}
TEST(PrtCnvStoredTelegramTest, StoredTelegramKeepsTheTelegramAlive)
{
std::weak_ptr<CoPrtCnvRadioTelegram> observer;
{
PrtCnvStoredTelegram stored(makeTelegram());
observer = stored.m_RadioTelegram;
EXPECT_FALSE(observer.expired());
}
EXPECT_TRUE(observer.expired());
}