Missing visual falling not falling back to registered default renderer (#5179)
authorShane Neuville <shane94@hotmail.com>
Tue, 12 Feb 2019 13:37:26 +0000 (06:37 -0700)
committerRui Marinho <me@ruimarinho.net>
Tue, 12 Feb 2019 13:37:26 +0000 (13:37 +0000)
Xamarin.Forms.ControlGallery.iOS/Xamarin.Forms.ControlGallery.iOS.csproj
Xamarin.Forms.Core.UnitTests/RegistrarUnitTests.cs
Xamarin.Forms.Core/Registrar.cs
Xamarin.Forms.Material.iOS/Xamarin.Forms.Material.iOS.csproj

index edde14d..0f0a980 100644 (file)
     <ProjectReference Include="..\Xamarin.Forms.Material.iOS\Xamarin.Forms.Material.iOS.csproj">
       <Project>{8A75B1DC-CEED-4B1B-8675-A7DFFD1E6DE4}</Project>
       <Name>Xamarin.Forms.Material.iOS</Name>
+      <IsAppExtension>false</IsAppExtension>
+      <IsWatchApp>false</IsWatchApp>
     </ProjectReference>
   </ItemGroup>
   <ItemGroup>
index 68caa41..fb820f7 100644 (file)
@@ -28,6 +28,7 @@ namespace Xamarin.Forms.Core.UnitTests
        internal class RenderWith { }
        internal class RenderWithChild : RenderWith { }
        internal class RenderWithChildTarget : IRegisterable { }
+       internal class RenderWithSetAsNewDefault : IRegisterable { }
 
        internal class VisualButtonTarget : IRegisterable { }
        internal class VisualSliderTarget : IRegisterable { }
@@ -62,6 +63,16 @@ namespace Xamarin.Forms.Core.UnitTests
 
 
                [Test]
+               public void RegisteringANewDefaultShouldReplaceRenderWithAttributeForFallbackVisual()
+               {
+                       Internals.Registrar.Registered.Register(typeof(RenderWith), typeof(RenderWithSetAsNewDefault));
+                       var renderWithTarget = Internals.Registrar.Registered.GetHandler(typeof(RenderWith), typeof(VisualMarkerUnitTests));
+
+                       Assert.That(renderWithTarget, Is.InstanceOf<RenderWithSetAsNewDefault>());
+               }
+
+
+               [Test]
                public void EnsureDefaultChildRendererTrumpsParentRenderWith()
                {
                        Xamarin.Forms.Internals.Registrar.Registered.Register(typeof(RenderWithChild), typeof(RenderWithChildTarget));
index 50e3028..8962056 100644 (file)
@@ -40,7 +40,7 @@ namespace Xamarin.Forms.Internals
                        for (int i = 0; i < supportedVisuals.Length; i++)
                                visualRenderers[supportedVisuals[i]] = trender;
                }
-               
+
                public void Register(Type tview, Type trender) => Register(tview, trender, _defaultVisualRenderers);
 
                internal TRegistrable GetHandler(Type type) => GetHandler(type, _defaultVisualType);
@@ -126,7 +126,7 @@ namespace Xamarin.Forms.Internals
                                else if (visualType == _materialVisualType)
                                        VisualMarker.MaterialCheck();
 
-                       if (visualType != _defaultVisualType && _handlers.TryGetValue(_defaultVisualType, out visualRenderers))
+                       if (visualType != _defaultVisualType && visualRenderers != null)
                                if (visualRenderers.TryGetValue(_defaultVisualType, out Type specificTypeRenderer))
                                        return specificTypeRenderer;
 
@@ -163,7 +163,7 @@ namespace Xamarin.Forms.Internals
                                        if (visualRenderers.TryGetValue(visualType, out handlerType))
                                                return true;
 
-                               if (visualType != _defaultVisualType && _handlers.TryGetValue(viewType, out visualRenderers))
+                               if (visualType != _defaultVisualType && visualRenderers != null)
                                        if (visualRenderers.TryGetValue(_defaultVisualType, out handlerType))
                                                return true;
 
index c657ab7..f8f67b5 100644 (file)
@@ -72,6 +72,8 @@
     <ProjectReference Include="..\Xamarin.Forms.Platform.iOS\Xamarin.Forms.Platform.iOS.csproj">
       <Project>{271193C1-6E7C-429C-A36D-3F1BE5267231}</Project>
       <Name>Xamarin.Forms.Platform.iOS</Name>
+      <IsAppExtension>false</IsAppExtension>
+      <IsWatchApp>false</IsWatchApp>
     </ProjectReference>
     <ProjectReference Include="..\Xamarin.Forms.Core\Xamarin.Forms.Core.csproj">
       <Project>{57B8B73D-C3B5-4C42-869E-7B2F17D354AC}</Project>