From 080f8593f875d897401424628e35243520708b61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Renella?= Date: Tue, 22 Aug 2017 10:47:39 +0200 Subject: [PATCH] Email validator on string extension & tests --- SwiftiumKit/StringExtensions.swift | 5 + SwiftiumKitTests/StringExtensionsTests.swift | 156 +++++++++++++++++++ 2 files changed, 161 insertions(+) diff --git a/SwiftiumKit/StringExtensions.swift b/SwiftiumKit/StringExtensions.swift index 852da7e..12454f6 100644 --- a/SwiftiumKit/StringExtensions.swift +++ b/SwiftiumKit/StringExtensions.swift @@ -253,6 +253,11 @@ extension String { } extension String { + public var isEmail: Bool { + let emailRegex = "[_A-Za-z0-9-+]+(?:\\.[_A-Za-z0-9-+]+)*@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}" + return NSPredicate(format: "SELF MATCHES %@", emailRegex).evaluate(with: self) + } + public func firstLowercased() -> String { var firstLowercased = self if let firstCharLowercased = self[0]?.lowercased() { diff --git a/SwiftiumKitTests/StringExtensionsTests.swift b/SwiftiumKitTests/StringExtensionsTests.swift index ed93422..ce537a6 100644 --- a/SwiftiumKitTests/StringExtensionsTests.swift +++ b/SwiftiumKitTests/StringExtensionsTests.swift @@ -364,4 +364,160 @@ class StringExtensionsTests: XCTestCase { // Expect XCTAssertEqual(result, "uppercase Words In String") } + + // MARK: - + + func testIsEmail_lowercase_valid() { + // Given + let email = "fistname.lastname@domain.tld" + + // When + let isEmail = email.isEmail + + // Expect + XCTAssertTrue(isEmail) + } + + func testIsEmail_randomcase_valid() { + // Given + let email = "fIsTnAmE.lAsTnAmE@dOmAiN.tLd" + + // When + let isEmail = email.isEmail + + // Expect + XCTAssertTrue(isEmail) + } + + func testIsEmail_no_tld_invalid() { + // Given + let email = "fistname.lastname@domain" + + // When + let isEmail = email.isEmail + + // Expect + XCTAssertFalse(isEmail) + } + + func testIsEmail_no_tld_ending_dot_invalid() { + // Given + let email = "fistname.lastname@domain." + + // When + let isEmail = email.isEmail + + // Expect + XCTAssertFalse(isEmail) + } + + func testIsEmail_no_at_invalid() { + // Given + let email = "fistname.lastnamedomain.tld" + + // When + let isEmail = email.isEmail + + // Expect + XCTAssertFalse(isEmail) + } + + func testIsEmail_no_name_invalid() { + // Given + let email = "@domain.tld" + + // When + let isEmail = email.isEmail + + // Expect + XCTAssertFalse(isEmail) + } + + func testIsEmail_whitespace_name_invalid() { + // Given + let email = "fistname lastname@domain.tld" + + // When + let isEmail = email.isEmail + + // Expect + XCTAssertFalse(isEmail) + } + + func testIsEmail_whitespace_domain_invalid() { + // Given + let email = "fistname.lastname@dom ain.tld" + + // When + let isEmail = email.isEmail + + // Expect + XCTAssertFalse(isEmail) + } + + func testIsEmail_whitespace_tld_invalid() { + // Given + let email = "fistname.lastname@domain.t ld" + + // When + let isEmail = email.isEmail + + // Expect + XCTAssertFalse(isEmail) + } + + func testIsEmail_double_dot_name_invalid() { + // Given + let email = "fistname..lastname@domain.tld" + + // When + let isEmail = email.isEmail + + // Expect + XCTAssertFalse(isEmail) + } + + func testIsEmail_double_email_valid() { + // Given + let email = "fistname.lastname+fistname.lastname@domain.tld" + + // When + let isEmail = email.isEmail + + // Expect + XCTAssertTrue(isEmail) + } + + func testIsEmail_double_plus_email_valid() { + // Given + let email = "fistname.lastname+fistname.lastname+2@domain.tld" + + // When + let isEmail = email.isEmail + + // Expect + XCTAssertTrue(isEmail) + } + + func testIsEmail_leading_whitespace_email_invalid() { + // Given + let email = " fistname..lastname@domain.tld" + + // When + let isEmail = email.isEmail + + // Expect + XCTAssertFalse(isEmail) + } + + func testIsEmail_trailing_whitespace_email_invalid() { + // Given + let email = "fistname..lastname@domain.tld " + + // When + let isEmail = email.isEmail + + // Expect + XCTAssertFalse(isEmail) + } }