using System; using System.Collections.Generic; using System.Linq; using Avalonia.Controls; using Avalonia.Controls.Documents; using Avalonia.Data; using Avalonia.Data.Core; using Avalonia.Markup.Xaml.MarkupExtensions; using Avalonia.Media; using Avalonia.UnitTests; using Xunit; namespace Avalonia.Markup.Xaml.UnitTests.Xaml; public class ProvideValueTargetTests : XamlTestBase { [Fact] public void ProvideValueTarget_Has_Correct_Targets_Set() { using var _ = UnitTestApplication.Start(TestServices.StyledWindow); var capturedTargets = new CapturedTargets(); AvaloniaLocator.CurrentMutable.BindToSelf(capturedTargets); AvaloniaRuntimeXamlLoader.Load(@" "); Assert.Collection(capturedTargets.Targets, item => { Assert.IsType(item.TargetObject); Assert.Equal(TextElement.ForegroundProperty, item.TargetProperty); }, item => { Assert.IsAssignableFrom(item.TargetObject); var prop = Assert.IsType(item.TargetProperty); Assert.Equal(nameof(Binding.Source), prop.Name); }, item => { Assert.IsType(item.TargetObject); Assert.Equal(TextBlock.BackgroundProperty, item.TargetProperty); }); } } public class CapturedTargets { public List<(object TargetObject, object TargetProperty)> Targets { get; } = []; } public class CapturingTargetsMarkupExtension { public object ProvideValue(IServiceProvider serviceProvider) { var parentsProvider = serviceProvider.GetRequiredService(); var capturedTargets = AvaloniaLocator.Current.GetRequiredService(); capturedTargets.Targets.Add((parentsProvider.TargetObject, parentsProvider.TargetProperty)); return Brushes.DarkViolet; } }