FontManagerTests.cs 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. using System;
  2. using Avalonia.Headless;
  3. using Avalonia.Media;
  4. using Avalonia.UnitTests;
  5. using Xunit;
  6. namespace Avalonia.Base.UnitTests.Media
  7. {
  8. public class FontManagerTests
  9. {
  10. [Fact]
  11. public void Should_Create_Single_Instance_Typeface()
  12. {
  13. using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface))
  14. {
  15. var fontFamily = new FontFamily("MyFont");
  16. var typeface = new Typeface(fontFamily);
  17. Assert.True(FontManager.Current.TryGetGlyphTypeface(typeface, out var glyphTypeface));
  18. FontManager.Current.TryGetGlyphTypeface(typeface, out var other);
  19. Assert.Same(glyphTypeface, other);
  20. }
  21. }
  22. [Fact]
  23. public void Should_Throw_When_Default_FamilyName_Is_Null_And_Installed_Font_Family_Names_Is_Empty()
  24. {
  25. using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface
  26. .With(fontManagerImpl: new HeadlessFontManagerWithMultipleSystemFontsStub(
  27. installedFontFamilyNames: new string[] { },
  28. defaultFamilyName: null))))
  29. {
  30. Assert.Throws<InvalidOperationException>(() => FontManager.Current);
  31. }
  32. }
  33. [Fact]
  34. public void Should_Use_FontManagerOptions_DefaultFamilyName()
  35. {
  36. var options = new FontManagerOptions { DefaultFamilyName = "MyFont" };
  37. using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface
  38. .With(fontManagerImpl: new HeadlessFontManagerStub())))
  39. {
  40. AvaloniaLocator.CurrentMutable.Bind<FontManagerOptions>().ToConstant(options);
  41. Assert.Equal("MyFont", FontManager.Current.DefaultFontFamily.Name);
  42. }
  43. }
  44. [Fact]
  45. public void Should_Use_FontManagerOptions_FontFallback()
  46. {
  47. var options = new FontManagerOptions
  48. {
  49. FontFallbacks = new[]
  50. {
  51. new FontFallback
  52. {
  53. FontFamily = new FontFamily("MyFont"), UnicodeRange = UnicodeRange.Default
  54. }
  55. }
  56. };
  57. using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface
  58. .With(fontManagerImpl: new HeadlessFontManagerStub())))
  59. {
  60. AvaloniaLocator.CurrentMutable.Bind<FontManagerOptions>().ToConstant(options);
  61. FontManager.Current.TryMatchCharacter(1, FontStyle.Normal, FontWeight.Normal, FontStretch.Normal,
  62. FontFamily.Default, null, out var typeface);
  63. Assert.Equal("MyFont", typeface.FontFamily.Name);
  64. }
  65. }
  66. [Fact]
  67. public void Should_Return_First_Installed_Font_Family_Name_When_Default_Family_Name_Is_Null()
  68. {
  69. using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface
  70. .With(fontManagerImpl: new HeadlessFontManagerWithMultipleSystemFontsStub(
  71. installedFontFamilyNames: new[] { "DejaVu", "Verdana" },
  72. defaultFamilyName: null))))
  73. {
  74. Assert.Equal("DejaVu", FontManager.Current.DefaultFontFamily.Name);
  75. }
  76. }
  77. }
  78. }