Some checks failed
		
		
	
	continuous-integration/drone/push Build is failing
				
			Reviewed-on: #57 Co-authored-by: light7734 <light7734@tuta.io> Co-committed-by: light7734 <light7734@tuta.io>
		
			
				
	
	
		
			87 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include <memory/reference.hpp>
 | |
| #include <renderer/frontend/context/instance.hpp>
 | |
| #include <renderer/frontend/context/surface.hpp>
 | |
| #include <renderer/test/utils.hpp>
 | |
| #include <surface/components.hpp>
 | |
| #include <surface/system.hpp>
 | |
| #include <test/test.hpp>
 | |
| 
 | |
| using ::lt::ecs::EntityId;
 | |
| using ::lt::ecs::Registry;
 | |
| 
 | |
| Suite raii = "surface"_suite = [] {
 | |
| 	Case { "happy path won't throw" } = [&] {
 | |
| 		auto fixture = Fixture_SurfaceSystem {};
 | |
| 
 | |
| 		const auto surface = lt::renderer::ISurface::create(
 | |
| 		    constants::api,
 | |
| 		    lt::renderer::IInstance::get(constants::api),
 | |
| 		    fixture.surface_entity()
 | |
| 		);
 | |
| 
 | |
| 		const auto &[x, y] = surface->get_framebuffer_size();
 | |
| 		expect_eq(x, constants::resolution.x);
 | |
| 		expect_eq(y, constants::resolution.y);
 | |
| 	};
 | |
| 
 | |
| 	Case { "unhappy path throws" } = [&] {
 | |
| 		auto registry = lt::memory::create_ref<lt::ecs::Registry>();
 | |
| 		auto entity = lt::ecs::Entity { registry, registry->create_entity() };
 | |
| 		auto system = lt::surface::System(registry);
 | |
| 
 | |
| 		expect_throw([&] {
 | |
| 			std::ignore = lt::renderer::ISurface::create(
 | |
| 			    constants::api,
 | |
| 			    lt::renderer::IInstance::get(constants::api),
 | |
| 			    entity
 | |
| 			);
 | |
| 		});
 | |
| 
 | |
| 		system.create_surface_component(
 | |
| 		    entity.id(),
 | |
| 		    lt::surface::SurfaceComponent::CreateInfo {
 | |
| 		        .title = "",
 | |
| 		        .resolution = constants::resolution,
 | |
| 		    }
 | |
| 		);
 | |
| 
 | |
| 		expect_throw([&] {
 | |
| 			std::ignore = lt::renderer::ISurface::create(constants::api, nullptr, entity);
 | |
| 		});
 | |
| 
 | |
| 		expect_throw([&] {
 | |
| 			std::ignore = lt::renderer::ISurface::create(
 | |
| 			    lt::renderer::Api::none,
 | |
| 			    lt::renderer::IInstance::get(constants::api),
 | |
| 			    entity
 | |
| 			);
 | |
| 		});
 | |
| 
 | |
| 		expect_throw([&] {
 | |
| 			std::ignore = lt::renderer::ISurface::create(
 | |
| 			    lt::renderer::Api::direct_x,
 | |
| 			    lt::renderer::IInstance::get(constants::api),
 | |
| 			    entity
 | |
| 			);
 | |
| 		});
 | |
| 
 | |
| 		expect_throw([&] {
 | |
| 			std::ignore = lt::renderer::ISurface::create(
 | |
| 			    lt::renderer::Api::metal,
 | |
| 			    lt::renderer::IInstance::get(constants::api),
 | |
| 			    entity
 | |
| 			);
 | |
| 		});
 | |
| 
 | |
| 		// Ensure base creation info is non-throwing
 | |
| 		std::ignore = lt::renderer::ISurface::create(
 | |
| 		    constants::api,
 | |
| 		    lt::renderer::IInstance::get(constants::api),
 | |
| 		    entity
 | |
| 		);
 | |
| 	};
 | |
| 
 | |
| 	// TODO(Light): add torture tests
 | |
| 	Case { "torture tests" } = [] {
 | |
| 	};
 | |
| };
 |