// Copyright (c) Meta Platforms, Inc. and affiliates. import {render, screen} from '@testing-library/react'; import {describe, expect, it, vi} from 'vitest'; import {LineClamp} from './LineClamp'; function withHorizontalOverflow() { const proto = window.HTMLElement.prototype; const scrollWidth = Object.getOwnPropertyDescriptor(proto, 'scrollWidth'); const offsetWidth = Object.getOwnPropertyDescriptor(proto, 'offsetWidth'); Object.defineProperty(proto, 'scrollWidth', { configurable: true, get: () => 400, }); Object.defineProperty(proto, 'offsetWidth', { configurable: true, get: () => 100, }); return () => { if (scrollWidth) Object.defineProperty(proto, 'scrollWidth', scrollWidth); if (offsetWidth) Object.defineProperty(proto, 'offsetWidth', offsetWidth); }; } describe('LineClamp review regressions', () => { it('shows one tooltip rather than native title plus Tooltip', () => { const restore = withHorizontalOverflow(); try { render(A long clamped label); expect(screen.getByText('A long clamped label')).not.toHaveAttribute( 'title', ); } finally { restore(); } }); it('keeps a forwarded ref attached across rerenders', () => { const ref = vi.fn(); const {rerender} = render( Before , ); const element = screen.getByText('Before'); expect(ref).toHaveBeenLastCalledWith(element); ref.mockClear(); rerender( After , ); expect(ref).not.toHaveBeenCalled(); expect(screen.getByText('After')).toBe(element); }); });