1
1
/** @babel */
2
2
3
- import etch from 'etch'
4
-
5
3
import FilePatchView from '../../lib/views/file-patch-view'
6
4
import Hunk from '../../lib/models/hunk'
7
5
import HunkLine from '../../lib/models/hunk-line'
8
6
9
7
describe ( 'FilePatchView' , ( ) => {
8
+ it ( 'displays selected hunks and lines as selected' , async ( ) => {
9
+ const line1 = new HunkLine ( 'line-1' , 'removed' , 5 , - 1 )
10
+ const line2 = new HunkLine ( 'line-2' , 'removed' , 6 , - 1 )
11
+ const line3 = new HunkLine ( 'line-3' , 'removed' , 7 , - 1 )
12
+ const line4 = new HunkLine ( 'line-4' , 'added' , - 1 , 6 )
13
+ const line5 = new HunkLine ( 'line-5' , 'removed' , 8 , - 1 )
14
+ const line6 = new HunkLine ( 'line-6' , 'added' , - 1 , 8 )
15
+ const hunk1 = new Hunk ( 5 , 5 , 3 , 1 , [ line1 , line2 , line3 , line4 ] )
16
+ const hunk2 = new Hunk ( 8 , 8 , 1 , 1 , [ line5 , line6 ] )
17
+ const hunkViewsByHunk = new Map ( )
18
+ const view = new FilePatchView ( { hunks : [ hunk1 , hunk2 ] , registerHunkView : ( hunk , view ) => hunkViewsByHunk . set ( hunk , view ) } )
19
+
20
+ const selectedHunks = view . getSelectedHunks ( )
21
+ // TODO: write test to ensure that hunks and lines have correct isSelected props
22
+ } )
23
+
10
24
describe ( 'selectLineForHunk(hunk, selectedLine) when selection is enabled' , ( ) => {
11
25
it ( 'sets the lines between selectedLine and first line selected' , async ( ) => {
12
26
const line1 = new HunkLine ( 'line-1' , 'removed' , 5 , - 1 )
@@ -17,8 +31,7 @@ describe('FilePatchView', () => {
17
31
const line6 = new HunkLine ( 'line-6' , 'added' , - 1 , 8 )
18
32
const hunk1 = new Hunk ( 5 , 5 , 3 , 1 , [ line1 , line2 , line3 , line4 ] )
19
33
const hunk2 = new Hunk ( 8 , 8 , 1 , 1 , [ line5 , line6 ] )
20
- const hunkViewsByHunk = new Map ( )
21
- const view = new FilePatchView ( { hunks : [ hunk1 , hunk2 ] , registerHunkView : ( hunk , view ) => hunkViewsByHunk . set ( hunk , view ) } )
34
+ const view = new FilePatchView ( { hunks : [ hunk1 , hunk2 ] } )
22
35
view . togglePatchSelectionMode ( )
23
36
assertSelectedLines ( view , [ line1 ] )
24
37
view . enableSelections ( )
@@ -64,33 +77,22 @@ describe('FilePatchView', () => {
64
77
it ( 'selects the new hunk in it\'s place' , async ( ) => {
65
78
const hunk1 = new Hunk ( 5 , 5 , 2 , 1 , [ new HunkLine ( 'line-1' , 'added' , - 1 , 5 ) ] )
66
79
const hunk2 = new Hunk ( 8 , 8 , 1 , 1 , [ new HunkLine ( 'line-5' , 'removed' , 8 , - 1 ) ] )
67
-
68
- const hunkViewsByHunk = new Map ( )
69
- const view = new FilePatchView ( { hunks : [ hunk1 , hunk2 ] , registerHunkView : ( hunk , view ) => hunkViewsByHunk . set ( hunk , view ) } )
70
-
71
- assert . isTrue ( hunkViewsByHunk . get ( hunk1 ) . props . isSelected )
72
- hunkViewsByHunk . clear ( )
73
- await view . update ( { hunks : [ hunk2 ] , registerHunkView : ( hunk , view ) => hunkViewsByHunk . set ( hunk , view ) } )
74
- assert . isTrue ( ! hunkViewsByHunk . get ( hunk1 ) )
75
- assert . isTrue ( hunkViewsByHunk . get ( hunk2 ) . props . isSelected )
80
+ const view = new FilePatchView ( { hunks : [ hunk1 , hunk2 ] } )
81
+ assertSelectedHunks ( view , [ hunk1 ] )
82
+ await view . update ( { hunks : [ hunk2 ] } )
83
+ assertSelectedHunks ( view , [ hunk2 ] )
76
84
} )
77
85
} )
78
86
79
87
describe ( 'when there is no hunk at it\'s index' , ( ) => {
80
88
it ( 'selects the last hunk' , async ( ) => {
81
89
const hunk1 = new Hunk ( 5 , 5 , 2 , 1 , [ new HunkLine ( 'line-1' , 'added' , - 1 , 5 ) ] )
82
90
const hunk2 = new Hunk ( 8 , 8 , 1 , 1 , [ new HunkLine ( 'line-5' , 'removed' , 8 , - 1 ) ] )
83
-
84
- const hunkViewsByHunk = new Map ( )
85
- const view = new FilePatchView ( { hunks : [ hunk1 , hunk2 ] , registerHunkView : ( hunk , view ) => hunkViewsByHunk . set ( hunk , view ) } )
86
-
91
+ const view = new FilePatchView ( { hunks : [ hunk1 , hunk2 ] } )
87
92
await view . focusNextHunk ( )
88
- assert . isTrue ( hunkViewsByHunk . get ( hunk2 ) . props . isSelected )
89
-
90
- hunkViewsByHunk . clear ( )
91
- await view . update ( { hunks : [ hunk1 ] , registerHunkView : ( hunk , view ) => hunkViewsByHunk . set ( hunk , view ) } )
92
- assert . isTrue ( ! hunkViewsByHunk . get ( hunk2 ) )
93
- assert . isTrue ( hunkViewsByHunk . get ( hunk1 ) . props . isSelected )
93
+ assertSelectedHunks ( view , [ hunk2 ] )
94
+ await view . update ( { hunks : [ hunk1 ] } )
95
+ assertSelectedHunks ( view , [ hunk1 ] )
94
96
} )
95
97
} )
96
98
} )
@@ -103,19 +105,17 @@ describe('FilePatchView', () => {
103
105
new HunkLine ( 'line-3' , 'removed' , 7 , - 1 ) ,
104
106
new HunkLine ( 'line-4' , 'added' , - 1 , 6 )
105
107
] )
106
- const hunkViewsByHunk = new Map ( )
107
- const view = new FilePatchView ( { hunks : [ hunk ] , registerHunkView : ( hunk , view ) => hunkViewsByHunk . set ( hunk , view ) } )
108
- const element = view . element
108
+ const view = new FilePatchView ( { hunks : [ hunk ] } )
109
109
110
110
assert . equal ( view . getPatchSelectionMode ( ) , 'hunk' )
111
111
112
112
await view . togglePatchSelectionMode ( )
113
113
assert . equal ( view . getPatchSelectionMode ( ) , 'hunkLine' )
114
- assert . equal ( element . querySelectorAll ( '.git-HunkView-line.is-selected' ) . length , 1 )
114
+ assertSelectedLines ( view , [ hunk . getLines ( ) [ 1 ] ] ) // first non-context line
115
115
116
116
await view . togglePatchSelectionMode ( )
117
117
assert . equal ( view . getPatchSelectionMode ( ) , 'hunk' )
118
- assert . equal ( element . querySelectorAll ( '.git-HunkView-line.is-selected' ) . length , hunk . getLines ( ) . filter ( l => l . isChanged ( ) ) . length )
118
+ assertSelectedLines ( view , hunk . getLines ( ) . filter ( l => l . isChanged ( ) ) )
119
119
} )
120
120
} )
121
121
@@ -124,34 +124,33 @@ describe('FilePatchView', () => {
124
124
const hunk1 = new Hunk ( 5 , 5 , 2 , 1 , [ new HunkLine ( 'line-1' , 'added' , - 1 , 5 ) ] )
125
125
const hunk2 = new Hunk ( 8 , 8 , 1 , 1 , [ new HunkLine ( 'line-5' , 'removed' , 8 , - 1 ) ] )
126
126
const hunk3 = new Hunk ( 8 , 8 , 1 , 1 , [ new HunkLine ( 'line-10' , 'added' , - 1 , 10 ) ] )
127
- const hunkViewsByHunk = new Map ( )
128
- const view = new FilePatchView ( { hunks : [ hunk1 , hunk2 , hunk3 ] , registerHunkView : ( hunk , view ) => hunkViewsByHunk . set ( hunk , view ) } )
127
+ const view = new FilePatchView ( { hunks : [ hunk1 , hunk2 , hunk3 ] } )
129
128
130
- assert . isTrue ( hunkViewsByHunk . get ( hunk1 ) . props . isSelected )
129
+ assertSelectedHunks ( view , [ hunk1 ] )
131
130
132
131
await view . focusNextHunk ( )
133
- assert . isTrue ( hunkViewsByHunk . get ( hunk2 ) . props . isSelected )
132
+ assertSelectedHunks ( view , [ hunk2 ] )
134
133
135
134
await view . focusNextHunk ( )
136
- assert . isTrue ( hunkViewsByHunk . get ( hunk3 ) . props . isSelected )
135
+ assertSelectedHunks ( view , [ hunk3 ] )
137
136
138
137
await view . focusNextHunk ( )
139
- assert . isTrue ( hunkViewsByHunk . get ( hunk3 ) . props . isSelected )
138
+ assertSelectedHunks ( view , [ hunk3 ] )
140
139
141
140
await view . focusNextHunk ( { wrap : true } )
142
- assert . isTrue ( hunkViewsByHunk . get ( hunk1 ) . props . isSelected )
141
+ assertSelectedHunks ( view , [ hunk1 ] )
143
142
144
143
await view . focusPreviousHunk ( )
145
- assert . isTrue ( hunkViewsByHunk . get ( hunk1 ) . props . isSelected )
144
+ assertSelectedHunks ( view , [ hunk1 ] )
146
145
147
146
await view . focusPreviousHunk ( { wrap : true } )
148
- assert . isTrue ( hunkViewsByHunk . get ( hunk3 ) . props . isSelected )
147
+ assertSelectedHunks ( view , [ hunk3 ] )
149
148
150
149
await view . focusPreviousHunk ( )
151
- assert . isTrue ( hunkViewsByHunk . get ( hunk2 ) . props . isSelected )
150
+ assertSelectedHunks ( view , [ hunk2 ] )
152
151
153
152
await view . focusPreviousHunk ( )
154
- assert . isTrue ( hunkViewsByHunk . get ( hunk1 ) . props . isSelected )
153
+ assertSelectedHunks ( view , [ hunk1 ] )
155
154
} )
156
155
} )
157
156
0 commit comments