import { render, screen } from '@testing-library/react';
import { describe, expect, it } from 'vitest';
import { MinecraftIcon, type MinecraftIconName } from './minecraft-icon';
describe('MinecraftIcon', () => {
it('is decorative by default and exposes an accessible name only when requested', () => {
const { container, rerender } = render(<MinecraftIcon name="grass" />);
expect(screen.queryByRole('img')).not.toBeInTheDocument();
expect(container.querySelector('svg')).toHaveAttribute('aria-hidden', 'true');
expect(container.querySelector('svg')).toHaveAttribute('focusable', 'false');
rerender(<MinecraftIcon name="grass" label="草方块" size={32} />);
expect(screen.getByRole('img', { name: '草方块' })).toHaveAttribute('width', '32');
expect(screen.getByRole('img')).not.toHaveAttribute('aria-hidden');
});
it.each<MinecraftIconName>(['grass', 'player', 'emerald', 'diamond', 'redstone', 'workbench', 'chest',
'shield', 'book', 'command-block', 'compass', 'sword', 'clock', 'map', 'pickaxe', 'history'])(
'draws %s locally on a crisp pixel grid without external image references', (name) => {
const { container } = render(<MinecraftIcon name={name} />);
const svg = container.querySelector('svg');
expect(svg).toHaveAttribute('viewBox', '0 0 16 16');
expect(svg).toHaveAttribute('shape-rendering', 'crispEdges');
expect(svg).toHaveAttribute('data-minecraft-icon', name);
expect(svg?.querySelectorAll('rect,path').length).toBeGreaterThan(0);
expect(svg?.querySelector('image,use,script,foreignObject')).toBeNull();
expect(svg?.querySelector('[href],[xlink\\:href]')).toBeNull();
},
);
});
import { render, screen } from '@testing-library/react';
import { describe, expect, it } from 'vitest';
import { MinecraftIcon, type MinecraftIconName } from './minecraft-icon';
describe('MinecraftIcon', () => {
it('is decorative by default and exposes an accessible name only when requested', () => {
const { container, rerender } = render(<MinecraftIcon name="grass" />);
expect(screen.queryByRole('img')).not.toBeInTheDocument();
expect(container.querySelector('svg')).toHaveAttribute('aria-hidden', 'true');
expect(container.querySelector('svg')).toHaveAttribute('focusable', 'false');
rerender(<MinecraftIcon name="grass" label="草方块" size={32} />);
expect(screen.getByRole('img', { name: '草方块' })).toHaveAttribute('width', '32');
expect(screen.getByRole('img')).not.toHaveAttribute('aria-hidden');
});
it.each<MinecraftIconName>(['grass', 'player', 'emerald', 'diamond', 'redstone', 'workbench', 'chest',
'shield', 'book', 'command-block', 'compass', 'sword', 'clock', 'map', 'pickaxe', 'history'])(
'draws %s locally on a crisp pixel grid without external image references', (name) => {
const { container } = render(<MinecraftIcon name={name} />);
const svg = container.querySelector('svg');
expect(svg).toHaveAttribute('viewBox', '0 0 16 16');
expect(svg).toHaveAttribute('shape-rendering', 'crispEdges');
expect(svg).toHaveAttribute('data-minecraft-icon', name);
expect(svg?.querySelectorAll('rect,path').length).toBeGreaterThan(0);
expect(svg?.querySelector('image,use,script,foreignObject')).toBeNull();
expect(svg?.querySelector('[href],[xlink\\:href]')).toBeNull();
},
);
});