Skip to content

Commit

Permalink
Merge pull request #13 from Q42/feature/update-isempty
Browse files Browse the repository at this point in the history
Add isEmpty/notEmpty validator for non-optional strings
  • Loading branch information
mbernson authored Oct 12, 2023
2 parents 36cfa99 + f7dc651 commit f1cc08c
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 8 deletions.
38 changes: 32 additions & 6 deletions Sources/ValidationKit/Validators/Validator+Empty.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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<String?, String> {
Validator<String?, String> { 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)
}
Expand All @@ -24,7 +23,34 @@ public extension Validator {
/// The value must not be empty
static var notEmpty: Validator<String?, String> {
Validator<String?, String> { 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<String, String> {
Validator<String, String> { 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<String, String> {
Validator<String, String> { input in
let input = input.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
if !input.isEmpty {
return .valid(input)
} else {
return .invalid(.notEmpty)
Expand Down
31 changes: 29 additions & 2 deletions Tests/ValidationKitTests/EmptyTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@ import XCTest
import ValidationKit

class EmptyTests: XCTestCase {
func testIsEmpty() {
func testIsEmptyNullable() {
let validator = Validator<String?, String>.isEmpty

// Valid
XCTAssertEqual(validator.validate(input: nil).value, "")
XCTAssertEqual(validator.validate(input: "").value, "")
XCTAssertEqual(validator.validate(input: " ").value, "")

Expand All @@ -14,14 +15,40 @@ class EmptyTests: XCTestCase {
XCTAssertFalse(validator.validate(input: "F").isValid)
}

func testNotEmpty() {
func testNotEmptyNullable() {
let validator = Validator<String?, String>.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: nil).isValid)
XCTAssertFalse(validator.validate(input: "").isValid)
XCTAssertFalse(validator.validate(input: " ").isValid)
}

func testIsEmpty() {
let validator = Validator<String, String>.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<String, String>.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)
Expand Down

0 comments on commit f1cc08c

Please sign in to comment.