Browse Source

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

Remove presenter interfaces
pull/11498/head
Max Katz 3 years ago
committed by GitHub
parent
commit
b2b908c6e8
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 10
      src/Avalonia.Controls/ContentControl.cs
  2. 2
      src/Avalonia.Controls/Presenters/ContentPresenter.cs
  3. 23
      src/Avalonia.Controls/Presenters/IContentPresenter.cs
  4. 4
      src/Avalonia.Controls/Presenters/IContentPresenterHost.cs
  5. 20
      src/Avalonia.Controls/Presenters/IPresenter.cs
  6. 2
      src/Avalonia.Controls/Presenters/ScrollContentPresenter.cs
  7. 4
      src/Avalonia.Controls/Primitives/HeaderedContentControl.cs
  8. 8
      src/Avalonia.Controls/Primitives/HeaderedItemsControl.cs
  9. 8
      src/Avalonia.Controls/Primitives/HeaderedSelectingItemsControl.cs
  10. 2
      src/Avalonia.Controls/Primitives/IPopupHost.cs
  11. 2
      src/Avalonia.Controls/ScrollViewer.cs
  12. 2
      src/Avalonia.Controls/SplitView/SplitView.cs
  13. 8
      src/Avalonia.Controls/TabControl.cs
  14. 6
      src/Avalonia.Controls/ToggleSwitch.cs
  15. 2
      src/Avalonia.Controls/TransitioningContentControl.cs
  16. 36
      tests/Avalonia.Controls.UnitTests/ContentControlTests.cs
  17. 2
      tests/Avalonia.Controls.UnitTests/HeaderedItemsControlTests .cs
  18. 2
      tests/Avalonia.Controls.UnitTests/ListBoxTests_Single.cs
  19. 2
      tests/Avalonia.Controls.UnitTests/Presenters/ContentPresenterTests_InTemplate.cs
  20. 16
      tests/Avalonia.Controls.UnitTests/TabControlTests.cs
  21. 8
      tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/CompiledBindingExtensionTests.cs
  22. 12
      tests/Avalonia.Markup.Xaml.UnitTests/Xaml/ControlTemplateTests.cs
  23. 14
      tests/Avalonia.Markup.Xaml.UnitTests/Xaml/DataTemplateTests.cs
  24. 2
      tests/Avalonia.ReactiveUI.UnitTests/TransitioningContentControlTest.cs
  25. 13
      tests/Avalonia.UnitTests/TestExtensions.cs

10
src/Avalonia.Controls/ContentControl.cs

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

2
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. /// Presents a single item of data inside a <see cref="TemplatedControl"/> template.
/// </summary> /// </summary>
[PseudoClasses(":empty")] [PseudoClasses(":empty")]
public class ContentPresenter : Control, IContentPresenter public class ContentPresenter : Control
{ {
/// <summary> /// <summary>
/// Defines the <see cref="Background"/> property. /// Defines the <see cref="Background"/> property.

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; }
}
}

4
src/Avalonia.Controls/Presenters/IContentPresenterHost.cs

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

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
{
}
}

2
src/Avalonia.Controls/Presenters/ScrollContentPresenter.cs

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

4
src/Avalonia.Controls/Primitives/HeaderedContentControl.cs

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

8
src/Avalonia.Controls/Primitives/HeaderedItemsControl.cs

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

8
src/Avalonia.Controls/Primitives/HeaderedSelectingItemsControl.cs

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

2
src/Avalonia.Controls/Primitives/IPopupHost.cs

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

2
src/Avalonia.Controls/ScrollViewer.cs

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

2
src/Avalonia.Controls/SplitView/SplitView.cs

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

8
src/Avalonia.Controls/TabControl.cs

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

6
src/Avalonia.Controls/ToggleSwitch.cs

@ -86,13 +86,13 @@ namespace Avalonia.Controls
set { SetValue(OffContentProperty, value); } set { SetValue(OffContentProperty, value); }
} }
public IContentPresenter? OffContentPresenter public ContentPresenter? OffContentPresenter
{ {
get; get;
private set; private set;
} }
public IContentPresenter? OnContentPresenter public ContentPresenter? OnContentPresenter
{ {
get; get;
private set; 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); var result = base.RegisterContentPresenter(presenter);

2
src/Avalonia.Controls/TransitioningContentControl.cs

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

36
tests/Avalonia.Controls.UnitTests/ContentControlTests.cs

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

2
tests/Avalonia.Controls.UnitTests/HeaderedItemsControlTests .cs

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

2
tests/Avalonia.Controls.UnitTests/ListBoxTests_Single.cs

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

2
tests/Avalonia.Controls.UnitTests/Presenters/ContentPresenterTests_InTemplate.cs

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

16
tests/Avalonia.Controls.UnitTests/TabControlTests.cs

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

8
tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/CompiledBindingExtensionTests.cs

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

12
tests/Avalonia.Markup.Xaml.UnitTests/Xaml/ControlTemplateTests.cs

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

14
tests/Avalonia.Markup.Xaml.UnitTests/Xaml/DataTemplateTests.cs

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

2
tests/Avalonia.ReactiveUI.UnitTests/TransitioningContentControlTest.cs

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

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();
}
}
Loading…
Cancel
Save