From 63f6a497cba61299a1c24aa96795a55479740ac6 Mon Sep 17 00:00:00 2001 From: Jacob Richman Date: Sun, 22 Jun 2025 00:54:10 +0000 Subject: Jacob314/overflow notification and one MaxSizedBox bug fix (#1288) --- .../src/ui/components/shared/MaxSizedBox.test.tsx | 279 ++++++++++++--------- 1 file changed, 156 insertions(+), 123 deletions(-) (limited to 'packages/cli/src/ui/components/shared/MaxSizedBox.test.tsx') diff --git a/packages/cli/src/ui/components/shared/MaxSizedBox.test.tsx b/packages/cli/src/ui/components/shared/MaxSizedBox.test.tsx index 7abd19a2..2fa72f96 100644 --- a/packages/cli/src/ui/components/shared/MaxSizedBox.test.tsx +++ b/packages/cli/src/ui/components/shared/MaxSizedBox.test.tsx @@ -5,6 +5,7 @@ */ import { render } from 'ink-testing-library'; +import { OverflowProvider } from '../../contexts/OverflowContext.js'; import { MaxSizedBox, setMaxSizedBoxDebugging } from './MaxSizedBox.js'; import { Box, Text } from 'ink'; import { describe, it, expect } from 'vitest'; @@ -18,28 +19,32 @@ describe('', () => { it('renders children without truncation when they fit', () => { const { lastFrame } = render( - - - Hello, World! - - , + + + + Hello, World! + + + , ); expect(lastFrame()).equals('Hello, World!'); }); it('hides lines when content exceeds maxHeight', () => { const { lastFrame } = render( - - - Line 1 - - - Line 2 - - - Line 3 - - , + + + + Line 1 + + + Line 2 + + + Line 3 + + + , ); expect(lastFrame()).equals(`... first 2 lines hidden ... Line 3`); @@ -47,17 +52,19 @@ Line 3`); it('hides lines at the end when content exceeds maxHeight and overflowDirection is bottom', () => { const { lastFrame } = render( - - - Line 1 - - - Line 2 - - - Line 3 - - , + + + + Line 1 + + + Line 2 + + + Line 3 + + + , ); expect(lastFrame()).equals(`Line 1 ... last 2 lines hidden ...`); @@ -65,11 +72,13 @@ Line 3`); it('wraps text that exceeds maxWidth', () => { const { lastFrame } = render( - - - This is a long line of text - - , + + + + This is a long line of text + + + , ); expect(lastFrame()).equals(`This is a @@ -82,19 +91,21 @@ of text`); And has a line break. Leading spaces preserved.`; const { lastFrame } = render( - - - Example - - - No Wrap: - {multilineText} - - - Longer No Wrap: - This part will wrap around. - - , + + + + Example + + + No Wrap: + {multilineText} + + + Longer No Wrap: + This part will wrap around. + + + , ); expect(lastFrame()).equals( @@ -118,11 +129,13 @@ Longer No Wrap: This it('handles words longer than maxWidth by splitting them', () => { const { lastFrame } = render( - - - Supercalifragilisticexpialidocious - - , + + + + Supercalifragilisticexpialidocious + + + , ); expect(lastFrame()).equals(`... … @@ -134,14 +147,16 @@ ious`); it('does not truncate when maxHeight is undefined', () => { const { lastFrame } = render( - - - Line 1 - - - Line 2 - - , + + + + Line 1 + + + Line 2 + + + , ); expect(lastFrame()).equals(`Line 1 Line 2`); @@ -149,17 +164,19 @@ Line 2`); it('shows plural "lines" when more than one line is hidden', () => { const { lastFrame } = render( - - - Line 1 - - - Line 2 - - - Line 3 - - , + + + + Line 1 + + + Line 2 + + + Line 3 + + + , ); expect(lastFrame()).equals(`... first 2 lines hidden ... Line 3`); @@ -167,17 +184,19 @@ Line 3`); it('shows plural "lines" when more than one line is hidden and overflowDirection is bottom', () => { const { lastFrame } = render( - - - Line 1 - - - Line 2 - - - Line 3 - - , + + + + Line 1 + + + Line 2 + + + Line 3 + + + , ); expect(lastFrame()).equals(`Line 1 ... last 2 lines hidden ...`); @@ -185,7 +204,9 @@ Line 3`); it('renders an empty box for empty children', () => { const { lastFrame } = render( - , + + + , ); // Expect an empty string or a box with nothing in it. // Ink renders an empty box as an empty string. @@ -194,11 +215,13 @@ Line 3`); it('wraps text with multi-byte unicode characters correctly', () => { const { lastFrame } = render( - - - 你好世界 - - , + + + + 你好世界 + + + , ); // "你好" has a visual width of 4. "世界" has a visual width of 4. @@ -209,11 +232,13 @@ Line 3`); it('wraps text with multi-byte emoji characters correctly', () => { const { lastFrame } = render( - - - 🐶🐶🐶🐶🐶 - - , + + + + 🐶🐶🐶🐶🐶 + + + , ); // Each "🐶" has a visual width of 2. @@ -225,17 +250,19 @@ Line 3`); it('accounts for additionalHiddenLinesCount', () => { const { lastFrame } = render( - - - Line 1 - - - Line 2 - - - Line 3 - - , + + + + Line 1 + + + Line 2 + + + Line 3 + + + , ); // 1 line is hidden by overflow, 5 are additionally hidden. expect(lastFrame()).equals(`... first 7 lines hidden ... @@ -244,19 +271,21 @@ Line 3`); it('handles React.Fragment as a child', () => { const { lastFrame } = render( - - <> - - Line 1 from Fragment - + + + <> + + Line 1 from Fragment + + + Line 2 from Fragment + + - Line 2 from Fragment + Line 3 direct child - - - Line 3 direct child - - , + + , ); expect(lastFrame()).equals(`Line 1 from Fragment Line 2 from Fragment @@ -270,11 +299,13 @@ Line 3 direct child`); ).join('\n'); const { lastFrame } = render( - - - {THIRTY_LINES} - - , + + + + {THIRTY_LINES} + + + , ); const expected = [ @@ -292,11 +323,13 @@ Line 3 direct child`); ).join('\n'); const { lastFrame } = render( - - - {THIRTY_LINES} - - , + + + + {THIRTY_LINES} + + + , ); const expected = [ -- cgit v1.2.3