// @vitest-environment jsdom import { describe, expect, it } from 'vitest'; import { getDefaultNormalizer, render, screen } from '@testing-library/react'; import { HexView } from '../HexView'; // Preserve the post-byte-8 double-space gap when matching hex rows — // RTL's default normalizer collapses it. const preserveWhitespace = { normalizer: getDefaultNormalizer({ collapseWhitespace: false }), }; describe('HexView', () => { it('renders a "no bytes" placeholder for an empty buffer', () => { render(); expect(screen.getByText(/no bytes to display/i)).toBeInTheDocument(); }); it('renders a row for a single-byte buffer', () => { render(); // Offset + hex pair are present somewhere in the rendered output. expect(screen.getByText('00000000')).toBeInTheDocument(); expect(screen.getByText('41')).toBeInTheDocument(); // ASCII column wraps the printable representation in pipes. expect(screen.getByText('|A|')).toBeInTheDocument(); }); it('renders a fully-formatted row with the post-byte-8 gap and ASCII column', () => { const bytes = new Uint8Array([ 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x21, 0x0a, 0x0d, 0x09, 0xff, ]); render(); expect( screen.getByText( '48 65 6C 6C 6F 20 77 6F 72 6C 64 21 0A 0D 09 FF', preserveWhitespace, ), ).toBeInTheDocument(); expect(screen.getByText('|Hello world!....|')).toBeInTheDocument(); }); });