Skip to content

Commit da4d18a

Browse files
committed
refactor: move valid and invalid email addresses to test classes
Signed-off-by: Kenny Pflug <kenny.pflug@live.de>
1 parent 4b68928 commit da4d18a

File tree

3 files changed

+71
-52
lines changed

3 files changed

+71
-52
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using Xunit;
2+
3+
namespace Light.GuardClauses.Tests.StringAssertions;
4+
5+
public class InvalidEmailAddresses : TheoryData<string>
6+
{
7+
public InvalidEmailAddresses()
8+
{
9+
Add("plainaddress");
10+
Add("#@%^%#$@#$@#.com");
11+
Add("@domain.com");
12+
Add("Joe Smith <email@domain.com>");
13+
Add("email.domain.com");
14+
Add("email@domain@domain.com");
15+
Add(".email@domain.com");
16+
Add("email.@domain.com");
17+
Add("email..email@domain.com");
18+
Add("email@domain.com (Joe Smith)");
19+
Add("email@domain");
20+
Add("email@-domain.com");
21+
Add("email@111.222.333.44444");
22+
Add("email@domain..com");
23+
Add("email@256.256.256.256");
24+
}
25+
}
26+
27+
public sealed class InvalidEmailAddressesWithNull : InvalidEmailAddresses
28+
{
29+
public InvalidEmailAddressesWithNull()
30+
{
31+
Add(null);
32+
}
33+
}

Code/Light.GuardClauses.Tests/StringAssertions/IsEmailAddressTests.cs

Lines changed: 10 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -6,59 +6,17 @@ namespace Light.GuardClauses.Tests.StringAssertions;
66

77
public sealed class IsEmailAddressTests
88
{
9-
public static readonly TheoryData<string> InvalidEmailAddresses =
10-
[
11-
null,
12-
"plainaddress",
13-
"#@%^%#$@#$@#.com",
14-
"@domain.com",
15-
"Joe Smith <email@domain.com>",
16-
"email.domain.com",
17-
"email@domain@domain.com",
18-
".email@domain.com",
19-
"email.@domain.com",
20-
"email..email@domain.com",
21-
"email@domain.com (Joe Smith)",
22-
"email@domain",
23-
"email@-domain.com",
24-
"email@111.222.333.44444",
25-
"email@domain..com",
26-
"email@256.256.256.256",
27-
];
28-
299
[Theory]
30-
[MemberData(nameof(InvalidEmailAddresses))]
10+
[ClassData(typeof(InvalidEmailAddressesWithNull))]
3111
public void IsNotValidEmailAddress(string email)
3212
{
3313
var isValid = email.IsEmailAddress();
3414

3515
isValid.Should().BeFalse();
3616
}
3717

38-
public static readonly TheoryData<string> ValidEmailAddresses =
39-
[
40-
"email@domain.com",
41-
"firstname.lastname@domain.com",
42-
"email@subdomain.domain.com",
43-
"firstname+lastname@domain.com",
44-
"email@123.123.123.123",
45-
"1234567890@domain.com",
46-
"email@domain-one.com",
47-
"_______@domain.com",
48-
"email@domain.name",
49-
"email@domain.co.jp",
50-
"firstname-lastname@domain.com",
51-
"email@domain.museum", // Long TLD (>4 chars)
52-
"email@domain.travel", // Another long TLD
53-
"email@domain.photography", // Even longer TLD
54-
"email@[IPv6:2001:db8::1]", // IPv6 format
55-
"\"quoted\"@domain.com", // Quoted local part
56-
"user.name+tag+sorting@example.com", // Gmail-style + addressing
57-
"あいうえお@domain.com", // Unicode character test
58-
];
59-
6018
[Theory]
61-
[MemberData(nameof(ValidEmailAddresses))]
19+
[ClassData(typeof(ValidEmailAddresses))]
6220
public void IsValidEmailAddress(string email)
6321
{
6422
var isValid = email.IsEmailAddress();
@@ -68,7 +26,7 @@ public void IsValidEmailAddress(string email)
6826

6927
#if NET8_0
7028
[Theory]
71-
[MemberData(nameof(InvalidEmailAddresses))]
29+
[ClassData(typeof(InvalidEmailAddressesWithNull))]
7230
public void IsNotValidEmailAddress_ReadOnlySpan(string email)
7331
{
7432
var span = new ReadOnlySpan<char>(email?.ToCharArray() ?? []);
@@ -78,7 +36,7 @@ public void IsNotValidEmailAddress_ReadOnlySpan(string email)
7836
}
7937

8038
[Theory]
81-
[MemberData(nameof(ValidEmailAddresses))]
39+
[ClassData(typeof(ValidEmailAddresses))]
8240
public void IsValidEmailAddress_ReadOnlySpan(string email)
8341
{
8442
var span = email.AsSpan();
@@ -88,7 +46,7 @@ public void IsValidEmailAddress_ReadOnlySpan(string email)
8846
}
8947

9048
[Theory]
91-
[MemberData(nameof(InvalidEmailAddresses))]
49+
[ClassData(typeof(InvalidEmailAddressesWithNull))]
9250
public void IsNotValidEmailAddress_Span(string email)
9351
{
9452
var span = new Span<char>(email?.ToCharArray() ?? []);
@@ -98,7 +56,7 @@ public void IsNotValidEmailAddress_Span(string email)
9856
}
9957

10058
[Theory]
101-
[MemberData(nameof(ValidEmailAddresses))]
59+
[ClassData(typeof(ValidEmailAddresses))]
10260
public void IsValidEmailAddress_Span(string email)
10361
{
10462
var span = new Span<char>(email.ToCharArray());
@@ -108,7 +66,7 @@ public void IsValidEmailAddress_Span(string email)
10866
}
10967

11068
[Theory]
111-
[MemberData(nameof(InvalidEmailAddresses))]
69+
[ClassData(typeof(InvalidEmailAddressesWithNull))]
11270
public void IsNotValidEmailAddress_Memory(string email)
11371
{
11472
var memory = email?.ToCharArray().AsMemory() ?? Memory<char>.Empty;
@@ -118,7 +76,7 @@ public void IsNotValidEmailAddress_Memory(string email)
11876
}
11977

12078
[Theory]
121-
[MemberData(nameof(ValidEmailAddresses))]
79+
[ClassData(typeof(ValidEmailAddresses))]
12280
public void IsValidEmailAddress_Memory(string email)
12381
{
12482
var memory = email.ToCharArray().AsMemory();
@@ -128,7 +86,7 @@ public void IsValidEmailAddress_Memory(string email)
12886
}
12987

13088
[Theory]
131-
[MemberData(nameof(InvalidEmailAddresses))]
89+
[ClassData(typeof(InvalidEmailAddressesWithNull))]
13290
public void IsNotValidEmailAddress_ReadOnlyMemory(string email)
13391
{
13492
var memory = new ReadOnlyMemory<char>(email?.ToCharArray() ?? []);
@@ -138,7 +96,7 @@ public void IsNotValidEmailAddress_ReadOnlyMemory(string email)
13896
}
13997

14098
[Theory]
141-
[MemberData(nameof(ValidEmailAddresses))]
99+
[ClassData(typeof(ValidEmailAddresses))]
142100
public void IsValidEmailAddress_ReadOnlyMemory(string email)
143101
{
144102
var memory = new ReadOnlyMemory<char>(email.ToCharArray());
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
using Xunit;
2+
3+
namespace Light.GuardClauses.Tests.StringAssertions;
4+
5+
public sealed class ValidEmailAddresses : TheoryData<string>
6+
{
7+
public ValidEmailAddresses()
8+
{
9+
Add("email@domain.com");
10+
Add("firstname.lastname@domain.com");
11+
Add("email@subdomain.domain.com");
12+
Add("firstname+lastname@domain.com");
13+
Add("email@123.123.123.123");
14+
Add("1234567890@domain.com");
15+
Add("email@domain-one.com");
16+
Add("_______@domain.com");
17+
Add("email@domain.name");
18+
Add("email@domain.co.jp");
19+
Add("firstname-lastname@domain.com");
20+
Add("email@domain.museum"); // Long TLD (>4 chars)
21+
Add("email@domain.travel"); // Another long TLD
22+
Add("email@domain.photography"); // Even longer TLD
23+
Add("email@[IPv6:2001:db8::1]"); // IPv6 format
24+
Add("\"quoted\"@domain.com"); // Quoted local part
25+
Add("user.name+tag+sorting@example.com"); // Gmail-style + addressing
26+
Add("あいうえお@domain.com"); // Unicode character test
27+
}
28+
}

0 commit comments

Comments
 (0)