101 lines
2.8 KiB
C++
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());
|
|
}
|