import { getEmojiConfig } from './getEmojiConfig'; import type { EmojiPackages } from '../../emoji/lib/rocketchat'; const buildEmojiPackages = (ascii: boolean): EmojiPackages => ({ packages: { native: { ascii } }, list: {}, }) as unknown as EmojiPackages; describe('native emoji render', () => { it('converts ascii emoticons when the ascii flag is enabled', () => { const { render } = getEmojiConfig(buildEmojiPackages(true)); expect(render('hello :)')).toBe('hello 🙂'); }); it('converts HTML-escaped ascii emoticons', () => { const { render } = getEmojiConfig(buildEmojiPackages(true)); expect(render('hello >:(')).toBe('hello 😠'); expect(render('hello <3')).toBe('hello ❤'); }); it('keeps ascii emoticons literal when the ascii flag is disabled', () => { const { render } = getEmojiConfig(buildEmojiPackages(false)); expect(render('hello :)')).toBe('hello :)'); }); it('converts ascii emoticons adjacent to HTML tags', () => { const { render } = getEmojiConfig(buildEmojiPackages(true)); expect(render('
hello :D
')).toBe('hello 😄
'); expect(render(':)
')).toBe('🙂
'); }); it('does not convert ascii sequences inside words or URLs', () => { const { render } = getEmojiConfig(buildEmojiPackages(true)); expect(render('https://rocket.chat')).toBe('https://rocket.chat'); expect(render('hello:)')).toBe('hello:)'); }); it('does not convert ascii sequences inside HTML tags', () => { const { render } = getEmojiConfig(buildEmojiPackages(true)); expect(render('rocket')).toBe('rocket'); }); it('still renders shortcodes when the ascii flag is enabled', () => { const { render } = getEmojiConfig(buildEmojiPackages(true)); expect(render(':smiley:')).toContain(''); }); it('renders bare (non-VS16) emoji-default characters', () => { const { render } = getEmojiConfig(buildEmojiPackages(false)); expect(render('🐕')).toBe('🐕'); expect(render('🐶')).toBe('🐶'); expect(render('⭐')).toBe('⭐'); expect(render('👍')).toBe('👍'); }); it('resolves the VS16-qualified form to the same shortcode', () => { const { render } = getEmojiConfig(buildEmojiPackages(false)); expect(render('🐕\u{FE0F}')).toBe('🐕\u{FE0F}'); expect(render('⭐\u{FE0F}')).toBe('⭐\u{FE0F}'); }); it('only treats text-default symbols as emoji when VS16 is present', () => { const { render } = getEmojiConfig(buildEmojiPackages(false)); expect(render('©')).toBe('©'); expect(render('™')).toBe('™'); expect(render('©\u{FE0F}')).toBe('©\u{FE0F}'); }); it('renders shortcodes contested with emojibase using their emojione meaning', () => { const { render } = getEmojiConfig(buildEmojiPackages(false)); expect(render(':up:')).toBe('🆙'); expect(render(':arrow_up_small:')).toBe('🔼'); expect(render(':cat:')).toBe('🐱'); expect(render(':cat2:')).toBe('🐈️'); }); it('renders picker entries for contested shortcodes', () => { const { renderPicker } = getEmojiConfig(buildEmojiPackages(false)); expect(renderPicker(':up:')).toBe('🆙'); expect(renderPicker(':cat2:')).toBe('🐈️'); }); });