Fix bugzilla55542 (#898)
authorRui Marinho <me@ruimarinho.net>
Thu, 4 May 2017 14:27:30 +0000 (15:27 +0100)
committerRui Marinho <me@ruimarinho.net>
Thu, 4 May 2017 14:31:05 +0000 (15:31 +0100)
* [Controls] Add repo for bugzilla 55542

* [Core] Fix caching null renderer for ViewCell view

Xamarin.Forms.Controls/App.cs
Xamarin.Forms.Core.UnitTests/RegistrarUnitTests.cs
Xamarin.Forms.Core/Registrar.cs

index e5a6432..e56e635 100644 (file)
@@ -50,7 +50,7 @@ namespace Xamarin.Forms.Controls
                        return new MasterDetailPage
                        {
                                AutomationId = DefaultMainPageId,
-                               Master = new ContentPage { Title = "Master", BackgroundColor = Color.Red },
+                               Master = new ContentPage { Title = "Master", Content = new View { BackgroundColor = Color.Red } },
                                Detail = CoreGallery.GetMainPage()
                        };
                }
index c477f02..c19c125 100644 (file)
@@ -145,5 +145,22 @@ namespace Xamarin.Forms.Core.UnitTests
 
                        Assert.AreEqual (typeof (MockRenderer), registrar.GetHandlerType (typeof (View)));
                }
+
+               [Test]
+               public void TestGetRendererNullViewRenderer()
+               {
+                       var registrar = new Internals.Registrar<MockRenderer>();
+
+                       //let's say that we are now registering the view of a viewcell
+                       registrar.Register(typeof(View), typeof(MockRenderer));
+                       //later we had a view that was registered with null because there's
+                       //no default renderer for View
+                       registrar.Register(typeof(View), null);
+
+                       var renderer = registrar.GetHandler(typeof(View));
+
+                       Assert.That(renderer, Is.InstanceOf<MockRenderer>());
+               }
+
        }
 }
index 5f0819e..85a7b2c 100644 (file)
@@ -21,6 +21,9 @@ namespace Xamarin.Forms.Internals
 
                public void Register(Type tview, Type trender)
                {
+                       //avoid caching null renderers
+                       if (trender == null)
+                               return;
                        _handlers[tview] = trender;
                }
 
@@ -156,7 +159,7 @@ namespace Xamarin.Forms.Internals
                                        foreach (Attribute attribute in effectAttributes)
                                        {
                                                var effect = (ExportEffectAttribute)attribute;
-                                               Effects [resolutionName + "." + effect.Id] = effect.Type;
+                                               Effects[resolutionName + "." + effect.Id] = effect.Type;
                                        }
                                }
                        }