vampire-like/Assets/Plugins/InputModule/Tests/PlayMode/InputModule/InputModuleDefaultActionsTe...

142 lines
6.4 KiB
C#

using NUnit.Framework;
using UnityEngine.InputSystem;
namespace SepCore.InputModule.Runtime.Tests
{
public class InputModuleDefaultActionsTests
{
[Test]
public void CreateBuildsExpectedActionMaps()
{
InputActionAsset asset = InputModuleDefaultActions.Create();
Assert.That(asset.FindActionMap(nameof(InputContextId.Global), throwIfNotFound: false), Is.Not.Null);
Assert.That(asset.FindActionMap(nameof(InputContextId.UI), throwIfNotFound: false), Is.Not.Null);
Assert.That(asset.FindActionMap(nameof(InputContextId.GameplayExplore), throwIfNotFound: false), Is.Not.Null);
Assert.That(asset.FindActionMap(nameof(InputContextId.Dialog), throwIfNotFound: false), Is.Not.Null);
}
[Test]
public void CreateBuildsCoreActions()
{
InputActionAsset asset = InputModuleDefaultActions.Create();
Assert.That(asset.FindAction($"{nameof(InputContextId.Global)}/{nameof(InputActionId.Pause)}", throwIfNotFound: false), Is.Not.Null);
Assert.That(asset.FindAction($"{nameof(InputContextId.UI)}/{nameof(InputActionId.Confirm)}", throwIfNotFound: false), Is.Not.Null);
InputAction moveAction = asset.FindAction($"{nameof(InputContextId.GameplayExplore)}/{nameof(InputActionId.Move)}", throwIfNotFound: false);
Assert.That(moveAction, Is.Not.Null);
Assert.That(moveAction.expectedControlType, Is.EqualTo("Vector2"));
}
[Test]
public void GlobalMapContainsPauseAction()
{
InputActionAsset asset = InputModuleDefaultActions.Create();
InputActionMap globalMap = asset.FindActionMap(nameof(InputContextId.Global));
Assert.That(globalMap, Is.Not.Null);
InputAction pause = globalMap.FindAction(nameof(InputActionId.Pause));
Assert.That(pause, Is.Not.Null);
Assert.That(pause.type, Is.EqualTo(InputActionType.Button));
}
[Test]
public void UIMapContainsExpectedActions()
{
InputActionAsset asset = InputModuleDefaultActions.Create();
InputActionMap uiMap = asset.FindActionMap(nameof(InputContextId.UI));
Assert.That(uiMap, Is.Not.Null);
Assert.That(uiMap.FindAction(nameof(InputActionId.Navigate)), Is.Not.Null);
Assert.That(uiMap.FindAction(nameof(InputActionId.Confirm)), Is.Not.Null);
Assert.That(uiMap.FindAction(nameof(InputActionId.Cancel)), Is.Not.Null);
}
[Test]
public void GameplayExploreMapContainsExpectedActions()
{
InputActionAsset asset = InputModuleDefaultActions.Create();
InputActionMap geMap = asset.FindActionMap(nameof(InputContextId.GameplayExplore));
Assert.That(geMap, Is.Not.Null);
Assert.That(geMap.FindAction(nameof(InputActionId.Move)), Is.Not.Null);
Assert.That(geMap.FindAction(nameof(InputActionId.Sprint)), Is.Not.Null);
Assert.That(geMap.FindAction(nameof(InputActionId.Interact)), Is.Not.Null);
}
[Test]
public void DialogMapContainsExpectedActions()
{
InputActionAsset asset = InputModuleDefaultActions.Create();
InputActionMap dialogMap = asset.FindActionMap(nameof(InputContextId.Dialog));
Assert.That(dialogMap, Is.Not.Null);
Assert.That(dialogMap.FindAction(nameof(InputActionId.Navigate)), Is.Not.Null);
Assert.That(dialogMap.FindAction(nameof(InputActionId.Confirm)), Is.Not.Null);
Assert.That(dialogMap.FindAction(nameof(InputActionId.Cancel)), Is.Not.Null);
}
[Test]
public void DialogConfirmHasKeyboardAndGamepadBindings()
{
InputActionAsset asset = InputModuleDefaultActions.Create();
InputAction confirm = asset.FindAction($"{nameof(InputContextId.Dialog)}/{nameof(InputActionId.Confirm)}");
Assert.That(confirm.bindings.Count, Is.GreaterThanOrEqualTo(3));
}
[Test]
public void ConfirmHasKeyboardAndGamepadBindings()
{
InputActionAsset asset = InputModuleDefaultActions.Create();
InputAction confirm = asset.FindAction($"{nameof(InputContextId.UI)}/{nameof(InputActionId.Confirm)}");
Assert.That(confirm.bindings.Count, Is.GreaterThanOrEqualTo(3));
}
[Test]
public void MoveIsVector2ValueType()
{
InputActionAsset asset = InputModuleDefaultActions.Create();
InputAction move = asset.FindAction($"{nameof(InputContextId.GameplayExplore)}/{nameof(InputActionId.Move)}");
Assert.That(move.expectedControlType, Is.EqualTo("Vector2"));
Assert.That(move.type, Is.EqualTo(InputActionType.Value));
}
[Test]
public void NavigateIsVector2ValueType()
{
InputActionAsset asset = InputModuleDefaultActions.Create();
InputAction navigate = asset.FindAction($"{nameof(InputContextId.UI)}/{nameof(InputActionId.Navigate)}");
Assert.That(navigate.expectedControlType, Is.EqualTo("Vector2"));
Assert.That(navigate.type, Is.EqualTo(InputActionType.Value));
}
[Test]
public void AllMapsHaveAtLeastOneAction()
{
InputActionAsset asset = InputModuleDefaultActions.Create();
foreach (InputActionMap map in asset.actionMaps)
{
// Rebind map is intentionally empty — it serves only as a context stack placeholder.
if (map.name == nameof(InputContextId.Rebind))
continue;
Assert.That(map.actions.Count, Is.GreaterThanOrEqualTo(1), $"Map '{map.name}' has no actions.");
}
}
[Test]
public void SaveAndLoadBindingOverridesRoundTrips()
{
InputActionAsset asset = InputModuleDefaultActions.Create();
string json = asset.SaveBindingOverridesAsJson();
InputAction pause = asset.FindAction($"{nameof(InputContextId.Global)}/{nameof(InputActionId.Pause)}");
pause.ApplyBindingOverride("<Keyboard>/space");
string modifiedJson = asset.SaveBindingOverridesAsJson();
Assert.That(modifiedJson, Is.Not.EqualTo(json));
asset.LoadBindingOverridesFromJson(json);
string restoredJson = asset.SaveBindingOverridesAsJson();
Assert.That(restoredJson, Is.EqualTo(json));
}
}
}