Files
Billy Keyes 08f3e635d6 Run 'go fix' to modernize code (#69)
This only updates to Go 1.21 baseline, which is what the module still
specifies as the minimum version. I'll need to run this again when
moving to Go 1.25 or 1.26 as minimum.
2026-05-25 09:11:07 -07:00

128 lines
3.0 KiB
Go

package gitdiff
import (
"testing"
)
func TestParsePatchIdentity(t *testing.T) {
tests := map[string]struct {
Input string
Output PatchIdentity
Err any
}{
"simple": {
Input: "Morton Haypenny <mhaypenny@example.com>",
Output: PatchIdentity{
Name: "Morton Haypenny",
Email: "mhaypenny@example.com",
},
},
"extraWhitespace": {
Input: "\t Morton Haypenny \r\n<mhaypenny@example.com> ",
Output: PatchIdentity{
Name: "Morton Haypenny",
Email: "mhaypenny@example.com",
},
},
"trailingCharacters": {
Input: "Morton Haypenny <mhaypenny@example.com> II",
Output: PatchIdentity{
Name: "Morton Haypenny II",
Email: "mhaypenny@example.com",
},
},
"onlyEmail": {
Input: "mhaypenny@example.com",
Output: PatchIdentity{
Name: "mhaypenny@example.com",
Email: "mhaypenny@example.com",
},
},
"onlyEmailInBrackets": {
Input: "<mhaypenny@example.com>",
Output: PatchIdentity{
Name: "mhaypenny@example.com",
Email: "mhaypenny@example.com",
},
},
"rfc5322SpecialCharacters": {
Input: `"dependabot[bot]" <12345+dependabot[bot]@users.noreply.github.com>`,
Output: PatchIdentity{
Name: "dependabot[bot]",
Email: "12345+dependabot[bot]@users.noreply.github.com",
},
},
"rfc5322QuotedPairs": {
Input: `"Morton \"Old-Timer\" Haypenny" <"mhaypenny\+[1900]"@example.com> (III \(PhD\))`,
Output: PatchIdentity{
Name: `Morton "Old-Timer" Haypenny (III (PhD))`,
Email: "mhaypenny+[1900]@example.com",
},
},
"rfc5322QuotedPairsOutOfContext": {
Input: `Morton \\Backslash Haypenny <mhaypenny@example.com>`,
Output: PatchIdentity{
Name: `Morton \\Backslash Haypenny`,
Email: "mhaypenny@example.com",
},
},
"emptyEmail": {
Input: "Morton Haypenny <>",
Output: PatchIdentity{
Name: "Morton Haypenny",
Email: "",
},
},
"unclosedEmail": {
Input: "Morton Haypenny <mhaypenny@example.com",
Output: PatchIdentity{
Name: "Morton Haypenny",
Email: "mhaypenny@example.com",
},
},
"bogusEmail": {
Input: "Morton Haypenny <mhaypenny>",
Output: PatchIdentity{
Name: "Morton Haypenny",
Email: "mhaypenny",
},
},
"bogusEmailWithWhitespace": {
Input: "Morton Haypenny < mhaypenny >",
Output: PatchIdentity{
Name: "Morton Haypenny",
Email: "mhaypenny",
},
},
"missingEmail": {
Input: "Morton Haypenny",
Err: "invalid identity",
},
"missingNameAndEmptyEmail": {
Input: "<>",
Err: "invalid identity",
},
"empty": {
Input: "",
Err: "invalid identity",
},
}
for name, test := range tests {
t.Run(name, func(t *testing.T) {
id, err := ParsePatchIdentity(test.Input)
if test.Err != nil {
assertError(t, test.Err, err, "parsing identity")
return
}
if err != nil {
t.Fatalf("unexpected error parsing identity: %v", err)
}
if test.Output != id {
t.Errorf("incorrect identity: expected %#v, actual %#v", test.Output, id)
}
})
}
}