diff --git a/src/Avalonia.Visuals/Media/Fonts/FontFamilyKey.cs b/src/Avalonia.Visuals/Media/Fonts/FontFamilyKey.cs index 76ee2b7aad..7733dd7d2a 100644 --- a/src/Avalonia.Visuals/Media/Fonts/FontFamilyKey.cs +++ b/src/Avalonia.Visuals/Media/Fonts/FontFamilyKey.cs @@ -95,7 +95,7 @@ namespace Avalonia.Media.Fonts { if (!Source.IsAbsoluteUri && BaseUri != null) { - return BaseUri.Authority + Source; + return BaseUri.AbsoluteUri + Source.OriginalString; } return Source.ToString(); diff --git a/tests/Avalonia.Visuals.UnitTests/Media/FontFamilyTests.cs b/tests/Avalonia.Visuals.UnitTests/Media/FontFamilyTests.cs index 1cd1742f32..75ae43a1fa 100644 --- a/tests/Avalonia.Visuals.UnitTests/Media/FontFamilyTests.cs +++ b/tests/Avalonia.Visuals.UnitTests/Media/FontFamilyTests.cs @@ -28,7 +28,7 @@ namespace Avalonia.Visuals.UnitTests.Media } [Fact] - public void Parse_Parses_FontFamily_With_Name() + public void Should_Parse_FontFamily_With_SystemFont_Name() { var fontFamily = FontFamily.Parse("Courier New"); @@ -36,7 +36,7 @@ namespace Avalonia.Visuals.UnitTests.Media } [Fact] - public void Parse_Parses_FontFamily_With_Names() + public void Should_Parse_FontFamily_With_Fallbacks() { var fontFamily = FontFamily.Parse("Courier New, Times New Roman"); @@ -48,7 +48,7 @@ namespace Avalonia.Visuals.UnitTests.Media } [Fact] - public void Parse_Parses_FontFamily_With_Resource_Folder() + public void Should_Parse_FontFamily_With_Resource_Folder() { var source = new Uri("resm:Avalonia.Visuals.UnitTests#MyFont"); @@ -62,7 +62,7 @@ namespace Avalonia.Visuals.UnitTests.Media } [Fact] - public void Parse_Parses_FontFamily_With_Resource_Filename() + public void Should_Parse_FontFamily_With_Resource_Filename() { var source = new Uri("resm:Avalonia.Visuals.UnitTests.MyFont.ttf#MyFont"); @@ -74,5 +74,32 @@ namespace Avalonia.Visuals.UnitTests.Media Assert.Equal(key, fontFamily.Key); } + + [Theory] + [InlineData("resm:Avalonia.Visuals.UnitTests/Assets/Fonts#MyFont")] + [InlineData("avares://Avalonia.Visuals.UnitTests/Assets/Fonts#MyFont")] + public void Should_Create_FontFamily_From_Uri(string name) + { + var fontFamily = new FontFamily(name); + + Assert.Equal("MyFont", fontFamily.Name); + + Assert.NotNull(fontFamily.Key); + } + + [Theory] + [InlineData("resm:Avalonia.Visuals.UnitTests.Assets.Fonts", "#MyFont")] + [InlineData("avares://Avalonia.Visuals.UnitTests/Assets/Fonts", "#MyFont")] + [InlineData("avares://Avalonia.Visuals.UnitTests", "/Assets/Fonts#MyFont")] + public void Should_Create_FontFamily_From_Uri_With_Base_Uri(string @base, string name) + { + var baseUri = new Uri(@base); + + var fontFamily = new FontFamily(baseUri, name); + + Assert.Equal("MyFont", fontFamily.Name); + + Assert.NotNull(fontFamily.Key); + } } }