1+ import React from 'react' ;
2+ import { mount } from './wrapper' ;
3+ import Overflow from '../src' ;
4+
5+ interface ItemType {
6+ key : React . Key ;
7+ value : any ;
8+ }
9+
10+ function getData ( count : number ) : ItemType [ ] {
11+ return new Array ( count ) . fill ( null ) . map ( ( _ , index ) => ( {
12+ key : `key-${ index } ` ,
13+ value : index ,
14+ } ) ) ;
15+ }
16+
17+ function renderItem ( item : ItemType ) {
18+ return < span > { item . value } </ span > ;
19+ }
20+
21+ describe ( 'Overflow.Prefix' , ( ) => {
22+ beforeEach ( ( ) => {
23+ jest . useFakeTimers ( ) ;
24+ } ) ;
25+
26+ afterEach ( ( ) => {
27+ jest . runAllTimers ( ) ;
28+ jest . useRealTimers ( ) ;
29+ } ) ;
30+
31+ it ( 'should render prefix when provided' , ( ) => {
32+ const wrapper = mount (
33+ < Overflow < ItemType >
34+ data = { getData ( 3 ) }
35+ itemKey = "key"
36+ renderItem = { renderItem }
37+ prefix = "Prefix:"
38+ /> ,
39+ ) ;
40+
41+ expect ( wrapper . findPrefix ( ) ) . toHaveLength ( 1 ) ;
42+ expect ( wrapper . findPrefix ( ) . text ( ) ) . toBe ( 'Prefix:' ) ;
43+ } ) ;
44+
45+ it ( 'should not render prefix when not provided' , ( ) => {
46+ const wrapper = mount (
47+ < Overflow < ItemType >
48+ data = { getData ( 3 ) }
49+ itemKey = "key"
50+ renderItem = { renderItem }
51+ /> ,
52+ ) ;
53+
54+ expect ( wrapper . findPrefix ( ) ) . toHaveLength ( 0 ) ;
55+ } ) ;
56+
57+ it ( 'should work with responsive mode and show overflow' , ( ) => {
58+ const wrapper = mount (
59+ < Overflow < ItemType >
60+ data = { getData ( 10 ) }
61+ itemKey = "key"
62+ renderItem = { renderItem }
63+ maxCount = "responsive"
64+ prefix = "Label:"
65+ /> ,
66+ ) ;
67+
68+ // Small container to force overflow
69+ wrapper . initSize ( 60 , 20 ) ;
70+
71+ // Should render prefix
72+ expect ( wrapper . findPrefix ( ) ) . toHaveLength ( 1 ) ;
73+ expect ( wrapper . findPrefix ( ) . text ( ) ) . toBe ( 'Label:' ) ;
74+
75+ // Should show overflow indicator
76+ expect ( wrapper . findRest ( ) ) . toHaveLength ( 1 ) ;
77+
78+ // Should render some but not all items
79+ expect ( wrapper . findItems ( ) . length ) . toBeGreaterThan ( 0 ) ;
80+ expect ( wrapper . findItems ( ) . length ) . toBeLessThan ( 10 ) ;
81+ } ) ;
82+
83+ it ( 'should work with fixed maxCount' , ( ) => {
84+ const wrapper = mount (
85+ < Overflow < ItemType >
86+ data = { getData ( 10 ) }
87+ itemKey = "key"
88+ renderItem = { renderItem }
89+ maxCount = { 3 }
90+ prefix = "Categories:"
91+ /> ,
92+ ) ;
93+
94+ // Should render prefix
95+ expect ( wrapper . findPrefix ( ) ) . toHaveLength ( 1 ) ;
96+ expect ( wrapper . findPrefix ( ) . text ( ) ) . toBe ( 'Categories:' ) ;
97+
98+ // Should show exactly 3 items + rest
99+ expect ( wrapper . findItems ( ) ) . toHaveLength ( 3 ) ;
100+ expect ( wrapper . findRest ( ) ) . toHaveLength ( 1 ) ;
101+ } ) ;
102+
103+ it ( 'should work with both prefix and suffix' , ( ) => {
104+ const wrapper = mount (
105+ < Overflow < ItemType >
106+ data = { getData ( 5 ) }
107+ itemKey = "key"
108+ renderItem = { renderItem }
109+ maxCount = { 3 }
110+ prefix = "Start"
111+ suffix = "End"
112+ /> ,
113+ ) ;
114+
115+ // Should render both prefix and suffix
116+ expect ( wrapper . findPrefix ( ) ) . toHaveLength ( 1 ) ;
117+ expect ( wrapper . findSuffix ( ) ) . toHaveLength ( 1 ) ;
118+ expect ( wrapper . findPrefix ( ) . text ( ) ) . toBe ( 'Start' ) ;
119+ expect ( wrapper . findSuffix ( ) . text ( ) ) . toBe ( 'End' ) ;
120+
121+ // Should show 3 items + rest
122+ expect ( wrapper . findItems ( ) ) . toHaveLength ( 3 ) ;
123+ expect ( wrapper . findRest ( ) ) . toHaveLength ( 1 ) ;
124+ } ) ;
125+
126+ it ( 'should render complex prefix content' , ( ) => {
127+ const ComplexPrefix = ( ) => (
128+ < div className = "complex-prefix" >
129+ < span > 🏷️</ span >
130+ < span > Tags:</ span >
131+ </ div >
132+ ) ;
133+
134+ const wrapper = mount (
135+ < Overflow < ItemType >
136+ data = { getData ( 3 ) }
137+ itemKey = "key"
138+ renderItem = { renderItem }
139+ prefix = { < ComplexPrefix /> }
140+ /> ,
141+ ) ;
142+
143+ expect ( wrapper . findPrefix ( ) ) . toHaveLength ( 1 ) ;
144+ expect ( wrapper . findPrefix ( ) . find ( '.complex-prefix' ) ) . toHaveLength ( 1 ) ;
145+ expect ( wrapper . findPrefix ( ) . text ( ) ) . toBe ( '🏷️Tags:' ) ;
146+ } ) ;
147+ } ) ;
0 commit comments