Browse Source

First unit tests

repros/custom-fonts-pr
Benedikt Schroeder 8 years ago
parent
commit
0c7c69dbe7
  1. 4
      src/Avalonia.Visuals/Media/Fonts/FontFamilyKey.cs
  2. 2
      src/Avalonia.Visuals/Media/Fonts/FontFamilyLoader.cs
  3. 2
      src/Skia/Avalonia.Skia/SKTypefaceCollectionCache.cs
  4. 2
      src/Windows/Avalonia.Direct2D1/Media/Direct2D1FontCollectionCache.cs
  5. 1
      tests/Avalonia.Visuals.UnitTests/Assets/MyFont.ttf
  6. 6
      tests/Avalonia.Visuals.UnitTests/Avalonia.Visuals.UnitTests.csproj
  7. 75
      tests/Avalonia.Visuals.UnitTests/Media/FontFamilyTests.cs
  8. 25
      tests/Avalonia.Visuals.UnitTests/Media/Fonts/FamilyNameCollectionTests.cs
  9. 43
      tests/Avalonia.Visuals.UnitTests/Media/Fonts/FontFamilyKeyTests.cs
  10. 38
      tests/Avalonia.Visuals.UnitTests/Media/Fonts/FontFamilyLoaderTests.cs

4
src/Avalonia.Visuals/Media/Fonts/FontFamilyKey.cs

@ -16,7 +16,9 @@ namespace Avalonia.Media.Fonts
/// </summary>
/// <param name="source"></param>
public FontFamilyKey(Uri source)
{
{
if (source == null) throw new ArgumentNullException(nameof(source));
if (source.AbsolutePath.Contains(".ttf"))
{
var filePathWithoutExtension = source.AbsolutePath.Replace(".ttf", "");

2
src/Avalonia.Visuals/Media/Fonts/FontFamilyLoader.cs

@ -21,7 +21,7 @@ namespace Avalonia.Media.Fonts
s_defaultAssembly = new AssemblyDescriptor(Assembly.GetEntryAssembly());
}
public static IEnumerable<FontResource> GetFontResources(FontFamilyKey fontFamilyKey)
public static IEnumerable<FontResource> LoadFontResources(FontFamilyKey fontFamilyKey)
{
return fontFamilyKey.FileName != null
? GetFontResourcesByFileName(fontFamilyKey.Location, fontFamilyKey.FileName)

2
src/Skia/Avalonia.Skia/SKTypefaceCollectionCache.cs

@ -22,7 +22,7 @@ namespace Avalonia.Skia
private static SKTypefaceCollection CreateCustomFontCollection(FontFamily fontFamily)
{
var resources = FontFamilyLoader.GetFontResources(fontFamily.Key);
var resources = FontFamilyLoader.LoadFontResources(fontFamily.Key);
var typeFaceCollection = new SKTypefaceCollection();

2
src/Windows/Avalonia.Direct2D1/Media/Direct2D1FontCollectionCache.cs

@ -24,7 +24,7 @@ namespace Avalonia.Direct2D1.Media
private static SharpDX.DirectWrite.FontCollection CreateFontCollection(FontFamilyKey key)
{
var resources = FontFamilyLoader.GetFontResources(key);
var resources = FontFamilyLoader.LoadFontResources(key);
var fontLoader = new DWriteResourceFontLoader(s_factory, resources);

1
tests/Avalonia.Visuals.UnitTests/Assets/MyFont.ttf

@ -0,0 +1 @@


6
tests/Avalonia.Visuals.UnitTests/Avalonia.Visuals.UnitTests.csproj

@ -7,6 +7,12 @@
<Import Project="..\..\build\XUnit.props" />
<Import Project="..\..\build\Rx.props" />
<Import Project="..\..\build\Microsoft.Reactive.Testing.props" />
<ItemGroup>
<None Remove="Assets\MyFont.ttf" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Assets\MyFont.ttf" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\Avalonia.Animation\Avalonia.Animation.csproj" />
<ProjectReference Include="..\..\src\Avalonia.Base\Avalonia.Base.csproj" />

75
tests/Avalonia.Visuals.UnitTests/Media/FontFamilyTests.cs

@ -0,0 +1,75 @@
// Copyright (c) The Avalonia Project. All rights reserved.
// Licensed under the MIT license. See licence.md file in the project root for full license information.
using System;
using System.Collections.Generic;
using System.Linq;
using Avalonia.Media;
using Avalonia.Media.Fonts;
using Xunit;
namespace Avalonia.Visuals.UnitTests.Media
{
public class FontFamilyTests
{
[Fact]
public void Exception_Should_Be_Thrown_If_Name_Is_Null()
{
Assert.Throws<ArgumentNullException>(() => new FontFamily((string)null));
}
[Fact]
public void Exception_Should_Be_Thrown_If_Names_Is_Null()
{
Assert.Throws<ArgumentNullException>(() => new FontFamily((IEnumerable<string>)null));
}
[Fact]
public void Parse_Parses_FontFamily_With_Name()
{
var fontFamily = FontFamily.Parse("Courier New");
Assert.Equal("Courier New", fontFamily.Name);
}
[Fact]
public void Parse_Parses_FontFamily_With_Names()
{
var fontFamily = FontFamily.Parse("Courier New, Times New Roman");
Assert.Equal("Courier New", fontFamily.Name);
Assert.Equal(2, fontFamily.FamilyNames.Count());
Assert.Equal("Times New Roman", fontFamily.FamilyNames.Last());
}
[Fact]
public void Parse_Parses_FontFamily_With_Resource_Folder()
{
var source = new Uri("resm:Avalonia.Visuals.UnitTests#MyFont");
var key = new FontFamilyKey(source);
var fontFamily = FontFamily.Parse(source.OriginalString);
Assert.Equal("MyFont", fontFamily.Name);
Assert.Equal(key, fontFamily.Key);
}
[Fact]
public void Parse_Parses_FontFamily_With_Resource_Filename()
{
var source = new Uri("resm:Avalonia.Visuals.UnitTests.MyFont.ttf#MyFont");
var key = new FontFamilyKey(source);
var fontFamily = FontFamily.Parse(source.OriginalString);
Assert.Equal("MyFont", fontFamily.Name);
Assert.Equal(key, fontFamily.Key);
}
}
}

25
tests/Avalonia.Visuals.UnitTests/Media/Fonts/FamilyNameCollectionTests.cs

@ -0,0 +1,25 @@
// Copyright (c) The Avalonia Project. All rights reserved.
// Licensed under the MIT license. See licence.md file in the project root for full license information.
using System;
using System.Linq;
using Avalonia.Media.Fonts;
using Xunit;
namespace Avalonia.Visuals.UnitTests.Media.Fonts
{
public class FamilyNameCollectionTests
{
[Fact]
public void Exception_Should_Be_Thrown_If_Names_Is_Null()
{
Assert.Throws<ArgumentNullException>(() => new FamilyNameCollection(null));
}
[Fact]
public void Exception_Should_Be_Thrown_If_Names_Is_Empty()
{
Assert.Throws<ArgumentException>(() => new FamilyNameCollection(Enumerable.Empty<string>()));
}
}
}

43
tests/Avalonia.Visuals.UnitTests/Media/Fonts/FontFamilyKeyTests.cs

@ -0,0 +1,43 @@
// Copyright (c) The Avalonia Project. All rights reserved.
// Licensed under the MIT license. See licence.md file in the project root for full license information.
using System;
using Avalonia.Media;
using Avalonia.Media.Fonts;
using Xunit;
namespace Avalonia.Visuals.UnitTests.Media.Fonts
{
public class FontFamilyKeyTests
{
[Fact]
public void Exception_Should_Be_Thrown_If_Source_Is_Null()
{
Assert.Throws<ArgumentNullException>(() => new FontFamilyKey(null));
}
[Fact]
public void Should_Initialize_With_Location()
{
var source = new Uri("resm:Avalonia.Visuals.UnitTests#MyFont");
var fontFamilyKey = new FontFamilyKey(source);
Assert.Equal(new Uri("resm:Avalonia.Visuals.UnitTests"), fontFamilyKey.Location);
Assert.Null(fontFamilyKey.FileName);
}
[Fact]
public void Should_Initialize_With_Location_And_Filename()
{
var source = new Uri("resm:Avalonia.Visuals.UnitTests.MyFont.ttf#MyFont");
var fontFamilyKey = new FontFamilyKey(source);
Assert.Equal(new Uri("resm:Avalonia.Visuals.UnitTests"), fontFamilyKey.Location);
Assert.Equal("MyFont.ttf", fontFamilyKey.FileName);
}
}
}

38
tests/Avalonia.Visuals.UnitTests/Media/Fonts/FontFamilyLoaderTests.cs

@ -0,0 +1,38 @@
// Copyright (c) The Avalonia Project. All rights reserved.
// Licensed under the MIT license. See licence.md file in the project root for full license information.
using System;
using System.Linq;
using Avalonia.Media.Fonts;
using Avalonia.UnitTests;
using Xunit;
namespace Avalonia.Visuals.UnitTests.Media.Fonts
{
public class FontFamilyLoaderTests
{
[Fact]
public void Should_Load_Single_FontResource()
{
const string resourcePath = "resm:Avalonia.Visuals.UnitTests.Assets.MyFont.ttf?assembly=Avalonia.Visuals.UnitTests#MyFont";
using (StartWithResources((resourcePath, "MyFont.ttf")))
{
var source = new Uri(resourcePath, UriKind.RelativeOrAbsolute);
var key = new FontFamilyKey(source);
var resources = FontFamilyLoader.LoadFontResources(key);
Assert.Single(resources);
}
}
private static IDisposable StartWithResources(params (string, string)[] assets)
{
var assetLoader = new MockAssetLoader(assets);
var services = new TestServices(assetLoader: assetLoader, platform: new AppBuilder().RuntimePlatform);
return UnitTestApplication.Start(services);
}
}
}
Loading…
Cancel
Save