#include #include #include #include using ::lt::renderer::IMessenger; Suite raii = "pass_raii"_suite = [] { Case { "happy path won't throw" } = [] { Fixture_ auto fixture = Fixture_RendererSystem {}; auto &system = fixture.renderer_system(); std::ignore = lt::renderer::IPass::create( constants::api, system.get_device(), system.get_swapchain(), lt::assets::ShaderAsset { "./data/test_assets/triangle.vert.asset" }, lt::assets::ShaderAsset { "./data/test_assets/triangle.frag.asset" } ); expect_false(fixture.has_any_messages_of(IMessenger ::MessageSeverity::error)); expect_false(fixture.has_any_messages_of(IMessenger ::MessageSeverity::warning)); }; Case { "unhappy path throws" } = [] { auto fixture = Fixture_RendererSystem {}; auto &system = fixture.renderer_system(); expect_throw([&] { std::ignore = lt::renderer::IPass::create( constants::api, nullptr, system.get_swapchain(), lt::assets::ShaderAsset { "./data/test_assets/triangle.vert.asset" }, lt::assets::ShaderAsset { "./data/test_assets/triangle.frag.asset" } ); }); expect_throw([&] { std::ignore = lt::renderer::IPass::create( constants::api, system.get_device(), nullptr, lt::assets::ShaderAsset { "./data/test_assets/triangle.vert.asset" }, lt::assets::ShaderAsset { "./data/test_assets/triangle.frag.asset" } ); }); expect_throw([&] { std::ignore = lt::renderer::IPass::create( lt::renderer::Api::none, system.get_device(), system.get_swapchain(), lt::assets::ShaderAsset { "./data/test_assets/triangle.vert.asset" }, lt::assets::ShaderAsset { "./data/test_assets/triangle.frag.asset" } ); }); expect_throw([&] { std::ignore = lt::renderer::IPass::create( lt::renderer::Api::direct_x, system.get_device(), system.get_swapchain(), lt::assets::ShaderAsset { "./data/test_assets/triangle.vert.asset" }, lt::assets::ShaderAsset { "./data/test_assets/triangle.frag.asset" } ); }); expect_throw([&] { std::ignore = lt::renderer::IPass::create( lt::renderer::Api::metal, system.get_device(), system.get_swapchain(), lt::assets::ShaderAsset { "./data/test_assets/triangle.vert.asset" }, lt::assets::ShaderAsset { "./data/test_assets/triangle.frag.asset" } ); }); }; };