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