import '@testing-library/jest-dom'; import { render, screen } from '@testing-library/react'; import React from 'react'; import { getWrapper } from '../../testUtils'; import { ConstrainedText } from './Constrainedtext.component'; describe('ConstrainedText', () => { const { Wrapper } = getWrapper(); afterEach(() => { jest.restoreAllMocks(); }); it('should render text content', () => { render(, { wrapper: Wrapper }); expect(screen.getByText('Hello world')).toBeInTheDocument(); }); it('should render numeric content', () => { render(, { wrapper: Wrapper }); expect(screen.getByText('42')).toBeInTheDocument(); }); it('should render JSX content', () => { render( inner content} />, { wrapper: Wrapper }, ); expect(screen.getByTestId('inner')).toBeInTheDocument(); }); it('should not wrap with tooltip when text is not truncated', () => { // JSDOM returns 0 for both offsetWidth and scrollWidth by default, // so isEllipsisActive returns false and no tooltip wrapper is rendered. render(, { wrapper: Wrapper }); expect(document.querySelector('.sc-tooltip')).not.toBeInTheDocument(); }); it('should wrap with tooltip when text overflows horizontally', () => { jest .spyOn(HTMLElement.prototype, 'scrollWidth', 'get') .mockReturnValue(200); jest .spyOn(HTMLElement.prototype, 'offsetWidth', 'get') .mockReturnValue(100); render( , { wrapper: Wrapper }, ); expect(document.querySelector('.sc-tooltip')).toBeInTheDocument(); }); it('should wrap with tooltip when text overflows vertically (lineClamp > 1)', () => { jest .spyOn(HTMLElement.prototype, 'scrollHeight', 'get') .mockReturnValue(80); jest .spyOn(HTMLElement.prototype, 'offsetHeight', 'get') .mockReturnValue(40); render( , { wrapper: Wrapper }, ); expect(document.querySelector('.sc-tooltip')).toBeInTheDocument(); }); });