@@ -2,11 +2,13 @@ package gitdiff
2
2
3
3
import (
4
4
"bytes"
5
+ "fmt"
5
6
"os"
7
+ "slices"
6
8
"testing"
7
9
)
8
10
9
- func TestFile_String (t * testing.T ) {
11
+ func TestParseRoundtrip (t * testing.T ) {
10
12
sources := []string {
11
13
"testdata/string/binary_modify.patch" ,
12
14
"testdata/string/binary_new.patch" ,
@@ -35,6 +37,11 @@ func TestFile_String(t *testing.T) {
35
37
if string (b ) != str {
36
38
t .Errorf ("%s: incorrect patch\n expected: %q\n actual: %q\n " , src , string (b ), str )
37
39
}
40
+
41
+ reparsed := assertParseSingleFile (t , fmt .Sprintf ("Parse(%q).String()" , src ), []byte (str ))
42
+
43
+ // TODO(bkeyes): include source in these messages (via subtest?)
44
+ assertFilesEqual (t , original , reparsed )
38
45
}
39
46
}
40
47
@@ -49,19 +56,91 @@ func assertParseSingleFile(t *testing.T, src string, b []byte) *File {
49
56
return files [0 ]
50
57
}
51
58
52
- /*
53
- func TestDecode(t *testing.T) {
54
- actual := []byte("cmV-O")
55
- mine := []byte("cmV)N")
59
+ func assertFilesEqual (t * testing.T , expected , actual * File ) {
60
+ assertEqual (t , expected .OldName , actual .OldName , "OldName" )
61
+ assertEqual (t , expected .NewName , actual .NewName , "NewName" )
62
+
63
+ assertEqual (t , expected .IsNew , actual .IsNew , "IsNew" )
64
+ assertEqual (t , expected .IsDelete , actual .IsDelete , "IsDelete" )
65
+ assertEqual (t , expected .IsCopy , actual .IsCopy , "IsCopy" )
66
+ assertEqual (t , expected .IsRename , actual .IsRename , "IsRename" )
67
+
68
+ assertEqual (t , expected .OldMode , actual .OldMode , "OldMode" )
69
+ assertEqual (t , expected .NewMode , actual .NewMode , "NewMode" )
70
+
71
+ assertEqual (t , expected .OldOIDPrefix , actual .OldOIDPrefix , "OldOIDPrefix" )
72
+ assertEqual (t , expected .NewOIDPrefix , actual .NewOIDPrefix , "NewOIDPrefix" )
73
+ assertEqual (t , expected .Score , actual .Score , "Score" )
74
+
75
+ if len (expected .TextFragments ) == len (actual .TextFragments ) {
76
+ for i := range expected .TextFragments {
77
+ prefix := fmt .Sprintf ("TextFragments[%d]." , i )
78
+ ef := expected .TextFragments [i ]
79
+ af := actual .TextFragments [i ]
80
+
81
+ assertEqual (t , ef .Comment , af .Comment , prefix + "Comment" )
82
+
83
+ assertEqual (t , ef .OldPosition , af .OldPosition , prefix + "OldPosition" )
84
+ assertEqual (t , ef .OldLines , af .OldLines , prefix + "OldLines" )
85
+
86
+ assertEqual (t , ef .NewPosition , af .NewPosition , prefix + "NewPosition" )
87
+ assertEqual (t , ef .NewLines , af .NewLines , prefix + "NewLines" )
88
+
89
+ assertEqual (t , ef .LinesAdded , af .LinesAdded , prefix + "LinesAdded" )
90
+ assertEqual (t , ef .LinesDeleted , af .LinesDeleted , prefix + "LinesDeleted" )
91
+
92
+ assertEqual (t , ef .LeadingContext , af .LeadingContext , prefix + "LeadingContext" )
93
+ assertEqual (t , ef .TrailingContext , af .TrailingContext , prefix + "TrailingContext" )
94
+
95
+ if ! slices .Equal (ef .Lines , af .Lines ) {
96
+ t .Errorf ("%sLines: expected %#v, actual %#v" , prefix , ef .Lines , af .Lines )
97
+ }
98
+ }
99
+ } else {
100
+ t .Errorf ("TextFragments: expected length %d, actual length %d" , len (expected .TextFragments ), len (actual .TextFragments ))
101
+ }
102
+
103
+ assertEqual (t , expected .IsBinary , actual .IsBinary , "IsBinary" )
104
+
105
+ if expected .BinaryFragment != nil {
106
+ if actual .BinaryFragment == nil {
107
+ t .Errorf ("BinaryFragment: expected non-nil, actual is nil" )
108
+ } else {
109
+ ef := expected .BinaryFragment
110
+ af := expected .BinaryFragment
111
+
112
+ assertEqual (t , ef .Method , af .Method , "BinaryFragment.Method" )
113
+ assertEqual (t , ef .Size , af .Size , "BinaryFragment.Size" )
114
+
115
+ if ! slices .Equal (ef .Data , af .Data ) {
116
+ t .Errorf ("BinaryFragment.Data: expected %#v, actual %#v" , ef .Data , af .Data )
117
+ }
118
+ }
119
+ } else if actual .BinaryFragment != nil {
120
+ t .Errorf ("BinaryFragment: expected nil, actual is non-nil" )
121
+ }
56
122
57
- dst := make([]byte, 4)
123
+ if expected .ReverseBinaryFragment != nil {
124
+ if actual .ReverseBinaryFragment == nil {
125
+ t .Errorf ("ReverseBinaryFragment: expected non-nil, actual is nil" )
126
+ } else {
127
+ ef := expected .ReverseBinaryFragment
128
+ af := expected .ReverseBinaryFragment
58
129
59
- base85Decode(dst, actual )
60
- t.Logf("actual: %x / %b", dst, dst )
130
+ assertEqual ( t , ef . Method , af . Method , "ReverseBinaryFragment.Method" )
131
+ assertEqual ( t , ef . Size , af . Size , "ReverseBinaryFragment.Size" )
61
132
62
- base85Decode(dst, mine)
63
- t.Logf(" mine: %x / %b", dst, dst)
133
+ if ! slices .Equal (ef .Data , af .Data ) {
134
+ t .Errorf ("ReverseBinaryFragment.Data: expected %#v, actual %#v" , ef .Data , af .Data )
135
+ }
136
+ }
137
+ } else if actual .ReverseBinaryFragment != nil {
138
+ t .Errorf ("ReverseBinaryFragment: expected nil, actual is non-nil" )
139
+ }
140
+ }
64
141
65
- t.FailNow()
142
+ func assertEqual [T comparable ](t * testing.T , expected , actual T , name string ) {
143
+ if expected != actual {
144
+ t .Errorf ("%s: expected %#v, actual %#v" , name , expected , actual )
145
+ }
66
146
}
67
- */
0 commit comments