Skip to content

Commit a1149ed

Browse files
committed
Add tests for finding the next file header
Primarily check that leading non-header content is ignored and that special errors (like detached fragment headers) are raised.
1 parent 7478889 commit a1149ed

File tree

1 file changed

+87
-0
lines changed

1 file changed

+87
-0
lines changed

gitdiff/parser_test.go

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package gitdiff
33
import (
44
"bufio"
55
"io"
6+
"os"
7+
"reflect"
68
"strings"
79
"testing"
810
)
@@ -136,6 +138,91 @@ context line
136138
}
137139
}
138140

141+
func TestParseNextFileHeader(t *testing.T) {
142+
tests := map[string]struct {
143+
Input string
144+
Output *File
145+
Err bool
146+
}{
147+
"gitHeader": {
148+
Input: `commit 1acbae563cd6ef5750a82ee64e116c6eb065cb94
149+
Author: Morton Haypenny <mhaypenny@example.com>
150+
Date: Tue Apr 2 22:30:00 2019 -0700
151+
152+
This is a sample commit message.
153+
154+
diff --git a/file.txt b/file.txt
155+
index cc34da1..1acbae5 100644
156+
--- a/file.txt
157+
+++ b/file.txt
158+
@@ -1,3 +1,4 @@
159+
`,
160+
Output: &File{
161+
OldName: "file.txt",
162+
NewName: "file.txt",
163+
OldMode: os.FileMode(0100644),
164+
OldOIDPrefix: "cc34da1",
165+
NewOIDPrefix: "1acbae5",
166+
},
167+
},
168+
"traditionalHeader": {
169+
Input: `
170+
--- file.txt 2019-04-01 22:58:14.833597918 -0700
171+
+++ file.txt 2019-04-01 22:58:14.833597918 -0700
172+
@@ -1,3 +1,4 @@
173+
`,
174+
Output: &File{
175+
OldName: "file.txt",
176+
NewName: "file.txt",
177+
},
178+
},
179+
"noHeaders": {
180+
Input: `
181+
this is a line
182+
this is another line
183+
--- could this be a header?
184+
nope, it's just some dashes
185+
`,
186+
Output: nil,
187+
},
188+
"detatchedFragmentLike": {
189+
Input: `
190+
a wild fragment appears?
191+
@@ -1,3 +1,4 ~1,5 @@
192+
`,
193+
Output: nil,
194+
},
195+
"detatchedFragment": {
196+
Input: `
197+
a wild fragment appears?
198+
@@ -1,3 +1,4 @@
199+
`,
200+
Err: true,
201+
},
202+
}
203+
204+
for name, test := range tests {
205+
t.Run(name, func(t *testing.T) {
206+
p := newTestParser(test.Input, true)
207+
208+
f, err := p.ParseNextFileHeader()
209+
if test.Err {
210+
if err == nil || err == io.EOF {
211+
t.Fatalf("expected error parsing next file header, but got %v", err)
212+
}
213+
return
214+
}
215+
if err != nil {
216+
t.Fatalf("unexpected error parsing next file header: %v", err)
217+
}
218+
219+
if !reflect.DeepEqual(test.Output, f) {
220+
t.Errorf("incorrect file\nexpected: %+v\nactual: %+v", test.Output, f)
221+
}
222+
})
223+
}
224+
}
225+
139226
func newTestParser(input string, init bool) *parser {
140227
p := &parser{r: bufio.NewReader(strings.NewReader(input))}
141228
if init {

0 commit comments

Comments
 (0)