using System; using Glass.Typesetting; using UnitTestSharp; namespace Glass.UnitTests.Typesetting { public class WordEndMetricsTests : TestFixture { public static MeasuredWord Word(int trailingSpaces = 0, LineBreakEnding ending = LineBreakEnding.Plain, bool isMandatory = false, short endKerning = 0) { return new MeasuredWord(new LineBreak(9, isMandatory, trailingSpaces, ending), contentWidth: 20, leadingKerning: 0, endKerning); } public static readonly WordEndMetrics Ends = new WordEndMetrics(WordMeasurerTests.TestFont()); public class CtorTests : TestFixture { public void NullFont_Throws() { CheckThrow(typeof(ArgumentNullException)); new WordEndMetrics(null); } public void FromAlreadyLookedUpPieces_MatchesConstructingFromTheFont() { SpriteFontDefinition font = WordMeasurerTests.TestFont(); var fromFont = new WordEndMetrics(font); var fromPieces = new WordEndMetrics(font.MetricsTable, font.KerningTable, font.MetricsTable[' ']); MeasuredWord spaces = Word(trailingSpaces: 1, endKerning: -2); MeasuredWord hyphen = Word(ending: LineBreakEnding.SoftHyphen, endKerning: -1); CheckEqual(fromFont.TrailingWidthOf(spaces), fromPieces.TrailingWidthOf(spaces)); CheckEqual(fromFont.HyphenWidthOf(hyphen), fromPieces.HyphenWidthOf(hyphen)); } } public class TrailingWidthOfTests : TestFixture { public void NoSpaces_IsZero() { CheckEqual(0, Ends.TrailingWidthOf(Word(endKerning: -2))); } public void OneSpace_IsTheSpaceAndTheKerningIntoIt() { CheckEqual(-2 + WordMeasurerTests.SpaceWidth, Ends.TrailingWidthOf(Word(trailingSpaces: 1, endKerning: -2))); } public void SeveralSpaces_KernBetweenEachOther() { var ends = new WordEndMetrics(WordMeasurerTests.TestFont(kerningBetweenSpaces: -1)); CheckEqual(-2 + 3 * WordMeasurerTests.SpaceWidth + 2 * -1, ends.TrailingWidthOf(Word(trailingSpaces: 3, endKerning: -2))); } } public class HyphenWidthOfTests : TestFixture { public void SoftHyphen_IsTheHyphenAndTheKerningIntoIt() { CheckEqual(-1 + WordMeasurerTests.HyphenWidth, Ends.HyphenWidthOf(Word(ending: LineBreakEnding.SoftHyphen, endKerning: -1))); } public void MandatoryBreakAfterASoftHyphen_ShowsNoHyphen() { CheckEqual(0, Ends.HyphenWidthOf(Word(ending: LineBreakEnding.SoftHyphen, isMandatory: true, endKerning: -1))); } public void NoSoftHyphen_IsZero() { CheckEqual(0, Ends.HyphenWidthOf(Word(trailingSpaces: 1, endKerning: -1))); } } } }