-
-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
5 changed files
with
98 additions
and
18 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -29,11 +29,13 @@ Simple use-cases: | |
} | ||
|
||
if let mailboxInfo = EmailSyntaxValidator.mailbox(from: "[email protected]") { | ||
// mailboxInfo.email == "[email protected]" | ||
// mailboxInfo.localPart == .dotAtom("santa.claus") | ||
// mailboxInfo.host == .domain("northpole.com") | ||
} | ||
|
||
if let mailboxInfo = EmailSyntaxValidator.mailbox(from: "\"Santa Claus\"@northpole.com") { | ||
// mailboxInfo.email == "\"Santa Claus\"@northpole.com" | ||
// mailboxInfo.localPart == .quotedString("Santa Claus") | ||
// mailboxInfo.host == .domain("northpole.com"") | ||
} | ||
|
@@ -45,13 +47,23 @@ Allowing IPv4/IPv6 addresses | |
} | ||
|
||
if let mailboxInfo = EmailSyntaxValidator.mailbox(from: "email@[IPv6:fe80::1]", allowAddressLiteral: true) { | ||
// mailboxInfo.email == "email@[IPv6:fe80::1]" | ||
// mailboxInfo.localPart == .dotAtom("email") | ||
// mailboxInfo.host == .addressLiteral("IPv6:fe80::1") | ||
} | ||
|
||
Validating Unicode emails encoded into ASCII (RFC2047): | ||
|
||
if let mailboxInfo = EmailSyntaxValidator.mailbox(from: "=?utf-8?B?7ZWcQHgu7ZWc6rWt?=", compatibility: .asciiWithUnicodeExtension) { | ||
// mailboxInfo.email == "=?utf-8?B?7ZWcQHgu7ZWc6rWt?=" | ||
// mailboxInfo.localpart == .dotAtom("한") | ||
// mailboxInfo.host == .domain("x.한국") | ||
} | ||
|
||
Validating Unicode emails with auto-RFC2047 encoding: | ||
|
||
if let mailboxInfo = EmailSyntaxValidator.mailbox(from: "한@x.한국", options: [.autoEncodeToRfc2047], compatibility.asciiWithUnicodeExtension) { | ||
// mailboxInfo.email == "=?utf-8?b?7ZWcQHgu7ZWc6rWt?=" | ||
// mailboxInfo.localpart == .dotAtom("한") | ||
// mailboxInfo.host == .domain("x.한국") | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -137,13 +137,13 @@ final class EmailSyntaxValidatorTests: XCTestCase { | |
} | ||
|
||
func testAsciiRejectsUnicode() { | ||
XCTAssertNil(EmailSyntaxValidator.mailbox(from: "한@x.한국", strategy: .smtpHeader, compatibility: .ascii), "Unicode in email addresses should not be allowed in ASCII compatibility mode") | ||
XCTAssertNil(EmailSyntaxValidator.mailbox(from: "\"한\"@x.한국", strategy: .smtpHeader, compatibility: .ascii), "Unicode in email addresses should not be allowed in ASCII compatibility mode") | ||
XCTAssertNil(EmailSyntaxValidator.mailbox(from: "한@x.한국", compatibility: .ascii), "Unicode in email addresses should not be allowed in ASCII compatibility mode") | ||
XCTAssertNil(EmailSyntaxValidator.mailbox(from: "\"한\"@x.한국", compatibility: .ascii), "Unicode in email addresses should not be allowed in ASCII compatibility mode") | ||
} | ||
|
||
func testUnicodeCompatibility() { | ||
XCTAssertEqual(EmailSyntaxValidator.mailbox(from: "한@x.한국", strategy: .smtpHeader, compatibility: .unicode)?.localPart, .dotAtom("한"), "Unicode email addresses should be allowed in Unicode compatibility") | ||
XCTAssertEqual(EmailSyntaxValidator.mailbox(from: "한.భారత్@x.한국", strategy: .smtpHeader, compatibility: .unicode)?.localPart, .dotAtom("한.భారత్"), "Unicode email addresses should be allowed in Unicode compatibility") | ||
XCTAssertEqual(EmailSyntaxValidator.mailbox(from: "한@x.한국", compatibility: .unicode)?.localPart, .dotAtom("한"), "Unicode email addresses should be allowed in Unicode compatibility") | ||
XCTAssertEqual(EmailSyntaxValidator.mailbox(from: "한.భారత్@x.한국", compatibility: .unicode)?.localPart, .dotAtom("한.భారత్"), "Unicode email addresses should be allowed in Unicode compatibility") | ||
} | ||
|
||
func testLocalPartWithQEncoding() { | ||
|
@@ -176,4 +176,20 @@ final class EmailSyntaxValidatorTests: XCTestCase { | |
XCTAssertFalse(EmailSyntaxValidator.correctlyFormatted("\"Test\"@\"northpole.com")) | ||
XCTAssertFalse(EmailSyntaxValidator.correctlyFormatted("\"Test\".hello\"@northpole.com")) | ||
} | ||
|
||
func testAsciiWithUnicodeExtension() { | ||
XCTAssertFalse(EmailSyntaxValidator.correctlyFormatted("한@x.한국", options: [], compatibility: .asciiWithUnicodeExtension), "Unicode characters not properly encoded should be rejected") | ||
XCTAssertFalse(EmailSyntaxValidator.correctlyFormatted("한@x.한국", options: [.autoEncodeToRfc2047], compatibility: .ascii), "Option .autoEncodeToRfc2047 should be ignored in pure ASCII compatibility mode") | ||
XCTAssertTrue(EmailSyntaxValidator.correctlyFormatted("한@x.한국", options: [.autoEncodeToRfc2047], compatibility: .asciiWithUnicodeExtension), "Improperly encoded Unicode characters should be automatically RFC2047 encoded when .autoEncodeToRfc2047 option is specified") | ||
XCTAssertEqual(EmailSyntaxValidator.mailbox(from: "한@x.한국", options: [.autoEncodeToRfc2047], compatibility: .asciiWithUnicodeExtension)?.email, "=?utf-8?b?7ZWcQHgu7ZWc6rWt?=") | ||
XCTAssertEqual(EmailSyntaxValidator.mailbox(from: "한@x.한국", options: [.autoEncodeToRfc2047], compatibility: .asciiWithUnicodeExtension)?.localPart, .dotAtom("한")) | ||
XCTAssertEqual(EmailSyntaxValidator.mailbox(from: "한@x.한국", options: [.autoEncodeToRfc2047], compatibility: .asciiWithUnicodeExtension)?.host, .domain("x.한국")) | ||
} | ||
|
||
func testAutoEncodeToRfc2047Guards() { | ||
XCTAssertFalse(EmailSyntaxValidator.correctlyFormatted("=?utf-8?b?7ZWcQHgu7ZWc6rWt?=", options: [.autoEncodeToRfc2047], compatibility: .ascii)) | ||
XCTAssertFalse(EmailSyntaxValidator.correctlyFormatted("\n[email protected]", options: [.autoEncodeToRfc2047], compatibility: .ascii)) | ||
XCTAssertFalse(EmailSyntaxValidator.correctlyFormatted("\n[email protected]", options: [.autoEncodeToRfc2047], compatibility: .unicode)) | ||
XCTAssertFalse(EmailSyntaxValidator.correctlyFormatted("1234567890123456789012345678901234567890123456789012345678901234567890@this.com", options: [.autoEncodeToRfc2047], compatibility: .asciiWithUnicodeExtension)) | ||
} | ||
} |