[Enhancement] Optional+Nil extension (#17)

This PR contains the work done to add some properties to the `Optional` primitives. In addition, some work has been done to improve some existing codebase as well.

Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Reviewed-on: #17
This commit is contained in:
Javier Cicchelli 2023-05-06 21:19:40 +00:00
parent 2f3712c830
commit ffb1170760
6 changed files with 132 additions and 12 deletions

View File

@ -0,0 +1,23 @@
//===----------------------------------------------------------------------===//
//
// This source file is part of the SwiftLibs open source project
//
// Copyright (c) 2023 Röck+Cöde VoF. and the SwiftLibs project authors
// Licensed under the EUPL 1.2 or later.
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of SwiftLibs project authors
//
//===----------------------------------------------------------------------===//
public extension Optional {
// MARK: Properties
/// A Boolean value indicating whether an optional has not been set.
var isNil: Bool { self == nil }
/// A Boolean value indicating whether an optional has been set.
var isNotNil: Bool { !isNil }
}

View File

@ -12,17 +12,14 @@
public extension String {
// MARK: Properties
// MARK: Constants
/// Represents an empty string.
/// A string that represents an empty string.
static let empty = ""
// MARK: Functions
// MARK: Properties
/// Checks whether a string is not empty.
/// - Returns: A boolean value that represents whether the string is not empty.
func isNotEmpty() -> Bool {
isEmpty == false
}
/// A Boolean value indicating whether a string is not empty.
var isNotEmpty: Bool { !isEmpty }
}

View File

@ -4,7 +4,7 @@ public extension TimeZone {
// MARK: Zones
/// Greenwich Mean Time or UTC+0
/// A time zone indicating it is Greenwich Mean Time or UTC+0
static let gmt = TimeZone(secondsFromGMT: 0)
}

View File

@ -0,0 +1,66 @@
//===----------------------------------------------------------------------===//
//
// This source file is part of the SwiftLibs open source project
//
// Copyright (c) 2023 Röck+Cöde VoF. and the SwiftLibs project authors
// Licensed under the EUPL 1.2 or later.
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of SwiftLibs project authors
//
//===----------------------------------------------------------------------===//
import Core
import XCTest
final class Optional_NilTests: XCTestCase {
// MARK: Properties
private var optional: Int?
private var result: Bool!
// MARK: Tests
func test_isNil_whenOptionalHasNotBeenSet() {
// GIVEN
// WHEN
result = optional.isNil
// THEN
XCTAssertTrue(result)
}
func test_isNil_whenOptionalHasBeenSet() {
// GIVEN
optional = 0
// WHEN
result = optional.isNil
// THEN
XCTAssertFalse(result)
}
func test_isNotNil_whenOptionalHasNotBeenSet() {
// GIVEN
// WHEN
result = optional.isNotNil
// THEN
XCTAssertFalse(result)
}
func test_isNotNil_whenOptionalHasBeenSet() {
// GIVEN
optional = 0
// WHEN
result = optional.isNotNil
// THEN
XCTAssertTrue(result)
}
}

View File

@ -31,7 +31,7 @@ final class String_EmptyTests: XCTestCase {
let string = String.empty
// WHEN
let result = string.isNotEmpty()
let result = string.isNotEmpty
// THEN
XCTAssertFalse(result)
@ -42,7 +42,7 @@ final class String_EmptyTests: XCTestCase {
let string = String.Test.string
// WHEN
let result = string.isNotEmpty()
let result = string.isNotEmpty
// THEN
XCTAssertTrue(result)

View File

@ -0,0 +1,34 @@
//===----------------------------------------------------------------------===//
//
// This source file is part of the SwiftLibs open source project
//
// Copyright (c) 2023 Röck+Cöde VoF. and the SwiftLibs project authors
// Licensed under the EUPL 1.2 or later.
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of SwiftLibs project authors
//
//===----------------------------------------------------------------------===//
import Core
import XCTest
final class TimeZone_ZoneTests: XCTestCase {
// MARK: Properties
private var timeZone: TimeZone!
// MARK: Tests
func test_gmt() {
// GIVEN
// WHEN
timeZone = .gmt
// THEN
XCTAssertEqual(timeZone.identifier, "GMT")
XCTAssertEqual(timeZone.secondsFromGMT(), 0)
}
}