Skip to content

Commit 7501d0d

Browse files
authored
Merge pull request #70 from vbmacher/step-creation
[#69] Fix resolving steps using cucumber-parameters "regexes"
2 parents d15a33f + 9d1d748 commit 7501d0d

File tree

4 files changed

+33
-1
lines changed

4 files changed

+33
-1
lines changed

cucumber-scala/src/main/scala/com/github/danielwegener/intellij/cucumber/scala/steps/ScStepDefinition.scala

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,23 @@ import scala.collection.JavaConverters._
1313
import scala.util.Try
1414

1515
class ScStepDefinition(scMethod: ScMethodCall) extends AbstractStepDefinition(scMethod.getFirstChild) {
16+
private val INTEGER_REGEXP = "-?\\\\d+"
17+
private val FLOAT_REGEXP = "[+-]?(\\\\d+\\\\.)?\\\\d+"
18+
private val WORD_REGEXP = "\\\\w"
19+
20+
// See: io.cucumber.cucumberexpressions.ParameterTypeRegistry
21+
private val paramRegexp = Map(
22+
"\\{biginteger\\}" -> INTEGER_REGEXP,
23+
"\\{int\\}" -> INTEGER_REGEXP,
24+
"\\{byte\\}" -> INTEGER_REGEXP,
25+
"\\{short\\}" -> INTEGER_REGEXP,
26+
"\\{long\\}" -> INTEGER_REGEXP,
27+
"\\{bigdecimal\\}" -> FLOAT_REGEXP,
28+
"\\{float\\}" -> FLOAT_REGEXP,
29+
"\\{double\\}" -> FLOAT_REGEXP,
30+
"\\{word\\}" -> WORD_REGEXP,
31+
"\\{string\\}" -> "(.*)"
32+
).mapValues("(" + _ + ")")
1633

1734
override def getVariableNames: util.List[String] = {
1835
seqAsJavaList(ScCucumberUtil.getStepArguments(scMethod).map(_.getName()))
@@ -21,11 +38,16 @@ class ScStepDefinition(scMethod: ScMethodCall) extends AbstractStepDefinition(sc
2138
@Nullable
2239
override def getCucumberRegexFromElement(element: PsiElement): String = Try {
2340
scMethod match {
24-
case mc: ScMethodCall => ScCucumberUtil.getStepRegex(mc).orNull
41+
case mc: ScMethodCall => ScCucumberUtil.getStepRegex(mc).map(replaceParametersWithRegex).orNull
2542
case _ => null
2643
}
2744
}.getOrElse(null)
2845

46+
def replaceParametersWithRegex(regex: String): String = {
47+
paramRegexp.foldLeft(regex) {
48+
case (acc, (key, replacement)) => acc.replaceAll(key, replacement)
49+
}
50+
}
2951
}
3052

3153
object ScStepDefinition {

cucumber-scala/src/test/resources/testdata/resolveDirect/StepDefinitions.scala

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ class StepDefinitions extends ScalaDsl {
2626

2727
}
2828

29+
And("Some {int} parameter with {float}") {
30+
31+
}
32+
2933
Then("^the result is ([+-]?\\d+)$") { expected: Double =>
3034
assertEquals(expected, calc.value, 0.001)
3135
}

cucumber-scala/src/test/resources/testdata/resolveDirect/testcase.feature

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,4 @@ Feature: Basic Arithmetic
1212
When I div 10 by 2
1313
Then the result is 5
1414
And nothing else
15+
And Some 55 parameter with 3.14

cucumber-scala/src/test/scala/com/github/danielwegener/intellij/cucumber/scala/resolve/StepResolveSpec.scala

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ class StepResolveSpec extends StepResolveSpecBase {
2929
checkResolveIndirect("When I div 10 by 2")
3030
}
3131

32+
@Test
33+
def testResolveDirectWithCucumberParameters(): Unit = {
34+
checkResolveDirect("Some 55 parameter with 3.14")
35+
}
36+
3237
@Test
3338
def testResolveMultipleDefinitions(): Unit = {
3439
multiResolve(2,

0 commit comments

Comments
 (0)