-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
Bugfix/go back fix
- Loading branch information
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
namespace UniStateTests.PlayMode.Common | ||
{ | ||
//TODO: Refactor to more complex logger | ||
public interface IStateLogger | ||
{ | ||
void LogLine(string line); | ||
string GetFullLog(); | ||
} | ||
} |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
using System.Text; | ||
|
||
namespace UniStateTests.PlayMode.Common | ||
{ | ||
public class StateLogger : IStateLogger | ||
{ | ||
private readonly StringBuilder _stringBuilder = new(500); | ||
public void LogLine(string line) => _stringBuilder.AppendLine(line); | ||
public string GetFullLog() => _stringBuilder.ToString(); | ||
} | ||
} |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
namespace UniStateTests.PlayMode.GoBack | ||
{ | ||
public class GoBackTestFlags | ||
{ | ||
public bool ExecutedState1 = false; | ||
public bool ExecutedState2 = false; | ||
} | ||
} |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
using System.Threading; | ||
using Cysharp.Threading.Tasks; | ||
using UniState; | ||
using UniStateTests.PlayMode.Common; | ||
|
||
namespace UniStateTests.PlayMode.GoBack | ||
{ | ||
public class StateGoBack1 : StateBase | ||
{ | ||
private readonly IStateLogger _stateLogger; | ||
private readonly GoBackTestFlags _flags; | ||
|
||
public StateGoBack1(IStateLogger stateLogger, GoBackTestFlags flags) | ||
{ | ||
_stateLogger = stateLogger; | ||
_flags = flags; | ||
} | ||
|
||
public override async UniTask<StateTransitionInfo> Execute(CancellationToken token) | ||
{ | ||
_stateLogger.LogLine("StateGoBack1 - Execute"); | ||
|
||
await UniTask.Yield(); | ||
|
||
if (_flags.ExecutedState1) | ||
{ | ||
return Transition.GoBack(); | ||
} | ||
|
||
_flags.ExecutedState1 = true; | ||
|
||
return Transition.GoTo<StateGoBack2>(); | ||
} | ||
} | ||
} |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
using System.Threading; | ||
using Cysharp.Threading.Tasks; | ||
using UniState; | ||
using UniStateTests.PlayMode.Common; | ||
|
||
namespace UniStateTests.PlayMode.GoBack | ||
{ | ||
public class StateGoBack2 : StateBase | ||
{ | ||
private readonly IStateLogger _stateLogger; | ||
private readonly GoBackTestFlags _flags; | ||
|
||
public StateGoBack2(IStateLogger stateLogger, GoBackTestFlags flags) | ||
{ | ||
_stateLogger = stateLogger; | ||
_flags = flags; | ||
} | ||
|
||
public override async UniTask<StateTransitionInfo> Execute(CancellationToken token) | ||
{ | ||
_stateLogger.LogLine("StateGoBack2 - Execute"); | ||
|
||
await UniTask.Yield(); | ||
|
||
if (_flags.ExecutedState2) | ||
{ | ||
return Transition.GoBack(); | ||
} | ||
|
||
_flags.ExecutedState2 = true; | ||
|
||
return Transition.GoTo<StateGoBack3>(); | ||
} | ||
} | ||
} |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
using System.Threading; | ||
using Cysharp.Threading.Tasks; | ||
using UniState; | ||
using UniStateTests.PlayMode.Common; | ||
|
||
namespace UniStateTests.PlayMode.GoBack | ||
{ | ||
public class StateGoBack3 : StateBase | ||
{ | ||
private readonly IStateLogger _stateLogger; | ||
private readonly GoBackTestFlags _flags; | ||
|
||
public StateGoBack3(IStateLogger stateLogger, GoBackTestFlags flags) | ||
{ | ||
_stateLogger = stateLogger; | ||
_flags = flags; | ||
} | ||
|
||
public override async UniTask<StateTransitionInfo> Execute(CancellationToken token) | ||
{ | ||
_stateLogger.LogLine("StateGoBack3 - Execute"); | ||
|
||
await UniTask.Yield(); | ||
|
||
return Transition.GoBack(); | ||
} | ||
} | ||
} |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
using System; | ||
using System.Collections; | ||
using System.Threading; | ||
using Cysharp.Threading.Tasks; | ||
using NUnit.Framework; | ||
using UniState; | ||
using UniStateTests.PlayMode.Common; | ||
using UniStateTests.PlayMode.GoBack; | ||
using UnityEngine.TestTools; | ||
using Zenject; | ||
|
||
namespace UniStateTests.PlayMode | ||
{ | ||
[TestFixture] | ||
public class GoBackTests | ||
{ | ||
[UnityTest] | ||
public IEnumerator RunChaneOfState_GoBackFromTheChain_ExitFromStateMachineWithCorrectOrderOfStates() => UniTask.ToCoroutine(async () => | ||
{ | ||
//TODO: Refactor this test | ||
|
||
const string expectedLog = @"Create and execute State Machine | ||
StateGoBack1 - Execute | ||
StateGoBack2 - Execute | ||
StateGoBack3 - Execute | ||
StateGoBack2 - Execute | ||
StateGoBack1 - Execute | ||
State Machine is finished | ||
"; | ||
|
||
var container = new DiContainer(StaticContext.Container); | ||
|
||
container.BindInterfacesTo<StateLogger>().AsSingle(); | ||
container.Bind<GoBackTestFlags>().ToSelf().AsSingle(); | ||
|
||
container.Bind<StateMachine>().ToSelf().AsTransient(); | ||
container.Bind<StateGoBack1>().ToSelf().AsTransient(); | ||
container.Bind<StateGoBack2>().ToSelf().AsTransient(); | ||
container.Bind<StateGoBack3>().ToSelf().AsTransient(); | ||
|
||
CancellationTokenSource cts = new CancellationTokenSource(); | ||
|
||
//TODO: Move to base class | ||
using var slim = cts.CancelAfterSlim(TimeSpan.FromSeconds(5), DelayType.UnscaledDeltaTime); | ||
|
||
var logger = container.Resolve<IStateLogger>(); | ||
|
||
logger.LogLine("Create and execute State Machine"); | ||
var stateMachine = StateMachineHelper.CreateStateMachine<StateMachine>(container.ToTypeResolver()); | ||
await stateMachine.Execute<StateGoBack1>(cts.Token); | ||
|
||
logger.LogLine("State Machine is finished"); | ||
|
||
var actualLog = logger.GetFullLog(); | ||
|
||
//TODO: Move to base class | ||
StaticContext.Clear(); | ||
|
||
Assert.AreEqual(actualLog, expectedLog); | ||
}); | ||
} | ||
} |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.