public void Rgi絵文字シーケンス全体をGetEmojiSequenceLengthにかける() { foreach (var s in Data.RgiEmojiSequenceList) { var(type, length) = GraphemeBreak.GetEmojiSequence(s); Assert.Equal(s.Length, length); Assert.NotEqual(EmojiSequenceType.NotEmoji, type); } }
public void Rgi絵文字シーケンスの前後にAsciiを挟んでからGetEmojiSequenceLengthにかける() { const string NonEmoji = "abc"; foreach (var s in Data.RgiEmojiSequenceList) { var s2 = NonEmoji + s + NonEmoji; EmojiSequence emoji; var span = s2.AsSpan(); // 非絵文字部分、常に0が返ってきて1文字進めればいいはず。 for (int i = 0; i < NonEmoji.Length; i++) { emoji = GraphemeBreak.GetEmojiSequence(span); Assert.Equal(EmojiSequenceType.NotEmoji, emoji.Type); span = span.Slice(emoji.LengthInUtf16); } // 絵文字部分、元の文字列と同じはず。 emoji = GraphemeBreak.GetEmojiSequence(span); Assert.NotEqual(EmojiSequenceType.NotEmoji, emoji.Type); Assert.Equal(s.Length, emoji.LengthInUtf16); span = span.Slice(emoji.LengthInUtf16); // 非絵文字部分、常に0が返ってきて1文字進めればいいはず。 for (int i = 0; i < NonEmoji.Length; i++) { emoji = GraphemeBreak.GetEmojiSequence(span); Assert.Equal(EmojiSequenceType.NotEmoji, emoji.Type); span = span.Slice(emoji.LengthInUtf16); } // 最後まで読み切ったはず。 Assert.Equal(0, span.Length); } }