#include #include #include class TestSocket : public sf::Socket { public: TestSocket() : sf::Socket(sf::Socket::Type::Udp) { } using sf::Socket::close; using sf::Socket::create; using sf::Socket::getNativeHandle; }; TEST_CASE("[Network] sf::Socket") { SECTION("Type traits") { STATIC_CHECK(!std::is_constructible_v); 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("Constants") { STATIC_CHECK(sf::Socket::AnyPort == 0); } const auto invalidHandle = static_cast(-1); SECTION("Construction") { const TestSocket testSocket; CHECK(testSocket.isBlocking()); CHECK(testSocket.getNativeHandle() == invalidHandle); } SECTION("Move semantics") { SECTION("Construction") { TestSocket movedTestSocket; movedTestSocket.setBlocking(false); movedTestSocket.create(); const TestSocket testSocket(std::move(movedTestSocket)); CHECK(!testSocket.isBlocking()); CHECK(testSocket.getNativeHandle() != invalidHandle); } SECTION("Assignment") { TestSocket movedTestSocket; movedTestSocket.setBlocking(false); movedTestSocket.create(); TestSocket testSocket; testSocket = std::move(movedTestSocket); CHECK(!testSocket.isBlocking()); CHECK(testSocket.getNativeHandle() != invalidHandle); } } SECTION("Set/get blocking") { TestSocket testSocket; testSocket.setBlocking(false); CHECK(!testSocket.isBlocking()); } SECTION("create()") { TestSocket testSocket; testSocket.create(); CHECK(testSocket.isBlocking()); CHECK(testSocket.getNativeHandle() != invalidHandle); // Recreate socket to ensure nothing changed testSocket.create(); CHECK(testSocket.isBlocking()); CHECK(testSocket.getNativeHandle() != invalidHandle); } SECTION("close()") { TestSocket testSocket; testSocket.create(); CHECK(testSocket.isBlocking()); CHECK(testSocket.getNativeHandle() != invalidHandle); testSocket.close(); CHECK(testSocket.isBlocking()); CHECK(testSocket.getNativeHandle() == invalidHandle); // Reclose socket to ensure nothing changed testSocket.close(); CHECK(testSocket.isBlocking()); CHECK(testSocket.getNativeHandle() == invalidHandle); } }