#include "../Common/TestsShell.h" #include #include #include #include #include using namespace Rml; static const String document_flex_rml = R"(
)"; TEST_CASE("FlexFormatting") { Context* context = TestsShell::GetContext(); REQUIRE(context); ElementDocument* document = context->LoadDocumentFromMemory(document_flex_rml); REQUIRE(document); document->Show(); Element* checkbox = document->GetElementById("checkbox"); Element* flex = document->GetElementById("flex"); struct TestCase { String flex_direction; String align_items; Vector2f expected_size; }; TestCase test_cases[] = { {"column", "stretch", Vector2f(248, 16)}, {"column", "center", Vector2f(16, 16)}, {"row", "stretch", Vector2f(16, 88)}, {"row", "center", Vector2f(16, 16)}, }; for (auto& test_case : test_cases) { flex->SetProperty("flex-direction", test_case.flex_direction); flex->SetProperty("align-items", test_case.align_items); TestsShell::RenderLoop(); CAPTURE(test_case.align_items); CAPTURE(test_case.flex_direction); CHECK(checkbox->GetBox().GetSize().x == doctest::Approx(test_case.expected_size.x)); CHECK(checkbox->GetBox().GetSize().y == doctest::Approx(test_case.expected_size.y)); } document->Close(); TestsShell::ShutdownShell(); } static const String document_flex_dp_ratio_rml = R"(
)"; TEST_CASE("FlexFormatting.dp_ratio") { Context* context = TestsShell::GetContext(); REQUIRE(context); ElementDocument* document = context->LoadDocumentFromMemory(document_flex_dp_ratio_rml); REQUIRE(document); document->Show(); Element* window = document->GetChild(0); constexpr float native_width = 1920.f; constexpr float native_height = 1080.f; const float test_window_widths[] = { 3440.f, 2960.f, 2880.f, 2560.f, 2400.f, 2048.f, 1921.f, 1920.f, 1919.f, 1600.f, 1366.f, 1280.f, 1024.f, }; for (float window_width : test_window_widths) { const float dp_ratio = window_width / native_width; CAPTURE(window_width); CAPTURE(dp_ratio); context->SetDensityIndependentPixelRatio(dp_ratio); TestsShell::RenderLoop(); CHECK(window->GetBox().GetSize().x == window_width); CHECK(window->GetBox().GetSize().y == doctest::Approx((window_width / native_width) * native_height)); } document->Close(); TestsShell::ShutdownShell(); }