using Zinnia.Process; using Zinnia.Process.Moment; using Zinnia.Process.Moment.Collection; namespace Test.Zinnia.Process.Moment { using NUnit.Framework; using System.Collections.Generic; using UnityEngine; public class MomentProcessorTest { private GameObject containingObject; private MomentProcessor subject; [SetUp] public void SetUp() { containingObject = new GameObject("MomentProcessorTest"); subject = containingObject.AddComponent(); } [TearDown] public void TearDown() { Object.DestroyImmediate(containingObject); } [Test] public void Process() { List results = new List(); //Create first processor MomentProcessor processor1 = containingObject.AddComponent(); processor1.ProcessMoment = MomentProcessor.Moment.None; processor1.Processes = containingObject.AddComponent(); processor1.Processes.Add(CreateMockProcess(ref results, "A")); processor1.Processes.Add(CreateMockProcess(ref results, "B")); MomentProcess processor1Moment = containingObject.AddComponent(); processor1Moment.Source = GetProcessContainer(processor1); //Create second processor MomentProcessor processor2 = containingObject.AddComponent(); processor2.ProcessMoment = MomentProcessor.Moment.None; processor2.Processes = containingObject.AddComponent(); processor2.Processes.Add(CreateMockProcess(ref results, "C")); processor2.Processes.Add(CreateMockProcess(ref results, "D")); MomentProcess processor2Moment = containingObject.AddComponent(); processor2Moment.Source = GetProcessContainer(processor2); subject.ProcessMoment = MomentProcessor.Moment.None; MomentProcess managerProcess = containingObject.AddComponent(); managerProcess.Source = GetProcessContainer(subject); subject.Processes = containingObject.AddComponent(); subject.Processes.Add(processor1Moment); subject.Processes.Add(processor2Moment); Assert.IsEmpty(results); subject.Process(); Assert.AreEqual("A,B,C,D", string.Join(",", results)); results.Clear(); subject.Processes.Clear(); Assert.IsEmpty(results); subject.Processes.Add(processor2Moment); subject.Processes.Add(processor1Moment); subject.Process(); Assert.AreEqual("C,D,A,B", string.Join(",", results)); } private MomentProcess CreateMockProcess(ref List data, string value) { MockProcess mockProcess = containingObject.AddComponent(); MomentProcess momentProcess = containingObject.AddComponent(); momentProcess.Source = GetProcessContainer(mockProcess); mockProcess.thisValue = value; mockProcess.values = data; return momentProcess; } private ProcessContainer GetProcessContainer(IProcessable item) { return new ProcessContainer { Interface = item }; } private class MockProcess : MonoBehaviour, IProcessable { public string thisValue; public List values; public void Process() { values.Add(thisValue); } } } }