// Copyright (c) The Avalonia Project. All rights reserved. // Licensed under the MIT license. See licence.md file in the project root for full license information. using System.Xml; using Avalonia.Controls; using Avalonia.Markup.Data; using Avalonia.Markup.Xaml.Styling; using Avalonia.Markup.Xaml.Templates; using Avalonia.Media; using Avalonia.Styling; using Avalonia.UnitTests; using Xunit; namespace Avalonia.Markup.Xaml.UnitTests.Xaml { public class StyleTests : XamlTestBase { [Fact] public void Color_Can_Be_Added_To_Style_Resources() { using (UnitTestApplication.Start(TestServices.MockPlatformWrapper)) { var xaml = @" "; var loader = new AvaloniaXamlLoader(); var userControl = (UserControl)loader.Load(xaml); var color = (Color)((Style)userControl.Styles[0]).Resources["color"]; Assert.Equal(0xff506070, color.ToUint32()); } } [Fact] public void DataTemplate_Can_Be_Added_To_Style_Resources() { using (UnitTestApplication.Start(TestServices.MockPlatformWrapper)) { var xaml = @" "; var loader = new AvaloniaXamlLoader(); var userControl = (UserControl)loader.Load(xaml); var dataTemplate = (DataTemplate)((Style)userControl.Styles[0]).Resources["dataTemplate"]; Assert.NotNull(dataTemplate); } } [Fact] public void ControlTemplate_Can_Be_Added_To_Style_Resources() { using (UnitTestApplication.Start(TestServices.MockPlatformWrapper)) { var xaml = @" "; var loader = new AvaloniaXamlLoader(); var userControl = (UserControl)loader.Load(xaml); var controlTemplate = (ControlTemplate)((Style)userControl.Styles[0]).Resources["controlTemplate"]; Assert.NotNull(controlTemplate); Assert.Equal(typeof(Button), controlTemplate.TargetType); } } [Fact] public void SolidColorBrush_Can_Be_Added_To_Style_Resources() { using (UnitTestApplication.Start(TestServices.MockPlatformWrapper)) { var xaml = @" "; var loader = new AvaloniaXamlLoader(); var userControl = (UserControl)loader.Load(xaml); var brush = (SolidColorBrush)((Style)userControl.Styles[0]).Resources["brush"]; Assert.Equal(0xff506070, brush.Color.ToUint32()); } } [Fact] public void StyleInclude_Is_Built() { using (UnitTestApplication.Start(TestServices.StyledWindow .With(theme: () => new Styles()))) { var xaml = @" "; var window = AvaloniaXamlLoader.Parse(xaml); Assert.Single(window.Styles); var styleInclude = window.Styles[0] as StyleInclude; Assert.NotNull(styleInclude); Assert.NotNull(styleInclude.Source); Assert.NotNull(styleInclude.Loaded); } } [Fact] public void Setter_Can_Contain_Template() { using (UnitTestApplication.Start(TestServices.StyledWindow)) { var xaml = @" "; var loader = new AvaloniaXamlLoader(); var window = (Window)loader.Load(xaml); var target = window.Find("target"); Assert.IsType(target.Content); Assert.Equal("Hello World!", ((TextBlock)target.Content).Text); } } [Fact] public void Setter_Value_Is_Bound_Directly_If_The_Target_Type_Derives_From_ITemplate() { using (UnitTestApplication.Start(TestServices.StyledWindow)) { var xaml = @" "; var loader = new AvaloniaXamlLoader(); var window = (Window)loader.Load(xaml); var target = window.Find("target"); Assert.NotNull(target.FocusAdorner); } } [Fact] public void Setter_Can_Set_Attached_Property() { using (UnitTestApplication.Start(TestServices.StyledWindow)) { var xaml = @" "; var loader = new AvaloniaXamlLoader(); var window = (Window)loader.Load(xaml); var textBlock = (TextBlock)window.Content; window.ApplyTemplate(); Assert.Equal(Dock.Right, DockPanel.GetDock(textBlock)); } } [Fact(Skip = "The animation system currently needs to be able to set any property on any object")] public void Disallows_Setting_Non_Registered_Property() { using (UnitTestApplication.Start(TestServices.StyledWindow)) { var xaml = @" "; var loader = new AvaloniaXamlLoader(); var ex = Assert.Throws(() => loader.Load(xaml)); Assert.Equal( "Property 'Button.IsDefault' is not registered on 'Avalonia.Controls.TextBlock'.", ex.InnerException.Message); } } [Fact] public void Style_Can_Use_Not_Selector() { using (UnitTestApplication.Start(TestServices.StyledWindow)) { var xaml = @" "; var loader = new AvaloniaXamlLoader(); var window = (Window)loader.Load(xaml); var foo = window.FindControl("foo"); var notFoo = window.FindControl("notFoo"); Assert.Null(foo.Background); Assert.Equal(Colors.Red, ((ISolidColorBrush)notFoo.Background).Color); } } } }