using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using Avalonia.Controls; using Avalonia.Controls.Presenters; using Avalonia.Data; using Avalonia.Data.Converters; using Avalonia.Media; using Avalonia.Media.Immutable; using Avalonia.UnitTests; using Avalonia.VisualTree; using Xunit; namespace Avalonia.Markup.Xaml.UnitTests.Data { public class BindingTests : XamlTestBase { [Fact] public void Binding_With_Null_Path_Works() { using (UnitTestApplication.Start(TestServices.StyledWindow)) { var xaml = @" "; var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml); var textBlock = window.GetControl("textBlock"); window.DataContext = "foo"; window.ApplyTemplate(); Assert.Equal("foo", textBlock.Text); } } [Fact] public void Binding_To_DoNothing_Works() { using (UnitTestApplication.Start(TestServices.StyledWindow)) { var xaml = @" "; var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml); var textBlock = window.GetControl("textBlock"); window.ApplyTemplate(); window.DataContext = "foo"; Assert.Equal("foo", textBlock.Text); window.DataContext = BindingOperations.DoNothing; Assert.Equal("foo", textBlock.Text); window.DataContext = "bar"; Assert.Equal("bar", textBlock.Text); } } [Fact] public void MultiBinding_TemplatedParent_Works() { using (UnitTestApplication.Start(TestServices.StyledWindow)) { var xaml = @" "; var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml); var textBox = window.GetControl("textBox"); window.ApplyTemplate(); textBox.ApplyTemplate(); var target = (TextPresenter)textBox.GetVisualChildren().Single(); Assert.Equal("Foo,Bar", target.Text); } } [Fact] public void Can_Bind_Brush_to_Hex_String() { using (UnitTestApplication.Start(TestServices.StyledWindow)) { var xaml = @" "; var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml); var border = (Border)window.Content!; window.DataContext = new { HexString = "#ff0000" }; window.ApplyTemplate(); var brush = Assert.IsType(border.Background); Assert.Equal(Colors.Red, brush.Color); } } } public class ConcatConverter : IMultiValueConverter { public static ConcatConverter Instance { get; } = new ConcatConverter(); public object Convert(IList values, Type targetType, object? parameter, CultureInfo culture) { return string.Join(",", values); } } }