Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ enum ScenarioOutlineParser {
}
}
let tags = outlineTags
for line in lines.dropFirst() {
for (index, line) in lines.dropFirst().enumerated() {
let title = titleLine?.reduce(into: "") {
if case Lexer.Token.tableHeader(_, let headerText) = $1 {
if let index = headerLookup?[headerText],
Expand All @@ -69,12 +69,13 @@ enum ScenarioOutlineParser {
} else if case Lexer.Token.title(_, let titleText) = $1 {
$0? += titleText
}
}
} ?? ""
var steps = backgroundStepNodes.map { Step(with: $0) }
for stepNode in stepNodes {
steps.append(getStepFromLine(line, lookup: headerLookup, stepNode: stepNode))
}
scenarios.append(Scenario(with: steps, title: title, tags: tags, position: line.first?.position ?? .start))
let exampleNumber = index + 1
scenarios.append(Scenario(with: steps, title: "\(title) (example \(exampleNumber))", tags: tags, position: line.first?.position ?? .start))
}
return scenarios
}
Expand Down
18 changes: 13 additions & 5 deletions Sources/CucumberSwift/Runner/CucumberTest.swift
Original file line number Diff line number Diff line change
Expand Up @@ -21,20 +21,28 @@ public final class CucumberTest: XCTestCase {
}
(Cucumber.shared as? StepImplementation)?.setupSteps()
assert(!Cucumber.shared.features.isEmpty, "CucumberSwift found no features to run. Check out our documentation for instructions on including you Features folder. Be aware it's a case sensitive search. If you're using the DSL, make sure your features are defined in the `setupSteps()` method.") // swiftlint:disable:this line_length
allGeneratedTests.forEach { suite.addTest($0) }
generateAlltests(suite)
return suite
}

static var allGeneratedTests: [XCTestCase] {
var tests = [XCTestCase]()
createTestCaseForStubs(&tests)
static func generateAlltests(_ rootSuite: XCTestSuite) {
let stubsSuite = XCTestSuite(name: "GeneratedSteps")
var stubTests = [XCTestCase]()
createTestCaseForStubs(&stubTests)
stubTests.forEach { stubsSuite.addTest($0) }
rootSuite.addTest(stubsSuite)

for feature in Cucumber.shared.features.taggedElements(with: Cucumber.shared.environment, askImplementor: false) {
let className = feature.title.toClassString() + readFeatureScenarioDelimiter()

for scenario in feature.scenarios.taggedElements(with: Cucumber.shared.environment, askImplementor: true) {
let childSuite = XCTestSuite(name: scenario.title.toClassString())
var tests = [XCTestCase]()
createTestCaseFor(className: className, scenario: scenario, tests: &tests)
tests.forEach { childSuite.addTest($0) }
rootSuite.addTest(childSuite)
}
}
return tests
}

private static func createTestCaseForStubs(_ tests: inout [XCTestCase]) {
Expand Down
17 changes: 16 additions & 1 deletion Tests/CucumberSwiftTests/Extensions/CucumberExtensions.swift
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,21 @@ extension Cucumber {

func executeFeatures(callDefaultTestSuite: Bool = false) {
if callDefaultTestSuite { _ = CucumberTest.defaultTestSuite }
CucumberTest.allGeneratedTests.forEach { $0.invokeTest() }
let suite = XCTestSuite(name: "Dummy")
CucumberTest.generateAlltests(suite)

var tests = [XCTestCase]()
Cucumber.enumerateTestsCases(&tests, suite)
tests.forEach { $0.invokeTest() }
}

private static func enumerateTestsCases(_ tests: inout [XCTestCase], _ suite: XCTestSuite) {
suite.tests.forEach {
if let testCase = $0 as? XCTestCase {
tests.append(testCase)
} else if let suite = $0 as? XCTestSuite {
enumerateTestsCases(&tests, suite)
}
}
}
}
20 changes: 11 additions & 9 deletions Tests/CucumberSwiftTests/Gherkin/TableTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,8 @@ class TableTests: XCTestCase {
XCTAssertEqual(feature?.scenarios.count, 2)
XCTAssertEqual(firstScenario?.steps.count, 4)
XCTAssertEqual(secondScenario?.steps.count, 4)
XCTAssertEqual(firstScenario?.title, "Some determinable business situation")
XCTAssertEqual(secondScenario?.title, "Some determinable business situation")
XCTAssertEqual(firstScenario?.title, "Some determinable business situation (example 1)")
XCTAssertEqual(secondScenario?.title, "Some determinable business situation (example 2)")
if (firstScenario?.steps.count ?? 0) == 4 {
let steps = firstScenario?.steps
XCTAssertEqual(steps?[0].keyword, .given)
Expand Down Expand Up @@ -96,8 +96,9 @@ class TableTests: XCTestCase {
""")
let feature = cucumber.features.first
XCTAssertEqual(feature?.scenarios.count, 2)
feature?.scenarios.forEach({ (scenario) in
XCTAssertEqual(scenario.title, "Some determinable business situation")
feature?.scenarios.enumerated().forEach({ (index, scenario) in
let exampleNumber = index + 1
XCTAssertEqual(scenario.title, "Some determinable business situation (example \(exampleNumber))")
XCTAssertEqual(scenario.steps.count, 5)
})
}
Expand Down Expand Up @@ -126,8 +127,9 @@ class TableTests: XCTestCase {
""")
let feature = cucumber.features.first
XCTAssertEqual(feature?.scenarios.count, 2)
feature?.scenarios.forEach({ (scenario) in
XCTAssertEqual(scenario.title, "Some determinable business situation")
feature?.scenarios.enumerated().forEach({ (index, scenario) in
let exampleNumber = index + 1
XCTAssertEqual(scenario.title, "Some determinable business situation (example \(exampleNumber))")
XCTAssertEqual(scenario.steps.count, 5)
XCTAssert(scenario.containsTag("outline"))
})
Expand All @@ -146,8 +148,8 @@ class TableTests: XCTestCase {
""")
let firstScenario = cucumber.features.first?.scenarios.first
let secondScenario = cucumber.features.first?.scenarios.last
XCTAssertEqual(firstScenario?.title, "the un")
XCTAssertEqual(secondScenario?.title, "the uno")
XCTAssertEqual(firstScenario?.title, "the un (example 1)")
XCTAssertEqual(secondScenario?.title, "the uno (example 2)")
}

func testTableCellWithEscapeCharacter() {
Expand All @@ -161,7 +163,7 @@ class TableTests: XCTestCase {
| u\\|o | dos |
""")
let firstScenario = cucumber.features.first?.scenarios.first
XCTAssertEqual(firstScenario?.title, "the u|o")
XCTAssertEqual(firstScenario?.title, "the u|o (example 1)")
}

func testTableGetAttachedToSteps() {
Expand Down