@@ -48,7 +48,7 @@ case class Scenario(
4848}
4949
5050enum StepType {
51- case GivenStep , WhenStep , ThenStep , AndStep
51+ case GivenStep , WhenStep , ThenStep , ButStep , AndStep
5252}
5353
5454case class DataTableRow (cells : List [String ]) {
@@ -100,6 +100,7 @@ case class Step(
100100 case StepType .GivenStep => " Given"
101101 case StepType .WhenStep => " When"
102102 case StepType .ThenStep => " Then"
103+ case StepType .ButStep => " But"
103104 case StepType .AndStep => " And"
104105 }
105106 val stepLine = indent + stepTypeStr + " " + pattern + " \n "
@@ -124,7 +125,7 @@ object GherkinParser {
124125
125126 // Keyword parser: handles Gherkin keywords with optional colon
126127 private def keyword (using P [? ]): P [String ] = P (
127- (" Feature" | " Background" | " Scenario Outline" | " Scenario" | " Given" | " When" | " Then" | " And" | " Examples" ) ~ (" :" .? )
128+ (" Feature" | " Background" | " Scenario Outline" | " Scenario" | " Given" | " When" | " Then" | " But " | " And" | " Examples" ) ~ (" :" .? )
128129 ).! .map(_.stripSuffix(" :" ))
129130
130131 // Text parser: captures text until newline, including typed placeholders like {name:String}
@@ -161,12 +162,13 @@ object GherkinParser {
161162
162163 // Step parser: captures step type as StepType and pattern separately
163164 private def step (ctx : ParseContext )(using P [? ]): P [Step ] =
164- P (Index ~ (" Given" | " When" | " Then" | " And" ).! ~ " :" .? ~/ text ~ dataTableParser.? ).map {
165+ P (Index ~ (" Given" | " When" | " Then" | " But " | " And" ).! ~ " :" .? ~/ text ~ dataTableParser.? ).map {
165166 case (idx, stepTypeStr, pattern, dataTableOpt) =>
166167 val stepType = stepTypeStr match {
167168 case " Given" => StepType .GivenStep
168169 case " When" => StepType .WhenStep
169170 case " Then" => StepType .ThenStep
171+ case " But" => StepType .ButStep
170172 case " And" => StepType .AndStep
171173 }
172174 Step (stepType, pattern.trim, dataTableOpt, Some (ctx.file), Some (ctx.lineAt(idx)))
0 commit comments