diff --git a/build.sbt b/build.sbt index f4e4569..6268bca 100644 --- a/build.sbt +++ b/build.sbt @@ -38,7 +38,7 @@ scalaVersion := scala213 // Library versions -val cucumberVersion = "7.21.1" +val cucumberVersion = "7.22.0" val jacksonVersion = "2.18.3" val mockitoScalaVersion = "1.17.37" val junitVersion = "4.13.2" diff --git a/cucumber-scala/src/main/scala/io/cucumber/scala/AbstractGlueDefinition.scala b/cucumber-scala/src/main/scala/io/cucumber/scala/AbstractGlueDefinition.scala index 3ef2102..46d93ea 100644 --- a/cucumber-scala/src/main/scala/io/cucumber/scala/AbstractGlueDefinition.scala +++ b/cucumber-scala/src/main/scala/io/cucumber/scala/AbstractGlueDefinition.scala @@ -15,7 +15,11 @@ trait AbstractGlueDefinition extends Located { val location: StackTraceElement - lazy val sourceReference: SourceReference = + def body: Any => Any + +// def updateClosure(other: AbstractGlueDefinition): Unit + + private lazy val sourceReference: SourceReference = SourceReference.fromStackTraceElement(location) override def getLocation(): String = { diff --git a/cucumber-scala/src/main/scala/io/cucumber/scala/GlueAdaptor.scala b/cucumber-scala/src/main/scala/io/cucumber/scala/GlueAdaptor.scala index c57ddfb..8c17c5e 100644 --- a/cucumber-scala/src/main/scala/io/cucumber/scala/GlueAdaptor.scala +++ b/cucumber-scala/src/main/scala/io/cucumber/scala/GlueAdaptor.scala @@ -1,9 +1,31 @@ package io.cucumber.scala -import io.cucumber.core.backend.Glue +import io.cucumber.core.backend.{CucumberBackendException, Glue} + +import scala.collection.mutable.ArrayBuffer class GlueAdaptor(glue: Glue) { + private val definitions: ArrayBuffer[AbstractGlueDefinition] = ArrayBuffer() + private var registered: Int = 0 + private var expectedRegistrations: Int = -1 + + def startRegistration(): Unit = { + registered = 0 + } + + def finishRegistration(): Unit = { + if (expectedRegistrations < 0) { + expectedRegistrations = registered + } else if (expectedRegistrations != registered) { + throw new CucumberBackendException( + s"""Found an inconsistent number of glue registrations. + |Previously $expectedRegistrations step definitions, hooks and parameter types were registered. Currently $registered. + |To optimize performance Cucumber expects glue registration to be identical for each scenario and example.""".stripMargin + ) + } + } + /** Load the step definitions and hooks from a ScalaDsl instance into the * glue. * @@ -25,50 +47,87 @@ class GlueAdaptor(glue: Glue) { registry.stepDefinitions .map(ScalaStepDefinition(_, scenarioScoped)) - .foreach(glue.addStepDefinition) + .foreach(df => updateOrRegister(df, glue.addStepDefinition)) // The presence of beforeAll/afterAll hooks with scenarioScoped is checked by checkConsistency above if (!scenarioScoped) { registry.beforeAllHooks .map(ScalaStaticHookDefinition(_)) - .foreach(glue.addBeforeAllHook) + .foreach(df => updateOrRegister(df, glue.addBeforeAllHook)) registry.afterAllHooks .map(ScalaStaticHookDefinition(_)) - .foreach(glue.addAfterAllHook) + .foreach(df => updateOrRegister(df, glue.addAfterAllHook)) } registry.beforeHooks .map(ScalaHookDefinition(_, scenarioScoped)) - .foreach(glue.addBeforeHook) + .foreach(df => updateOrRegister(df, glue.addBeforeHook)) registry.afterHooks .map(ScalaHookDefinition(_, scenarioScoped)) - .foreach(glue.addAfterHook) + .foreach(df => updateOrRegister(df, glue.addAfterHook)) registry.beforeStepHooks .map(ScalaHookDefinition(_, scenarioScoped)) - .foreach(glue.addBeforeStepHook) + .foreach(df => updateOrRegister(df, glue.addBeforeStepHook)) registry.afterStepHooks .map(ScalaHookDefinition(_, scenarioScoped)) - .foreach(glue.addAfterStepHook) + .foreach(df => updateOrRegister(df, glue.addAfterStepHook)) registry.docStringTypes .map(ScalaDocStringTypeDefinition(_, scenarioScoped)) - .foreach(glue.addDocStringType) + .foreach(df => updateOrRegister(df, glue.addDocStringType)) registry.dataTableTypes .map(ScalaDataTableTypeDefinition(_, scenarioScoped)) - .foreach(glue.addDataTableType) + .foreach(df => updateOrRegister(df, glue.addDataTableType)) registry.parameterTypes .map(ScalaParameterTypeDefinition(_, scenarioScoped)) - .foreach(glue.addParameterType) + .foreach(df => updateOrRegister(df, glue.addParameterType)) registry.defaultParameterTransformers .map(ScalaDefaultParameterTransformerDefinition(_, scenarioScoped)) - .foreach(glue.addDefaultParameterTransformer) + .foreach(df => updateOrRegister(df, glue.addDefaultParameterTransformer)) registry.defaultDataTableCellTransformers .map(ScalaDefaultDataTableCellTransformerDefinition(_, scenarioScoped)) - .foreach(glue.addDefaultDataTableCellTransformer) + .foreach(df => + updateOrRegister(df, glue.addDefaultDataTableCellTransformer) + ) registry.defaultDataTableEntryTransformers .map(ScalaDefaultDataTableEntryTransformerDefinition(_, scenarioScoped)) - .foreach(glue.addDefaultDataTableEntryTransformer) + .foreach(df => + updateOrRegister(df, glue.addDefaultDataTableEntryTransformer) + ) + } + + private def updateOrRegister[T <: AbstractGlueDefinition]( + candidate: T, + register: T => Unit + ): Unit = { + if (definitions.size <= registered) { + definitions.addOne(candidate) + register.apply(candidate) + } else { + val existing: AbstractGlueDefinition = definitions(registered) + requireSameGlueClass(existing, candidate) + println("BOOM should update closure") + // TODO + } + registered = registered + 1 + } + + private def requireSameGlueClass[T <: AbstractGlueDefinition]( + existing: AbstractGlueDefinition, + candidate: AbstractGlueDefinition + ): Unit = { + if (existing.getClass != candidate.getClass) { + throw new CucumberBackendException( + s"""Found an inconsistent glue registrations. + |Previously the registration in slot $registered was a '${existing.getClass.getName}'. Currently '${candidate.getClass.getName}'. + |To optimize performance Cucumber expects glue registration to be identical for each scenario and example."""".stripMargin + ) + } } +// private[scala] def disposeClosures(): Unit = { +// definitions.foreach(_.disposeClosure) +// } + } diff --git a/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaBackend.scala b/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaBackend.scala index 35d9fe9..7ea2403 100644 --- a/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaBackend.scala +++ b/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaBackend.scala @@ -42,6 +42,7 @@ class ScalaBackend( override def disposeWorld(): Unit = { // Nothing to do + // TODO maybe something } override def getSnippet(): Snippet = { diff --git a/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDataTableCellDefinition.scala b/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDataTableCellDefinition.scala index f585605..190b21a 100644 --- a/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDataTableCellDefinition.scala +++ b/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDataTableCellDefinition.scala @@ -1,6 +1,5 @@ package io.cucumber.scala -import io.cucumber.core.backend.ScenarioScoped import io.cucumber.datatable.{DataTableType, TableCellTransformer} trait ScalaDataTableCellDefinition[T] extends ScalaDataTableTypeDefinition { @@ -22,8 +21,7 @@ trait ScalaDataTableCellDefinition[T] extends ScalaDataTableTypeDefinition { class ScalaScenarioScopedDataTableCellDefinition[T]( override val details: ScalaDataTableCellTypeDetails[T] -) extends ScalaDataTableCellDefinition[T] - with ScenarioScoped {} +) extends ScalaDataTableCellDefinition[T] {} class ScalaGlobalDataTableCellDefinition[T]( override val details: ScalaDataTableCellTypeDetails[T] diff --git a/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDataTableDefinition.scala b/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDataTableDefinition.scala index 096c20e..96f34e9 100644 --- a/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDataTableDefinition.scala +++ b/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDataTableDefinition.scala @@ -1,6 +1,5 @@ package io.cucumber.scala -import io.cucumber.core.backend.ScenarioScoped import io.cucumber.datatable.{DataTable, DataTableType, TableTransformer} trait ScalaDataTableDefinition[T] extends ScalaDataTableTypeDefinition { @@ -22,8 +21,7 @@ trait ScalaDataTableDefinition[T] extends ScalaDataTableTypeDefinition { class ScalaScenarioScopedDataTableDefinition[T]( override val details: ScalaDataTableTableTypeDetails[T] -) extends ScalaDataTableDefinition[T] - with ScenarioScoped {} +) extends ScalaDataTableDefinition[T] {} class ScalaGlobalDataTableDefinition[T]( override val details: ScalaDataTableTableTypeDetails[T] diff --git a/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDataTableEntryDefinition.scala b/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDataTableEntryDefinition.scala index a892ef3..1b54978 100644 --- a/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDataTableEntryDefinition.scala +++ b/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDataTableEntryDefinition.scala @@ -1,10 +1,8 @@ package io.cucumber.scala -import java.util.{Map => JavaMap} - -import io.cucumber.core.backend.ScenarioScoped import io.cucumber.datatable.{DataTableType, TableEntryTransformer} +import java.util.{Map => JavaMap} import scala.jdk.CollectionConverters._ trait ScalaDataTableEntryDefinition[T] extends ScalaDataTableTypeDefinition { @@ -29,8 +27,7 @@ trait ScalaDataTableEntryDefinition[T] extends ScalaDataTableTypeDefinition { class ScalaScenarioScopedDataTableEntryDefinition[T]( override val details: ScalaDataTableEntryTypeDetails[T] -) extends ScalaDataTableEntryDefinition[T] - with ScenarioScoped {} +) extends ScalaDataTableEntryDefinition[T] {} class ScalaGlobalDataTableEntryDefinition[T]( override val details: ScalaDataTableEntryTypeDetails[T] diff --git a/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDataTableOptionalCellDefinition.scala b/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDataTableOptionalCellDefinition.scala index cdc8d98..6acbd4c 100644 --- a/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDataTableOptionalCellDefinition.scala +++ b/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDataTableOptionalCellDefinition.scala @@ -1,6 +1,5 @@ package io.cucumber.scala -import io.cucumber.core.backend.ScenarioScoped import io.cucumber.datatable.{DataTableType, TableCellTransformer} trait ScalaDataTableOptionalCellDefinition[T] @@ -23,8 +22,7 @@ trait ScalaDataTableOptionalCellDefinition[T] class ScalaScenarioScopedDataTableOptionalCellDefinition[T]( override val details: ScalaDataTableOptionalCellTypeDetails[T] -) extends ScalaDataTableOptionalCellDefinition[T] - with ScenarioScoped {} +) extends ScalaDataTableOptionalCellDefinition[T] {} class ScalaGlobalDataTableOptionalCellDefinition[T]( override val details: ScalaDataTableOptionalCellTypeDetails[T] diff --git a/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDataTableOptionalEntryDefinition.scala b/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDataTableOptionalEntryDefinition.scala index 691777d..1e7fcdd 100644 --- a/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDataTableOptionalEntryDefinition.scala +++ b/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDataTableOptionalEntryDefinition.scala @@ -1,10 +1,8 @@ package io.cucumber.scala -import java.util.{Map => JavaMap} - -import io.cucumber.core.backend.ScenarioScoped import io.cucumber.datatable.{DataTableType, TableEntryTransformer} +import java.util.{Map => JavaMap} import scala.jdk.CollectionConverters._ trait ScalaDataTableOptionalEntryDefinition[T] @@ -31,8 +29,7 @@ trait ScalaDataTableOptionalEntryDefinition[T] class ScalaScenarioScopedDataTableOptionalEntryDefinition[T]( override val details: ScalaDataTableOptionalEntryTypeDetails[T] -) extends ScalaDataTableOptionalEntryDefinition[T] - with ScenarioScoped {} +) extends ScalaDataTableOptionalEntryDefinition[T] {} class ScalaGlobalDataTableOptionalEntryDefinition[T]( override val details: ScalaDataTableOptionalEntryTypeDetails[T] diff --git a/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDataTableOptionalRowDefinition.scala b/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDataTableOptionalRowDefinition.scala index 2cd0d45..c0d9808 100644 --- a/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDataTableOptionalRowDefinition.scala +++ b/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDataTableOptionalRowDefinition.scala @@ -1,10 +1,8 @@ package io.cucumber.scala -import java.util.{List => JavaList} - -import io.cucumber.core.backend.ScenarioScoped import io.cucumber.datatable.{DataTableType, TableRowTransformer} +import java.util.{List => JavaList} import scala.jdk.CollectionConverters._ trait ScalaDataTableOptionalRowDefinition[T] @@ -32,8 +30,7 @@ trait ScalaDataTableOptionalRowDefinition[T] class ScalaScenarioScopedDataTableOptionalRowDefinition[T]( override val details: ScalaDataTableOptionalRowTypeDetails[T] -) extends ScalaDataTableOptionalRowDefinition[T] - with ScenarioScoped {} +) extends ScalaDataTableOptionalRowDefinition[T] {} class ScalaGlobalDataTableOptionalRowDefinition[T]( override val details: ScalaDataTableOptionalRowTypeDetails[T] diff --git a/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDataTableRowDefinition.scala b/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDataTableRowDefinition.scala index 98f9fbe..09b8d00 100644 --- a/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDataTableRowDefinition.scala +++ b/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDataTableRowDefinition.scala @@ -1,10 +1,8 @@ package io.cucumber.scala -import java.util.{List => JavaList} - -import io.cucumber.core.backend.ScenarioScoped import io.cucumber.datatable.{DataTableType, TableRowTransformer} +import java.util.{List => JavaList} import scala.jdk.CollectionConverters._ trait ScalaDataTableRowDefinition[T] extends ScalaDataTableTypeDefinition { @@ -28,8 +26,7 @@ trait ScalaDataTableRowDefinition[T] extends ScalaDataTableTypeDefinition { class ScalaScenarioScopedDataTableRowDefinition[T]( override val details: ScalaDataTableRowTypeDetails[T] -) extends ScalaDataTableRowDefinition[T] - with ScenarioScoped {} +) extends ScalaDataTableRowDefinition[T] {} class ScalaGlobalDataTableRowDefinition[T]( override val details: ScalaDataTableRowTypeDetails[T] diff --git a/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDefaultDataTableCellTransformerDefinition.scala b/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDefaultDataTableCellTransformerDefinition.scala index 72c8e8b..4a73f91 100644 --- a/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDefaultDataTableCellTransformerDefinition.scala +++ b/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDefaultDataTableCellTransformerDefinition.scala @@ -1,13 +1,10 @@ package io.cucumber.scala -import java.lang.reflect.Type - -import io.cucumber.core.backend.{ - DefaultDataTableCellTransformerDefinition, - ScenarioScoped -} +import io.cucumber.core.backend.DefaultDataTableCellTransformerDefinition import io.cucumber.datatable.TableCellByTypeTransformer +import java.lang.reflect.Type + trait ScalaDefaultDataTableCellTransformerDefinition extends DefaultDataTableCellTransformerDefinition with AbstractDatatableElementTransformerDefinition { @@ -45,8 +42,7 @@ object ScalaDefaultDataTableCellTransformerDefinition { class ScalaScenarioScopedDataTableCellTransformerDefinition( override val details: ScalaDefaultDataTableCellTransformerDetails -) extends ScalaDefaultDataTableCellTransformerDefinition - with ScenarioScoped {} +) extends ScalaDefaultDataTableCellTransformerDefinition {} class ScalaGlobalDataTableCellTransformerDefinition( override val details: ScalaDefaultDataTableCellTransformerDetails diff --git a/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDefaultDataTableEntryTransformerDefinition.scala b/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDefaultDataTableEntryTransformerDefinition.scala index 9c5ffce..3db3436 100644 --- a/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDefaultDataTableEntryTransformerDefinition.scala +++ b/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDefaultDataTableEntryTransformerDefinition.scala @@ -1,17 +1,13 @@ package io.cucumber.scala -import java.lang.reflect.Type -import java.util.{Map => JavaMap} - -import io.cucumber.core.backend.{ - DefaultDataTableEntryTransformerDefinition, - ScenarioScoped -} +import io.cucumber.core.backend.DefaultDataTableEntryTransformerDefinition import io.cucumber.datatable.{ TableCellByTypeTransformer, TableEntryByTypeTransformer } +import java.lang.reflect.Type +import java.util.{Map => JavaMap} import scala.jdk.CollectionConverters._ trait ScalaDefaultDataTableEntryTransformerDefinition @@ -55,8 +51,7 @@ object ScalaDefaultDataTableEntryTransformerDefinition { class ScalaScenarioScopedDataTableEntryTransformerDefinition( override val details: ScalaDefaultDataTableEntryTransformerDetails -) extends ScalaDefaultDataTableEntryTransformerDefinition - with ScenarioScoped {} +) extends ScalaDefaultDataTableEntryTransformerDefinition {} class ScalaGlobalDataTableEntryTransformerDefinition( override val details: ScalaDefaultDataTableEntryTransformerDetails diff --git a/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDefaultParameterTransformerDefinition.scala b/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDefaultParameterTransformerDefinition.scala index 1ae267f..3e890d9 100644 --- a/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDefaultParameterTransformerDefinition.scala +++ b/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDefaultParameterTransformerDefinition.scala @@ -1,13 +1,10 @@ package io.cucumber.scala -import java.lang.reflect.Type - -import io.cucumber.core.backend.{ - DefaultParameterTransformerDefinition, - ScenarioScoped -} +import io.cucumber.core.backend.DefaultParameterTransformerDefinition import io.cucumber.cucumberexpressions.ParameterByTypeTransformer +import java.lang.reflect.Type + trait ScalaDefaultParameterTransformerDefinition extends DefaultParameterTransformerDefinition with AbstractGlueDefinition { @@ -40,8 +37,7 @@ object ScalaDefaultParameterTransformerDefinition { class ScalaScenarioScopedDefaultParameterTransformerDefinition( override val details: ScalaDefaultParameterTransformerDetails -) extends ScalaDefaultParameterTransformerDefinition - with ScenarioScoped {} +) extends ScalaDefaultParameterTransformerDefinition {} class ScalaGlobalDefaultParameterTransformerDefinition( override val details: ScalaDefaultParameterTransformerDetails diff --git a/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDocStringTypeDefinition.scala b/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDocStringTypeDefinition.scala index 7d6e5ee..e00d7cf 100644 --- a/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDocStringTypeDefinition.scala +++ b/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaDocStringTypeDefinition.scala @@ -1,6 +1,6 @@ package io.cucumber.scala -import io.cucumber.core.backend.{DocStringTypeDefinition, ScenarioScoped} +import io.cucumber.core.backend.DocStringTypeDefinition import io.cucumber.docstring.DocStringType import io.cucumber.docstring.DocStringType.Transformer @@ -38,8 +38,7 @@ object ScalaDocStringTypeDefinition { class ScalaScenarioScopedDocStringTypeDefinition[T]( override val details: ScalaDocStringTypeDetails[T] -) extends ScalaDocStringTypeDefinition[T] - with ScenarioScoped {} +) extends ScalaDocStringTypeDefinition[T] {} class ScalaGlobalDocStringTypeDefinition[T]( override val details: ScalaDocStringTypeDetails[T] diff --git a/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaHookDefinition.scala b/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaHookDefinition.scala index c6d0295..ed3a2fb 100644 --- a/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaHookDefinition.scala +++ b/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaHookDefinition.scala @@ -1,6 +1,6 @@ package io.cucumber.scala -import io.cucumber.core.backend.{HookDefinition, ScenarioScoped, TestCaseState} +import io.cucumber.core.backend.{HookDefinition, TestCaseState} trait ScalaHookDefinition extends HookDefinition with AbstractGlueDefinition { @@ -35,8 +35,7 @@ object ScalaHookDefinition { class ScalaScenarioScopedHookDefinition( override val hookDetails: ScalaHookDetails -) extends ScalaHookDefinition - with ScenarioScoped {} +) extends ScalaHookDefinition {} class ScalaGlobalHookDefinition(override val hookDetails: ScalaHookDetails) extends ScalaHookDefinition {} diff --git a/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaParameterTypeDefinition.scala b/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaParameterTypeDefinition.scala index 8db58a7..1f734ca 100644 --- a/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaParameterTypeDefinition.scala +++ b/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaParameterTypeDefinition.scala @@ -1,6 +1,6 @@ package io.cucumber.scala -import io.cucumber.core.backend.{ParameterTypeDefinition, ScenarioScoped} +import io.cucumber.core.backend.ParameterTypeDefinition import io.cucumber.cucumberexpressions.{CaptureGroupTransformer, ParameterType} import scala.jdk.CollectionConverters._ @@ -44,8 +44,7 @@ object ScalaParameterTypeDefinition { class ScalaScenarioScopedParameterTypeDefinition[R]( override val details: ScalaParameterTypeDetails[R] -) extends ScalaParameterTypeDefinition[R] - with ScenarioScoped {} +) extends ScalaParameterTypeDefinition[R] {} class ScalaGlobalParameterTypeDefinition[R]( override val details: ScalaParameterTypeDetails[R] diff --git a/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaStepDefinition.scala b/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaStepDefinition.scala index 189478e..f530af2 100644 --- a/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaStepDefinition.scala +++ b/cucumber-scala/src/main/scala/io/cucumber/scala/ScalaStepDefinition.scala @@ -1,15 +1,14 @@ package io.cucumber.scala +import io.cucumber.core.backend.{ParameterInfo, StepDefinition} + import java.lang.reflect.{Type => JType} import java.util.{List => JList} - -import io.cucumber.core.backend.{ParameterInfo, ScenarioScoped, StepDefinition} - import scala.jdk.CollectionConverters._ trait ScalaStepDefinition extends StepDefinition with AbstractGlueDefinition { - val stepDetails: ScalaStepDetails + def stepDetails: ScalaStepDetails override val location: StackTraceElement = stepDetails.frame @@ -57,9 +56,8 @@ object ScalaStepDefinition { } class ScalaScenarioScopedStepDefinition( - override val stepDetails: ScalaStepDetails -) extends ScalaStepDefinition - with ScenarioScoped {} + override var stepDetails: ScalaStepDetails +) extends ScalaStepDefinition {} class ScalaGlobalStepDefinition(override val stepDetails: ScalaStepDetails) extends ScalaStepDefinition {} diff --git a/docs/scala_implementation.md b/docs/scala_implementation.md index 854c8d0..a0d5c97 100644 --- a/docs/scala_implementation.md +++ b/docs/scala_implementation.md @@ -46,7 +46,7 @@ For each **class** identified when loading the glue: - hooks and steps definitions are extracted from it - definitions are added to the `Glue` instance provided by Cucumber Core, as `ScenarioScoped` -Being `ScenarioScoped` ensure instances are flushed at the end of the scenario and recreated for the next one. +Being `ScenarioScoped` ensure instances are flushed at the end of the scenario and recreated for the next one. TODO update doc ## Scala DSL