// 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; using System.Linq; using Avalonia.Controls; using Avalonia.Controls.Presenters; using Avalonia.Controls.Templates; using Avalonia.Markup.Xaml.Data; using Avalonia.Media; using Avalonia.Styling; using Avalonia.UnitTests; using Avalonia.VisualTree; using Xunit; namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions { public class DynamicResourceExtensionTests { [Fact] public void DynamicResource_Can_Be_Assigned_To_Property() { var xaml = @" #ff506070 "; var loader = new AvaloniaXamlLoader(); var userControl = (UserControl)loader.Load(xaml); var border = userControl.FindControl("border"); DelayedBinding.ApplyBindings(border); var brush = (SolidColorBrush)border.Background; Assert.Equal(0xff506070, brush.Color.ToUint32()); } [Fact] public void DynamicResource_Can_Be_Assigned_To_Attached_Property() { var xaml = @" 5 "; var loader = new AvaloniaXamlLoader(); var userControl = (UserControl)loader.Load(xaml); var border = userControl.FindControl("border"); DelayedBinding.ApplyBindings(border); Assert.Equal(5, Grid.GetColumn(border)); } [Fact] public void DynamicResource_From_Style_Can_Be_Assigned_To_Property() { var xaml = @" "; var loader = new AvaloniaXamlLoader(); var userControl = (UserControl)loader.Load(xaml); var border = userControl.FindControl("border"); DelayedBinding.ApplyBindings(border); var brush = (SolidColorBrush)border.Background; Assert.Equal(0xff506070, brush.Color.ToUint32()); } [Fact] public void DynamicResource_From_MergedDictionary_Can_Be_Assigned_To_Property() { var xaml = @" #ff506070 "; var loader = new AvaloniaXamlLoader(); var userControl = (UserControl)loader.Load(xaml); var border = userControl.FindControl("border"); DelayedBinding.ApplyBindings(border); var brush = (SolidColorBrush)border.Background; Assert.Equal(0xff506070, brush.Color.ToUint32()); } [Fact] public void DynamicResource_From_MergedDictionary_In_Style_Can_Be_Assigned_To_Property() { var xaml = @" "; var loader = new AvaloniaXamlLoader(); var userControl = (UserControl)loader.Load(xaml); var border = userControl.FindControl("border"); DelayedBinding.ApplyBindings(border); var brush = (SolidColorBrush)border.Background; Assert.Equal(0xff506070, brush.Color.ToUint32()); } [Fact] public void DynamicResource_From_Application_Can_Be_Assigned_To_Property_In_Window() { using (StyledWindow()) { Application.Current.Resources.Add("brush", new SolidColorBrush(0xff506070)); var xaml = @" "; var loader = new AvaloniaXamlLoader(); var window = (Window)loader.Load(xaml); var border = window.FindControl("border"); var brush = (SolidColorBrush)border.Background; Assert.Equal(0xff506070, brush.Color.ToUint32()); } } [Fact] public void DynamicResource_From_Application_Can_Be_Assigned_To_Property_In_UserControl() { using (UnitTestApplication.Start(TestServices.StyledWindow)) { Application.Current.Resources.Add("brush", new SolidColorBrush(0xff506070)); var xaml = @" "; var loader = new AvaloniaXamlLoader(); var userControl = (UserControl)loader.Load(xaml); var border = userControl.FindControl("border"); // We don't actually know where the global styles are until we attach the control // to a window, as Window has StylingParent set to Application. var window = new Window { Content = userControl }; window.Show(); var brush = (SolidColorBrush)border.Background; Assert.Equal(0xff506070, brush.Color.ToUint32()); } } [Fact] public void DynamicResource_Can_Be_Assigned_To_Setter() { using (StyledWindow()) { var xaml = @" #ff506070