     }
   }
 
-  fileprivate func commit(_ description: String, file: String, line: UInt, closure: @escaping () -> ()) {
+  private func commit(_ description: String, file: String, line: UInt, closure: @escaping () -> ()) {
     commitFunc(description, file, line, closure)
+  }
+
+  internal func addStep(_ description: String, file: String, line: UInt) {
+    stepDescriptions.append(description: description, file: file, line: line)
   }
 
 }

/// After the last step is defined, the scenario is compiled into a Quick example
/// block by looking up the step definitions based on the step names. The test
/// fails if any of the steps are undefined.
public final class Scenario: Preparable, Actionable {

  fileprivate let name: String
  fileprivate let file: String
  fileprivate let line: UInt
  fileprivate let commitFunc: CommitFunc
  fileprivate var stepDescriptions: [StepMetadata] = []

  public init(_ name: String, file: String = #file, line: UInt = #line, commit: @escaping CommitFunc = quick_it) {
    self.name = name


private let quick_it: CommitFunc = { description, file, line, closure in
  it(description, file: file, line: line, closure: closure)
}

private typealias StepMetadata = (description: String, file: String, line: UInt)
