Browse Source

Add various tests for attached property syntax.

While investigating #7925, I created a bunch of tests that describe how attached property syntax should work, cross-referencing with WPF. Most tests are passing but one failure.
fixes/7925-attached-property-syntax
Steven Kirk 4 years ago
parent
commit
b4736ee71d
  1. 92
      tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BasicTests.cs
  2. 131
      tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleTests.cs

92
tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BasicTests.cs

@ -115,7 +115,97 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
Assert.Equal("Foo", ToolTip.GetTip(target));
}
[Fact]
public void Can_Use_Attached_Property_Syntax_On_NonAttached_Property()
{
using (UnitTestApplication.Start(TestServices.StyledWindow))
{
var xaml = @"
<Window xmlns='https://github.com/avaloniaui'
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
xmlns:local='clr-namespace:Avalonia.Markup.Xaml.UnitTests.Xaml;assembly=Avalonia.Markup.Xaml.UnitTests'>
<Border Border.Background='Red'/>
</Window>";
var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
var border = (Border)window.Content;
window.ApplyTemplate();
Assert.Equal(Colors.Red, ((ISolidColorBrush)border.Background).Color);
}
}
[Fact]
public void Can_Use_Attached_Property_Syntax_On_Attached_AddOwnered_Property()
{
using (UnitTestApplication.Start(TestServices.StyledWindow))
{
var xaml = @"
<Window xmlns='https://github.com/avaloniaui'
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
xmlns:local='clr-namespace:Avalonia.Markup.Xaml.UnitTests.Xaml;assembly=Avalonia.Markup.Xaml.UnitTests'>
<TextBlock TextBlock.FontSize='48'/>
</Window>";
var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
var textBlock = (TextBlock)window.Content;
window.ApplyTemplate();
Assert.Equal(48, textBlock.FontSize);
}
}
[Fact]
public void Can_Use_Attached_Property_Syntax_On_Attached_AddOwnered_Property_2()
{
using (UnitTestApplication.Start(TestServices.StyledWindow))
{
var xaml = @"
<Window xmlns='https://github.com/avaloniaui'
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
xmlns:local='clr-namespace:Avalonia.Markup.Xaml.UnitTests.Xaml;assembly=Avalonia.Markup.Xaml.UnitTests'>
<TextBlock TextElement.FontSize='48'/>
</Window>";
var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
var textBlock = (TextBlock)window.Content;
window.ApplyTemplate();
Assert.Equal(48, textBlock.FontSize);
}
}
[Fact]
public void Cannot_Use_Attached_Property_Syntax_From_Another_Control_On_Non_Attached_Property()
{
using (UnitTestApplication.Start(TestServices.StyledWindow))
{
var xaml = @"
<Window xmlns='https://github.com/avaloniaui'
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
xmlns:local='clr-namespace:Avalonia.Markup.Xaml.UnitTests.Xaml;assembly=Avalonia.Markup.Xaml.UnitTests'>
<TextBlock TextBox.FontSize='48'/>
</Window>";
Assert.ThrowsAny<Exception>(() => AvaloniaRuntimeXamlLoader.Load(xaml));
}
}
[Fact]
public void Cannot_Use_Attached_Property_Syntax_From_Another_Control_On_Non_Attached_Property_With_Markup_Extension()
{
using (UnitTestApplication.Start(TestServices.StyledWindow))
{
var xaml = @"
<Window xmlns='https://github.com/avaloniaui'
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
xmlns:local='clr-namespace:Avalonia.Markup.Xaml.UnitTests.Xaml;assembly=Avalonia.Markup.Xaml.UnitTests'>
<TextBlock TextBox.FontSize='{DynamicResource Size}'/>
</Window>";
Assert.ThrowsAny<Exception>(() => AvaloniaRuntimeXamlLoader.Load(xaml));
}
}
[Fact]
public void NonExistent_Property_Throws()
{

131
tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleTests.cs

@ -1,8 +1,10 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Xml;
using Avalonia.Controls;
using Avalonia.Controls.Presenters;
using Avalonia.Markup.Xaml.Styling;
using Avalonia.Markup.Xaml.Templates;
using Avalonia.Media;
@ -218,6 +220,135 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
}
}
[Fact]
public void Setter_Can_Use_Attached_Property_Syntax_On_NonAttached_Property()
{
using (UnitTestApplication.Start(TestServices.StyledWindow))
{
var xaml = @"
<Window xmlns='https://github.com/avaloniaui'
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
xmlns:local='clr-namespace:Avalonia.Markup.Xaml.UnitTests.Xaml;assembly=Avalonia.Markup.Xaml.UnitTests'>
<Window.Styles>
<Style Selector='Border'>
<Setter Property='Border.Background' Value='Red'/>
</Style>
</Window.Styles>
<Border/>
</Window>";
var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
var border = (Border)window.Content;
window.ApplyTemplate();
Assert.Equal(Colors.Red, ((ISolidColorBrush)border.Background).Color);
}
}
[Fact]
public void Setter_Can_Use_Attached_Property_Syntax_On_Attached_AddOwnered_Property()
{
using (UnitTestApplication.Start(TestServices.StyledWindow))
{
var xaml = @"
<Window xmlns='https://github.com/avaloniaui'
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
xmlns:local='clr-namespace:Avalonia.Markup.Xaml.UnitTests.Xaml;assembly=Avalonia.Markup.Xaml.UnitTests'>
<Window.Styles>
<Style Selector='TextBlock'>
<Setter Property='TextBlock.FontSize' Value='48'/>
</Style>
</Window.Styles>
<TextBlock/>
</Window>";
var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
var textBlock = (TextBlock)window.Content;
window.ApplyTemplate();
Assert.Equal(48, textBlock.FontSize);
}
}
[Fact]
public void Setter_Can_Use_Attached_Property_Syntax_On_Attached_AddOwnered_Property_2()
{
using (UnitTestApplication.Start(TestServices.StyledWindow))
{
var xaml = @"
<Window xmlns='https://github.com/avaloniaui'
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
xmlns:local='clr-namespace:Avalonia.Markup.Xaml.UnitTests.Xaml;assembly=Avalonia.Markup.Xaml.UnitTests'>
<Window.Styles>
<Style Selector='TextBlock'>
<Setter Property='TextElement.FontSize' Value='48'/>
</Style>
</Window.Styles>
<TextBlock/>
</Window>";
var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
var textBlock = (TextBlock)window.Content;
window.ApplyTemplate();
Assert.Equal(48, textBlock.FontSize);
}
}
[Fact]
public void Binding_Setter_Can_Use_NonAttached_Property_Syntax_On_Attached_AddOwnered_Property_3()
{
using (UnitTestApplication.Start(TestServices.StyledWindow))
{
var xaml = @"
<Window xmlns='https://github.com/avaloniaui'
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
xmlns:local='clr-namespace:Avalonia.Markup.Xaml.UnitTests.Xaml;assembly=Avalonia.Markup.Xaml.UnitTests'>
<Window.Styles>
<Style Selector='ContentPresenter'>
<Setter Property='Foreground' Value='{Binding Brush}'/>
</Style>
</Window.Styles>
<ContentPresenter/>
</Window>";
var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
var contentPresenter = (ContentPresenter)window.Content;
window.DataContext = new { Brush = Brushes.Red };
window.ApplyTemplate();
Assert.Equal(Colors.Red, ((ISolidColorBrush)contentPresenter.Foreground).Color);
}
}
[Fact]
public void Setter_Can_Use_Attached_Property_Syntax_From_Another_Control_On_Non_Attached_Property()
{
// This is a weird one, but it follows WPF. Even though <TextBlock TextBox.FontSize="48"/>
// is an error in WPF, you can set the same property in a style and it works (because in
// the end they're actually the same property).
using (UnitTestApplication.Start(TestServices.StyledWindow))
{
var xaml = @"
<Window xmlns='https://github.com/avaloniaui'
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
xmlns:local='clr-namespace:Avalonia.Markup.Xaml.UnitTests.Xaml;assembly=Avalonia.Markup.Xaml.UnitTests'>
<Window.Styles>
<Style Selector='TextBlock'>
<Setter Property='TextBox.FontSize' Value='48'/>
</Style>
</Window.Styles>
<TextBlock/>
</Window>";
var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
var textBlock = (TextBlock)window.Content;
window.ApplyTemplate();
Assert.Equal(48, textBlock.FontSize);
}
}
[Fact(Skip = "The animation system currently needs to be able to set any property on any object")]
public void Disallows_Setting_Non_Registered_Property()
{

Loading…
Cancel
Save