From: Rui Marinho Date: Thu, 4 May 2017 14:27:30 +0000 (+0100) Subject: Fix bugzilla55542 (#898) X-Git-Tag: accepted/tizen/4.0/unified/20170816.011313~250 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=30412cbc3b84a38be2db1959d0ac9eb84e59a6ac;p=platform%2Fupstream%2Fxamarin-forms.git Fix bugzilla55542 (#898) * [Controls] Add repo for bugzilla 55542 * [Core] Fix caching null renderer for ViewCell view --- diff --git a/Xamarin.Forms.Controls/App.cs b/Xamarin.Forms.Controls/App.cs index e5a6432..e56e635 100644 --- a/Xamarin.Forms.Controls/App.cs +++ b/Xamarin.Forms.Controls/App.cs @@ -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() }; } diff --git a/Xamarin.Forms.Core.UnitTests/RegistrarUnitTests.cs b/Xamarin.Forms.Core.UnitTests/RegistrarUnitTests.cs index c477f02..c19c125 100644 --- a/Xamarin.Forms.Core.UnitTests/RegistrarUnitTests.cs +++ b/Xamarin.Forms.Core.UnitTests/RegistrarUnitTests.cs @@ -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(); + + //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()); + } + } } diff --git a/Xamarin.Forms.Core/Registrar.cs b/Xamarin.Forms.Core/Registrar.cs index 5f0819e..85a7b2c 100644 --- a/Xamarin.Forms.Core/Registrar.cs +++ b/Xamarin.Forms.Core/Registrar.cs @@ -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; } } }