From 8f3049f62f62000944a1eca3bdbfca6f17a17aca Mon Sep 17 00:00:00 2001 From: Martin Kim Dung-Pham Date: Sun, 2 May 2021 17:56:56 +0200 Subject: [PATCH] Make Steps optional everywhere to allow step creation on optionals in tests --- Sources/Rorschach/Builders/GivenBuilder.swift | 2 +- Sources/Rorschach/Builders/ThenBuilder.swift | 2 +- Sources/Rorschach/Builders/WhenBuilder.swift | 2 +- Sources/Rorschach/Given.swift | 16 +++++++++------- Sources/Rorschach/Then.swift | 8 ++++---- Sources/Rorschach/When.swift | 14 ++++++++------ 6 files changed, 24 insertions(+), 20 deletions(-) diff --git a/Sources/Rorschach/Builders/GivenBuilder.swift b/Sources/Rorschach/Builders/GivenBuilder.swift index 734b81e..be81f8b 100644 --- a/Sources/Rorschach/Builders/GivenBuilder.swift +++ b/Sources/Rorschach/Builders/GivenBuilder.swift @@ -9,7 +9,7 @@ import Foundation @resultBuilder public struct GivenBuilder { - public static func buildBlock(_ steps: Step...) -> [Step] { + public static func buildBlock(_ steps: Step?...) -> [Step?] { steps } } diff --git a/Sources/Rorschach/Builders/ThenBuilder.swift b/Sources/Rorschach/Builders/ThenBuilder.swift index 685f56f..cc23683 100644 --- a/Sources/Rorschach/Builders/ThenBuilder.swift +++ b/Sources/Rorschach/Builders/ThenBuilder.swift @@ -9,7 +9,7 @@ import Foundation @resultBuilder public struct ThenBuilder { - public static func buildBlock(_ assertion: Assertion) -> Assertion { + public static func buildBlock(_ assertion: Assertion?) -> Assertion? { assertion } } diff --git a/Sources/Rorschach/Builders/WhenBuilder.swift b/Sources/Rorschach/Builders/WhenBuilder.swift index 2a26937..4eac6a2 100644 --- a/Sources/Rorschach/Builders/WhenBuilder.swift +++ b/Sources/Rorschach/Builders/WhenBuilder.swift @@ -9,7 +9,7 @@ import Foundation @resultBuilder public struct WhenBuilder { - public static func buildBlock(_ steps: Step...) -> [Step] { + public static func buildBlock(_ steps: Step?...) -> [Step?] { steps } } diff --git a/Sources/Rorschach/Given.swift b/Sources/Rorschach/Given.swift index 0d5bf3b..a78a773 100644 --- a/Sources/Rorschach/Given.swift +++ b/Sources/Rorschach/Given.swift @@ -12,17 +12,19 @@ public class Given { /// Returns "Given I do this"_ when this _Given_ either has content named _"I do this"_ or the first of its steps is titled _"I do this"_. var title: String { + guard let firstStep = steps.first else { return "Given" } + if let stepTitle = contentOnlyTitle { return "Given " + stepTitle } - return "Given " + (steps.first?.title ?? "") + return "Given " + (firstStep?.title ?? "") } var contentOnlyTitle: String? /// The _Step_s to be executed as part of the _Given_. - let steps: [Step] + let steps: [Step?] - init(steps: [Step]) { + init(steps: [Step?]) { self.steps = steps } @@ -33,18 +35,18 @@ public class Given { } /// Initializes a _Given_ with the given _Step_s - public convenience init(@GivenBuilder _ content: () -> [Step]) { + public convenience init(@GivenBuilder _ content: () -> [Step?]) { self.init(steps: content()) } func execute() { steps.forEach { step in - if step != steps.first, let title = step.title { + if step != steps.first, let title = step?.title { XCTContext.runActivity(named: "And \(title)" ) { _ in - step.execute() + step?.execute() } } else { - step.execute() + step?.execute() } } } diff --git a/Sources/Rorschach/Then.swift b/Sources/Rorschach/Then.swift index d88c464..e78894f 100644 --- a/Sources/Rorschach/Then.swift +++ b/Sources/Rorschach/Then.swift @@ -10,13 +10,13 @@ import XCTest public struct Then { - let assertion: Assertion + let assertion: Assertion? var title: String { if let assertionTitle = contentOnlyTitle { return "Then " + assertionTitle } - return "Then " + (assertion.title ?? "") + return "Then " + (assertion?.title ?? "") } var contentOnlyTitle: String? @@ -25,11 +25,11 @@ public struct Then { assertion = Assertion(content: content) } - public init(@ThenBuilder _ content: () -> Assertion) { + public init(@ThenBuilder _ content: () -> Assertion?) { assertion = content() } func assert() { - assertion.assert() + assertion?.assert() } } diff --git a/Sources/Rorschach/When.swift b/Sources/Rorschach/When.swift index 570b919..ea0f6ab 100644 --- a/Sources/Rorschach/When.swift +++ b/Sources/Rorschach/When.swift @@ -12,15 +12,17 @@ public struct When { /// Returns "When I do this"_ when this _When_ either has content named _"I do this"_ or the first of its steps is titled _"I do this"_. var title: String { + guard let firstStep = steps.first else { return "When" } + if let stepTitle = contentOnlyTitle { return "When " + stepTitle } - return "When " + (steps.first?.title ?? "") + return "When " + (firstStep?.title ?? "") } var contentOnlyTitle: String? /// The _Step_s to be executed as part of the _When_. - let steps: [Step] + let steps: [Step?] /// Shorthand for a _When_ with a single step with some content public init(_ title: String, content: @escaping () -> Void) { @@ -29,18 +31,18 @@ public struct When { } /// Initializes a _When_ with the given _Step_s - public init(@WhenBuilder _ content: () -> [Step]) { + public init(@WhenBuilder _ content: () -> [Step?]) { steps = content() } func execute() { steps.forEach { step in - if step != steps.first, let title = step.title { + if step != steps.first, let title = step?.title { XCTContext.runActivity(named: "And \(title)" ) { _ in - step.execute() + step?.execute() } } else { - step.execute() + step?.execute() } } }