SFML/test/Window/Context.test.cpp

110 lines
3.6 KiB
C++
Raw Normal View History

#include <SFML/Window/Context.hpp>
// Other 1st party headers
#include <SFML/Window/ContextSettings.hpp>
2023-01-18 12:51:08 +08:00
#include <catch2/catch_test_macros.hpp>
#include <WindowUtil.hpp>
#include <string>
#include <type_traits>
#if defined(SFML_SYSTEM_WINDOWS)
#define GLAPI __stdcall
#else
#define GLAPI
#endif
2023-01-18 12:51:08 +08:00
TEST_CASE("[Window] sf::Context", runDisplayTests())
{
2023-01-18 12:51:08 +08:00
SECTION("Type traits")
{
STATIC_CHECK(!std::is_copy_constructible_v<sf::Context>);
STATIC_CHECK(!std::is_copy_assignable_v<sf::Context>);
STATIC_CHECK(!std::is_nothrow_move_constructible_v<sf::Context>);
STATIC_CHECK(!std::is_nothrow_move_assignable_v<sf::Context>);
}
SECTION("Construction")
{
const sf::Context context;
CHECK(context.getSettings().majorVersion > 0);
2023-12-08 07:56:01 +08:00
CHECK(sf::Context::getActiveContext() == &context);
CHECK(sf::Context::getActiveContextId() != 0);
}
2023-09-25 11:32:17 +08:00
SECTION("setActive()")
{
sf::Context context;
2023-12-08 07:56:01 +08:00
const auto contextId = sf::Context::getActiveContextId();
// Set inactive
2023-09-25 11:32:17 +08:00
CHECK(context.setActive(false));
2023-12-08 07:56:01 +08:00
CHECK(sf::Context::getActiveContext() == nullptr);
CHECK(sf::Context::getActiveContextId() == 0);
// Set active
CHECK(context.setActive(true));
CHECK(sf::Context::getActiveContext() == &context);
CHECK(sf::Context::getActiveContextId() == contextId);
// Create new context which becomes active automatically
const sf::Context newContext;
CHECK(sf::Context::getActiveContext() == &newContext);
const auto newContextId = sf::Context::getActiveContextId();
CHECK(newContextId != 0);
// Set old context as inactive but new context remains active
CHECK(context.setActive(false));
CHECK(sf::Context::getActiveContext() == &newContext);
CHECK(sf::Context::getActiveContextId() == newContextId);
// Set old context as active again
CHECK(context.setActive(true));
2023-12-08 07:56:01 +08:00
CHECK(sf::Context::getActiveContext() == &context);
CHECK(sf::Context::getActiveContextId() == contextId);
2023-09-25 11:32:17 +08:00
}
2023-09-25 11:32:17 +08:00
SECTION("getActiveContext()/getActiveContextId()")
{
CHECK(sf::Context::getActiveContext() == nullptr);
CHECK(sf::Context::getActiveContextId() == 0);
{
const sf::Context context;
CHECK(context.getSettings().majorVersion > 0);
CHECK(sf::Context::getActiveContext() == &context);
CHECK(sf::Context::getActiveContextId() != 0);
}
CHECK(sf::Context::getActiveContext() == nullptr);
CHECK(sf::Context::getActiveContextId() == 0);
}
2023-09-25 11:32:17 +08:00
SECTION("Version String")
{
sf::Context context;
CHECK(context.setActive(true));
2023-09-25 11:32:17 +08:00
using glGetStringFuncType = const char*(GLAPI*)(unsigned int);
const auto glGetStringFunc = reinterpret_cast<glGetStringFuncType>(sf::Context::getFunction("glGetString"));
2023-01-18 12:51:08 +08:00
REQUIRE(glGetStringFunc);
constexpr unsigned int glVendor = 0x1F00;
constexpr unsigned int glRenderer = 0x1F01;
constexpr unsigned int glVersion = 0x1F02;
const char* vendor = glGetStringFunc(glVendor);
const char* renderer = glGetStringFunc(glRenderer);
const char* version = glGetStringFunc(glVersion);
REQUIRE(vendor != nullptr);
REQUIRE(renderer != nullptr);
REQUIRE(version != nullptr);
2023-01-18 12:51:08 +08:00
SUCCEED(std::string("OpenGL vendor: ") + vendor);
SUCCEED(std::string("OpenGL renderer: ") + renderer);
SUCCEED(std::string("OpenGL version: ") + version);
}
}