#include
// Other 1st party headers
#include
#include
#include
#include
#include
#include
#include
#include
#define CHECK_PACKET_STREAM_OPERATORS(expected) \
do \
{ \
sf::Packet packet; \
packet > received; \
CHECK(packet.getReadPosition() == sizeof(expected)); \
CHECK(packet.getData() != nullptr); \
CHECK(packet.getDataSize() == sizeof(expected)); \
CHECK(packet.endOfPacket()); \
CHECK(bool{packet}); \
CHECK((expected) == received); \
} while (false)
#define CHECK_PACKET_STRING_STREAM_OPERATORS(expected, size) \
do \
{ \
sf::Packet packet; \
packet > received; \
CHECK(packet.getReadPosition() == (size)); \
CHECK(packet.getData() != nullptr); \
CHECK(packet.getDataSize() == (size)); \
CHECK(packet.endOfPacket()); \
CHECK(bool{packet}); \
CHECK(sf::String(expected) == sf::String(received)); \
} while (false)
struct Packet : sf::Packet
{
using sf::Packet::onReceive;
using sf::Packet::onSend;
};
TEST_CASE("[Network] sf::Packet")
{
SECTION("Type traits")
{
STATIC_CHECK(std::is_copy_constructible_v);
STATIC_CHECK(std::is_copy_assignable_v);
STATIC_CHECK(std::is_nothrow_move_constructible_v);
STATIC_CHECK(std::is_nothrow_move_assignable_v);
}
SECTION("Default constructor")
{
const sf::Packet packet;
CHECK(packet.getReadPosition() == 0);
CHECK(packet.getData() == nullptr);
CHECK(packet.getDataSize() == 0);
CHECK(packet.endOfPacket());
CHECK(bool{packet});
}
static constexpr std::array data = {1, 2, 3, 4, 5, 6};
SECTION("Append and clear")
{
sf::Packet packet;
packet.append(data.data(), data.size());
CHECK(packet.getReadPosition() == 0);
CHECK(packet.getData() != nullptr);
CHECK(packet.getDataSize() == data.size());
CHECK(!packet.endOfPacket());
CHECK(bool{packet});
packet.clear();
CHECK(packet.getReadPosition() == 0);
CHECK(packet.getData() == nullptr);
CHECK(packet.getDataSize() == 0);
CHECK(packet.endOfPacket());
CHECK(bool{packet});
}
SECTION("Network ordering")
{
sf::Packet packet;
SECTION("16 bit int")
{
packet