using System; using System.Globalization; using Avalonia.Controls; using Avalonia.Data; using Avalonia.Data.Converters; using Avalonia.UnitTests; using Xunit; namespace Avalonia.Markup.Xaml.UnitTests.Converters { public class ValueConverterTests : XamlTestBase { [Fact] public void ValueConverter_Special_Values_Work() { using (UnitTestApplication.Start(TestServices.StyledWindow)) { var xaml = @" "; var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml); var textBlock = window.FindControl("textBlock"); window.ApplyTemplate(); window.DataContext = 2; Assert.Equal("foo", textBlock.Text); window.DataContext = -3; Assert.Equal("foo", textBlock.Text); window.DataContext = 0; Assert.Equal("bar", textBlock.Text); } } } public class TestConverter : IValueConverter { public static readonly TestConverter Instance = new TestConverter(); public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (value is int i) { if (i > 0) { return "foo"; } if (i == 0) { return AvaloniaProperty.UnsetValue; } return BindingOperations.DoNothing; } return "(default)"; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } }