using UnitTestSharp; using Vellum; namespace Ariadne.Vellum.UnitTests { /// /// Saves an arc that ticks another arc it holds, while that arc is mid-wait. /// public class TickSelfSaveTests : TestFixture { public static SupervisorScript PausedWithAChild(Gates gates, int ticks) { var returnMe = new SupervisorScript(); for (int i = 0; i < ticks; ++i) { returnMe.Tick(gates, TestTicks.Fresh()); } return returnMe; } public class FromNodeTests : TestFixture { public void Reloaded_KeepsTickingTheChildFromWhereItWas() { SaveSession session = ArcConverterTests.Session(); var gates = new Gates(); SupervisorScript paused = PausedWithAChild(gates, ticks: 3); var loaded = (SupervisorScript)session.FromNode( session.ToNode(paused, typeof(SupervisorScript)), typeof(SupervisorScript)); loaded.Tick(gates, TestTicks.Fresh()); CheckEqual(4, loaded.Child.Counted); CheckFalse(loaded.Finished); } public void Reloaded_FinishesWhenItsChildDoes() { SaveSession session = ArcConverterTests.Session(); var gates = new Gates(); SupervisorScript paused = PausedWithAChild(gates, ticks: 3); var loaded = (SupervisorScript)session.FromNode( session.ToNode(paused, typeof(SupervisorScript)), typeof(SupervisorScript)); gates.Open.Add("stop"); loaded.Tick(gates, TestTicks.Fresh()); CheckEqual("child counted 3", loaded.Result); CheckTrue(loaded.Child.Finished); CheckTrue(loaded.Finished); } public void Reloaded_LeavesTheOriginalAndItsChildAlone() { SaveSession session = ArcConverterTests.Session(); var gates = new Gates(); SupervisorScript paused = PausedWithAChild(gates, ticks: 3); var loaded = (SupervisorScript)session.FromNode( session.ToNode(paused, typeof(SupervisorScript)), typeof(SupervisorScript)); loaded.Tick(gates, TestTicks.Fresh()); CheckEqual(3, paused.Child.Counted); CheckNotEqual(paused.Child, loaded.Child); } } } }