|
|
|
@ -2,6 +2,8 @@ |
|
|
|
// Licensed under the MIT license. See licence.md file in the project root for full license information.
|
|
|
|
|
|
|
|
using System; |
|
|
|
using Avalonia.Controls.Presenters; |
|
|
|
using Avalonia.Controls.Templates; |
|
|
|
using Avalonia.Styling; |
|
|
|
using Avalonia.UnitTests; |
|
|
|
using Xunit; |
|
|
|
@ -142,5 +144,112 @@ namespace Avalonia.Controls.UnitTests |
|
|
|
|
|
|
|
Assert.Equal("foo-value", target.FindResource("foo")); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Adding_Resource_Should_Call_Raise_ResourceChanged_On_Logical_Children() |
|
|
|
{ |
|
|
|
Border child; |
|
|
|
|
|
|
|
var target = new ContentControl |
|
|
|
{ |
|
|
|
Content = child = new Border(), |
|
|
|
Template = ContentControlTemplate(), |
|
|
|
}; |
|
|
|
|
|
|
|
var raisedOnTarget = false; |
|
|
|
var raisedOnPresenter = false; |
|
|
|
var raisedOnChild = false; |
|
|
|
|
|
|
|
target.Measure(Size.Infinity); |
|
|
|
target.ResourcesChanged += (_, __) => raisedOnTarget = true; |
|
|
|
target.Presenter.ResourcesChanged += (_, __) => raisedOnPresenter = true; |
|
|
|
child.ResourcesChanged += (_, __) => raisedOnChild = true; |
|
|
|
|
|
|
|
target.Resources.Add("foo", "bar"); |
|
|
|
|
|
|
|
Assert.True(raisedOnTarget); |
|
|
|
Assert.False(raisedOnPresenter); |
|
|
|
Assert.True(raisedOnChild); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Adding_Resource_To_Styles_Should_Raise_ResourceChanged() |
|
|
|
{ |
|
|
|
var target = new Decorator(); |
|
|
|
var raised = false; |
|
|
|
|
|
|
|
target.ResourcesChanged += (_, __) => raised = true; |
|
|
|
target.Styles.Resources.Add("foo", "bar"); |
|
|
|
|
|
|
|
Assert.True(raised); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Adding_Resource_To_Nested_Style_Should_Raise_ResourceChanged() |
|
|
|
{ |
|
|
|
Style style; |
|
|
|
var target = new Decorator |
|
|
|
{ |
|
|
|
Styles = |
|
|
|
{ |
|
|
|
(style = new Style()), |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
var raised = false; |
|
|
|
|
|
|
|
target.ResourcesChanged += (_, __) => raised = true; |
|
|
|
style.Resources.Add("foo", "bar"); |
|
|
|
|
|
|
|
Assert.True(raised); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Adding_Style_With_Resource_Should_Raise_ResourceChanged() |
|
|
|
{ |
|
|
|
Style style = new Style |
|
|
|
{ |
|
|
|
Resources = { { "foo", "bar" } }, |
|
|
|
}; |
|
|
|
|
|
|
|
var target = new Decorator(); |
|
|
|
var raised = false; |
|
|
|
|
|
|
|
target.ResourcesChanged += (_, __) => raised = true; |
|
|
|
target.Styles.Add(style); |
|
|
|
|
|
|
|
Assert.True(raised); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Removing_Style_With_Resource_Should_Raise_ResourceChanged() |
|
|
|
{ |
|
|
|
var target = new Decorator |
|
|
|
{ |
|
|
|
Styles = |
|
|
|
{ |
|
|
|
new Style |
|
|
|
{ |
|
|
|
Resources = { { "foo", "bar" } }, |
|
|
|
} |
|
|
|
} |
|
|
|
}; |
|
|
|
var raised = false; |
|
|
|
|
|
|
|
target.ResourcesChanged += (_, __) => raised = true; |
|
|
|
target.Styles.Clear(); |
|
|
|
|
|
|
|
Assert.True(raised); |
|
|
|
} |
|
|
|
|
|
|
|
private IControlTemplate ContentControlTemplate() |
|
|
|
{ |
|
|
|
return new FuncControlTemplate<ContentControl>(x => |
|
|
|
new ContentPresenter |
|
|
|
{ |
|
|
|
Name = "PART_ContentPresenter", |
|
|
|
[!ContentPresenter.ContentProperty] = x[!ContentControl.ContentProperty], |
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|