using Blacklight.Core.Keyboard; namespace Blacklight.Core.UnitTests.Keyboard { public class CharAssemblerTests : UnitTestSharp.TestFixture { public static readonly char HighSurrogate = '\uD842'; public static readonly char LowSurrogate = '\uDFB7'; public class AddTests : UnitTestSharp.TestFixture { public void PlainCharacter_IsReturnedAsText() { CheckEqual("a", new CharAssembler().Add('a')); } public void Space_IsText() { CheckEqual(" ", new CharAssembler().Add(' ')); } public void CharacterOutsideAscii_IsText() { string text = char.ConvertFromUtf32(0x65E5); CheckEqual(text, new CharAssembler().Add(text[0])); } public void ControlCharacters_AreDropped() { var assembler = new CharAssembler(); foreach (char control in new[] { '\0', '\b', '\t', '\r', '\n', (char)0x1A, (char)0x1B, (char)0x7F }) { CheckNull(assembler.Add(control)); } } public void LatinOneControlCharacters_AreDropped() { CheckNull(new CharAssembler().Add((char)0x85)); } public void SurrogatePair_IsJoinedOnTheSecondHalf() { var assembler = new CharAssembler(); CheckNull(assembler.Add(HighSurrogate)); CheckEqual(char.ConvertFromUtf32(0x20BB7), assembler.Add(LowSurrogate)); } public void CompletedPair_LeavesNothingBehind() { var assembler = new CharAssembler(); assembler.Add(HighSurrogate); assembler.Add(LowSurrogate); CheckNull(assembler.Add(LowSurrogate)); CheckEqual("a", assembler.Add('a')); } public void LoneLowSurrogate_IsDropped() { CheckNull(new CharAssembler().Add(LowSurrogate)); } public void HighSurrogateFollowedByAPlainCharacter_DropsTheHighSurrogate() { var assembler = new CharAssembler(); assembler.Add(HighSurrogate); CheckEqual("a", assembler.Add('a')); CheckNull(assembler.Add(LowSurrogate)); } public void HighSurrogateFollowedByAControlCharacter_DropsBoth() { var assembler = new CharAssembler(); assembler.Add(HighSurrogate); CheckNull(assembler.Add('\r')); CheckNull(assembler.Add(LowSurrogate)); } public void HighSurrogateFollowedByAnother_KeepsTheLater() { var assembler = new CharAssembler(); assembler.Add((char)0xD800); assembler.Add(HighSurrogate); CheckEqual(char.ConvertFromUtf32(0x20BB7), assembler.Add(LowSurrogate)); } } } }