diff --git a/scala/pom.xml b/scala/pom.xml
index 3a3be05e23..f68072372e 100644
--- a/scala/pom.xml
+++ b/scala/pom.xml
@@ -55,6 +55,12 @@
+
+
+ maven-idea-plugin-repo
+ http://maven-idea-plugin.googlecode.com/svn/maven-repo
+
+
@@ -124,6 +130,11 @@ file.write(template.toString(), "UTF-8")
+
+ com.googlecode
+ maven-idea-plugin
+ 1.6
+
diff --git a/scala/src/main/scala/cucumber/api/scala/ScalaDsl.scala b/scala/src/main/scala/cucumber/api/scala/ScalaDsl.scala
index 753152beab..06293359d6 100644
--- a/scala/src/main/scala/cucumber/api/scala/ScalaDsl.scala
+++ b/scala/src/main/scala/cucumber/api/scala/ScalaDsl.scala
@@ -1,6 +1,6 @@
package cucumber.api.scala
-import _root_.cucumber.runtime._
+import _root_.cucumber.api.Scenario
import _root_.cucumber.runtime.scala.Transform
import _root_.cucumber.runtime.scala.ScalaHookDefinition
import _root_.cucumber.runtime.scala.ScalaStepDefinition
@@ -14,28 +14,28 @@ trait ScalaDsl { self =>
private [cucumber] val beforeHooks = new ArrayBuffer[HookDefinition]
private [cucumber] val afterHooks = new ArrayBuffer[HookDefinition]
- def Before(f: => Unit){
+ def Before(f: Scenario => Unit){
Before()(f)
}
- def Before(tags: String*)(f: => Unit) {
+ def Before(tags: String*)(f: Scenario => Unit) {
Before(Int.MaxValue, tags :_*)(f)
}
- def Before(order:Int, tags:String*)(f: => Unit){
- beforeHooks += new ScalaHookDefinition(f _, order, tags)
+ def Before(order:Int, tags:String*)(f: Scenario => Unit){
+ beforeHooks += new ScalaHookDefinition(f, order, tags)
}
- def After(f: => Unit){
+ def After(f: Scenario => Unit){
After()(f)
}
- def After(tags: String*)(f: => Unit) {
+ def After(tags: String*)(f: Scenario => Unit) {
After(Int.MaxValue, tags:_*)(f)
}
- def After(order:Int, tags: String*)(f: => Unit){
- afterHooks += new ScalaHookDefinition(f _, order, tags)
+ def After(order:Int, tags: String*)(f: Scenario => Unit){
+ afterHooks += new ScalaHookDefinition(f, order, tags)
}
final class Step(name: String) {
diff --git a/scala/src/main/scala/cucumber/runtime/scala/ScalaHookDefinition.scala b/scala/src/main/scala/cucumber/runtime/scala/ScalaHookDefinition.scala
index c9ae6b8462..f432282b3d 100644
--- a/scala/src/main/scala/cucumber/runtime/scala/ScalaHookDefinition.scala
+++ b/scala/src/main/scala/cucumber/runtime/scala/ScalaHookDefinition.scala
@@ -7,12 +7,12 @@ import _root_.cucumber.api.Scenario
import _root_.cucumber.runtime.HookDefinition
import collection.JavaConverters._
-class ScalaHookDefinition(f:() => Unit, order:Int, tags:Seq[String]) extends HookDefinition {
+class ScalaHookDefinition(f:Scenario => Unit, order:Int, tags:Seq[String]) extends HookDefinition {
val tagExpression = new TagExpression(tags.asJava)
def getLocation(detail: Boolean) = "TODO: Implement getLocation in similar fashion to ScalaStepDefinition"
- def execute(scenario: Scenario) { f() }
+ def execute(scenario: Scenario) { f(scenario) }
def matches(tags: Collection[Tag]) = tagExpression.eval(tags)
diff --git a/scala/src/test/scala/cucumber/api/scala/ScalaDslTest.scala b/scala/src/test/scala/cucumber/api/scala/ScalaDslTest.scala
index 4a6bb429c6..82faef1198 100644
--- a/scala/src/test/scala/cucumber/api/scala/ScalaDslTest.scala
+++ b/scala/src/test/scala/cucumber/api/scala/ScalaDslTest.scala
@@ -7,36 +7,43 @@ import _root_.gherkin.formatter.model.Tag
import collection.JavaConverters._
import _root_.cucumber.runtime.scala.Transform
+import cucumber.api.Scenario
class ScalaDslTest {
+ object StubScenario extends Scenario{
+ def getStatus = ""
+
+ def isFailed = false
+
+ def embed(p1: Array[Byte], p2: String) {}
+
+ def write(p1: String) {}
+ }
+
@Test
def emptyBefore {
- var called = false
+ var actualScenario : Scenario = null
object Befores extends ScalaDsl with EN {
- Before {
- called = true
- }
+ Before { actualScenario = _ }
}
assertEquals(1, Befores.beforeHooks.size)
val hook = Befores.beforeHooks.head
assertTrue(hook.matches(List[Tag]().asJava))
- hook.execute(null)
- assertTrue(called)
+ hook.execute(StubScenario)
assertEquals(Int.MaxValue, hook.getOrder)
+ assertEquals(StubScenario, actualScenario)
}
@Test
def taggedBefore {
- var called = false
+ var actualScenario : Scenario = null
object Befores extends ScalaDsl with EN {
- Before("@foo,@bar", "@zap"){
- called = true
- }
+ Before("@foo,@bar", "@zap"){ actualScenario = _ }
}
assertEquals(1, Befores.beforeHooks.size)
@@ -46,20 +53,16 @@ class ScalaDslTest {
assertTrue(hook.matches(List(new Tag("@bar", 0), new Tag("@zap", 0)).asJava))
assertFalse(hook.matches(List(new Tag("@bar", 1)).asJava))
- hook.execute(null)
- assertTrue(called)
+ hook.execute(StubScenario)
+ assertEquals(StubScenario, actualScenario)
assertEquals(Int.MaxValue, hook.getOrder)
}
@Test
def orderedBefore {
- var called = false
-
object Befores extends ScalaDsl with EN {
- Before(10){
- called = true
- }
+ Before(10){ scenario : Scenario => }
}
val hook = Befores.beforeHooks(0)
@@ -69,12 +72,8 @@ class ScalaDslTest {
@Test
def taggedOrderedBefore {
- var called = false
-
object Befores extends ScalaDsl with EN {
- Before(10, "@foo,@bar", "@zap"){
- called = true
- }
+ Before(10, "@foo,@bar", "@zap"){ scenario : Scenario => }
}
val hook = Befores.beforeHooks(0)
@@ -84,29 +83,25 @@ class ScalaDslTest {
@Test
def emptyAfter {
- var called = false
+ var actualScenario : Scenario = null
object Afters extends ScalaDsl with EN {
- After {
- called = true
- }
+ After { actualScenario = _ }
}
assertEquals(1, Afters.afterHooks.size)
val hook = Afters.afterHooks.head
assertTrue(hook.matches(List[Tag]().asJava))
- hook.execute(null)
- assertTrue(called)
+ hook.execute(StubScenario)
+ assertEquals(StubScenario, actualScenario)
}
@Test
def taggedAfter {
- var called = false
+ var actualScenario : Scenario = null
object Afters extends ScalaDsl with EN {
- After("@foo,@bar", "@zap"){
- called = true
- }
+ After("@foo,@bar", "@zap"){ actualScenario = _ }
}
assertEquals(1, Afters.afterHooks.size)
@@ -116,8 +111,8 @@ class ScalaDslTest {
assertTrue(hook.matches(List(new Tag("@bar", 0), new Tag("@zap", 0)).asJava))
assertFalse(hook.matches(List(new Tag("@bar", 1)).asJava))
- hook.execute(null)
- assertTrue(called)
+ hook.execute(StubScenario)
+ assertEquals(StubScenario, actualScenario)
}
@Test
@@ -132,7 +127,7 @@ class ScalaDslTest {
assertEquals(1, Dummy.stepDefinitions.size)
val step = Dummy.stepDefinitions.head
- assertEquals("ScalaDslTest.scala:128", step.getLocation(true)) // be careful with formatting or this test will break
+ assertEquals("ScalaDslTest.scala:123", step.getLocation(true)) // be careful with formatting or this test will break
assertEquals("x", step.getPattern)
step.execute(new I18n("en"), Array())
assertTrue(called)