diff options
Diffstat (limited to 'Xamarin.Forms.Core.UnitTests/RegistrarUnitTests.cs')
-rw-r--r-- | Xamarin.Forms.Core.UnitTests/RegistrarUnitTests.cs | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/Xamarin.Forms.Core.UnitTests/RegistrarUnitTests.cs b/Xamarin.Forms.Core.UnitTests/RegistrarUnitTests.cs new file mode 100644 index 00000000..9758eaf0 --- /dev/null +++ b/Xamarin.Forms.Core.UnitTests/RegistrarUnitTests.cs @@ -0,0 +1,149 @@ +using System; +using System.Reflection; +using NUnit.Framework; +using Xamarin.Forms; +using Xamarin.Forms.Core.UnitTests; + +[assembly: TestHandler (typeof (Button), typeof (ButtonTarget))] +[assembly: TestHandler (typeof (Slider), typeof (SliderTarget))] + +namespace Xamarin.Forms.Core.UnitTests +{ + internal class TestHandlerAttribute : HandlerAttribute + { + public TestHandlerAttribute (Type handler, Type target) : base (handler, target) + { + + } + } + + internal class ButtonTarget : IRegisterable {} + + internal class SliderTarget : IRegisterable {} + + [TestFixture] + public class RegistrarTests : BaseTestFixture + { + [SetUp] + public override void Setup () + { + base.Setup (); + Device.PlatformServices = new MockPlatformServices (); + Registrar.RegisterAll (new [] { + typeof (TestHandlerAttribute) + }); + + } + + [TearDown] + public override void TearDown() + { + base.TearDown (); + Device.PlatformServices = null; + } + + [Test] + public void GetButtonHandler () + { + var buttonTarget = Registrar.Registered.GetHandler<ButtonTarget> (typeof (Button)); + Assert.IsNotNull (buttonTarget); + Assert.That (buttonTarget, Is.InstanceOf<ButtonTarget>()); + } + + [Test] + public void GetSliderHandler() + { + var sliderTarget = Registrar.Registered.GetHandler<SliderTarget> (typeof (Slider)); + Assert.IsNotNull (sliderTarget); + Assert.That (sliderTarget, Is.InstanceOf<SliderTarget> ()); + } + } + + [TestFixture] + public class SimpleRegistrarUnitTests + { + class MockRenderer {} + class ButtonMockRenderer : MockRenderer {} + class ShinyButtonMockRenderer : MockRenderer {} + class CrashMockRenderer : MockRenderer + { + public CrashMockRenderer () + { + throw new NotImplementedException(); + } + } + + [Test] + public void TestConstructor () + { + var registrar = new Registrar<MockRenderer> (); + + var renderer = registrar.GetHandler (typeof (Button)); + + Assert.Null (renderer); + } + + [Test] + public void TestGetRendererForKnownClass () + { + var registrar = new Registrar<MockRenderer> (); + + registrar.Register (typeof(View), typeof(MockRenderer)); + + var renderer = registrar.GetHandler (typeof (View)); + + Assert.That (renderer, Is.InstanceOf<MockRenderer>()); + } + + [Test] + public void TestGetRendererForUnknownSubclass () + { + var registrar = new Registrar<MockRenderer> (); + + registrar.Register (typeof (View), typeof (MockRenderer)); + + var renderer = registrar.GetHandler (typeof (Button)); + + Assert.That (renderer, Is.InstanceOf<MockRenderer>()); + } + + [Test] + public void TestGetRendererWithRegisteredSubclass () + { + var registrar = new Registrar<MockRenderer> (); + + registrar.Register (typeof (View), typeof (MockRenderer)); + registrar.Register (typeof (Button), typeof (ButtonMockRenderer)); + + var buttonRenderer = registrar.GetHandler (typeof (Button)); + var viewRenderer = registrar.GetHandler (typeof (View)); + + Assert.That (buttonRenderer, Is.InstanceOf<ButtonMockRenderer>()); + Assert.That (viewRenderer, Is.Not.InstanceOf<ButtonMockRenderer>()); + Assert.That (viewRenderer, Is.InstanceOf<MockRenderer>()); + } + + [Test] + public void TestReplaceRenderer () + { + var registrar = new Registrar<MockRenderer> (); + + registrar.Register (typeof (View), typeof (MockRenderer)); + registrar.Register (typeof (Button), typeof (ButtonMockRenderer)); + registrar.Register (typeof (Button), typeof (ShinyButtonMockRenderer)); + + var buttonRenderer = registrar.GetHandler (typeof (Button)); + + Assert.That (buttonRenderer, Is.InstanceOf<ShinyButtonMockRenderer>()); + } + + [Test] + public void GetHandlerType() + { + var registrar = new Registrar<MockRenderer>(); + registrar.Register (typeof (View), typeof (MockRenderer)); + + Assert.AreEqual (typeof (MockRenderer), registrar.GetHandlerType (typeof (View))); + } + } +} |