Browse Source

Merge pull request #11495 from AvaloniaUI/refactor/remove-presenter-interfaces

Remove presenter interfaces
Max Katz 2 years ago
parent
commit
b2b908c6e8
25 changed files with 77 additions and 133 deletions
  1. 5 5
      src/Avalonia.Controls/ContentControl.cs
  2. 1 1
      src/Avalonia.Controls/Presenters/ContentPresenter.cs
  3. 0 23
      src/Avalonia.Controls/Presenters/IContentPresenter.cs
  4. 2 2
      src/Avalonia.Controls/Presenters/IContentPresenterHost.cs
  5. 0 20
      src/Avalonia.Controls/Presenters/IPresenter.cs
  6. 1 1
      src/Avalonia.Controls/Presenters/ScrollContentPresenter.cs
  7. 2 2
      src/Avalonia.Controls/Primitives/HeaderedContentControl.cs
  8. 4 4
      src/Avalonia.Controls/Primitives/HeaderedItemsControl.cs
  9. 4 4
      src/Avalonia.Controls/Primitives/HeaderedSelectingItemsControl.cs
  10. 1 1
      src/Avalonia.Controls/Primitives/IPopupHost.cs
  11. 1 1
      src/Avalonia.Controls/ScrollViewer.cs
  12. 1 1
      src/Avalonia.Controls/SplitView/SplitView.cs
  13. 4 4
      src/Avalonia.Controls/TabControl.cs
  14. 3 3
      src/Avalonia.Controls/ToggleSwitch.cs
  15. 1 1
      src/Avalonia.Controls/TransitioningContentControl.cs
  16. 18 18
      tests/Avalonia.Controls.UnitTests/ContentControlTests.cs
  17. 1 1
      tests/Avalonia.Controls.UnitTests/HeaderedItemsControlTests .cs
  18. 1 1
      tests/Avalonia.Controls.UnitTests/ListBoxTests_Single.cs
  19. 1 1
      tests/Avalonia.Controls.UnitTests/Presenters/ContentPresenterTests_InTemplate.cs
  20. 8 8
      tests/Avalonia.Controls.UnitTests/TabControlTests.cs
  21. 4 4
      tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/CompiledBindingExtensionTests.cs
  22. 6 6
      tests/Avalonia.Markup.Xaml.UnitTests/Xaml/ControlTemplateTests.cs
  23. 7 7
      tests/Avalonia.Markup.Xaml.UnitTests/Xaml/DataTemplateTests.cs
  24. 1 1
      tests/Avalonia.ReactiveUI.UnitTests/TransitioningContentControlTest.cs
  25. 0 13
      tests/Avalonia.UnitTests/TestExtensions.cs

+ 5 - 5
src/Avalonia.Controls/ContentControl.cs

@@ -13,7 +13,7 @@ namespace Avalonia.Controls
     /// <summary>
     /// Displays <see cref="Content"/> according to an <see cref="IDataTemplate"/>.
     /// </summary>
-    [TemplatePart("PART_ContentPresenter", typeof(IContentPresenter))]
+    [TemplatePart("PART_ContentPresenter", typeof(ContentPresenter))]
     public class ContentControl : TemplatedControl, IContentControl, IContentPresenterHost
     {
         /// <summary>
@@ -68,7 +68,7 @@ namespace Avalonia.Controls
         /// <summary>
         /// Gets the presenter from the control's template.
         /// </summary>
-        public IContentPresenter? Presenter
+        public ContentPresenter? Presenter
         {
             get;
             private set;
@@ -96,16 +96,16 @@ namespace Avalonia.Controls
         IAvaloniaList<ILogical> IContentPresenterHost.LogicalChildren => LogicalChildren;
 
         /// <inheritdoc/>
-        bool IContentPresenterHost.RegisterContentPresenter(IContentPresenter presenter)
+        bool IContentPresenterHost.RegisterContentPresenter(ContentPresenter presenter)
         {
             return RegisterContentPresenter(presenter);
         }
 
         /// <summary>
-        /// Called when an <see cref="IContentPresenter"/> is registered with the control.
+        /// Called when an <see cref="ContentPresenter"/> is registered with the control.
         /// </summary>
         /// <param name="presenter">The presenter.</param>
-        protected virtual bool RegisterContentPresenter(IContentPresenter presenter)
+        protected virtual bool RegisterContentPresenter(ContentPresenter presenter)
         {
             if (presenter.Name == "PART_ContentPresenter")
             {

+ 1 - 1
src/Avalonia.Controls/Presenters/ContentPresenter.cs

@@ -17,7 +17,7 @@ namespace Avalonia.Controls.Presenters
     /// Presents a single item of data inside a <see cref="TemplatedControl"/> template.
     /// </summary>
     [PseudoClasses(":empty")]
-    public class ContentPresenter : Control, IContentPresenter
+    public class ContentPresenter : Control
     {
         /// <summary>
         /// Defines the <see cref="Background"/> property.

+ 0 - 23
src/Avalonia.Controls/Presenters/IContentPresenter.cs

@@ -1,23 +0,0 @@
-using Avalonia.Controls.Primitives;
-using Avalonia.Metadata;
-
-namespace Avalonia.Controls.Presenters
-{
-    /// <summary>
-    /// Interface for controls that present a single item of data inside a
-    /// <see cref="TemplatedControl"/> template.
-    /// </summary>
-    [NotClientImplementable]
-    public interface IContentPresenter : IPresenter
-    {
-        /// <summary>
-        /// Gets the control displayed by the presenter.
-        /// </summary>
-        Control? Child { get; }
-
-        /// <summary>
-        /// Gets or sets the content to be displayed by the presenter.
-        /// </summary>
-        object? Content { get; set; }
-    }
-}

+ 2 - 2
src/Avalonia.Controls/Presenters/IContentPresenterHost.cs

@@ -22,13 +22,13 @@ namespace Avalonia.Controls.Presenters
         IAvaloniaList<ILogical> LogicalChildren { get; }
 
         /// <summary>
-        /// Registers an <see cref="IContentPresenter"/> with a host control.
+        /// Registers an <see cref="ContentPresenter"/> with a host control.
         /// </summary>
         /// <param name="presenter">The content presenter.</param>
         /// <returns>
         /// True if the content presenter should add its child to the logical children of the
         /// host; otherwise false.
         /// </returns>
-        bool RegisterContentPresenter(IContentPresenter presenter);
+        bool RegisterContentPresenter(ContentPresenter presenter);
     }
 }

+ 0 - 20
src/Avalonia.Controls/Presenters/IPresenter.cs

@@ -1,20 +0,0 @@
-using Avalonia.Controls.Primitives;
-using Avalonia.Metadata;
-
-namespace Avalonia.Controls.Presenters
-{
-    /// <summary>
-    /// Interface for presenters such as <see cref="ContentPresenter"/> and
-    /// <see cref="ItemsPresenter"/>.
-    /// </summary>
-    /// <remarks>
-    /// A presenter is the gateway between a templated control and its content. When
-    /// a control which implements <see cref="IPresenter"/> is found in the template
-    /// of a <see cref="TemplatedControl"/> then that signals that the visual child
-    /// of the presenter is not a part of the template.
-    /// </remarks>
-    [NotClientImplementable]
-    public interface IPresenter : INamed
-    {
-    }
-}

+ 1 - 1
src/Avalonia.Controls/Presenters/ScrollContentPresenter.cs

@@ -13,7 +13,7 @@ namespace Avalonia.Controls.Presenters
     /// <summary>
     /// Presents a scrolling view of content inside a <see cref="ScrollViewer"/>.
     /// </summary>
-    public class ScrollContentPresenter : ContentPresenter, IPresenter, IScrollable, IScrollAnchorProvider
+    public class ScrollContentPresenter : ContentPresenter, IScrollable, IScrollAnchorProvider
     {
         private const double EdgeDetectionTolerance = 0.1;
 

+ 2 - 2
src/Avalonia.Controls/Primitives/HeaderedContentControl.cs

@@ -41,7 +41,7 @@ namespace Avalonia.Controls.Primitives
         /// <summary>
         /// Gets the header presenter from the control's template.
         /// </summary>
-        public IContentPresenter? HeaderPresenter
+        public ContentPresenter? HeaderPresenter
         {
             get;
             private set;
@@ -57,7 +57,7 @@ namespace Avalonia.Controls.Primitives
         }
 
         /// <inheritdoc/>
-        protected override bool RegisterContentPresenter(IContentPresenter presenter)
+        protected override bool RegisterContentPresenter(ContentPresenter presenter)
         {
             var result = base.RegisterContentPresenter(presenter);
 

+ 4 - 4
src/Avalonia.Controls/Primitives/HeaderedItemsControl.cs

@@ -56,7 +56,7 @@ namespace Avalonia.Controls.Primitives
         /// <summary>
         /// Gets the header presenter from the control's template.
         /// </summary>
-        public IContentPresenter? HeaderPresenter
+        public ContentPresenter? HeaderPresenter
         {
             get;
             private set;
@@ -77,16 +77,16 @@ namespace Avalonia.Controls.Primitives
         }
 
         /// <inheritdoc/>
-        bool IContentPresenterHost.RegisterContentPresenter(IContentPresenter presenter)
+        bool IContentPresenterHost.RegisterContentPresenter(ContentPresenter presenter)
         {
             return RegisterContentPresenter(presenter);
         }
 
         /// <summary>
-        /// Called when an <see cref="IContentPresenter"/> is registered with the control.
+        /// Called when an <see cref="ContentPresenter"/> is registered with the control.
         /// </summary>
         /// <param name="presenter">The presenter.</param>
-        protected virtual bool RegisterContentPresenter(IContentPresenter presenter)
+        protected virtual bool RegisterContentPresenter(ContentPresenter presenter)
         {
             if (presenter.Name == "PART_HeaderPresenter")
             {

+ 4 - 4
src/Avalonia.Controls/Primitives/HeaderedSelectingItemsControl.cs

@@ -56,7 +56,7 @@ namespace Avalonia.Controls.Primitives
         /// <summary>
         /// Gets the header presenter from the control's template.
         /// </summary>
-        public IContentPresenter? HeaderPresenter
+        public ContentPresenter? HeaderPresenter
         {
             get;
             private set;
@@ -66,7 +66,7 @@ namespace Avalonia.Controls.Primitives
         IAvaloniaList<ILogical> IContentPresenterHost.LogicalChildren => LogicalChildren;
 
         /// <inheritdoc/>
-        bool IContentPresenterHost.RegisterContentPresenter(IContentPresenter presenter)
+        bool IContentPresenterHost.RegisterContentPresenter(ContentPresenter presenter)
         {
             return RegisterContentPresenter(presenter);
         }
@@ -83,10 +83,10 @@ namespace Avalonia.Controls.Primitives
         }
 
         /// <summary>
-        /// Called when an <see cref="IContentPresenter"/> is registered with the control.
+        /// Called when an <see cref="ContentPresenter"/> is registered with the control.
         /// </summary>
         /// <param name="presenter">The presenter.</param>
-        protected virtual bool RegisterContentPresenter(IContentPresenter presenter)
+        protected virtual bool RegisterContentPresenter(ContentPresenter presenter)
         {
             if (presenter.Name == "PART_HeaderPresenter")
             {

+ 1 - 1
src/Avalonia.Controls/Primitives/IPopupHost.cs

@@ -52,7 +52,7 @@ namespace Avalonia.Controls.Primitives
         /// <summary>
         /// Gets the presenter from the control's template.
         /// </summary>
-        IContentPresenter? Presenter { get; }
+        ContentPresenter? Presenter { get; }
 
         /// <summary>
         /// Gets or sets whether the popup appears on top of all other windows.

+ 1 - 1
src/Avalonia.Controls/ScrollViewer.cs

@@ -644,7 +644,7 @@ namespace Avalonia.Controls
             (Presenter as IScrollAnchorProvider)?.UnregisterAnchorCandidate(element);
         }
 
-        protected override bool RegisterContentPresenter(IContentPresenter presenter)
+        protected override bool RegisterContentPresenter(ContentPresenter presenter)
         {
             _childSubscription?.Dispose();
             _childSubscription = null;

+ 1 - 1
src/Avalonia.Controls/SplitView/SplitView.cs

@@ -279,7 +279,7 @@ namespace Avalonia.Controls
             remove => RemoveHandler(PaneOpeningEvent, value);
         }
 
-        protected override bool RegisterContentPresenter(IContentPresenter presenter)
+        protected override bool RegisterContentPresenter(ContentPresenter presenter)
         {
             var result = base.RegisterContentPresenter(presenter);
 

+ 4 - 4
src/Avalonia.Controls/TabControl.cs

@@ -140,13 +140,13 @@ namespace Avalonia.Controls
 
         internal ItemsPresenter? ItemsPresenterPart { get; private set; }
 
-        internal IContentPresenter? ContentPart { get; private set; }
+        internal ContentPresenter? ContentPart { get; private set; }
 
         /// <inheritdoc/>
         IAvaloniaList<ILogical> IContentPresenterHost.LogicalChildren => LogicalChildren;
 
         /// <inheritdoc/>
-        bool IContentPresenterHost.RegisterContentPresenter(IContentPresenter presenter)
+        bool IContentPresenterHost.RegisterContentPresenter(ContentPresenter presenter)
         {
             return RegisterContentPresenter(presenter);
         }
@@ -210,10 +210,10 @@ namespace Avalonia.Controls
         }
 
         /// <summary>
-        /// Called when an <see cref="IContentPresenter"/> is registered with the control.
+        /// Called when an <see cref="ContentPresenter"/> is registered with the control.
         /// </summary>
         /// <param name="presenter">The presenter.</param>
-        protected virtual bool RegisterContentPresenter(IContentPresenter presenter)
+        protected virtual bool RegisterContentPresenter(ContentPresenter presenter)
         {
             if (presenter.Name == "PART_SelectedContentHost")
             {

+ 3 - 3
src/Avalonia.Controls/ToggleSwitch.cs

@@ -86,13 +86,13 @@ namespace Avalonia.Controls
             set { SetValue(OffContentProperty, value); }
         }
 
-        public IContentPresenter? OffContentPresenter
+        public ContentPresenter? OffContentPresenter
         {
             get;
             private set;
         }
 
-        public IContentPresenter? OnContentPresenter
+        public ContentPresenter? OnContentPresenter
         {
             get;
             private set;
@@ -142,7 +142,7 @@ namespace Avalonia.Controls
             }
         }
 
-        protected override bool RegisterContentPresenter(IContentPresenter presenter)
+        protected override bool RegisterContentPresenter(ContentPresenter presenter)
         {
             var result = base.RegisterContentPresenter(presenter);
 

+ 1 - 1
src/Avalonia.Controls/TransitioningContentControl.cs

@@ -71,7 +71,7 @@ public class TransitioningContentControl : ContentControl
         return result;
     }
 
-    protected override bool RegisterContentPresenter(IContentPresenter presenter)
+    protected override bool RegisterContentPresenter(ContentPresenter presenter)
     {
         if (!base.RegisterContentPresenter(presenter) &&
             presenter is ContentPresenter p &&

+ 18 - 18
tests/Avalonia.Controls.UnitTests/ContentControlTests.cs

@@ -24,9 +24,9 @@ namespace Avalonia.Controls.UnitTests
             target.Content = "Foo";
             target.Template = GetTemplate();
             target.ApplyTemplate();
-            ((ContentPresenter)target.Presenter).UpdateChild();
+            target.Presenter.UpdateChild();
 
-            var child = ((Visual)target).VisualChildren.Single();
+            var child = target.VisualChildren.Single();
             Assert.IsType<Border>(child);
             child = child.VisualChildren.Single();
             Assert.IsType<ContentPresenter>(child);
@@ -55,7 +55,7 @@ namespace Avalonia.Controls.UnitTests
             root.Child = target;
 
             target.ApplyTemplate();
-            ((Control)target.Presenter).ApplyTemplate();
+            target.Presenter.ApplyTemplate();
 
             foreach (Control child in target.GetTemplateChildren())
                 Assert.Equal("foo", child.Tag);
@@ -70,7 +70,7 @@ namespace Avalonia.Controls.UnitTests
             target.Template = GetTemplate();
             target.Content = child;
             target.ApplyTemplate();
-            ((ContentPresenter)target.Presenter).UpdateChild();
+            target.Presenter.UpdateChild();
 
             var contentPresenter = child.GetVisualParent<ContentPresenter>();
             Assert.Equal(target, contentPresenter.TemplatedParent);
@@ -85,7 +85,7 @@ namespace Avalonia.Controls.UnitTests
             target.Template = GetTemplate();
             target.Content = child;
             target.ApplyTemplate();
-            ((ContentPresenter)target.Presenter).UpdateChild();
+            target.Presenter.UpdateChild();
 
             Assert.Null(child.TemplatedParent);
         }
@@ -117,7 +117,7 @@ namespace Avalonia.Controls.UnitTests
             var child = new Control();
             target.Content = child;
             target.ApplyTemplate();
-            ((ContentPresenter)target.Presenter).UpdateChild();
+            target.Presenter.UpdateChild();
 
             Assert.Equal(child.Parent, target);
             Assert.Equal(child.GetLogicalParent(), target);
@@ -135,7 +135,7 @@ namespace Avalonia.Controls.UnitTests
 
             target.Content = "Foo";
             target.ApplyTemplate();
-            ((ContentPresenter)target.Presenter).UpdateChild();
+            target.Presenter.UpdateChild();
 
             var child = target.Presenter.Child;
 
@@ -152,7 +152,7 @@ namespace Avalonia.Controls.UnitTests
 
             target.Content = "Foo";
             target.ApplyTemplate();
-            ((ContentPresenter)target.Presenter).UpdateChild();
+            target.Presenter.UpdateChild();
 
             var child = target.Presenter.Child;
 
@@ -192,7 +192,7 @@ namespace Avalonia.Controls.UnitTests
             target.Template = GetTemplate();
             target.Content = child;
             target.ApplyTemplate();
-            ((ContentPresenter)target.Presenter).UpdateChild();
+            target.Presenter.UpdateChild();
 
             Assert.True(called);
         }
@@ -207,12 +207,12 @@ namespace Avalonia.Controls.UnitTests
             target.Template = GetTemplate();
             target.Content = child;
             target.ApplyTemplate();
-            ((ContentPresenter)target.Presenter).UpdateChild();
+            target.Presenter.UpdateChild();
 
             ((ILogical)target).LogicalChildren.CollectionChanged += (s, e) => called = true;
 
             target.Content = null;
-            ((ContentPresenter)target.Presenter).UpdateChild();
+            target.Presenter.UpdateChild();
 
             Assert.True(called);
         }
@@ -228,12 +228,12 @@ namespace Avalonia.Controls.UnitTests
             target.Template = GetTemplate();
             target.Content = child1;
             target.ApplyTemplate();
-            ((ContentPresenter)target.Presenter).UpdateChild();
+            target.Presenter.UpdateChild();
 
             ((ILogical)target).LogicalChildren.CollectionChanged += (s, e) => called = true;
 
             target.Content = child2;
-            ((Control)target.Presenter).ApplyTemplate();
+            target.Presenter.ApplyTemplate();
 
             Assert.True(called);
         }
@@ -245,13 +245,13 @@ namespace Avalonia.Controls.UnitTests
 
             target.Template = GetTemplate();
             target.ApplyTemplate();
-            ((ContentPresenter)target.Presenter).UpdateChild();
+            target.Presenter.UpdateChild();
 
             target.Content = "Foo";
-            ((ContentPresenter)target.Presenter).UpdateChild();
+            target.Presenter.UpdateChild();
             Assert.Equal("Foo", ((TextBlock)target.Presenter.Child).Text);
             target.Content = "Bar";
-            ((ContentPresenter)target.Presenter).UpdateChild();
+            target.Presenter.UpdateChild();
             Assert.Equal("Bar", ((TextBlock)target.Presenter.Child).Text);
         }
 
@@ -263,7 +263,7 @@ namespace Avalonia.Controls.UnitTests
             target.Template = GetTemplate();
             target.Content = "Foo";
             target.ApplyTemplate();
-            ((ContentPresenter)target.Presenter).UpdateChild();
+            target.Presenter.UpdateChild();
 
             Assert.Equal("Foo", target.Presenter.Child.DataContext);
         }
@@ -276,7 +276,7 @@ namespace Avalonia.Controls.UnitTests
             target.Template = GetTemplate();
             target.Content = new TextBlock();
             target.ApplyTemplate();
-            ((ContentPresenter)target.Presenter).UpdateChild();
+            target.Presenter.UpdateChild();
 
             Assert.Null(target.Presenter.Child.DataContext);
         }

+ 1 - 1
tests/Avalonia.Controls.UnitTests/HeaderedItemsControlTests .cs

@@ -34,7 +34,7 @@ namespace Avalonia.Controls.UnitTests
 
             target.Header = "Foo";
             target.ApplyTemplate();
-            ((ContentPresenter)target.HeaderPresenter).UpdateChild();
+            target.HeaderPresenter.UpdateChild();
 
             var child = target.HeaderPresenter.Child;
 

+ 1 - 1
tests/Avalonia.Controls.UnitTests/ListBoxTests_Single.cs

@@ -305,7 +305,7 @@ namespace Avalonia.Controls.UnitTests
             scrollViewer.ApplyTemplate();
 
             // Then make the ScrollViewer create its child.
-            ((ContentPresenter)scrollViewer.Presenter).UpdateChild();
+            scrollViewer.Presenter.UpdateChild();
 
             // Now the ItemsPresenter should be reigstered, so apply its template.
             target.Presenter.ApplyTemplate();

+ 1 - 1
tests/Avalonia.Controls.UnitTests/Presenters/ContentPresenterTests_InTemplate.cs

@@ -391,7 +391,7 @@ namespace Avalonia.Controls.UnitTests.Presenters
 
             templatedParent.ApplyTemplate();
 
-            return ((ContentPresenter)templatedParent.Presenter, templatedParent);
+            return (templatedParent.Presenter, templatedParent);
         }
 
         private class TestContentControl : ContentControl, IContentPresenterHost

+ 8 - 8
tests/Avalonia.Controls.UnitTests/TabControlTests.cs

@@ -272,28 +272,28 @@ namespace Avalonia.Controls.UnitTests
 
             ApplyTemplate(target);
 
-            ((ContentPresenter)target.ContentPart).UpdateChild();
+            target.ContentPart.UpdateChild();
             var dataContext = ((TextBlock)target.ContentPart.Child).DataContext;
             Assert.Equal(items[0], dataContext);
 
             target.SelectedIndex = 1;
-            ((ContentPresenter)target.ContentPart).UpdateChild();
+            target.ContentPart.UpdateChild();
             dataContext = ((Button)target.ContentPart.Child).DataContext;
             Assert.Equal(items[1], dataContext);
 
             target.SelectedIndex = 2;
-            ((ContentPresenter)target.ContentPart).UpdateChild();
+            target.ContentPart.UpdateChild();
             dataContext = ((TextBlock)target.ContentPart.Child).DataContext;
             Assert.Equal("Base", dataContext);
 
             target.SelectedIndex = 3;
-            ((ContentPresenter)target.ContentPart).UpdateChild();
+            target.ContentPart.UpdateChild();
             dataContext = ((TextBlock)target.ContentPart.Child).DataContext;
             Assert.Equal("Qux", dataContext);
 
             target.SelectedIndex = 4;
-            ((ContentPresenter)target.ContentPart).UpdateChild();
-            dataContext = ((Control)target.ContentPart).DataContext;
+            target.ContentPart.UpdateChild();
+            dataContext = target.ContentPart.DataContext;
             Assert.Equal("Base", dataContext);
         }
 
@@ -367,7 +367,7 @@ namespace Avalonia.Controls.UnitTests
             var root = new TestRoot(target);
 
             ApplyTemplate(target);
-            ((ContentPresenter)target.ContentPart).UpdateChild();
+            target.ContentPart.UpdateChild();
 
             var content = Assert.IsType<TextBlock>(target.ContentPart.Child);
             Assert.Equal("bar", content.Tag);
@@ -608,7 +608,7 @@ namespace Avalonia.Controls.UnitTests
 
                 tabItem.ApplyTemplate();
 
-                ((ContentPresenter)tabItem.Presenter).UpdateChild();
+                tabItem.Presenter.UpdateChild();
             }
 
             target.ContentPart.ApplyTemplate();

+ 4 - 4
tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/CompiledBindingExtensionTests.cs

@@ -472,7 +472,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
 
                 window.ApplyTemplate();
                 target.ApplyTemplate();
-                ((ContentPresenter)target.Presenter).UpdateChild();
+                target.Presenter.UpdateChild();
 
                 Assert.Equal(dataContext.StringProperty, ((TextBlock)target.Presenter.Child).Text);
             }
@@ -694,7 +694,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
 
                 window.ApplyTemplate();
                 target.ApplyTemplate();
-                ((ContentPresenter)target.Presenter).UpdateChild();
+                target.Presenter.UpdateChild();
 
                 Assert.Equal(dataContext.StringProperty, ((TextBlock)target.Presenter.Child).Text);
             }
@@ -727,7 +727,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
 
                 window.ApplyTemplate();
                 target.ApplyTemplate();
-                ((ContentPresenter)target.Presenter).UpdateChild();
+                target.Presenter.UpdateChild();
 
                 Assert.Equal(dataContext.StringProperty, ((TextBlock)target.Presenter.Child).Text);
             }
@@ -760,7 +760,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
 
                 window.ApplyTemplate();
                 target.ApplyTemplate();
-                ((ContentPresenter)target.Presenter).UpdateChild();
+                target.Presenter.UpdateChild();
 
                 Assert.Equal(dataContext.StringProperty, ((TextBlock)target.Presenter.Child).Text);
             }

+ 6 - 6
tests/Avalonia.Markup.Xaml.UnitTests/Xaml/ControlTemplateTests.cs

@@ -74,7 +74,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
                 window.ApplyTemplate();
                 button.ApplyTemplate();
 
-                var presenter = (ContentPresenter)button.Presenter;
+                var presenter = button.Presenter;
                 Assert.Equal(Brushes.Red, presenter.Background);
 
                 var diagnostic = presenter.GetDiagnostic(Button.BackgroundProperty);
@@ -108,7 +108,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
                 window.ApplyTemplate();
                 button.ApplyTemplate();
 
-                var presenter = (ContentPresenter)button.Presenter;
+                var presenter = button.Presenter;
                 Assert.Equal(Brushes.Red, presenter.Background);
 
                 var diagnostic = presenter.GetDiagnostic(Button.BackgroundProperty);
@@ -139,7 +139,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
                 window.ApplyTemplate();
                 button.ApplyTemplate();
 
-                var presenter = (ContentPresenter)button.Presenter;
+                var presenter = button.Presenter;
                 Assert.Equal(Dock.Top, DockPanel.GetDock(presenter));
 
                 var diagnostic = presenter.GetDiagnostic(DockPanel.DockProperty);
@@ -173,7 +173,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
                 window.ApplyTemplate();
                 button.ApplyTemplate();
 
-                var presenter = (ContentPresenter)button.Presenter;
+                var presenter = button.Presenter;
                 Assert.Equal(Brushes.Red, presenter.Background);
 
                 var diagnostic = presenter.GetDiagnostic(Button.BackgroundProperty);
@@ -207,7 +207,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
                 window.ApplyTemplate();
                 button.ApplyTemplate();
 
-                var presenter = (ContentPresenter)button.Presenter;
+                var presenter = button.Presenter;
                 Assert.Equal(Brushes.Red, presenter.Background);
 
                 var diagnostic = presenter.GetDiagnostic(Button.BackgroundProperty);
@@ -238,7 +238,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
                 window.ApplyTemplate();
                 button.ApplyTemplate();
 
-                var presenter = (ContentPresenter)button.Presenter;
+                var presenter = button.Presenter;
                 Assert.Equal("Foo", presenter.Content);
 
                 var diagnostic = presenter.GetDiagnostic(ContentPresenter.ContentProperty);

+ 7 - 7
tests/Avalonia.Markup.Xaml.UnitTests/Xaml/DataTemplateTests.cs

@@ -32,7 +32,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
 
                 window.ApplyTemplate();
                 target.ApplyTemplate();
-                ((ContentPresenter)target.Presenter).UpdateChild();
+                target.Presenter.UpdateChild();
 
                 Assert.Null(target.Presenter.Child);
             }
@@ -59,7 +59,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
 
                 window.ApplyTemplate();
                 target.ApplyTemplate();
-                ((ContentPresenter)target.Presenter).UpdateChild();
+                target.Presenter.UpdateChild();
 
                 Assert.IsType<Canvas>(target.Presenter.Child);
             }
@@ -117,7 +117,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
                 
                 window.ApplyTemplate();
                 target.ApplyTemplate();
-                ((ContentPresenter)target.Presenter).UpdateChild();
+                target.Presenter.UpdateChild();
                 
                 Assert.Equal(typeof(string), template.DataType);
                 Assert.IsType<Canvas>(target.Presenter.Child);
@@ -145,7 +145,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
 
                 window.ApplyTemplate();
                 target.ApplyTemplate();
-                ((ContentPresenter)target.Presenter).UpdateChild();
+                target.Presenter.UpdateChild();
 
                 Assert.IsType<Canvas>(target.Presenter.Child);
             }
@@ -175,7 +175,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
                 
                 window.ApplyTemplate();
                 target.ApplyTemplate();
-                ((ContentPresenter)target.Presenter).UpdateChild();
+                target.Presenter.UpdateChild();
 
                 var dataTemplate = (CustomDataTemplate)target.ContentTemplate;
                 Assert.Null(dataTemplate.FancyDataType);
@@ -217,11 +217,11 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
 
                 window.ApplyTemplate();
                 target.ApplyTemplate();
-                ((ContentPresenter)target.Presenter).UpdateChild();
+                target.Presenter.UpdateChild();
 
                 var canvas = (Canvas)target.Presenter.Child;
                 Assert.Same(viewModel, target.DataContext);
-                Assert.Same(viewModel.Child, ((Control)target.Presenter).DataContext);
+                Assert.Same(viewModel.Child, target.Presenter.DataContext);
                 Assert.Same(viewModel.Child.Child, canvas.DataContext);
             }
         }

+ 1 - 1
tests/Avalonia.ReactiveUI.UnitTests/TransitioningContentControlTest.cs

@@ -22,7 +22,7 @@ namespace Avalonia.ReactiveUI.UnitTests
                 Content = "Foo"
             };
             target.ApplyTemplate();
-            ((ContentPresenter)target.Presenter).UpdateChild();
+            target.Presenter.UpdateChild();
 
             var child = ((Visual)target).GetVisualChildren().Single();
             Assert.IsType<Border>(child);

+ 0 - 13
tests/Avalonia.UnitTests/TestExtensions.cs

@@ -1,13 +0,0 @@
-using System;
-using Avalonia.Controls.Presenters;
-using Avalonia.Controls.Primitives;
-using Avalonia.Layout;
-using Avalonia.Styling;
-
-namespace Avalonia.UnitTests
-{
-    public static class TestExtensions
-    {
-        public static void ApplyTemplate(this IContentPresenter presenter) => ((Layoutable)presenter).ApplyTemplate();
-    }
-}