public IEnumerator LockObjectBehavior() { // Given a training with LockObjectBehavior TrainingSceneObject trainingSceneObject = TestingUtils.CreateSceneObject("TestObject"); ICourse training1 = new LinearTrainingBuilder("Training") .AddChapter(new LinearChapterBuilder("Chapter") .AddStep(new BasicStepBuilder("Step") .AddBehavior(new LockObjectBehavior(trainingSceneObject)))) .Build(); // When we serialize and deserialize it ICourse training2 = Serializer.CourseFromByteArray(Serializer.CourseToByteArray(training1)); // Then that's behavior target is still the same. LockObjectBehavior behavior1 = training1.Data.FirstChapter.Data.FirstStep.Data.Behaviors.Data.Behaviors.First() as LockObjectBehavior; LockObjectBehavior behavior2 = training2.Data.FirstChapter.Data.FirstStep.Data.Behaviors.Data.Behaviors.First() as LockObjectBehavior; Assert.IsNotNull(behavior1); Assert.IsNotNull(behavior2); Assert.AreEqual(behavior1.Data.Target.Value, behavior2.Data.Target.Value); // Cleanup TestingUtils.DestroySceneObject(trainingSceneObject); return(null); }
public IEnumerator LockBehaviorOnLockedObject() { // Given a LockObjectBehavior, an locked game object, and a full training step, GameObject gameObject = new GameObject("Test"); TrainingSceneObject targetObject = gameObject.AddComponent <TrainingSceneObject>(); Step step = new Step("TestStep"); Transition transition = new Transition(); step.Data.Transitions.Data.Transitions.Add(transition); LockObjectBehavior lockBehavior = new LockObjectBehavior(targetObject); step.Data.Behaviors.Data.Behaviors.Add(lockBehavior); step.Configure(RuntimeConfigurator.Configuration.GetCurrentMode()); targetObject.SetLocked(true); // When we fulfill the step, bool isLockedInitially = targetObject.IsLocked; step.LifeCycle.Activate(); while (step.LifeCycle.Stage != Stage.Active) { yield return(null); step.Update(); } bool isLockedDuringStep = targetObject.IsLocked; step.LifeCycle.Deactivate(); while (step.LifeCycle.Stage != Stage.Inactive) { yield return(null); step.Update(); } bool isLockedInEnd = targetObject.IsLocked; // Then the game object was locked initially, locked during step execution, and locked after the completion. Assert.IsTrue(isLockedInitially, "Object should be locked initially"); Assert.IsTrue(isLockedDuringStep, "Object should be locked during step"); Assert.IsTrue(isLockedInEnd, "Object should be locked in the end"); yield break; }
public IEnumerator FastForwardActivatingBehavior() { // Given a LockObjectBehavior, an unlocked game object, and an activated full training step, GameObject gameObject = new GameObject("Test"); TrainingSceneObject targetObject = gameObject.AddComponent <TrainingSceneObject>(); Step step = new Step("TestStep"); Transition transition = new Transition(); step.Data.Transitions.Data.Transitions.Add(transition); LockObjectBehavior behavior = new LockObjectBehavior(targetObject); step.Data.Behaviors.Data.Behaviors.Add(behavior); step.Configure(RuntimeConfigurator.Configuration.GetCurrentMode()); bool isLockedInitially = targetObject.IsLocked; step.LifeCycle.Activate(); yield return(null); step.Update(); // When we mark the behavior to fast-forward, behavior.LifeCycle.MarkToFastForward(); // Then it should work without any differences because the behavior is done immediately anyways. bool isLockedDuringStep = targetObject.IsLocked; step.LifeCycle.Deactivate(); while (step.LifeCycle.Stage != Stage.Inactive) { yield return(null); step.Update(); } bool isLockedInEnd = targetObject.IsLocked; Assert.IsFalse(isLockedInitially, "Object should not be locked initially"); Assert.IsTrue(isLockedDuringStep, "Object should be locked during step"); Assert.IsFalse(isLockedInEnd, "Object should not be locked in the end"); yield break; }
public IEnumerator CreateLockBehavior() { // Given an game object with a changed unique name, GameObject gameObject = new GameObject("Test"); TrainingSceneObject targetObject = gameObject.AddComponent <TrainingSceneObject>(); targetObject.ChangeUniqueName(targetName); // When we reference it by reference or unique name in the LockObjectBehavior, LockObjectBehavior lock1 = new LockObjectBehavior(targetObject); LockObjectBehavior lock2 = new LockObjectBehavior(targetName); // Then it is the same object. Assert.AreEqual(targetObject, lock1.Data.Target.Value); Assert.AreEqual(targetObject, lock2.Data.Target.Value); yield break; }
public IEnumerator FastForwardInactiveBehavior() { // Given a LockObjectBehavior and an unlocked game object, GameObject gameObject = new GameObject("Test"); TrainingSceneObject targetObject = gameObject.AddComponent <TrainingSceneObject>(); LockObjectBehavior behavior = new LockObjectBehavior(targetObject); // When we mark the behavior to fast-forward, behavior.LifeCycle.MarkToFastForward(); // Then it is still in PendingActivation state because it hasn't been activated yet. Assert.AreEqual(Stage.Inactive, behavior.LifeCycle.Stage); // Cleanup created game objects. Object.DestroyImmediate(gameObject); yield break; }