import { stringHasAnyEmoji, stringHasCustomEmoji, stringHasUnicodeEmoji, stringHasUnicodeFlags, } from './utils'; describe('stringHasUnicodeEmoji', () => { test.concurrent.for([ ['only text', false], ['text with non-emoji symbols β„’Β©', false], ['text with emoji πŸ˜€', true], ['multiple emojis πŸ˜€πŸ˜ƒπŸ˜„', true], ['emoji with skin tone πŸ‘πŸ½', true], ['emoji with ZWJ πŸ‘©β€β€οΈβ€πŸ‘¨', true], ['emoji with variation selector ✊️', true], ['emoji with keycap 1️⃣', true], ['emoji with flags πŸ‡ΊπŸ‡Έ', true], ['emoji with regional indicators πŸ‡¦πŸ‡Ί', true], ['emoji with gender πŸ‘©β€βš•οΈ', true], ['emoji with family πŸ‘¨β€πŸ‘©β€πŸ‘§β€πŸ‘¦', true], ['emoji with zero width joiner πŸ‘©β€πŸ”¬', true], ['emoji with non-BMP codepoint πŸ§‘β€πŸš€', true], ['emoji with combining marks πŸ‘¨β€πŸ‘©β€πŸ‘§β€πŸ‘¦', true], ['emoji with enclosing keycap #️⃣', true], ['emoji with no visible glyph \u200D', false], ] as const)( 'stringHasUnicodeEmoji has emojis in "%s": %o', ([text, expected], { expect }) => { expect(stringHasUnicodeEmoji(text)).toBe(expected); }, ); }); describe('stringHasUnicodeFlags', () => { test.concurrent.for([ ['EU πŸ‡ͺπŸ‡Ί', true], ['Germany πŸ‡©πŸ‡ͺ', true], ['Canada πŸ‡¨πŸ‡¦', true], ['SΓ£o TomΓ© & PrΓ­ncipe πŸ‡ΈπŸ‡Ή', true], ['Scotland 🏴󠁧󠁒󠁳󠁣󠁴󠁿', true], ['black flag 🏴', false], ['arrr πŸ΄β€β˜ οΈ', false], ['rainbow flag πŸ³οΈβ€πŸŒˆ', false], ['non-flag πŸ”₯', false], ['only text', false], ] as const)( 'stringHasFlags has flag in "%s": %o', ([text, expected], { expect }) => { expect(stringHasUnicodeFlags(text)).toBe(expected); }, ); }); describe('stringHasCustomEmoji', () => { test('string with custom emoji returns true', () => { expect(stringHasCustomEmoji(':custom: :test:')).toBeTruthy(); }); test('string without custom emoji returns false', () => { expect(stringHasCustomEmoji('πŸ³οΈβ€πŸŒˆ :πŸ³οΈβ€πŸŒˆ: text β„’')).toBeFalsy(); }); }); describe('stringHasAnyEmoji', () => { test('string without any emoji or characters', () => { expect(stringHasAnyEmoji('normal text. 12356?!')).toBeFalsy(); }); test('string with non-emoji characters', () => { expect(stringHasAnyEmoji('β„’Β©')).toBeFalsy(); }); test('has unicode emoji', () => { expect(stringHasAnyEmoji('πŸ³οΈβ€πŸŒˆπŸ”₯πŸ‡ΈπŸ‡Ή πŸ‘©β€πŸ”¬')).toBeTruthy(); }); test('has custom emoji', () => { expect(stringHasAnyEmoji(':test: :custom:')).toBeTruthy(); }); });