light/modules/renderer/_tests/system.cpp

112 lines
3.1 KiB
C++
Raw Normal View History

2026-01-04 13:14:55 +03:30
import time;
import renderer.frontend;
import renderer.test_utils;
2025-09-22 18:50:17 +03:30
struct SurfaceContext
{
lt::surface::System system;
2026-01-04 13:14:55 +03:30
lt::ecs::Entity entity;
2025-09-22 18:50:17 +03:30
};
struct RendererContext
{
lt::memory::Ref<lt::ecs::Registry> registry;
2026-01-04 13:14:55 +03:30
lt::renderer::System system;
2025-09-22 18:50:17 +03:30
};
Suite raii = "system_raii"_suite = [] {
2026-01-04 13:14:55 +03:30
Case { "sandbox" } = [] {
auto fixture = Fixture_RendererSystem {};
2026-01-04 13:14:55 +03:30
auto &surface_system = fixture.surface_system();
auto &renderer_system = fixture.renderer_system();
2026-01-04 13:14:55 +03:30
auto timer = lt::time::Timer {};
lt::log::trace("Ticking for 3 seconds...");
2026-01-04 13:14:55 +03:30
while (timer.elapsed_time() < std::chrono::seconds { 3 })
{
surface_system.tick({});
renderer_system.tick({});
}
2026-01-04 13:14:55 +03:30
lt::log::trace("Three seconds passed, quitting...");
};
2026-01-04 13:14:55 +03:30
// Case { "happy path won't throw" } = [] {
// ignore = Fixture_RendererSystem {};
//
//
// auto timer = lt::time::Timer {};
// lt::log::trace("Ticking for 3 seconds...");
// while (timer.elapsed_time() < std::chrono::seconds { 3 })
// {
// system.tick({});
// }
//
// lt::log::trace("Three seconds passed, quitting...");
// };
//
// Case { "happy path has no errors" } = [] {
// auto fixture = Fixture_RendererSystem {};
// expect_false(fixture.has_any_messages_of(lt::renderer::IDebugger::MessageSeverity::error));
// expect_false(
// fixture.has_any_messages_of(lt::renderer::IDebugger::MessageSeverity::warning)
// );
// };
//
// Case { "unhappy path throws" } = [] {
// auto fixture = Fixture_SurfaceSystem {};
// auto empty_entity = lt::ecs::Entity { fixture.registry(),
// fixture.registry()->create_entity() };
// auto info = fixture.renderer_system_create_info();
//
// expect_throw([=] mutable {
// info.registry = nullptr;
// ignore = lt::renderer::System { info };
// });
//
// expect_throw([=] mutable {
// info.surface_entity = lt::ecs::Entity({}, {});
// ignore = lt::renderer::System { info };
// });
//
// expect_throw([=] mutable {
// info.config.target_api = lt::renderer::Api::none;
// ignore = lt::renderer::System { info };
// });
//
// // unsupported Apis
// expect_throw([=] mutable {
// info.config.target_api = lt::renderer::Api::direct_x;
// ignore = lt::renderer::System { info };
// });
//
// expect_throw([=] mutable {
// info.config.target_api = lt::renderer::Api::metal;
// ignore = lt::renderer::System { info };
// });
//
// expect_throw([=] mutable {
// constexpr auto limit = lt::renderer::System::frames_in_flight_upper_limit;
// info.config.max_frames_in_flight = limit + 1u;
// ignore = lt::renderer::System { info };
// });
//
// expect_throw([=] mutable {
// constexpr auto limit = lt::renderer::System::frames_in_flight_lower_limit;
// info.config.max_frames_in_flight = limit - 1u;
// ignore = lt::renderer::System { info };
// });
//
// expect_throw([=] mutable {
// info.debug_callback_info = lt::renderer::IDebugger::CreateInfo {};
// ignore = lt::renderer::System { info };
// });
//
// // Make sure the base info is not at fault for unhappiness.
// ignore = lt::renderer::System { info };
// };
};