#include #include #include #include #include using namespace lt; using std::ignore; using test::Case; using test::expect_throw; using test::expect_true; using test::Suite; using renderer::vk::Context; using renderer::vk::Pipeline; constexpr auto resolution = math::uvec2 { 800, 600 }; class VkPipelineTest { public: VkPipelineTest() { m_registry = create_ref(); m_surface_system = create_ref(m_registry); m_surface_entity = create_scope(m_registry, m_registry->create_entity()); m_surface_entity->add(surface::SurfaceComponent::CreateInfo { .title = "", .resolution = resolution, }); m_context = create_ref(*m_surface_entity, m_stats); } [[nodiscard]] auto context() -> Ref { return m_context; } [[nodiscard]] auto device() -> VkDevice { return m_context->device().vk(); } private: Ref m_stats; Ref m_registry; Ref m_surface_system; Scope m_surface_entity; Ref m_context; }; Suite raii = [] { Case { "happy path won't throw" } = [] { auto fixture = VkPipelineTest {}; std::ignore = Pipeline { { .context = fixture.context() } }; }; Case { "unhappy path throws" } = [] { expect_throw([] { std::ignore = Pipeline { { .context = nullptr } }; }); }; };