fork of go-gitdiff with jj support
1package gitdiff
2
3import (
4 "testing"
5)
6
7func TestParsePatchIdentity(t *testing.T) {
8 tests := map[string]struct {
9 Input string
10 Output PatchIdentity
11 Err interface{}
12 }{
13 "simple": {
14 Input: "Morton Haypenny <mhaypenny@example.com>",
15 Output: PatchIdentity{
16 Name: "Morton Haypenny",
17 Email: "mhaypenny@example.com",
18 },
19 },
20 "extraWhitespace": {
21 Input: "\t Morton Haypenny \r\n<mhaypenny@example.com> ",
22 Output: PatchIdentity{
23 Name: "Morton Haypenny",
24 Email: "mhaypenny@example.com",
25 },
26 },
27 "trailingCharacters": {
28 Input: "Morton Haypenny <mhaypenny@example.com> II",
29 Output: PatchIdentity{
30 Name: "Morton Haypenny II",
31 Email: "mhaypenny@example.com",
32 },
33 },
34 "onlyEmail": {
35 Input: "mhaypenny@example.com",
36 Output: PatchIdentity{
37 Name: "mhaypenny@example.com",
38 Email: "mhaypenny@example.com",
39 },
40 },
41 "onlyEmailInBrackets": {
42 Input: "<mhaypenny@example.com>",
43 Output: PatchIdentity{
44 Name: "mhaypenny@example.com",
45 Email: "mhaypenny@example.com",
46 },
47 },
48 "rfc5322SpecialCharacters": {
49 Input: `"dependabot[bot]" <12345+dependabot[bot]@users.noreply.github.com>`,
50 Output: PatchIdentity{
51 Name: "dependabot[bot]",
52 Email: "12345+dependabot[bot]@users.noreply.github.com",
53 },
54 },
55 "rfc5322QuotedPairs": {
56 Input: `"Morton \"Old-Timer\" Haypenny" <"mhaypenny\+[1900]"@example.com> (III \(PhD\))`,
57 Output: PatchIdentity{
58 Name: `Morton "Old-Timer" Haypenny (III (PhD))`,
59 Email: "mhaypenny+[1900]@example.com",
60 },
61 },
62 "rfc5322QuotedPairsOutOfContext": {
63 Input: `Morton \\Backslash Haypenny <mhaypenny@example.com>`,
64 Output: PatchIdentity{
65 Name: `Morton \\Backslash Haypenny`,
66 Email: "mhaypenny@example.com",
67 },
68 },
69 "emptyEmail": {
70 Input: "Morton Haypenny <>",
71 Output: PatchIdentity{
72 Name: "Morton Haypenny",
73 Email: "",
74 },
75 },
76 "unclosedEmail": {
77 Input: "Morton Haypenny <mhaypenny@example.com",
78 Output: PatchIdentity{
79 Name: "Morton Haypenny",
80 Email: "mhaypenny@example.com",
81 },
82 },
83 "bogusEmail": {
84 Input: "Morton Haypenny <mhaypenny>",
85 Output: PatchIdentity{
86 Name: "Morton Haypenny",
87 Email: "mhaypenny",
88 },
89 },
90 "bogusEmailWithWhitespace": {
91 Input: "Morton Haypenny < mhaypenny >",
92 Output: PatchIdentity{
93 Name: "Morton Haypenny",
94 Email: "mhaypenny",
95 },
96 },
97 "missingEmail": {
98 Input: "Morton Haypenny",
99 Err: "invalid identity",
100 },
101 "missingNameAndEmptyEmail": {
102 Input: "<>",
103 Err: "invalid identity",
104 },
105 "empty": {
106 Input: "",
107 Err: "invalid identity",
108 },
109 }
110
111 for name, test := range tests {
112 t.Run(name, func(t *testing.T) {
113 id, err := ParsePatchIdentity(test.Input)
114 if test.Err != nil {
115 assertError(t, test.Err, err, "parsing identity")
116 return
117 }
118 if err != nil {
119 t.Fatalf("unexpected error parsing identity: %v", err)
120 }
121
122 if test.Output != id {
123 t.Errorf("incorrect identity: expected %#v, actual %#v", test.Output, id)
124 }
125 })
126 }
127}