diff --git a/Sources/ValidationKit/Validators/Validator+Empty.swift b/Sources/ValidationKit/Validators/Validator+Empty.swift index f87c436..5d18c54 100644 --- a/Sources/ValidationKit/Validators/Validator+Empty.swift +++ b/Sources/ValidationKit/Validators/Validator+Empty.swift @@ -7,14 +7,13 @@ import Foundation -public extension Validator { +public extension Validator where Input == String?, Output == String { /// The value must be empty static var isEmpty: Validator { Validator { input in - let val = input?.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines) ?? "" - - if val.isEmpty { - return .valid(val) + let input = input?.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines) ?? "" + if input.isEmpty { + return .valid(input) } else { return .invalid(.isEmpty) } @@ -24,7 +23,34 @@ public extension Validator { /// The value must not be empty static var notEmpty: Validator { Validator { input in - if let input = input?.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines), !input.isEmpty { + let input = input?.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines) ?? "" + if !input.isEmpty { + return .valid(input) + } else { + return .invalid(.notEmpty) + } + } + } +} + +public extension Validator where Input == String, Output == String { + /// The value must be empty + static var isEmpty: Validator { + Validator { input in + let input = input.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines) + if input.isEmpty { + return .valid(input) + } else { + return .invalid(.isEmpty) + } + } + } + + /// The value must not be empty + static var notEmpty: Validator { + Validator { input in + let input = input.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines) + if !input.isEmpty { return .valid(input) } else { return .invalid(.notEmpty) diff --git a/Tests/ValidationKitTests/EmptyTests.swift b/Tests/ValidationKitTests/EmptyTests.swift index 636e9e2..c1d96a1 100644 --- a/Tests/ValidationKitTests/EmptyTests.swift +++ b/Tests/ValidationKitTests/EmptyTests.swift @@ -2,10 +2,11 @@ import XCTest import ValidationKit class EmptyTests: XCTestCase { - func testIsEmpty() { + func testIsEmptyNullable() { let validator = Validator.isEmpty // Valid + XCTAssertEqual(validator.validate(input: nil).value, "") XCTAssertEqual(validator.validate(input: "").value, "") XCTAssertEqual(validator.validate(input: " ").value, "") @@ -14,7 +15,7 @@ class EmptyTests: XCTestCase { XCTAssertFalse(validator.validate(input: "F").isValid) } - func testNotEmpty() { + func testNotEmptyNullable() { let validator = Validator.notEmpty // Valid @@ -22,6 +23,32 @@ class EmptyTests: XCTestCase { XCTAssertEqual(validator.validate(input: " F").value, "F") XCTAssertEqual(validator.validate(input: "F ").value, "F") + // Invalid + XCTAssertFalse(validator.validate(input: nil).isValid) + XCTAssertFalse(validator.validate(input: "").isValid) + XCTAssertFalse(validator.validate(input: " ").isValid) + } + + func testIsEmpty() { + let validator = Validator.isEmpty + + // Valid + XCTAssertEqual(validator.validate(input: "").value, "") + XCTAssertEqual(validator.validate(input: " ").value, "") + + // Invalid + XCTAssertFalse(validator.validate(input: "eerste etage").isValid) + XCTAssertFalse(validator.validate(input: "F").isValid) + } + + func testNotEmpty() { + let validator = Validator.notEmpty + + // Valid + XCTAssertEqual(validator.validate(input: "eerste etage").value, "eerste etage") + XCTAssertEqual(validator.validate(input: " F").value, "F") + XCTAssertEqual(validator.validate(input: "F ").value, "F") + // Invalid XCTAssertFalse(validator.validate(input: "").isValid) XCTAssertFalse(validator.validate(input: " ").isValid)