Refactor Emoji component, add more comprehensive tests

next-virtuoso-proof
Alex Gleason 2 years ago
parent b6d2a8766d
commit 182f5e6302
No known key found for this signature in database
GPG Key ID: 7211D1F99744FBB7

@ -1,12 +1,23 @@
import React from 'react';
import * as React from 'react';
import { render, screen } from '../../../../jest/test-helpers';
import Emoji from '../emoji';
describe('<Emoji />', () => {
it('renders the given text', () => {
render(<Emoji emoji='smile' />);
it('renders a simple emoji', () => {
render(<Emoji emoji='😀' />);
expect(screen.getByRole('img').getAttribute('alt')).toBe('smile');
const img = screen.getByRole('img');
expect(img.getAttribute('src')).toBe('/packs/emoji/1f600.svg');
expect(img.getAttribute('alt')).toBe('😀');
});
// https://emojipedia.org/emoji-flag-sequence/
it('renders a sequence emoji', () => {
render(<Emoji emoji='🇺🇸' />);
const img = screen.getByRole('img');
expect(img.getAttribute('src')).toBe('/packs/emoji/1f1fa-1f1f8.svg');
expect(img.getAttribute('alt')).toBe('🇺🇸');
});
});

@ -29,12 +29,12 @@ const toCodePoints = (unicodeSurrogates: string): string[] => {
return points;
};
interface IEmoji {
className?: string,
interface IEmoji extends React.ImgHTMLAttributes<HTMLImageElement> {
emoji: string,
}
const Emoji: React.FC<IEmoji> = ({ className, emoji }): JSX.Element | null => {
const Emoji: React.FC<IEmoji> = (props): JSX.Element | null => {
const { emoji, alt, ...rest } = props;
const codepoints = toCodePoints(removeVS16s(emoji));
const filename = codepoints.join('-');
@ -43,9 +43,9 @@ const Emoji: React.FC<IEmoji> = ({ className, emoji }): JSX.Element | null => {
return (
<img
draggable='false'
className={className}
alt={emoji}
alt={alt || emoji}
src={joinPublicPath(`packs/emoji/${filename}.svg`)}
{...rest}
/>
);
};

Loading…
Cancel
Save