public IEnumerator CompleteOnTargetedSnapZone()
        {
            // Setup object with mocked grabbed property and activate
            SnappablePropertyMock mockedProperty   = CreateSnappablePropertyMock();
            SnapZoneProperty      snapZoneProperty = CreateSnapZoneProperty();

            yield return(null);

            SnappedCondition condition = new SnappedCondition(mockedProperty, snapZoneProperty);

            condition.LifeCycle.Activate();

            while (condition.LifeCycle.Stage != Stage.Active)
            {
                yield return(null);

                condition.Update();
            }

            // Emit grabbed event
            mockedProperty.SetSnapZone(snapZoneProperty);
            mockedProperty.EmitSnapped(snapZoneProperty);

            while (condition.IsCompleted == false)
            {
                yield return(null);

                condition.Update();
            }

            // Assert that condition is now completed
            Assert.IsTrue(condition.IsCompleted);
        }
        public IEnumerator DontCompleteOnWrongSnapZone()
        {
            // Setup object with mocked grabbed property and activate
            SnappablePropertyMock mockedProperty        = CreateSnappablePropertyMock();
            SnapZoneProperty      snapZoneProperty      = CreateSnapZoneProperty();
            SnapZoneProperty      wrongSnapZoneProperty = CreateSnapZoneProperty();

            yield return(null);

            SnappedCondition condition = new SnappedCondition(mockedProperty, snapZoneProperty);

            condition.LifeCycle.Activate();

            while (condition.LifeCycle.Stage != Stage.Active)
            {
                yield return(null);

                condition.Update();
            }

            // Emit grabbed event
            mockedProperty.SetSnapZone(wrongSnapZoneProperty);
            mockedProperty.EmitSnapped(wrongSnapZoneProperty);

            int frameCountEnd = Time.frameCount + 5;

            while (Time.frameCount <= frameCountEnd)
            {
                yield return(null);

                condition.Update();
            }

            // Assert that condition is not completed
            Assert.IsFalse(condition.IsCompleted, "Condition should not be completed!");
        }