test: cover object-id pick result states

This commit is contained in:
2026-04-02 15:24:11 +08:00
parent a5d2058818
commit 35d9b1d465

View File

@@ -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<uint8_t, 4>& 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<uint8_t, 4>&) {
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<uint8_t, 4>&) {
return false;
});
EXPECT_EQ(result.status, ViewportObjectIdPickStatus::ReadbackFailed);
EXPECT_EQ(result.entityId, 0u);
EXPECT_FALSE(result.HasResolvedSample());
}
} // namespace