A set of over 6000 free MIT-licensed high-quality SVG icons for you to use in your web projects.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

116 lines
4.1 KiB

import { describe, it, expect, afterEach, expectTypeOf } from 'vitest';
import { render, cleanup } from '@testing-library/react';
import {
IconAccessible,
IconAccessibleFilled,
createReactComponent,
} from './src/tabler-icons-react';
import type { TablerIcon } from './src/types';
describe('React Icon component', () => {
afterEach(() => {
cleanup();
});
it('should render icon component', () => {
const { container } = render(<IconAccessible />);
expect(container.getElementsByTagName('svg').length).toBeGreaterThan(0);
});
it('should update svg attributes when there are props passed to the component', () => {
const { container } = render(<IconAccessible size={48} color={'red'} stroke={4} />);
const svg = container.getElementsByTagName('svg')[0];
expect(svg.getAttribute('width')).toBe('48');
expect(svg.getAttribute('stroke')).toBe('red');
expect(svg.getAttribute('stroke-width')).toBe('4');
expect(svg.getAttribute('fill')).toBe('none');
});
it('should update svg attributes when there are props passed to the filled version of component', () => {
const { container } = render(<IconAccessibleFilled size={48} color={'red'} />);
const svg = container.getElementsByTagName('svg')[0];
expect(svg.getAttribute('width')).toBe('48');
expect(svg.getAttribute('fill')).toBe('red');
expect(svg.getAttribute('stroke')).toBe('none');
expect(svg.getAttribute('stroke-width')).toBe(null);
});
it('should apply all classNames to the element', () => {
const testClass = 'test-class';
const { container } = render(<IconAccessible className={testClass} />);
expect(container.firstChild).toHaveClass(testClass);
expect(container.firstChild).toHaveClass('tabler-icon');
expect(container.firstChild).toHaveClass('tabler-icon-accessible');
});
it('should not add a trailing space to the class attribute when no className is passed', () => {
const { container } = render(<IconAccessible />);
const svg = container.getElementsByTagName('svg')[0];
expect(svg.getAttribute('class')).toBe('tabler-icon tabler-icon-accessible');
});
it('should separate a provided className with a single space', () => {
const { container } = render(<IconAccessible className="first second" />);
const svg = container.getElementsByTagName('svg')[0];
expect(svg.getAttribute('class')).toBe('tabler-icon tabler-icon-accessible first second');
});
it('should add a style attribute to the element', () => {
const { container } = render(<IconAccessible style={{ color: 'red' }} />);
const svg = container.getElementsByTagName('svg')[0];
expect(svg).toHaveStyle('color: rgb(255, 0, 0)');
});
it('should have proper type', () => {
expectTypeOf(IconAccessible).toBeFunction();
expectTypeOf(IconAccessible).toEqualTypeOf(
createReactComponent('outline', 'accessible', 'Accessible', []),
);
});
it('should match TablerIcon type', () => {
expectTypeOf(IconAccessible).toMatchTypeOf<TablerIcon>();
expectTypeOf(IconAccessibleFilled).toMatchTypeOf<TablerIcon>();
});
it('should add title child element to svg when title prop is passed', () => {
const { container } = render(<IconAccessible title="Accessible Icon" />);
const svg = container.getElementsByTagName('svg')[0];
const title = svg.getElementsByTagName('title')[0];
expect(title).toHaveTextContent('Accessible Icon');
});
it('should match snapshot', () => {
const { container } = render(<IconAccessible />);
expect(container.innerHTML).toMatchInlineSnapshot(`
<svg xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewbox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
class="tabler-icon tabler-icon-accessible"
>
<path d="M3 12a9 9 0 1 0 18 0a9 9 0 1 0 -18 0">
</path>
<path d="M10 16.5l2 -3l2 3m-2 -3v-2l3 -1m-6 0l3 1">
</path>
<path d="M11.5 7.5a.5 .5 0 1 0 1 0a.5 .5 0 1 0 -1 0"
fill="currentColor"
>
</path>
</svg>
`);
});
});