fork of go-gitdiff with jj support
at v0.0.0 3.0 kB view raw
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}