Browse Source
Add tests to check that template values are assigned with Style priority and move other XAML control template tests alongside it in a new test class.pull/7679/head
2 changed files with 144 additions and 65 deletions
@ -0,0 +1,143 @@ |
|||||
|
using Avalonia.Controls; |
||||
|
using Avalonia.Controls.Presenters; |
||||
|
using Avalonia.Data; |
||||
|
using Avalonia.Diagnostics; |
||||
|
using Avalonia.Markup.Xaml.Templates; |
||||
|
using Avalonia.Media; |
||||
|
using Avalonia.UnitTests; |
||||
|
using Xunit; |
||||
|
|
||||
|
namespace Avalonia.Markup.Xaml.UnitTests.Xaml |
||||
|
{ |
||||
|
public class ControlTemplateTests : XamlTestBase |
||||
|
{ |
||||
|
[Fact] |
||||
|
public void Inline_ControlTemplate_Values_Are_Set_With_Style_Priority() |
||||
|
{ |
||||
|
using (UnitTestApplication.Start(TestServices.StyledWindow)) |
||||
|
{ |
||||
|
var xaml = @"
|
||||
|
<Window xmlns='https://github.com/avaloniaui'
|
||||
|
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'>
|
||||
|
<Button> |
||||
|
<Button.Template> |
||||
|
<ControlTemplate> |
||||
|
<ContentPresenter Name='PART_ContentPresenter' |
||||
|
Background='Red'/> |
||||
|
</ControlTemplate> |
||||
|
</Button.Template> |
||||
|
</Button> |
||||
|
</Window>";
|
||||
|
var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml); |
||||
|
var button = (Button)window.Content; |
||||
|
|
||||
|
window.ApplyTemplate(); |
||||
|
button.ApplyTemplate(); |
||||
|
|
||||
|
var presenter = (ContentPresenter)button.Presenter; |
||||
|
Assert.Equal(Brushes.Red, presenter.Background); |
||||
|
|
||||
|
var diagnostic = presenter.GetDiagnostic(Button.BackgroundProperty); |
||||
|
Assert.Equal(BindingPriority.Style, diagnostic.Priority); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void Style_ControlTemplate_Values_Are_Set_With_Style_Priority() |
||||
|
{ |
||||
|
using (UnitTestApplication.Start(TestServices.StyledWindow)) |
||||
|
{ |
||||
|
var xaml = @"
|
||||
|
<Window xmlns='https://github.com/avaloniaui'
|
||||
|
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'>
|
||||
|
<Window.Styles> |
||||
|
<Style Selector='Button'> |
||||
|
<Setter Property='Template'> |
||||
|
<ControlTemplate> |
||||
|
<ContentPresenter Name='PART_ContentPresenter' |
||||
|
Background='Red'/> |
||||
|
</ControlTemplate> |
||||
|
</Setter> |
||||
|
</Style> |
||||
|
</Window.Styles> |
||||
|
<Button/> |
||||
|
</Window>";
|
||||
|
var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml); |
||||
|
var button = (Button)window.Content; |
||||
|
|
||||
|
window.ApplyTemplate(); |
||||
|
button.ApplyTemplate(); |
||||
|
|
||||
|
var presenter = (ContentPresenter)button.Presenter; |
||||
|
Assert.Equal(Brushes.Red, presenter.Background); |
||||
|
|
||||
|
var diagnostic = presenter.GetDiagnostic(Button.BackgroundProperty); |
||||
|
Assert.Equal(BindingPriority.Style, diagnostic.Priority); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void ControlTemplate_With_Nested_Child_Is_Operational() |
||||
|
{ |
||||
|
var xaml = @"
|
||||
|
<ControlTemplate xmlns='https://github.com/avaloniaui'>
|
||||
|
<ContentControl Name='parent'> |
||||
|
<ContentControl Name='child' /> |
||||
|
</ContentControl> |
||||
|
</ControlTemplate> |
||||
|
";
|
||||
|
var template = AvaloniaRuntimeXamlLoader.Parse<ControlTemplate>(xaml); |
||||
|
|
||||
|
var parent = (ContentControl)template.Build(new ContentControl()).Control; |
||||
|
|
||||
|
Assert.Equal("parent", parent.Name); |
||||
|
|
||||
|
var child = parent.Content as ContentControl; |
||||
|
|
||||
|
Assert.NotNull(child); |
||||
|
|
||||
|
Assert.Equal("child", child.Name); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void ControlTemplate_With_TargetType_Is_Operational() |
||||
|
{ |
||||
|
var xaml = @"
|
||||
|
<ControlTemplate xmlns='https://github.com/avaloniaui'
|
||||
|
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
|
||||
|
TargetType='{x:Type ContentControl}'> |
||||
|
<ContentPresenter Content='{TemplateBinding Content}' /> |
||||
|
</ControlTemplate> |
||||
|
";
|
||||
|
var template = AvaloniaRuntimeXamlLoader.Parse<ControlTemplate>(xaml); |
||||
|
|
||||
|
Assert.Equal(typeof(ContentControl), template.TargetType); |
||||
|
|
||||
|
Assert.IsType(typeof(ContentPresenter), template.Build(new ContentControl()).Control); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void ControlTemplate_With_Panel_Children_Are_Added() |
||||
|
{ |
||||
|
var xaml = @"
|
||||
|
<ControlTemplate xmlns='https://github.com/avaloniaui'>
|
||||
|
<Panel Name='panel'> |
||||
|
<ContentControl Name='Foo' /> |
||||
|
<ContentControl Name='Bar' /> |
||||
|
</Panel> |
||||
|
</ControlTemplate> |
||||
|
";
|
||||
|
var template = AvaloniaRuntimeXamlLoader.Parse<ControlTemplate>(xaml); |
||||
|
|
||||
|
var panel = (Panel)template.Build(new ContentControl()).Control; |
||||
|
|
||||
|
Assert.Equal(2, panel.Children.Count); |
||||
|
|
||||
|
var foo = panel.Children[0]; |
||||
|
var bar = panel.Children[1]; |
||||
|
|
||||
|
Assert.Equal("Foo", foo.Name); |
||||
|
Assert.Equal("Bar", bar.Name); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue