Fix emoji / CoreText crash.

This commit is contained in:
Matthew Chen 2021-08-06 12:03:42 -03:00
parent 812d96a0b6
commit 4decd11c4b

View File

@ -13,14 +13,6 @@ class EmojiTests: SignalBaseTest {
}
func testSimpleEmojiCases() {
XCTAssertFalse("".isSingleEmoji)
XCTAssertTrue("😃".isSingleEmoji)
XCTAssertFalse("😃😃".isSingleEmoji)
XCTAssertFalse("a".isSingleEmoji)
XCTAssertFalse(" 😃".isSingleEmoji)
XCTAssertFalse("😃 ".isSingleEmoji)
XCTAssertTrue("👨‍👩‍👧‍👦".isSingleEmoji)
XCTAssertFalse("".isSingleEmojiUsingEmojiWithSkinTones)
XCTAssertTrue("😃".isSingleEmojiUsingEmojiWithSkinTones)
XCTAssertFalse("😃😃".isSingleEmojiUsingEmojiWithSkinTones)
@ -28,6 +20,7 @@ class EmojiTests: SignalBaseTest {
XCTAssertFalse(" 😃".isSingleEmojiUsingEmojiWithSkinTones)
XCTAssertFalse("😃 ".isSingleEmojiUsingEmojiWithSkinTones)
XCTAssertTrue("👨‍👩‍👧‍👦".isSingleEmojiUsingEmojiWithSkinTones)
XCTAssertTrue("👨🏿‍🤝‍👨🏻".isSingleEmojiUsingEmojiWithSkinTones)
XCTAssertFalse("".isSingleEmojiUsingCoreText)
XCTAssertTrue("😃".isSingleEmojiUsingCoreText)
@ -36,6 +29,8 @@ class EmojiTests: SignalBaseTest {
XCTAssertFalse(" 😃".isSingleEmojiUsingCoreText)
XCTAssertFalse("😃 ".isSingleEmojiUsingCoreText)
XCTAssertTrue("👨‍👩‍👧‍👦".isSingleEmojiUsingCoreText)
// CoreText considers this two glyphs.
XCTAssertFalse("👨🏿‍🤝‍👨🏻".isSingleEmojiUsingCoreText)
XCTAssertFalse("".isSingleEmojiUsingCount)
XCTAssertTrue("😃".isSingleEmojiUsingCount)
@ -44,16 +39,19 @@ class EmojiTests: SignalBaseTest {
XCTAssertFalse(" 😃".isSingleEmojiUsingCount)
XCTAssertFalse("😃 ".isSingleEmojiUsingCount)
XCTAssertTrue("👨‍👩‍👧‍👦".isSingleEmojiUsingCount)
XCTAssertTrue("👨🏿‍🤝‍👨🏻".isSingleEmojiUsingCount)
}
func testEmojiCounts() {
XCTAssertEqual("".count, 0)
XCTAssertEqual("😃".count, 1)
XCTAssertEqual("😃😃".count, 2)
XCTAssertEqual("a".count, 1)
XCTAssertEqual(" 😃".count, 2)
XCTAssertEqual("😃 ".count, 2)
XCTAssertEqual("👨‍👩‍👧‍👦".count, 1)
XCTAssertEqual("".glyphCount, 0)
XCTAssertEqual("😃".glyphCount, 1)
XCTAssertEqual("😃😃".glyphCount, 2)
XCTAssertEqual("a".glyphCount, 1)
XCTAssertEqual(" 😃".glyphCount, 2)
XCTAssertEqual("😃 ".glyphCount, 2)
XCTAssertEqual("👨‍👩‍👧‍👦".glyphCount, 1)
// CoreText considers this two glyphs.
XCTAssertEqual("👨🏿‍🤝‍👨🏻".glyphCount, 2)
XCTAssertEqual("".count, 0)
XCTAssertEqual("😃".count, 1)
@ -62,6 +60,7 @@ class EmojiTests: SignalBaseTest {
XCTAssertEqual(" 😃".count, 2)
XCTAssertEqual("😃 ".count, 2)
XCTAssertEqual("👨‍👩‍👧‍👦".count, 1)
XCTAssertEqual("👨🏿‍🤝‍👨🏻".count, 1)
}
func testFancyEmojiCases() {
@ -142,6 +141,16 @@ class EmojiTests: SignalBaseTest {
XCTAssertEqual(fancyEmoji.count, 1)
}
do {
// This emoji has two skin tones.
let fancyEmoji = "👨🏿‍🤝‍👨🏻"
XCTAssertTrue(fancyEmoji.isSingleEmojiUsingEmojiWithSkinTones)
// CoreText considers this two glyphs.
XCTAssertFalse(fancyEmoji.isSingleEmojiUsingCoreText)
XCTAssertTrue(fancyEmoji.isSingleEmojiUsingCount)
XCTAssertEqual(fancyEmoji.count, 1)
}
do {
let fancyEmoji = "🏳"
// EmojiWithSkinTones doesn't recognize this as an emoji...