diff --git a/Sources/Core/Extensions/Bool+Init.swift b/Sources/Core/Extensions/Bool+Init.swift new file mode 100644 index 0000000..f006647 --- /dev/null +++ b/Sources/Core/Extensions/Bool+Init.swift @@ -0,0 +1,37 @@ +// +// Bool+Init.swift +// Core +// +// Created by Javier Cicchelli on 15/04/2023. +// Copyright © 2023 Röck+Cöde. All rights reserved. +// + +public extension Bool { + + // MARK: Initialisers + + /// Initialise a boolean primitive out of a given string. + /// - Parameter string: A string to initialise the boolean with. + init(_ string: String) { + let strings: [String] = [ + .Constants.oneNumber, + .Constants.oneWord, + .Constants.true, + .Constants.yes + ] + + self = strings.contains(string.lowercased()) + } + +} + +// MARK: - String+Constants + +private extension String { + enum Constants { + static let yes = "yes" + static let `true` = "true" + static let oneWord = "one" + static let oneNumber = "1" + } +} diff --git a/Tests/Core/Extensions/Bool+InitTests.swift b/Tests/Core/Extensions/Bool+InitTests.swift new file mode 100644 index 0000000..390e057 --- /dev/null +++ b/Tests/Core/Extensions/Bool+InitTests.swift @@ -0,0 +1,60 @@ +// +// Bool+InitTests.swift +// Core +// +// Created by Javier Cicchelli on 15/04/2023. +// Copyright © 2023 Röck+Cöde. All rights reserved. +// + +import Core +import XCTest + +final class Bool_InitTests: XCTestCase { + + // MARK: Properties + + private var strings: [String] = [] + private var booleans: [Bool] = [] + + // MARK: Tests + + func test_init_withPositiveStrings() { + // GIVEN + strings = ["YES", "Yes", "yes", "TRUE", "TrUe", "true", "One", "OnE", "one", "1"] + + // WHEN + booleans = strings.map(Bool.init) + + // THEN + booleans.forEach { boolean in + XCTAssertTrue(boolean) + } + } + + func test_init_withNegativeStrings() { + // GIVEN + strings = ["NO", "No", "no", "FALSE", "FaLsE", "false", "ZERO", "ZeRo", "zero", "0"] + + // WHEN + booleans = strings.map(Bool.init) + + // THEN + booleans.forEach { boolean in + XCTAssertFalse(boolean) + } + } + + func test_init_withOtherStrings() { + // GIVEN + strings = [.empty, "...", "something", "yes-", "false+", "X", "9"] + + // WHEN + booleans = strings.map(Bool.init) + + // THEN + booleans.forEach { boolean in + XCTAssertFalse(boolean) + } + } + +} diff --git a/Tests/Core/Extensions/String+EmptyTests.swift b/Tests/Core/Extensions/String+EmptyTests.swift index da099f6..8639c44 100644 --- a/Tests/Core/Extensions/String+EmptyTests.swift +++ b/Tests/Core/Extensions/String+EmptyTests.swift @@ -6,10 +6,9 @@ // Copyright © 2022 Röck+Cöde. All rights reserved. // +import Core import XCTest -@testable import Core - final class String_EmptyTests: XCTestCase { // MARK: Tests