#nullable enable
using System;
using System.Collections.Generic;
using System.Linq;
using Avalonia.Controls;
using Avalonia.Markup.Xaml.XamlIl.Runtime;
using Avalonia.Media;
using Avalonia.UnitTests;
using Xunit;
namespace Avalonia.Markup.Xaml.UnitTests.Xaml;
public class ParentStackProviderTests : XamlTestBase
{
[Fact]
public void Parents_Are_Correct_For_Deferred_Content()
{
using var _ = UnitTestApplication.Start(TestServices.StyledWindow);
var capturedParents = new CapturedParents();
AvaloniaLocator.CurrentMutable.BindToSelf(capturedParents);
var window = (Window)AvaloniaRuntimeXamlLoader.Load(@"
");
window.Show();
VerifyParents(capturedParents.LazyParents);
VerifyParents(capturedParents.EagerParents);
static void VerifyParents(object[]? parents)
{
Assert.NotNull(parents);
Assert.NotEmpty(parents);
Assert.Collection(
parents,
o => Assert.IsType(o),
o => Assert.IsType(o),
o => Assert.IsType(o));
}
}
}
public class CapturedParents
{
public object[]? LazyParents { get; set; }
public object[]? EagerParents { get; set; }
}
public class CapturingParentsMarkupExtension
{
public object ProvideValue(IServiceProvider serviceProvider)
{
var parentsProvider = serviceProvider.GetRequiredService();
var eagerParentsProvider = Assert.IsAssignableFrom(parentsProvider);
var capturedParents = AvaloniaLocator.Current.GetRequiredService();
capturedParents.LazyParents = parentsProvider.Parents.ToArray();
capturedParents.EagerParents = EnumerateEagerParents(eagerParentsProvider);
return Colors.Blue;
}
private static object[] EnumerateEagerParents(IAvaloniaXamlIlEagerParentStackProvider provider)
{
var parents = new List