@@ -11,79 +11,74 @@ import (
11
11
12
12
func TestTextFragmentApplyStrict (t * testing.T ) {
13
13
tests := map [string ]struct {
14
- File string
15
- SrcFile string
16
- PatchFile string
17
- DstFile string
18
-
19
- Err error
14
+ Files applyFiles
15
+ Err error
20
16
}{
21
- "createFile" : {File : "text_fragment_new" },
22
- "deleteFile" : {File : "text_fragment_delete_all" },
17
+ "createFile" : {Files : getApplyFiles ( "text_fragment_new" ) },
18
+ "deleteFile" : {Files : getApplyFiles ( "text_fragment_delete_all" ) },
23
19
24
- "addStart" : {File : "text_fragment_add_start" },
25
- "addMiddle" : {File : "text_fragment_add_middle" },
26
- "addEnd" : {File : "text_fragment_add_end" },
27
- "addEndNoEOL" : {File : "text_fragment_add_end_noeol" },
20
+ "addStart" : {Files : getApplyFiles ( "text_fragment_add_start" ) },
21
+ "addMiddle" : {Files : getApplyFiles ( "text_fragment_add_middle" ) },
22
+ "addEnd" : {Files : getApplyFiles ( "text_fragment_add_end" ) },
23
+ "addEndNoEOL" : {Files : getApplyFiles ( "text_fragment_add_end_noeol" ) },
28
24
29
- "changeStart" : {File : "text_fragment_change_start" },
30
- "changeMiddle" : {File : "text_fragment_change_middle" },
31
- "changeEnd" : {File : "text_fragment_change_end" },
32
- "changeExact" : {File : "text_fragment_change_exact" },
33
- "changeSingleNoEOL" : {File : "text_fragment_change_single_noeol" },
25
+ "changeStart" : {Files : getApplyFiles ( "text_fragment_change_start" ) },
26
+ "changeMiddle" : {Files : getApplyFiles ( "text_fragment_change_middle" ) },
27
+ "changeEnd" : {Files : getApplyFiles ( "text_fragment_change_end" ) },
28
+ "changeExact" : {Files : getApplyFiles ( "text_fragment_change_exact" ) },
29
+ "changeSingleNoEOL" : {Files : getApplyFiles ( "text_fragment_change_single_noeol" ) },
34
30
35
31
"errorShortSrcBefore" : {
36
- SrcFile : "text_fragment_error" ,
37
- PatchFile : "text_fragment_error_short_src_before" ,
38
- Err : io .ErrUnexpectedEOF ,
32
+ Files : applyFiles {
33
+ Src : "text_fragment_error.src" ,
34
+ Patch : "text_fragment_error_short_src_before.patch" ,
35
+ },
36
+ Err : io .ErrUnexpectedEOF ,
39
37
},
40
38
"errorShortSrc" : {
41
- SrcFile : "text_fragment_error" ,
42
- PatchFile : "text_fragment_error_short_src" ,
43
- Err : io .ErrUnexpectedEOF ,
39
+ Files : applyFiles {
40
+ Src : "text_fragment_error.src" ,
41
+ Patch : "text_fragment_error_short_src.patch" ,
42
+ },
43
+ Err : io .ErrUnexpectedEOF ,
44
44
},
45
45
"errorContextConflict" : {
46
- SrcFile : "text_fragment_error" ,
47
- PatchFile : "text_fragment_error_context_conflict" ,
48
- Err : & Conflict {},
46
+ Files : applyFiles {
47
+ Src : "text_fragment_error.src" ,
48
+ Patch : "text_fragment_error_context_conflict.patch" ,
49
+ },
50
+ Err : & Conflict {},
49
51
},
50
52
"errorDeleteConflict" : {
51
- SrcFile : "text_fragment_error" ,
52
- PatchFile : "text_fragment_error_delete_conflict" ,
53
- Err : & Conflict {},
53
+ Files : applyFiles {
54
+ Src : "text_fragment_error.src" ,
55
+ Patch : "text_fragment_error_delete_conflict.patch" ,
56
+ },
57
+ Err : & Conflict {},
54
58
},
55
59
"errorNewFile" : {
56
- SrcFile : "text_fragment_error" ,
57
- PatchFile : "text_fragment_error_new_file" ,
58
- Err : & Conflict {},
60
+ Files : applyFiles {
61
+ Src : "text_fragment_error.src" ,
62
+ Patch : "text_fragment_error_new_file.patch" ,
63
+ },
64
+ Err : & Conflict {},
59
65
},
60
66
}
61
67
62
- loadFile := func (name , defaultName , ext string ) []byte {
63
- if name == "" {
64
- name = defaultName
65
- }
66
- d , err := ioutil .ReadFile (filepath .Join ("testdata" , "apply" , name + "." + ext ))
67
- if err != nil {
68
- t .Fatalf ("failed to read %s file: %v" , ext , err )
69
- }
70
- return d
71
- }
72
-
73
68
for name , test := range tests {
74
69
t .Run (name , func (t * testing.T ) {
75
- src := loadFile (test .SrcFile , test .File , "src" )
76
- patch := loadFile (test .PatchFile , test .File , "patch" )
77
-
78
- var result []byte
79
- if test .Err == nil {
80
- result = loadFile (test .DstFile , test .File , "dst" )
81
- }
70
+ src , patch , out := test .Files .Load (t )
82
71
83
72
files , _ , err := Parse (bytes .NewReader (patch ))
84
73
if err != nil {
85
74
t .Fatalf ("failed to parse patch file: %v" , err )
86
75
}
76
+ if len (files ) != 1 {
77
+ t .Fatalf ("patch should contain exactly one file, but it has %d" , len (files ))
78
+ }
79
+ if len (files [0 ].TextFragments ) != 1 {
80
+ t .Fatalf ("patch should contain exactly one fragment, but it has %d" , len (files [0 ].TextFragments ))
81
+ }
87
82
88
83
frag := files [0 ].TextFragments [0 ]
89
84
@@ -102,54 +97,39 @@ func TestTextFragmentApplyStrict(t *testing.T) {
102
97
t .Fatalf ("unexpected error applying fragment: %v" , err )
103
98
}
104
99
105
- if ! bytes .Equal (result , dst .Bytes ()) {
106
- t .Errorf ("incorrect result after apply\n expected:\n %s\n actual:\n %s" , result , dst .Bytes ())
100
+ if ! bytes .Equal (out , dst .Bytes ()) {
101
+ t .Errorf ("incorrect result after apply\n expected:\n %s\n actual:\n %s" , out , dst .Bytes ())
107
102
}
108
103
})
109
104
}
110
105
}
111
106
112
107
func TestBinaryFragmentApply (t * testing.T ) {
113
108
tests := map [string ]struct {
114
- File string
115
- SrcFile string
116
- PatchFile string
117
- DstFile string
118
-
119
- Err error
109
+ Files applyFiles
110
+ Err error
120
111
}{
121
- "literalCreate" : {File : "bin_fragment_literal_create" },
122
- "literalModify" : {File : "bin_fragment_literal_modify" },
123
- "deltaModify" : {File : "bin_fragment_delta_modify" },
124
- }
125
-
126
- loadFile := func (name , defaultName , ext string ) []byte {
127
- if name == "" {
128
- name = defaultName
129
- }
130
- d , err := ioutil .ReadFile (filepath .Join ("testdata" , "apply" , name + "." + ext ))
131
- if err != nil {
132
- t .Fatalf ("failed to read %s file: %v" , ext , err )
133
- }
134
- return d
112
+ "literalCreate" : {Files : getApplyFiles ("bin_fragment_literal_create" )},
113
+ "literalModify" : {Files : getApplyFiles ("bin_fragment_literal_modify" )},
114
+ "deltaModify" : {Files : getApplyFiles ("bin_fragment_delta_modify" )},
135
115
}
136
116
137
117
for name , test := range tests {
138
118
t .Run (name , func (t * testing.T ) {
139
- src := loadFile (test .SrcFile , test .File , "src" )
140
- patch := loadFile (test .PatchFile , test .File , "patch" )
141
-
142
- var result []byte
143
- if test .Err == nil {
144
- result = loadFile (test .DstFile , test .File , "dst" )
145
- }
119
+ src , patch , out := test .Files .Load (t )
146
120
147
121
files , _ , err := Parse (bytes .NewReader (patch ))
148
122
if err != nil {
149
123
t .Fatalf ("failed to parse patch file: %v" , err )
150
124
}
125
+ if len (files ) != 1 {
126
+ t .Fatalf ("patch should contain exactly one file, but it has %d" , len (files ))
127
+ }
151
128
152
129
frag := files [0 ].BinaryFragment
130
+ if frag == nil {
131
+ t .Fatalf ("patch should contain a binary fragment, but it was nil" )
132
+ }
153
133
154
134
var dst bytes.Buffer
155
135
err = frag .Apply (& dst , bytes .NewReader (src ))
@@ -166,9 +146,44 @@ func TestBinaryFragmentApply(t *testing.T) {
166
146
t .Fatalf ("unexpected error applying fragment: %v" , err )
167
147
}
168
148
169
- if ! bytes .Equal (result , dst .Bytes ()) {
170
- t .Errorf ("incorrect result after apply\n expected:\n %x\n actual:\n %x" , result , dst .Bytes ())
149
+ if ! bytes .Equal (out , dst .Bytes ()) {
150
+ t .Errorf ("incorrect result after apply\n expected:\n %x\n actual:\n %x" , out , dst .Bytes ())
171
151
}
172
152
})
173
153
}
174
154
}
155
+
156
+ type applyFiles struct {
157
+ Src string
158
+ Patch string
159
+ Out string
160
+ }
161
+
162
+ func getApplyFiles (name string ) applyFiles {
163
+ return applyFiles {
164
+ Src : name + ".src" ,
165
+ Patch : name + ".patch" ,
166
+ Out : name + ".out" ,
167
+ }
168
+ }
169
+
170
+ func (f applyFiles ) Load (t * testing.T ) (src []byte , patch []byte , out []byte ) {
171
+ load := func (name , kind string ) []byte {
172
+ d , err := ioutil .ReadFile (filepath .Join ("testdata" , "apply" , name ))
173
+ if err != nil {
174
+ t .Fatalf ("failed to read %s file: %v" , kind , err )
175
+ }
176
+ return d
177
+ }
178
+
179
+ if f .Src != "" {
180
+ src = load (f .Src , "source" )
181
+ }
182
+ if f .Patch != "" {
183
+ patch = load (f .Patch , "patch" )
184
+ }
185
+ if f .Out != "" {
186
+ out = load (f .Out , "output" )
187
+ }
188
+ return
189
+ }
0 commit comments