using Zinnia.Process; using Zinnia.Process.Moment; using Zinnia.Process.Moment.Collection; namespace Test.Zinnia.Process.Moment { using NUnit.Framework; using UnityEngine; public class CompositeProcessTest { private GameObject containingObject; private CompositeProcess subject; [SetUp] public void SetUp() { containingObject = new GameObject("CompositeProcessTest"); subject = containingObject.AddComponent(); subject.Processes = containingObject.AddComponent(); } [TearDown] public void TearDown() { Object.DestroyImmediate(containingObject); } [Test] public void Process() { MockProcessable mockProcessable1 = new MockProcessable(); MomentProcess momentProcess1 = containingObject.AddComponent(); momentProcess1.Source = new ProcessContainer { Interface = mockProcessable1 }; MockProcessable mockProcessable2 = new MockProcessable(); MomentProcess momentProcess2 = containingObject.AddComponent(); momentProcess2.Source = new ProcessContainer { Interface = mockProcessable2 }; subject.Processes.Add(momentProcess1); subject.Processes.Add(momentProcess2); Assert.IsFalse(mockProcessable1.WasProcessCalled); Assert.IsFalse(mockProcessable2.WasProcessCalled); subject.Process(); Assert.IsTrue(mockProcessable1.WasProcessCalled); Assert.IsTrue(mockProcessable2.WasProcessCalled); } [Test] public void ProcessNestedList() { MockProcessable mockProcessable1 = new MockProcessable(); MomentProcess momentProcess1 = containingObject.AddComponent(); momentProcess1.Source = new ProcessContainer { Interface = mockProcessable1 }; MockProcessable mockProcessable2 = new MockProcessable(); MomentProcess momentProcess2 = containingObject.AddComponent(); momentProcess2.Source = new ProcessContainer { Interface = mockProcessable2 }; subject.Processes.Add(momentProcess1); subject.Processes.Add(momentProcess2); GameObject anotherObject = new GameObject("CompositeProcessTest"); CompositeProcess anotherCompositeProcess = anotherObject.AddComponent(); anotherCompositeProcess.Processes = anotherObject.AddComponent(); MockProcessable mockProcessable3 = new MockProcessable(); MomentProcess momentProcess3 = containingObject.AddComponent(); momentProcess3.Source = new ProcessContainer { Interface = mockProcessable3 }; MockProcessable mockProcessable4 = new MockProcessable(); MomentProcess momentProcess4 = containingObject.AddComponent(); momentProcess4.Source = new ProcessContainer { Interface = mockProcessable4 }; anotherCompositeProcess.Processes.Add(momentProcess3); anotherCompositeProcess.Processes.Add(momentProcess4); MomentProcess nestedProcess = containingObject.AddComponent(); nestedProcess.Source = new ProcessContainer { Interface = anotherCompositeProcess }; subject.Processes.Add(nestedProcess); Assert.IsFalse(mockProcessable1.WasProcessCalled); Assert.IsFalse(mockProcessable2.WasProcessCalled); Assert.IsFalse(mockProcessable3.WasProcessCalled); Assert.IsFalse(mockProcessable4.WasProcessCalled); subject.Process(); Assert.IsTrue(mockProcessable1.WasProcessCalled); Assert.IsTrue(mockProcessable2.WasProcessCalled); Assert.IsTrue(mockProcessable3.WasProcessCalled); Assert.IsTrue(mockProcessable4.WasProcessCalled); Object.DestroyImmediate(anotherObject); } private sealed class MockProcessable : IProcessable { public bool WasProcessCalled; public void Process() { WasProcessCalled = true; } public void Reset() { WasProcessCalled = false; } } } }