Add tests for sf::SocketSelector

I added move semantics while I was at it
This commit is contained in:
Chris Thrasher 2023-08-27 00:26:00 -06:00
parent b3a467678d
commit 63088c1bf1
3 changed files with 63 additions and 28 deletions

View File

@ -65,6 +65,28 @@ public:
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
SocketSelector(const SocketSelector& copy); SocketSelector(const SocketSelector& copy);
////////////////////////////////////////////////////////////
/// \brief Overload of assignment operator
///
/// \param right Instance to assign
///
/// \return Reference to self
///
////////////////////////////////////////////////////////////
SocketSelector& operator=(const SocketSelector& right);
////////////////////////////////////////////////////////////
/// \brief Move constructor
///
////////////////////////////////////////////////////////////
SocketSelector(SocketSelector&&) noexcept;
////////////////////////////////////////////////////////////
/// \brief Move assignment
///
////////////////////////////////////////////////////////////
SocketSelector& operator=(SocketSelector&&) noexcept;
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
/// \brief Add a new socket to the selector /// \brief Add a new socket to the selector
/// ///
@ -142,16 +164,6 @@ public:
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
bool isReady(Socket& socket) const; bool isReady(Socket& socket) const;
////////////////////////////////////////////////////////////
/// \brief Overload of assignment operator
///
/// \param right Instance to assign
///
/// \return Reference to self
///
////////////////////////////////////////////////////////////
SocketSelector& operator=(const SocketSelector& right);
private: private:
struct SocketSelectorImpl; struct SocketSelectorImpl;

View File

@ -60,6 +60,10 @@ SocketSelector::SocketSelector() : m_impl(std::make_unique<SocketSelectorImpl>()
} }
////////////////////////////////////////////////////////////
SocketSelector::~SocketSelector() = default;
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
SocketSelector::SocketSelector(const SocketSelector& copy) : m_impl(std::make_unique<SocketSelectorImpl>(*copy.m_impl)) SocketSelector::SocketSelector(const SocketSelector& copy) : m_impl(std::make_unique<SocketSelectorImpl>(*copy.m_impl))
{ {
@ -67,7 +71,20 @@ SocketSelector::SocketSelector(const SocketSelector& copy) : m_impl(std::make_un
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
SocketSelector::~SocketSelector() = default; SocketSelector& SocketSelector::operator=(const SocketSelector& right)
{
SocketSelector temp(right);
std::swap(m_impl, temp.m_impl);
return *this;
}
////////////////////////////////////////////////////////////
SocketSelector::SocketSelector(SocketSelector&&) noexcept = default;
////////////////////////////////////////////////////////////]
SocketSelector& SocketSelector::operator=(SocketSelector&&) noexcept = default;
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
@ -189,15 +206,4 @@ bool SocketSelector::isReady(Socket& socket) const
return false; return false;
} }
////////////////////////////////////////////////////////////
SocketSelector& SocketSelector::operator=(const SocketSelector& right)
{
SocketSelector temp(right);
std::swap(m_impl, temp.m_impl);
return *this;
}
} // namespace sf } // namespace sf

View File

@ -1,10 +1,27 @@
#include <SFML/Network/SocketSelector.hpp> #include <SFML/Network/SocketSelector.hpp>
// Other 1st party headers
#include <SFML/Network/UdpSocket.hpp>
#include <catch2/catch_test_macros.hpp>
#include <type_traits> #include <type_traits>
static_assert(std::is_copy_constructible_v<sf::SocketSelector>); TEST_CASE("[Network] sf::SocketSelector")
static_assert(std::is_copy_assignable_v<sf::SocketSelector>); {
static_assert(std::is_move_constructible_v<sf::SocketSelector>); SECTION("Type traits")
static_assert(!std::is_nothrow_move_constructible_v<sf::SocketSelector>); {
static_assert(std::is_move_assignable_v<sf::SocketSelector>); STATIC_CHECK(std::is_copy_constructible_v<sf::SocketSelector>);
static_assert(!std::is_nothrow_move_assignable_v<sf::SocketSelector>); STATIC_CHECK(std::is_copy_assignable_v<sf::SocketSelector>);
STATIC_CHECK(std::is_nothrow_move_constructible_v<sf::SocketSelector>);
STATIC_CHECK(std::is_nothrow_move_assignable_v<sf::SocketSelector>);
}
sf::UdpSocket socket;
SECTION("Construction")
{
const sf::SocketSelector socketSelector;
CHECK(!socketSelector.isReady(socket));
}
}