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

266 lines
8.9 KiB
C#

using NUnit.Framework;
using SepCore.InputModule;
using SepCore.InputModule.Runtime;
using UnityEngine;
using UnityEngine.InputSystem;
namespace SepCore.InputModule.Tests
{
public class InputModuleComponentContextTests
{
private GameObject _gameObject;
private InputModuleComponent _component;
private InputActionAsset _asset;
[SetUp]
public void SetUp()
{
_gameObject = new GameObject("InputModuleTest");
_component = _gameObject.AddComponent<InputModuleComponent>();
}
[TearDown]
public void TearDown()
{
Object.DestroyImmediate(_gameObject);
}
private void InitializeWithDefaultActions()
{
_component.OnInit();
_asset = _component.RuntimeActions;
}
private InputActionMap FindMap(InputContextId contextId)
{
return _asset.FindActionMap(contextId.ToString(), throwIfNotFound: false);
}
[Test]
public void AfterInitOnlyGlobalMapIsEnabled()
{
InitializeWithDefaultActions();
InputActionMap globalMap = FindMap(InputContextId.Global);
InputActionMap uiMap = FindMap(InputContextId.UI);
InputActionMap geMap = FindMap(InputContextId.GameplayExplore);
Assert.That(globalMap, Is.Not.Null);
Assert.That(uiMap, Is.Not.Null);
Assert.That(geMap, Is.Not.Null);
Assert.That(globalMap.enabled, Is.True);
Assert.That(uiMap.enabled, Is.False);
Assert.That(geMap.enabled, Is.False);
}
[Test]
public void SetContextEnablesTargetMapAndGlobal()
{
InitializeWithDefaultActions();
_component.SetContext(InputContextId.UI);
InputActionMap globalMap = FindMap(InputContextId.Global);
InputActionMap uiMap = FindMap(InputContextId.UI);
InputActionMap geMap = FindMap(InputContextId.GameplayExplore);
Assert.That(globalMap.enabled, Is.True);
Assert.That(uiMap.enabled, Is.True);
Assert.That(geMap.enabled, Is.False);
}
[Test]
public void SetContextSwitchDisablesPreviousMap()
{
InitializeWithDefaultActions();
_component.SetContext(InputContextId.UI);
InputActionMap uiMap = FindMap(InputContextId.UI);
Assert.That(uiMap.enabled, Is.True);
_component.SetContext(InputContextId.GameplayExplore);
InputActionMap geMap = FindMap(InputContextId.GameplayExplore);
Assert.That(uiMap.enabled, Is.False);
Assert.That(geMap.enabled, Is.True);
}
[Test]
public void PushContextOnlyEnablesTopmostMap()
{
InitializeWithDefaultActions();
_component.SetContext(InputContextId.UI);
_component.PushContext(InputContextId.GameplayExplore);
InputActionMap globalMap = FindMap(InputContextId.Global);
InputActionMap uiMap = FindMap(InputContextId.UI);
InputActionMap geMap = FindMap(InputContextId.GameplayExplore);
Assert.That(globalMap.enabled, Is.True);
Assert.That(uiMap.enabled, Is.False);
Assert.That(geMap.enabled, Is.True);
}
[Test]
public void PopContextRestoresPreviousMapState()
{
InitializeWithDefaultActions();
_component.SetContext(InputContextId.UI);
_component.PushContext(InputContextId.GameplayExplore);
InputActionMap geMap = FindMap(InputContextId.GameplayExplore);
Assert.That(geMap.enabled, Is.True);
_component.PopContext();
InputActionMap uiMap = FindMap(InputContextId.UI);
Assert.That(geMap.enabled, Is.False);
Assert.That(uiMap.enabled, Is.True);
}
[Test]
public void ClearContextsOnlyGlobalRemainsEnabled()
{
InitializeWithDefaultActions();
_component.SetContext(InputContextId.UI);
_component.PushContext(InputContextId.GameplayExplore);
_component.ClearContexts();
InputActionMap globalMap = FindMap(InputContextId.Global);
InputActionMap uiMap = FindMap(InputContextId.UI);
InputActionMap geMap = FindMap(InputContextId.GameplayExplore);
Assert.That(globalMap.enabled, Is.True);
Assert.That(uiMap.enabled, Is.False);
Assert.That(geMap.enabled, Is.False);
}
[Test]
public void OnDisableDisablesAllMaps()
{
InitializeWithDefaultActions();
_component.SetContext(InputContextId.UI);
_gameObject.SetActive(false);
InputActionMap globalMap = FindMap(InputContextId.Global);
InputActionMap uiMap = FindMap(InputContextId.UI);
Assert.That(globalMap.enabled, Is.False);
Assert.That(uiMap.enabled, Is.False);
}
[Test]
public void OnEnableRestoresContextState()
{
InitializeWithDefaultActions();
_component.SetContext(InputContextId.UI);
_gameObject.SetActive(false);
_gameObject.SetActive(true);
InputActionMap globalMap = FindMap(InputContextId.Global);
InputActionMap uiMap = FindMap(InputContextId.UI);
Assert.That(globalMap.enabled, Is.True);
Assert.That(uiMap.enabled, Is.True);
}
[Test]
public void DialogOverlayOnGameplayExplore_DisablesGameplayAndRestoresOnPop()
{
InitializeWithDefaultActions();
_component.SetContext(InputContextId.GameplayExplore);
InputActionMap globalMap = FindMap(InputContextId.Global);
InputActionMap geMap = FindMap(InputContextId.GameplayExplore);
InputActionMap dialogMap = FindMap(InputContextId.Dialog);
Assert.That(geMap.enabled, Is.True);
Assert.That(dialogMap.enabled, Is.False);
_component.PushContext(InputContextId.Dialog);
Assert.That(globalMap.enabled, Is.True);
Assert.That(geMap.enabled, Is.False);
Assert.That(dialogMap.enabled, Is.True);
_component.PopContext();
Assert.That(globalMap.enabled, Is.True);
Assert.That(geMap.enabled, Is.True);
Assert.That(dialogMap.enabled, Is.False);
}
[Test]
public void DialogOverlayOnUI_DisablesUIAndRestoresOnPop()
{
InitializeWithDefaultActions();
_component.SetContext(InputContextId.UI);
InputActionMap uiMap = FindMap(InputContextId.UI);
InputActionMap dialogMap = FindMap(InputContextId.Dialog);
Assert.That(uiMap.enabled, Is.True);
Assert.That(dialogMap.enabled, Is.False);
_component.PushContext(InputContextId.Dialog);
Assert.That(uiMap.enabled, Is.False);
Assert.That(dialogMap.enabled, Is.True);
_component.PopContext();
Assert.That(uiMap.enabled, Is.True);
Assert.That(dialogMap.enabled, Is.False);
}
[Test]
public void FullWorkflow_SetGameplay_PushDialog_Pop_SetUI_PushDialog_Clear()
{
InitializeWithDefaultActions();
InputActionMap globalMap = FindMap(InputContextId.Global);
InputActionMap geMap = FindMap(InputContextId.GameplayExplore);
InputActionMap uiMap = FindMap(InputContextId.UI);
InputActionMap dialogMap = FindMap(InputContextId.Dialog);
_component.SetContext(InputContextId.GameplayExplore);
Assert.That(geMap.enabled, Is.True);
Assert.That(uiMap.enabled, Is.False);
Assert.That(dialogMap.enabled, Is.False);
_component.PushContext(InputContextId.Dialog);
Assert.That(geMap.enabled, Is.False);
Assert.That(dialogMap.enabled, Is.True);
_component.PopContext();
Assert.That(geMap.enabled, Is.True);
Assert.That(dialogMap.enabled, Is.False);
_component.SetContext(InputContextId.UI);
Assert.That(geMap.enabled, Is.False);
Assert.That(uiMap.enabled, Is.True);
Assert.That(dialogMap.enabled, Is.False);
_component.PushContext(InputContextId.Dialog);
Assert.That(uiMap.enabled, Is.False);
Assert.That(dialogMap.enabled, Is.True);
_component.ClearContexts();
Assert.That(globalMap.enabled, Is.True);
Assert.That(geMap.enabled, Is.False);
Assert.That(uiMap.enabled, Is.False);
Assert.That(dialogMap.enabled, Is.False);
}
[Test]
public void PopEmptyStackReturnsFalse()
{
InitializeWithDefaultActions();
Assert.That(_component.PopContext(), Is.False);
}
}
}