Skip to main content

Tree comparison

Compare two visual or logical trees to find differences.

using Avalonia.HeadlessTestingFramework;

// Compare two trees
var result = TreeComparer.CompareVisualTrees(expectedWindow, actualWindow);

if (!result.AreEqual)
{
Console.WriteLine($"Trees differ: {result.Differences.Count} differences");
Console.WriteLine($"Match percentage: {result.MatchPercentage:F1}%");

foreach (var diff in result.Differences)
{
Console.WriteLine($" {diff}");
}
}

// Compare with options
var options = new TreeComparisonOptions
{
CompareTypes = true,
CompareNames = true,
CompareOrder = true,
CompareChildCount = true,
PropertiesToCompare = new() { Button.IsEnabledProperty, Visual.IsVisibleProperty },
IgnoreTypes = new() { typeof(Border), typeof(ContentPresenter) },
MaxDepth = 10
};

var result = TreeComparer.CompareVisualTrees(expected, actual, options);

// Compare logical trees
var logicalResult = TreeComparer.CompareLogicalTrees(expectedRoot, actualRoot);

// Summary and detailed differences
Console.WriteLine(result);
foreach (var difference in result.Differences)
Console.WriteLine(difference);

Difference Types​

TypeDescription
MissingNodeNode in expected but not actual
ExtraNodeNode in actual but not expected
TypeMismatchNode types differ
PropertyMismatchProperty values differ
ChildCountMismatchNumber of children differs
OrderMismatchChild order differs
NameMismatchControl names differ