diff --git a/tests/editor/test_viewport_object_id_picker.cpp b/tests/editor/test_viewport_object_id_picker.cpp index d7b2713d..19780724 100644 --- a/tests/editor/test_viewport_object_id_picker.cpp +++ b/tests/editor/test_viewport_object_id_picker.cpp @@ -8,8 +8,11 @@ namespace { using XCEngine::Editor::BuildViewportObjectIdReadbackRequest; using XCEngine::Editor::CanPickViewportObjectId; +using XCEngine::Editor::PickViewportObjectIdEntity; using XCEngine::Editor::TryPickViewportObjectIdEntity; using XCEngine::Editor::ViewportObjectIdPickContext; +using XCEngine::Editor::ViewportObjectIdPickResult; +using XCEngine::Editor::ViewportObjectIdPickStatus; using XCEngine::Editor::ViewportObjectIdReadbackRequest; using XCEngine::RHI::RHICommandQueue; using XCEngine::RHI::RHITexture; @@ -97,6 +100,36 @@ TEST(ViewportObjectIdPickerTest, TryPickViewportObjectIdEntityDecodesReadbackCol EXPECT_EQ(capturedRequest.pixelY, 360u); } +TEST(ViewportObjectIdPickerTest, PickViewportObjectIdEntityReturnsSuccessForZeroObjectId) { + const ViewportObjectIdPickContext context = CreateValidContext(); + + const ViewportObjectIdPickResult result = PickViewportObjectIdEntity( + context, + [](const ViewportObjectIdReadbackRequest&, std::array& outRgba) { + outRgba = { 0u, 0u, 0u, 0u }; + return true; + }); + + EXPECT_EQ(result.status, ViewportObjectIdPickStatus::Success); + EXPECT_EQ(result.entityId, 0u); + EXPECT_TRUE(result.HasResolvedSample()); +} + +TEST(ViewportObjectIdPickerTest, PickViewportObjectIdEntityReturnsUnavailableWhenContextIsInvalid) { + ViewportObjectIdPickContext context = CreateValidContext(); + context.hasValidFrame = false; + + const ViewportObjectIdPickResult result = PickViewportObjectIdEntity( + context, + [](const ViewportObjectIdReadbackRequest&, std::array&) { + return true; + }); + + EXPECT_EQ(result.status, ViewportObjectIdPickStatus::Unavailable); + EXPECT_EQ(result.entityId, 0u); + EXPECT_FALSE(result.HasResolvedSample()); +} + TEST(ViewportObjectIdPickerTest, TryPickViewportObjectIdEntityFailsWhenReadbackFails) { const ViewportObjectIdPickContext context = CreateValidContext(); @@ -112,4 +145,18 @@ TEST(ViewportObjectIdPickerTest, TryPickViewportObjectIdEntityFailsWhenReadbackF EXPECT_EQ(entityId, 0u); } +TEST(ViewportObjectIdPickerTest, PickViewportObjectIdEntityReportsReadbackFailure) { + const ViewportObjectIdPickContext context = CreateValidContext(); + + const ViewportObjectIdPickResult result = PickViewportObjectIdEntity( + context, + [](const ViewportObjectIdReadbackRequest&, std::array&) { + return false; + }); + + EXPECT_EQ(result.status, ViewportObjectIdPickStatus::ReadbackFailed); + EXPECT_EQ(result.entityId, 0u); + EXPECT_FALSE(result.HasResolvedSample()); +} + } // namespace