Browse Source

Added few more failing tests for ContentPresenter for LogicalChildren outside template

pull/568/head
donandren 10 years ago
parent
commit
e8be30ac47
  1. 86
      tests/Avalonia.Controls.UnitTests/Presenters/ContentPresenterTests.cs

86
tests/Avalonia.Controls.UnitTests/Presenters/ContentPresenterTests.cs

@ -109,6 +109,20 @@ namespace Avalonia.Controls.UnitTests.Presenters
Assert.Same(target, content.Parent);
}
[Fact]
public void Should_Add_Child_To_Own_LogicalChildren_Outside_Template()
{
var content = new Border();
var target = new ContentPresenter { Content = content };
target.UpdateChild();
var logicalChildren = target.GetLogicalChildren();
Assert.Equal(1, logicalChildren.Count());
Assert.Equal(content, logicalChildren.First());
}
[Fact]
public void Adding_To_Logical_Tree_Should_Reevaluate_DataTemplates()
{
@ -181,7 +195,7 @@ namespace Avalonia.Controls.UnitTests.Presenters
}
[Fact]
public void Should_Raise_DetachedFromLogicalTree_On_Content_Changed()
public void Should_Raise_DetachedFromLogicalTree_On_Content_Changed_OutsideTemplate()
{
var target = new ContentPresenter
{
@ -193,8 +207,6 @@ namespace Avalonia.Controls.UnitTests.Presenters
parentMock.As<IContentPresenterHost>();
parentMock.As<IStyleRoot>();
// target.SetValue(ContentPresenter.TemplatedParentProperty, parentMock.Object);
(target as ISetLogicalParent).SetParent(parentMock.Object);
target.Content = "foo";
@ -222,7 +234,7 @@ namespace Avalonia.Controls.UnitTests.Presenters
}
[Fact]
public void Should_Raise_DetachedFromLogicalTree_In_ContentControl_On_Content_Changed()
public void Should_Raise_DetachedFromLogicalTree_In_ContentControl_On_Content_Changed_OutsideTemplate()
{
var contentControl = new ContentControl
{
@ -269,6 +281,72 @@ namespace Avalonia.Controls.UnitTests.Presenters
Assert.True(foodetached);
}
[Fact]
public void Should_Raise_DetachedFromLogicalTree_On_Detached_OutsideTemplate()
{
var target = new ContentPresenter
{
ContentTemplate =
new FuncDataTemplate<string>(t => new ContentControl() { Content = t }, false)
};
var parentMock = new Mock<Control>();
parentMock.As<IContentPresenterHost>();
parentMock.As<IStyleRoot>();
(target as ISetLogicalParent).SetParent(parentMock.Object);
target.Content = "foo";
target.UpdateChild();
var foo = target.Child as ContentControl;
bool foodetached = false;
Assert.NotNull(foo);
Assert.Equal("foo", foo.Content);
foo.DetachedFromLogicalTree += delegate { foodetached = true; };
(target as ISetLogicalParent).SetParent(null);
Assert.False((foo as IControl).IsAttachedToLogicalTree);
Assert.True(foodetached);
}
[Fact]
public void Should_Remove_Old_Child_From_LogicalChildren_On_ContentChanged_OutsideTemplate()
{
var target = new ContentPresenter
{
ContentTemplate =
new FuncDataTemplate<string>(t => new ContentControl() { Content = t }, false)
};
target.Content = "foo";
target.UpdateChild();
var foo = target.Child as ContentControl;
Assert.NotNull(foo);
var logicalChildren = target.GetLogicalChildren();
Assert.Equal(1, logicalChildren.Count());
target.Content = "bar";
target.UpdateChild();
Assert.Equal(null, foo.Parent);
logicalChildren = target.GetLogicalChildren();
Assert.Equal(1, logicalChildren.Count());
Assert.NotEqual(foo, logicalChildren.First());
}
private class TestContentControl : ContentControl
{
public IControl Child { get; set; }

Loading…
Cancel
Save