forked from tangled.org/core
Monorepo for Tangled — https://tangled.org
at master 1.6 kB view raw
1package email 2 3import ( 4 "testing" 5) 6 7func TestIsValidEmail(t *testing.T) { 8 tests := []struct { 9 name string 10 email string 11 want bool 12 }{ 13 // Valid emails using RFC 2606 reserved domains 14 {"standard email", "user@example.com", true}, 15 {"single char local", "a@example.com", true}, 16 {"dot in middle", "first.last@example.com", true}, 17 {"multiple dots", "a.b.c@example.com", true}, 18 {"plus tag", "user+tag@example.com", true}, 19 {"numbers", "user123@example.com", true}, 20 {"example.org", "user@example.org", true}, 21 {"example.net", "user@example.net", true}, 22 23 // Invalid format - rejected by mail.ParseAddress 24 {"empty string", "", false}, 25 {"no at sign", "userexample.com", false}, 26 {"no domain", "user@", false}, 27 {"no local part", "@example.com", false}, 28 {"double at", "user@@example.com", false}, 29 {"just at sign", "@", false}, 30 {"leading dot", ".user@example.com", false}, 31 {"trailing dot", "user.@example.com", false}, 32 {"consecutive dots", "user..name@example.com", false}, 33 34 // Whitespace - rejected before parsing 35 {"space in local", "user @example.com", false}, 36 {"space in domain", "user@ example.com", false}, 37 {"tab", "user\t@example.com", false}, 38 {"newline", "user\n@example.com", false}, 39 40 // MX lookup - using RFC 2606 reserved TLDs (guaranteed no MX) 41 {"invalid TLD", "user@example.invalid", false}, 42 {"test TLD", "user@mail.test", false}, 43 } 44 45 for _, tt := range tests { 46 t.Run(tt.name, func(t *testing.T) { 47 got := IsValidEmail(tt.email) 48 if got != tt.want { 49 t.Errorf("IsValidEmail(%q) = %v, want %v", tt.email, got, tt.want) 50 } 51 }) 52 } 53}