@@ -23,7 +23,7 @@ async function renderFlatListWithToolkit(props: ScrollViewProps = {}) {
2323 const renderItem = ( title : string ) => < Text > { title } </ Text > ;
2424 await render (
2525 < FlatList
26- testID = "flatList "
26+ testID = "flat-list "
2727 onScroll = { logEvent ( 'scroll' ) }
2828 onScrollBeginDrag = { logEvent ( 'scrollBeginDrag' ) }
2929 onScrollEndDrag = { logEvent ( 'scrollEndDrag' ) }
@@ -46,12 +46,13 @@ describe('scrollTo() with FlatList', () => {
4646 const { events } = await renderFlatListWithToolkit ( ) ;
4747 const user = userEvent . setup ( ) ;
4848
49- await user . scrollTo ( screen . getByTestId ( 'flatList ' ) , { y : 100 } ) ;
49+ await user . scrollTo ( screen . getByTestId ( 'flat-list ' ) , { y : 100 } ) ;
5050 expect ( mapEventsToShortForm ( events ) ) . toEqual ( [
5151 [ 'scrollBeginDrag' , 0 , 0 ] ,
5252 [ 'scroll' , 25 , 0 ] ,
5353 [ 'scroll' , 50 , 0 ] ,
5454 [ 'scroll' , 75 , 0 ] ,
55+ [ 'scroll' , 100 , 0 ] ,
5556 [ 'scrollEndDrag' , 100 , 0 ] ,
5657 ] ) ;
5758 expect ( events ) . toMatchSnapshot ( 'scrollTo({ y: 100 })' ) ;
@@ -61,12 +62,13 @@ describe('scrollTo() with FlatList', () => {
6162 const { events } = await renderFlatListWithToolkit ( { horizontal : true } ) ;
6263 const user = userEvent . setup ( ) ;
6364
64- await user . scrollTo ( screen . getByTestId ( 'flatList ' ) , { x : 100 } ) ;
65+ await user . scrollTo ( screen . getByTestId ( 'flat-list ' ) , { x : 100 } ) ;
6566 expect ( mapEventsToShortForm ( events ) ) . toEqual ( [
6667 [ 'scrollBeginDrag' , 0 , 0 ] ,
6768 [ 'scroll' , 0 , 25 ] ,
6869 [ 'scroll' , 0 , 50 ] ,
6970 [ 'scroll' , 0 , 75 ] ,
71+ [ 'scroll' , 0 , 100 ] ,
7072 [ 'scrollEndDrag' , 0 , 100 ] ,
7173 ] ) ;
7274 } ) ;
@@ -117,3 +119,28 @@ test('scrollTo with contentSize and layoutMeasurement update FlatList content',
117119 // Prevent act warning by unmounting the component
118120 await screen . unmount ( ) ;
119121} ) ;
122+
123+ test ( 'drag scroll delivers final offset to FlatList' , async ( ) => {
124+ const onEndReached = jest . fn ( ) ;
125+ await render (
126+ < FlatList
127+ testID = "flat-list"
128+ data = { data }
129+ renderItem = { ( x ) => < Item title = { x . item } /> }
130+ onEndReached = { onEndReached }
131+ onEndReachedThreshold = { 0 }
132+ /> ,
133+ ) ;
134+ const user = userEvent . setup ( ) ;
135+
136+ await user . scrollTo ( screen . getByTestId ( 'flat-list' ) , {
137+ y : 520 ,
138+ contentSize : { width : 240 , height : 1000 } ,
139+ layoutMeasurement : { width : 240 , height : 480 } ,
140+ } ) ;
141+
142+ expect ( onEndReached ) . toHaveBeenCalledTimes ( 1 ) ;
143+
144+ // Prevent act warning by unmounting the component
145+ await screen . unmount ( ) ;
146+ } ) ;
0 commit comments