#include "zeroerr/assert.h" #include "zeroerr/unittest.h" #include "editor/EditorSelection.h" using namespace eve::editor; TEST_CASE("editor.v2.selection_and_focus_are_presentation_neutral_channels") { EditorSelectionService selection; int notifications = 0; REQUIRE(selection.subscribe("park.hud", [&](const SelectionSnapshot&) { ++notifications; }).ok()); SelectionItem tree{SelectionDomain::Scene, TargetId("park"), StableId("tree-1"), "park.tree"}; auto selected = selection.set("world", {tree}, tree); REQUIRE(selected.ok()); CHECK_EQ(selected.value().sequence, static_cast(1)); CHECK(selection.snapshot("world").primary == tree); CHECK_EQ(notifications, 1); CHECK_EQ(static_cast(selection.set("world", {}, tree).code()), static_cast(EditorStatus::Rejected)); REQUIRE(selection.clear("world").ok()); CHECK_EQ(notifications, 2); CHECK(selection.unsubscribe("park.hud")); EditorFocusService focus; auto focused = focus.focus("world", StableId("viewport"), StableId("tree-1")); REQUIRE(focused.ok()); CHECK(focus.snapshot("world").surface == StableId("viewport")); }