// Copyright (c) 2025-2026 GeWuYou
// SPDX-License-Identifier: Apache-2.0
using GFramework.Game.Abstractions.Input;
using GFramework.Game.Input;
namespace GFramework.Game.Tests.Input;
///
/// 验证逻辑动作到 UI 路由分发的默认桥接行为。
///
[TestFixture]
public sealed class UiInputDispatcherTests
{
///
/// 验证 `ui_cancel` 会被映射为 `UiInputAction.Cancel` 并继续分发给路由器。
///
[Test]
public void TryDispatch_WhenActionCanMapToUiAction_ForwardsToRouter()
{
var router = new Mock();
router.Setup(mock => mock.TryDispatchUiAction(UiInputAction.Cancel)).Returns(true);
var dispatcher = new UiInputDispatcher(new UiInputActionMap(), router.Object);
var dispatched = dispatcher.TryDispatch("ui_cancel");
Assert.Multiple(() =>
{
Assert.That(dispatched, Is.True);
router.Verify(mock => mock.TryDispatchUiAction(UiInputAction.Cancel), Times.Once);
});
}
///
/// 验证未映射的逻辑动作不会触发 UI 路由。
///
[Test]
public void TryDispatch_WhenActionIsUnknown_ReturnsFalseWithoutRouting()
{
var router = new Mock();
var dispatcher = new UiInputDispatcher(new UiInputActionMap(), router.Object);
var dispatched = dispatcher.TryDispatch("inventory_toggle");
Assert.Multiple(() =>
{
Assert.That(dispatched, Is.False);
router.Verify(mock => mock.TryDispatchUiAction(It.IsAny()), Times.Never);
});
}
}