mirror of
https://github.com/wneessen/go-mail.git
synced 2024-11-15 02:12:55 +01:00
Add test for European umlaut characters and remove others
Added a test case for European umlaut characters in msg_test.go. Removed redundant test cases related to address handlers (To, Cc, Bcc) and other helper methods to streamline the code.
This commit is contained in:
parent
007286fc5e
commit
591425bb99
1 changed files with 2 additions and 378 deletions
380
msg_test.go
380
msg_test.go
|
@ -1570,6 +1570,8 @@ func TestMsg_Subject(t *testing.T) {
|
||||||
}{
|
}{
|
||||||
{"Normal latin characters", "Hello world!", "Hello world!"},
|
{"Normal latin characters", "Hello world!", "Hello world!"},
|
||||||
{"Empty string", "", ""},
|
{"Empty string", "", ""},
|
||||||
|
{"European umlaut characters", "Héllô wörld! äöüß",
|
||||||
|
"=?UTF-8?q?H=C3=A9ll=C3=B4_w=C3=B6rld!_=C3=A4=C3=B6=C3=BC=C3=9F?="},
|
||||||
{
|
{
|
||||||
"Japanese characters", `これはテスト対象です。`,
|
"Japanese characters", `これはテスト対象です。`,
|
||||||
`=?UTF-8?q?=E3=81=93=E3=82=8C=E3=81=AF=E3=83=86=E3=82=B9=E3=83=88=E5=AF=BE?= ` +
|
`=?UTF-8?q?=E3=81=93=E3=82=8C=E3=81=AF=E3=83=86=E3=82=B9=E3=83=88=E5=AF=BE?= ` +
|
||||||
|
@ -1694,225 +1696,6 @@ func checkGenHeader(t *testing.T, message *Msg, header Header, fn string, field,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestMsg_AddTo tests the Msg.AddTo method
|
|
||||||
|
|
||||||
func TestMsg_AddTo(t *testing.T) {
|
|
||||||
a := []string{"address1@example.com", "address2@example.com"}
|
|
||||||
na := "address3@example.com"
|
|
||||||
m := NewMsg()
|
|
||||||
if err := m.To(a...); err != nil {
|
|
||||||
t.Errorf("failed to set TO addresses: %s", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err := m.AddTo(na); err != nil {
|
|
||||||
t.Errorf("AddTo failed: %s", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
atf := false
|
|
||||||
for _, v := range m.addrHeader[HeaderTo] {
|
|
||||||
if v.Address == na {
|
|
||||||
atf = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if !atf {
|
|
||||||
t.Errorf("AddTo() failed. Address %q not found in TO address slice.", na)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TestMsg_AddToFormat tests the Msg.AddToFormat method
|
|
||||||
|
|
||||||
func TestMsg_AddToFormat(t *testing.T) {
|
|
||||||
a := []string{"address1@example.com", "address2@example.com"}
|
|
||||||
nn := "Toni Tester"
|
|
||||||
na := "address3@example.com"
|
|
||||||
w := `"Toni Tester" <address3@example.com>`
|
|
||||||
m := NewMsg()
|
|
||||||
if err := m.To(a...); err != nil {
|
|
||||||
t.Errorf("failed to set TO addresses: %s", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err := m.AddToFormat(nn, na); err != nil {
|
|
||||||
t.Errorf("AddToFormat failed: %s", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
atf := false
|
|
||||||
for _, v := range m.addrHeader[HeaderTo] {
|
|
||||||
if v.String() == w {
|
|
||||||
atf = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if !atf {
|
|
||||||
t.Errorf("AddToFormat() failed. Address %q not found in TO address slice.", w)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TestMsg_ToIgnoreInvalid tests the Msg.ToIgnoreInvalid method
|
|
||||||
|
|
||||||
func TestMsg_ToIgnoreInvalid(t *testing.T) {
|
|
||||||
a := []string{"address1@example.com", "address2@example.com"}
|
|
||||||
fa := []string{"address1@example.com", "address2@example.com", "failedaddress.com"}
|
|
||||||
m := NewMsg()
|
|
||||||
|
|
||||||
m.ToIgnoreInvalid(a...)
|
|
||||||
l := len(m.addrHeader[HeaderTo])
|
|
||||||
if l != len(a) {
|
|
||||||
t.Errorf("ToIgnoreInvalid() failed. Expected %d addresses, got: %d", len(a), l)
|
|
||||||
}
|
|
||||||
m.ToIgnoreInvalid(fa...)
|
|
||||||
l = len(m.addrHeader[HeaderTo])
|
|
||||||
if l != len(fa)-1 {
|
|
||||||
t.Errorf("ToIgnoreInvalid() failed. Expected %d addresses, got: %d", len(fa)-1, l)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TestMsg_AddCc tests the Msg.AddCc method
|
|
||||||
|
|
||||||
func TestMsg_AddCc(t *testing.T) {
|
|
||||||
a := []string{"address1@example.com", "address2@example.com"}
|
|
||||||
na := "address3@example.com"
|
|
||||||
m := NewMsg()
|
|
||||||
if err := m.Cc(a...); err != nil {
|
|
||||||
t.Errorf("failed to set CC addresses: %s", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err := m.AddCc(na); err != nil {
|
|
||||||
t.Errorf("AddCc failed: %s", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
atf := false
|
|
||||||
for _, v := range m.addrHeader[HeaderCc] {
|
|
||||||
if v.Address == na {
|
|
||||||
atf = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if !atf {
|
|
||||||
t.Errorf("AddCc() failed. Address %q not found in CC address slice.", na)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TestMsg_AddCcFormat tests the Msg.AddCcFormat method
|
|
||||||
|
|
||||||
func TestMsg_AddCcFormat(t *testing.T) {
|
|
||||||
a := []string{"address1@example.com", "address2@example.com"}
|
|
||||||
nn := "Toni Tester"
|
|
||||||
na := "address3@example.com"
|
|
||||||
w := `"Toni Tester" <address3@example.com>`
|
|
||||||
m := NewMsg()
|
|
||||||
if err := m.Cc(a...); err != nil {
|
|
||||||
t.Errorf("failed to set CC addresses: %s", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err := m.AddCcFormat(nn, na); err != nil {
|
|
||||||
t.Errorf("AddCcFormat failed: %s", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
atf := false
|
|
||||||
for _, v := range m.addrHeader[HeaderCc] {
|
|
||||||
if v.String() == w {
|
|
||||||
atf = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if !atf {
|
|
||||||
t.Errorf("AddCcFormat() failed. Address %q not found in CC address slice.", w)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TestMsg_CcIgnoreInvalid tests the Msg.CcIgnoreInvalid method
|
|
||||||
|
|
||||||
func TestMsg_CcIgnoreInvalid(t *testing.T) {
|
|
||||||
a := []string{"address1@example.com", "address2@example.com"}
|
|
||||||
fa := []string{"address1@example.com", "address2@example.com", "failedaddress.com"}
|
|
||||||
m := NewMsg()
|
|
||||||
|
|
||||||
m.CcIgnoreInvalid(a...)
|
|
||||||
l := len(m.addrHeader[HeaderCc])
|
|
||||||
if l != len(a) {
|
|
||||||
t.Errorf("CcIgnoreInvalid() failed. Expected %d addresses, got: %d", len(a), l)
|
|
||||||
}
|
|
||||||
m.CcIgnoreInvalid(fa...)
|
|
||||||
l = len(m.addrHeader[HeaderCc])
|
|
||||||
if l != len(fa)-1 {
|
|
||||||
t.Errorf("CcIgnoreInvalid() failed. Expected %d addresses, got: %d", len(fa)-1, l)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TestMsg_AddBcc tests the Msg.AddBcc method
|
|
||||||
|
|
||||||
func TestMsg_AddBcc(t *testing.T) {
|
|
||||||
a := []string{"address1@example.com", "address2@example.com"}
|
|
||||||
na := "address3@example.com"
|
|
||||||
m := NewMsg()
|
|
||||||
if err := m.Bcc(a...); err != nil {
|
|
||||||
t.Errorf("failed to set BCC addresses: %s", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err := m.AddBcc(na); err != nil {
|
|
||||||
t.Errorf("AddBcc failed: %s", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
atf := false
|
|
||||||
for _, v := range m.addrHeader[HeaderBcc] {
|
|
||||||
if v.Address == na {
|
|
||||||
atf = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if !atf {
|
|
||||||
t.Errorf("AddBcc() failed. Address %q not found in BCC address slice.", na)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TestMsg_AddBccFormat tests the Msg.AddBccFormat method
|
|
||||||
|
|
||||||
func TestMsg_AddBccFormat(t *testing.T) {
|
|
||||||
a := []string{"address1@example.com", "address2@example.com"}
|
|
||||||
nn := "Toni Tester"
|
|
||||||
na := "address3@example.com"
|
|
||||||
w := `"Toni Tester" <address3@example.com>`
|
|
||||||
m := NewMsg()
|
|
||||||
if err := m.Bcc(a...); err != nil {
|
|
||||||
t.Errorf("failed to set BCC addresses: %s", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err := m.AddBccFormat(nn, na); err != nil {
|
|
||||||
t.Errorf("AddBccFormat failed: %s", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
atf := false
|
|
||||||
for _, v := range m.addrHeader[HeaderBcc] {
|
|
||||||
if v.String() == w {
|
|
||||||
atf = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if !atf {
|
|
||||||
t.Errorf("AddBccFormat() failed. Address %q not found in BCC address slice.", w)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TestMsg_BccIgnoreInvalid tests the Msg.BccIgnoreInvalid method
|
|
||||||
|
|
||||||
func TestMsg_BccIgnoreInvalid(t *testing.T) {
|
|
||||||
a := []string{"address1@example.com", "address2@example.com"}
|
|
||||||
fa := []string{"address1@example.com", "address2@example.com", "failedaddress.com"}
|
|
||||||
m := NewMsg()
|
|
||||||
|
|
||||||
m.BccIgnoreInvalid(a...)
|
|
||||||
l := len(m.addrHeader[HeaderBcc])
|
|
||||||
if l != len(a) {
|
|
||||||
t.Errorf("BccIgnoreInvalid() failed. Expected %d addresses, got: %d", len(a), l)
|
|
||||||
}
|
|
||||||
m.BccIgnoreInvalid(fa...)
|
|
||||||
l = len(m.addrHeader[HeaderBcc])
|
|
||||||
if l != len(fa)-1 {
|
|
||||||
t.Errorf("BccIgnoreInvalid() failed. Expected %d addresses, got: %d", len(fa)-1, l)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TestMsg_SetBulk tests the Msg.SetBulk method
|
// TestMsg_SetBulk tests the Msg.SetBulk method
|
||||||
|
|
||||||
func TestMsg_SetBulk(t *testing.T) {
|
func TestMsg_SetBulk(t *testing.T) {
|
||||||
|
@ -2043,63 +1826,6 @@ func checkGenHeader(t *testing.T, message *Msg, header Header, fn string, field,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestMsg_FromFormat tests the FromFormat and EnvelopeFrom methods for the Msg object
|
|
||||||
|
|
||||||
func TestMsg_FromFormat(t *testing.T) {
|
|
||||||
tests := []struct {
|
|
||||||
tname string
|
|
||||||
name string
|
|
||||||
addr string
|
|
||||||
want string
|
|
||||||
fail bool
|
|
||||||
}{
|
|
||||||
{
|
|
||||||
"valid name and addr", "Toni Tester", "tester@example.com",
|
|
||||||
`"Toni Tester" <tester@example.com>`, false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"no name with valid addr", "", "tester@example.com",
|
|
||||||
`<tester@example.com>`, false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"valid name with invalid addr", "Toni Tester", "@example.com",
|
|
||||||
``, true,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
m := NewMsg()
|
|
||||||
for _, tt := range tests {
|
|
||||||
t.Run(tt.tname, func(t *testing.T) {
|
|
||||||
if err := m.FromFormat(tt.name, tt.addr); err != nil && !tt.fail {
|
|
||||||
t.Errorf("failed to FromFormat(): %s", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err := m.EnvelopeFromFormat(tt.name, tt.addr); err != nil && !tt.fail {
|
|
||||||
t.Errorf("failed to EnvelopeFromFormat(): %s", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
var fa *mail.Address
|
|
||||||
f, ok := m.addrHeader[HeaderFrom]
|
|
||||||
if ok && len(f) > 0 {
|
|
||||||
fa = f[0]
|
|
||||||
}
|
|
||||||
if (!ok || len(f) == 0) && !tt.fail {
|
|
||||||
t.Errorf(`valid from address expected, but "From:" field is empty`)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if tt.fail && len(f) > 0 {
|
|
||||||
t.Errorf("FromFormat() was supposed to failed but got value: %s", fa.String())
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if !tt.fail && fa.String() != tt.want {
|
|
||||||
t.Errorf("wrong result for FromFormat(). Want: %s, got: %s", tt.want, fa.String())
|
|
||||||
}
|
|
||||||
m.addrHeader[HeaderFrom] = nil
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestMsg_GetRecipients(t *testing.T) {
|
func TestMsg_GetRecipients(t *testing.T) {
|
||||||
a := []string{"to@example.com", "cc@example.com", "bcc@example.com"}
|
a := []string{"to@example.com", "cc@example.com", "bcc@example.com"}
|
||||||
|
@ -2156,108 +1882,6 @@ func checkGenHeader(t *testing.T, message *Msg, header Header, fn string, field,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestMsg_ReplyTo tests the Msg.ReplyTo and Msg.ReplyToFormat methods
|
|
||||||
|
|
||||||
func TestMsg_ReplyTo(t *testing.T) {
|
|
||||||
tests := []struct {
|
|
||||||
tname string
|
|
||||||
name string
|
|
||||||
addr string
|
|
||||||
want string
|
|
||||||
sf bool
|
|
||||||
}{
|
|
||||||
{
|
|
||||||
"valid name and addr", "Toni Tester", "tester@example.com",
|
|
||||||
`"Toni Tester" <tester@example.com>`, false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"no name with valid addr", "", "tester@example.com",
|
|
||||||
`<tester@example.com>`, false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"valid name with invalid addr", "Toni Tester", "@example.com",
|
|
||||||
``, true,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
m := NewMsg()
|
|
||||||
for _, tt := range tests {
|
|
||||||
t.Run(tt.tname, func(t *testing.T) {
|
|
||||||
if err := m.ReplyTo(tt.want); err != nil && !tt.sf {
|
|
||||||
t.Errorf("ReplyTo() method failed: %s", err)
|
|
||||||
}
|
|
||||||
if !tt.sf {
|
|
||||||
rt, ok := m.genHeader[HeaderReplyTo]
|
|
||||||
if !ok {
|
|
||||||
t.Errorf("ReplyTo() failed: ReplyTo generic header not set")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if len(rt) <= 0 {
|
|
||||||
t.Errorf("ReplyTo() failed: length of generic ReplyTo header is zero or less than zero")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if rt[0] != tt.want {
|
|
||||||
t.Errorf("ReplyTo() failed: expected value: %s, got: %s", tt.want, rt[0])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
m.genHeader = nil
|
|
||||||
m.genHeader = make(map[Header][]string)
|
|
||||||
if err := m.ReplyToFormat(tt.name, tt.addr); err != nil && !tt.sf {
|
|
||||||
t.Errorf("ReplyToFormat() method failed: %s", err)
|
|
||||||
}
|
|
||||||
if !tt.sf {
|
|
||||||
rt, ok := m.genHeader[HeaderReplyTo]
|
|
||||||
if !ok {
|
|
||||||
t.Errorf("ReplyTo() failed: ReplyTo generic header not set")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if len(rt) <= 0 {
|
|
||||||
t.Errorf("ReplyTo() failed: length of generic ReplyTo header is zero or less than zero")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if rt[0] != tt.want {
|
|
||||||
t.Errorf("ReplyTo() failed: expected value: %s, got: %s", tt.want, rt[0])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
m.genHeader = nil
|
|
||||||
m.genHeader = make(map[Header][]string)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TestMsg_Subject tests the Msg.Subject method
|
|
||||||
|
|
||||||
func TestMsg_Subject(t *testing.T) {
|
|
||||||
tests := []struct {
|
|
||||||
name string
|
|
||||||
sub string
|
|
||||||
want string
|
|
||||||
}{
|
|
||||||
{"normal subject", "This is a test subject", "This is a test subject"},
|
|
||||||
{
|
|
||||||
"subject with umlauts", "This is a test subject with umlauts: üäöß",
|
|
||||||
"=?UTF-8?q?This_is_a_test_subject_with_umlauts:_=C3=BC=C3=A4=C3=B6=C3=9F?=",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"subject with emoji", "This is a test subject with emoji: 📧",
|
|
||||||
"=?UTF-8?q?This_is_a_test_subject_with_emoji:_=F0=9F=93=A7?=",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
m := NewMsg()
|
|
||||||
for _, tt := range tests {
|
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
|
||||||
m.Subject(tt.sub)
|
|
||||||
s, ok := m.genHeader[HeaderSubject]
|
|
||||||
if !ok || len(s) <= 0 {
|
|
||||||
t.Errorf("Subject() method failed. Generic header for Subject is empty")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if s[0] != tt.want {
|
|
||||||
t.Errorf("Subject() method failed. Expected: %s, got: %s", tt.want, s[0])
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TestMsg_SetImportance tests the Msg.SetImportance method
|
// TestMsg_SetImportance tests the Msg.SetImportance method
|
||||||
|
|
||||||
func TestMsg_SetImportance(t *testing.T) {
|
func TestMsg_SetImportance(t *testing.T) {
|
||||||
|
|
Loading…
Reference in a new issue