diff --git a/Package.swift b/Package.swift index 8cd7e63..4304c7e 100644 --- a/Package.swift +++ b/Package.swift @@ -8,22 +8,23 @@ let package = Package( .library( name: "SwiftLibs", targets: [ - "SwiftLibs" + "Core" ] ), ], dependencies: [], targets: [ .target( - name: "SwiftLibs", + name: "Core", dependencies: [ ] ), .testTarget( - name: "SwiftLibsTests", + name: "CoreTests", dependencies: [ - "SwiftLibs" - ] + "Core" + ], + path: "Tests/Core" ), ] ) 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/Sources/Core/Extensions/String+Empty.swift b/Sources/Core/Extensions/String+Empty.swift new file mode 100644 index 0000000..186ae1e --- /dev/null +++ b/Sources/Core/Extensions/String+Empty.swift @@ -0,0 +1,24 @@ +// +// String+Empty.swift +// Core +// +// Created by Javier Cicchelli on 15/04/2023. +// Copyright © 2023 Röck+Cöde. All rights reserved. +// + +public extension String { + + // MARK: Properties + + /// Represents an empty string. + static let empty = "" + + // MARK: Functions + + /// Checks whether a string is not empty. + /// - Returns: A boolean value that represents whether the string is not empty. + func isNotEmpty() -> Bool { + isEmpty == false + } + +} diff --git a/Sources/SwiftLibs/SwiftLibs.swift b/Sources/SwiftLibs/SwiftLibs.swift deleted file mode 100644 index 8c48b67..0000000 --- a/Sources/SwiftLibs/SwiftLibs.swift +++ /dev/null @@ -1,6 +0,0 @@ -public struct SwiftLibs { - public private(set) var text = "Hello, World!" - - public init() { - } -} 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 new file mode 100644 index 0000000..8639c44 --- /dev/null +++ b/Tests/Core/Extensions/String+EmptyTests.swift @@ -0,0 +1,55 @@ +// +// String+EmptyTests.swift +// Core +// +// Created by Javier Cicchelli on 15/04/2023. +// Copyright © 2022 Röck+Cöde. All rights reserved. +// + +import Core +import XCTest + +final class String_EmptyTests: XCTestCase { + + // MARK: Tests + + func test_empty() { + // GIVEN + let string = String.empty + + // WHEN + // THEN + XCTAssertEqual(string, "") + } + + func test_isNotEmpty_withEmptyString() { + // GIVEN + let string = String.empty + + // WHEN + let result = string.isNotEmpty() + + // THEN + XCTAssertFalse(result) + } + + func test_isNotEmpty_withFilledString() { + // GIVEN + let string = String.Test.string + + // WHEN + let result = string.isNotEmpty() + + // THEN + XCTAssertTrue(result) + } + +} + +// MARK: - String+Constants + +private extension String { + enum Test { + static let string = "Some test string..." + } +} diff --git a/Tests/SwiftLibsTests/SwiftLibsTests.swift b/Tests/SwiftLibsTests/SwiftLibsTests.swift deleted file mode 100644 index 11d5b96..0000000 --- a/Tests/SwiftLibsTests/SwiftLibsTests.swift +++ /dev/null @@ -1,11 +0,0 @@ -import XCTest -@testable import SwiftLibs - -final class SwiftLibsTests: XCTestCase { - func testExample() throws { - // This is an example of a functional test case. - // Use XCTAssert and related functions to verify your tests produce the correct - // results. - XCTAssertEqual(SwiftLibs().text, "Hello, World!") - } -}