using System; using System.Linq; using Avalonia.Animation; using Avalonia.Controls; using Avalonia.Controls.Shapes; using Avalonia.Controls.Templates; using Avalonia.Input; using Avalonia.Input.GestureRecognizers; using Avalonia.Markup.Xaml.Diagnostics; using Avalonia.Markup.Xaml.Templates; using Avalonia.Media; using Avalonia.Styling; using Xunit; namespace Avalonia.Markup.Xaml.UnitTests.Xaml { public class XamlSourceInfoTests : XamlTestBase { private static readonly RuntimeXamlLoaderConfiguration s_configuration = new RuntimeXamlLoaderConfiguration { CreateSourceInfo = true }; [Theory] [InlineData(@"C:\TestFolder\TestFile.xaml")] // Windows-style path [InlineData("/TestFolder/TestFile.xaml")] // Unix-style path public void Root_UserControl_With_BaseUri_Gets_XamlSourceInfo_SourceUri_Set(string document) { var xamlDocument = new RuntimeXamlLoaderDocument( """ """) { Document = document }; var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xamlDocument, s_configuration); var sourceInfo = XamlSourceInfo.GetXamlSourceInfo(userControl); Assert.NotNull(sourceInfo); Assert.Equal("file", sourceInfo.SourceUri!.Scheme); Assert.True(sourceInfo.SourceUri!.IsAbsoluteUri); Assert.Equal(new UriBuilder("file", "") {Path = document}.Uri, sourceInfo.SourceUri); } [Fact] public void Root_UserControl_Gets_XamlSourceInfo_Set() { var xaml = new RuntimeXamlLoaderDocument(@" "); var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml, s_configuration); var sourceInfo = XamlSourceInfo.GetXamlSourceInfo(userControl); Assert.NotNull(sourceInfo); } [Fact] public void Nested_Controls_All_Get_XamlSourceInfo_Set() { var xaml = new RuntimeXamlLoaderDocument(@"