using Glass.Editing; using UnitTestSharp; namespace Glass.UnitTests.Editing { public class WindowEdgesTests : TestFixture { public static readonly string Pair = char.ConvertFromUtf32(0x20BB7); public static readonly string Acute = ((char)0x301).ToString(); public static bool Firm(string text, int index) { return WindowEdges.IsFirm(new StringSource(text), index); } public class IsFirmTests : TestFixture { public void BetweenTwoLetters_IsFirm() { Check(Firm("ab", 1)); } public void BetweenTwoDigits_IsFirm() { Check(Firm("12", 1)); } public void BetweenALetterAndADigit_IsFirm() { Check(Firm("a1", 1)); } public void BetweenTwoCyrillicLetters_IsFirm() { Check(Firm("" + (char)0x41F + (char)0x440, 1)); } public void BetweenTwoHebrewLetters_IsFirm() { Check(Firm("" + (char)0x5E9 + (char)0x5DC, 1)); } public void BetweenTwoIdeographs_IsFirm() { Check(Firm("" + (char)0x4F60 + (char)0x597D, 1)); } public void BetweenTwoHangulSyllables_IsFirm() { Check(Firm("" + (char)0xC548 + (char)0xB155, 1)); } public void BetweenTwoThaiLetters_IsFirm() { Check(Firm("" + (char)0xE2A + (char)0xE27, 1)); } public void BetweenTwoDevanagariConsonants_IsFirm() { Check(Firm("" + (char)0x915 + (char)0x937, 1)); } public void BetweenAnIdeographOutsideTheBasicPlaneAndALetter_IsFirm() { Check(Firm(Pair + "a", 2)); } public void BetweenALetterAndAnIdeographOutsideTheBasicPlane_IsFirm() { Check(Firm("a" + Pair, 1)); } public void BetweenALetterAndASpace_IsFirm() { Check(Firm("a b", 1)); } public void BetweenASpaceAndALetter_IsFirm() { Check(Firm("a b", 2)); } public void BetweenTwoSpaces_IsNotFirm() { CheckFalse(Firm("a b", 2)); } public void BetweenALetterAndPunctuation_IsNotFirm() { CheckFalse(Firm("a,b", 1)); } public void BetweenPunctuationAndALetter_IsNotFirm() { CheckFalse(Firm("a,b", 2)); } public void BetweenALetterAndATab_IsNotFirm() { CheckFalse(Firm("a\tb", 1)); } public void BetweenALetterAndAHyphen_IsNotFirm() { CheckFalse(Firm("a-b", 1)); } public void BetweenAHyphenAndALetter_IsNotFirm() { CheckFalse(Firm("a-b", 2)); } public void BeforeACombiningMark_IsNotFirm() { CheckFalse(Firm("a" + Acute + "b", 1)); } public void AfterAMarkOnALetter_IsFirm() { Check(Firm("a" + Acute + "b", 2)); } public void AfterSeveralMarksOnALetter_IsFirm() { Check(Firm("a" + Acute + Acute + Acute + "b", 4)); } public void BeforeASpaceThatFollowsAMarkOnALetter_IsFirm() { Check(Firm("a" + Acute + " b", 2)); } public void AfterAMarkOnASpace_IsNotFirm() { CheckFalse(Firm(" " + Acute + "b", 2)); } public void AfterAMarkOnAPunctuationMark_IsNotFirm() { CheckFalse(Firm("-" + Acute + "b", 2)); } public void AfterAMarkAtTheStartOfTheText_IsNotFirm() { CheckFalse(Firm(Acute + "b", 1)); } public void AfterAMarkOnAnAstralLetter_IsFirm() { Check(Firm(char.ConvertFromUtf32(0x10400) + Acute + "b", 3)); } public void InsideASurrogatePair_IsNotFirm() { CheckFalse(Firm("a" + Pair + "b", 2)); } public void BetweenALoneHighSurrogateAndALetter_IsFirm() { Check(Firm("a" + (char)0xD842 + "b", 2)); } public void BetweenALetterAndALoneLowSurrogate_IsFirm() { Check(Firm("a" + (char)0xDFB7 + "b", 1)); } public void BetweenALetterAndALoneHighSurrogateAtTheEnd_IsFirm() { Check(Firm("ab" + (char)0xD842 + "c", 2)); } public void InsideACarriageReturnLineFeed_IsNotFirm() { CheckFalse(Firm("a\r\nb", 2)); } public void BetweenALetterAndAHardBreak_IsNotFirm() { CheckFalse(Firm("a\nb", 1)); } public void BetweenTwoRegionalIndicators_IsNotFirm() { string flags = char.ConvertFromUtf32(0x1F1FA) + char.ConvertFromUtf32(0x1F1F8); CheckFalse(Firm(flags, 2)); } public void BetweenALetterAndAnEmoji_IsNotFirm() { CheckFalse(Firm("a" + char.ConvertFromUtf32(0x1F44D), 1)); } } public class AtOrAfterTests : TestFixture { public void AFirmEdgeAtTheIndex_IsTheIndex() { CheckEqual(2, WindowEdges.AtOrAfter(new StringSource("abcd"), 2, 4)); } public void AnIndexOnPunctuation_MovesOnToTheNextFirmEdge() { CheckEqual(5, WindowEdges.AtOrAfter(new StringSource("a,,,bc"), 2, 6)); } public void NoFirmEdgeBeforeTheLimit_IsTheLimit() { CheckEqual(5, WindowEdges.AtOrAfter(new StringSource("a,,,,bc"), 2, 5)); } } public class AtOrBeforeTests : TestFixture { public void AFirmEdgeAtTheIndex_IsTheIndex() { CheckEqual(2, WindowEdges.AtOrBefore(new StringSource("abcd"), 2, 0)); } public void AnIndexOnPunctuation_MovesBackToThePreviousFirmEdge() { CheckEqual(1, WindowEdges.AtOrBefore(new StringSource("ab,,,c"), 4, 0)); } public void NoFirmEdgeAfterTheLimit_IsTheLimit() { CheckEqual(2, WindowEdges.AtOrBefore(new StringSource("ab,,,c"), 4, 2)); } } } }