Refactor Emoji component, add more comprehensive tests
This commit is contained in:
parent
b6d2a8766d
commit
182f5e6302
|
@ -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…
Reference in New Issue