@@ -117,30 +117,83 @@ describe('FilePatchView', () => {
117
117
} )
118
118
} )
119
119
120
- describe ( 'focusNextHunk() and focusPreviousHunk()' , ( ) => {
121
- it ( 'focuses next/previous hunk and wraps at the end/beginning' , async ( ) => {
120
+ describe ( 'focusNextHunk({wrap} ) and focusPreviousHunk({wrap} )' , ( ) => {
121
+ it ( 'focuses next/previous hunk, and wraps at the end/beginning if wrap is true ' , async ( ) => {
122
122
const hunk1 = new Hunk ( 5 , 5 , 2 , 1 , [ new HunkLine ( 'line-1' , 'added' , - 1 , 5 ) ] )
123
123
const hunk2 = new Hunk ( 8 , 8 , 1 , 1 , [ new HunkLine ( 'line-5' , 'removed' , 8 , - 1 ) ] )
124
124
const hunk3 = new Hunk ( 8 , 8 , 1 , 1 , [ new HunkLine ( 'line-10' , 'added' , - 1 , 10 ) ] )
125
125
const hunkViewsByHunk = new Map ( )
126
126
const view = new FilePatchView ( { hunks : [ hunk1 , hunk2 , hunk3 ] , registerHunkView : ( hunk , view ) => hunkViewsByHunk . set ( hunk , view ) } )
127
127
128
- assert . deepEqual ( view . multiList . getSelectedListKey ( ) , hunk1 )
128
+ assert . isTrue ( hunkViewsByHunk . get ( hunk1 ) . props . isSelected )
129
129
130
130
await view . focusNextHunk ( )
131
- assert . deepEqual ( view . multiList . getSelectedListKey ( ) , hunk2 )
131
+ assert . isTrue ( hunkViewsByHunk . get ( hunk2 ) . props . isSelected )
132
132
133
133
await view . focusNextHunk ( )
134
- assert . deepEqual ( view . multiList . getSelectedListKey ( ) , hunk3 )
134
+ assert . isTrue ( hunkViewsByHunk . get ( hunk3 ) . props . isSelected )
135
135
136
136
await view . focusNextHunk ( )
137
- assert . deepEqual ( view . multiList . getSelectedListKey ( ) , hunk1 )
137
+ assert . isTrue ( hunkViewsByHunk . get ( hunk3 ) . props . isSelected )
138
+
139
+ await view . focusNextHunk ( { wrap : true } )
140
+ assert . isTrue ( hunkViewsByHunk . get ( hunk1 ) . props . isSelected )
138
141
139
142
await view . focusPreviousHunk ( )
140
- assert . deepEqual ( view . multiList . getSelectedListKey ( ) , hunk3 )
143
+ assert . isTrue ( hunkViewsByHunk . get ( hunk1 ) . props . isSelected )
144
+
145
+ await view . focusPreviousHunk ( { wrap : true } )
146
+ assert . isTrue ( hunkViewsByHunk . get ( hunk3 ) . props . isSelected )
141
147
142
148
await view . focusPreviousHunk ( )
143
- assert . deepEqual ( view . multiList . getSelectedListKey ( ) , hunk2 )
149
+ assert . isTrue ( hunkViewsByHunk . get ( hunk2 ) . props . isSelected )
150
+
151
+ await view . focusPreviousHunk ( )
152
+ assert . isTrue ( hunkViewsByHunk . get ( hunk1 ) . props . isSelected )
153
+ } )
154
+ } )
155
+
156
+ describe ( 'focusNextHunkLine() and focusPreviousHunkLine()' , ( ) => {
157
+ it ( 'focuses next/previous non-context hunk line, crossing hunk boundaries but not wrapping' , async ( ) => {
158
+ const line1 = new HunkLine ( 'line-1' , 'unchanged' , 5 , 5 ) // context lines won't be selected
159
+ const line2 = new HunkLine ( 'line-2' , 'removed' , 6 , - 1 )
160
+ const line3 = new HunkLine ( 'line-3' , 'removed' , 7 , - 1 )
161
+
162
+ const line4 = new HunkLine ( 'line-4' , 'unchanged' , 8 , 8 ) // context lines won't be selected
163
+ const line5 = new HunkLine ( 'line-5' , 'added' , - 1 , 9 )
164
+ const line6 = new HunkLine ( 'line-6' , 'unchanged' , 9 , 10 ) // context lines won't be selected
165
+
166
+ const hunk1 = new Hunk ( 5 , 5 , 2 , 0 , [ line1 , line2 , line3 ] )
167
+ const hunk2 = new Hunk ( 8 , 8 , 1 , 2 , [ line4 , line5 , line6 ] )
168
+ const hunkViewsByHunk = new Map ( )
169
+ const view = new FilePatchView ( { hunks : [ hunk1 , hunk2 ] , registerHunkView : ( hunk , view ) => hunkViewsByHunk . set ( hunk , view ) } )
170
+
171
+ view . togglePatchSelectionMode ( )
172
+
173
+ assert . isTrue ( hunkViewsByHunk . get ( hunk1 ) . props . isSelected )
174
+ assertSelectedLines ( view , [ line2 ] )
175
+
176
+ await view . focusNextHunkLine ( )
177
+ assertSelectedLines ( view , [ line3 ] )
178
+
179
+ await view . focusNextHunkLine ( )
180
+ assertSelectedLines ( view , [ line5 ] )
181
+
182
+ await view . focusNextHunkLine ( )
183
+ assertSelectedLines ( view , [ line5 ] )
184
+
185
+ await view . focusPreviousHunkLine ( )
186
+ assertSelectedLines ( view , [ line3 ] )
187
+
188
+ await view . focusPreviousHunkLine ( )
189
+ assertSelectedLines ( view , [ line2 ] )
190
+
191
+ await view . focusPreviousHunkLine ( )
192
+ assertSelectedLines ( view , [ line2 ] )
144
193
} )
145
194
} )
146
195
} )
196
+
197
+ function assertSelectedLines ( view , lines ) {
198
+ assert . deepEqual ( [ ...view . getSelectedLines ( ) ] , lines )
199
+ }
0 commit comments