| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- // Copyright (c) Craftwork Games. All rights reserved.
- // Licensed under the MIT license.
- // See LICENSE file in the project root for full license information.
- using System;
- using System.IO;
- using System.Linq;
- using MonoGame.Extended.Content.BitmapFonts;
- namespace MonoGame.Extended.BitmapFonts.Tests;
- public class BitmapFontFileReaderTests
- {
- private readonly BitmapFontFileContent _expected;
- public BitmapFontFileReaderTests()
- {
- _expected = CreateExpected();
- }
- private static BitmapFontFileContent CreateExpected()
- {
- BitmapFontFileContent bmfFile = new BitmapFontFileContent()
- {
- Header = new()
- {
- B = (byte)'B',
- M = (byte)'M',
- F = (byte)'F',
- Version = 3
- },
- Info = new()
- {
- FontSize = 32,
- BitField = 0b1100_0000,
- CharSet = 0,
- StretchH = 50,
- AA = 1,
- PaddingUp = 1,
- PaddingRight = 2,
- PaddingDown = 3,
- PaddingLeft = 4,
- SpacingHoriz = 6,
- SpacingVert = 5,
- Outline = 2
- },
- FontName = "Cute Dino",
- Common = new()
- {
- LineHeight = 16,
- Base = 12,
- ScaleW = 256,
- ScaleH = 256,
- Pages = 1,
- BitField = 0b0000_0000,
- AlphaChnl = 1,
- RedChnl = 0,
- GreenChnl = 0,
- BlueChnl = 0,
- }
- };
- bmfFile.Pages.Add("test-font_0.png");
- bmfFile.Characters.Add(new()
- {
- ID = 70,
- X = 34,
- Y = 0,
- Width = 27,
- Height = 20,
- XOffset = -5,
- YOffset = -3,
- XAdvance = 17,
- Page = 0,
- Chnl = 15
- });
- bmfFile.Characters.Add(new()
- {
- ID = 74,
- X = 0,
- Y = 0,
- Width = 28,
- Height = 20,
- XOffset = -6,
- YOffset = -3,
- XAdvance = 18,
- Page = 0,
- Chnl = 15,
- });
- bmfFile.Kernings.Add(new()
- {
- First = 70,
- Second = 74,
- Amount = -1
- });
- return bmfFile;
- }
- [Fact]
- public void Read_BinaryFile_Test()
- {
- string path = "BitmapFonts/files/bmfont/test-font-binary.fnt";
- using FileStream stream = File.OpenRead(path);
- var actual = BitmapFontFileReader.Read(stream, path);
- Assert.Equal(_expected.Header, actual.Header);
- Assert.Equal(_expected.Info, actual.Info);
- Assert.Equal(_expected.Common, actual.Common);
- Assert.Equal(_expected.FontName, actual.FontName);
- Assert.True(_expected.Pages.SequenceEqual(actual.Pages));
- Assert.True(_expected.Characters.SequenceEqual(actual.Characters));
- Assert.True(_expected.Kernings.SequenceEqual(actual.Kernings));
- }
- [Fact]
- public void Read_XmlFile_Test()
- {
- string path = "BitmapFonts/files/bmfont/test-font-xml.fnt";
- using FileStream stream = File.OpenRead(path);
- var actual = BitmapFontFileReader.Read(stream, path);
- Assert.Equal(_expected.Header, actual.Header);
- Assert.Equal(_expected.Info, actual.Info);
- Assert.Equal(_expected.Common, actual.Common);
- Assert.Equal(_expected.FontName, actual.FontName);
- Assert.True(_expected.Pages.SequenceEqual(actual.Pages));
- Assert.True(_expected.Characters.SequenceEqual(actual.Characters));
- Assert.True(_expected.Kernings.SequenceEqual(actual.Kernings));
- }
- // Issue: MonoGame.Extended won't load XML format .fnt files if they begin with the byte order mark.
- // https://github.com/MonoGame-Extended/Monogame-Extended/issues/1073
- // It's possible that a consumer might edit the BMFont file using a different library such as SharpFNT.BitmapFont
- // which could save it with UTF-8 Byte Order Mark (BOM) preamble at the start of the file.
- [Fact]
- public void Read_XmlFile_With_UTF8_BOM_Test()
- {
- string path = "BitmapFonts/files/bmfont/test-font-xml-utf8-bom.fnt";
- using FileStream stream = File.OpenRead(path);
- var actual = BitmapFontFileReader.Read(stream, path);
- Assert.Equal(_expected.Header, actual.Header);
- Assert.Equal(_expected.Info, actual.Info);
- Assert.Equal(_expected.Common, actual.Common);
- Assert.Equal(_expected.FontName, actual.FontName);
- Assert.True(_expected.Pages.SequenceEqual(actual.Pages));
- Assert.True(_expected.Characters.SequenceEqual(actual.Characters));
- Assert.True(_expected.Kernings.SequenceEqual(actual.Kernings));
- }
- [Fact]
- public void Read_Text_Test()
- {
- string path = "BitmapFonts/files/bmfont/test-font-text.fnt";
- using FileStream stream = File.OpenRead(path);
- var actual = BitmapFontFileReader.Read(stream, path);
- Assert.Equal(_expected.Header, actual.Header);
- Assert.Equal(_expected.Info, actual.Info);
- Assert.Equal(_expected.Common, actual.Common);
- Assert.Equal(_expected.FontName, actual.FontName);
- Assert.True(_expected.Pages.SequenceEqual(actual.Pages));
- Assert.True(_expected.Characters.SequenceEqual(actual.Characters));
- Assert.True(_expected.Kernings.SequenceEqual(actual.Kernings));
- }
- }
|