diff options
Diffstat (limited to 'Xamarin.Forms.Core.UnitTests/EffectTests.cs')
-rw-r--r-- | Xamarin.Forms.Core.UnitTests/EffectTests.cs | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/Xamarin.Forms.Core.UnitTests/EffectTests.cs b/Xamarin.Forms.Core.UnitTests/EffectTests.cs new file mode 100644 index 00000000..66399bc8 --- /dev/null +++ b/Xamarin.Forms.Core.UnitTests/EffectTests.cs @@ -0,0 +1,121 @@ +using System; +using NUnit.Framework; + +using System.Collections.Generic; +using System.Linq; + +namespace Xamarin.Forms.Core.UnitTests +{ + [TestFixture] + public class EffectTests : BaseTestFixture + { + [Test] + public void ResolveSetsId () + { + string id = "Unknown"; + var effect = Effect.Resolve (id); + Assert.AreEqual (id, effect.ResolveId); + } + + [Test] + public void UnknownIdReturnsNullEffect () + { + var effect = Effect.Resolve ("Foo"); + Assert.IsInstanceOf<NullEffect> (effect); + } + + [Test] + public void SendAttachedSetsFlag () + { + var effect = Effect.Resolve ("Foo"); + effect.SendAttached (); + Assert.True (effect.IsAttached); + } + + [Test] + public void SendDetachedUnsetsFlag () + { + var effect = Effect.Resolve ("Foo"); + effect.SendAttached (); + effect.SendDetached (); + Assert.False (effect.IsAttached); + } + + [Test] + public void EffectLifecyclePreProvider () + { + var effect = new CustomEffect (); + var element = new Label (); + + element.Effects.Add (effect); + ((IVisualElementController)element).EffectControlProvider = new EffectControlProvider (); + + Assert.True (effect.IsAttached); + Assert.True (effect.OnAttachedCalled); + Assert.True (effect.Registered); + Assert.False (effect.OnDetachedCalled); + + element.Effects.Remove (effect); + Assert.True (effect.OnDetachedCalled); + } + + [Test] + public void EffectLifecyclePostProvider () + { + var effect = new CustomEffect (); + var element = new Label (); + + ((IVisualElementController)element).EffectControlProvider = new EffectControlProvider (); + element.Effects.Add (effect); + + Assert.True (effect.IsAttached); + Assert.True (effect.OnAttachedCalled); + Assert.True (effect.Registered); + Assert.False (effect.OnDetachedCalled); + + element.Effects.Remove (effect); + Assert.True (effect.OnDetachedCalled); + } + + [Test] + public void EffectsClearDetachesEffect () + { + var effect = new CustomEffect (); + var element = new Label (); + + ((IVisualElementController)element).EffectControlProvider = new EffectControlProvider (); + element.Effects.Add (effect); + + element.Effects.Clear (); + + Assert.True (effect.OnDetachedCalled); + } + + class EffectControlProvider : IEffectControlProvider + { + public void RegisterEffect (Effect effect) + { + var e = effect as CustomEffect; + if (e != null) + e.Registered = true; + } + } + + class CustomEffect : Effect + { + public bool OnAttachedCalled; + public bool OnDetachedCalled; + public bool Registered; + + protected override void OnAttached () + { + OnAttachedCalled = true; + } + + protected override void OnDetached () + { + OnDetachedCalled = true; + } + } + } +} |