Added TestEventListener
This commit is contained in:
parent
389893a0cc
commit
6b73e0982a
4 changed files with 79 additions and 1 deletions
|
|
@ -3,6 +3,7 @@ package akka.dispatch
|
|||
import org.scalatest.junit.JUnitSuite
|
||||
import org.scalatest.WordSpec
|
||||
import org.scalatest.matchers.MustMatchers
|
||||
import org.scalatest.BeforeAndAfterAll
|
||||
import org.scalatest.prop.Checkers
|
||||
import org.scalacheck._
|
||||
import org.scalacheck.Arbitrary._
|
||||
|
|
@ -11,6 +12,8 @@ import org.scalacheck.Gen._
|
|||
|
||||
import akka.actor.{ Actor, ActorRef }
|
||||
import Actor._
|
||||
import akka.event.EventHandler
|
||||
import akka.testkit.TestEvent._
|
||||
import org.multiverse.api.latches.StandardLatch
|
||||
import java.util.concurrent.{ TimeUnit, CountDownLatch }
|
||||
|
||||
|
|
@ -40,9 +43,17 @@ object FutureSpec {
|
|||
|
||||
class JavaFutureSpec extends JavaFutureTests with JUnitSuite
|
||||
|
||||
class FutureSpec extends WordSpec with MustMatchers with Checkers {
|
||||
class FutureSpec extends WordSpec with MustMatchers with Checkers with BeforeAndAfterAll {
|
||||
import FutureSpec._
|
||||
|
||||
override def beforeAll() {
|
||||
EventHandler.notify(Mute)
|
||||
}
|
||||
|
||||
override def afterAll() {
|
||||
EventHandler.notify(UnMute)
|
||||
}
|
||||
|
||||
"A Promise" when {
|
||||
"never completed" must {
|
||||
behave like emptyFuture(_(Promise()))
|
||||
|
|
|
|||
|
|
@ -0,0 +1,56 @@
|
|||
package akka.testkit
|
||||
|
||||
import akka.event.EventHandler
|
||||
import akka.actor.Actor
|
||||
|
||||
sealed trait TestEvent
|
||||
|
||||
object TestEvent {
|
||||
case class Mute(filter: EventFilter = EventFilter.all) extends TestEvent
|
||||
case class UnMute(filter: EventFilter = EventFilter.all) extends TestEvent
|
||||
}
|
||||
|
||||
case class EventFilter(throwable: Class[_] = classOf[Throwable], source: Option[AnyRef] = None) {
|
||||
import EventHandler._
|
||||
|
||||
def apply(event: Event): Boolean = event match {
|
||||
case Error(cause, instance, _) ⇒
|
||||
(throwable isInstance cause) &&
|
||||
(source map (_ eq instance) getOrElse true)
|
||||
case _ ⇒ false
|
||||
}
|
||||
}
|
||||
|
||||
object EventFilter {
|
||||
val all = EventFilter()
|
||||
}
|
||||
|
||||
class TestEventListener extends EventHandler.DefaultListener {
|
||||
import EventHandler._
|
||||
import TestEvent._
|
||||
|
||||
var filters: List[EventFilter] = Nil
|
||||
|
||||
override def receive: Receive = ({
|
||||
case Mute(filter) ⇒ addFilter(filter)
|
||||
case Mute ⇒ addFilter(EventFilter.all)
|
||||
case UnMute(filter) ⇒ removeFilter(filter)
|
||||
case UnMute ⇒ addFilter(EventFilter.all)
|
||||
case event: Error if filter(event) ⇒ // Just test Error events
|
||||
}: Receive) orElse super.receive
|
||||
|
||||
def filter(event: Event): Boolean = filters exists (_(event))
|
||||
|
||||
def addFilter(filter: EventFilter): Unit = filters ::= filter
|
||||
|
||||
def removeFilter(filter: EventFilter): Unit = {
|
||||
@scala.annotation.tailrec
|
||||
def removeFirst(list: List[EventFilter], zipped: List[EventFilter] = Nil): List[EventFilter] = list match {
|
||||
case head :: tail if head == filter ⇒ tail.reverse_:::(zipped)
|
||||
case head :: tail ⇒ removeFirst(tail, head :: zipped)
|
||||
case Nil ⇒ filters // filter not found, just return original list
|
||||
}
|
||||
filters = removeFirst(filters)
|
||||
}
|
||||
|
||||
}
|
||||
9
config/akka.test.conf
Normal file
9
config/akka.test.conf
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
# This config imports the Akka reference configuration.
|
||||
include "akka-reference.conf"
|
||||
|
||||
# In this file you can override any option defined in the 'akka-reference.conf' file.
|
||||
# Copy in all or parts of the 'akka-reference.conf' file and modify as you please.
|
||||
|
||||
akka {
|
||||
event-handlers = ["akka.testkit.TestEventListener"]
|
||||
}
|
||||
|
|
@ -25,6 +25,8 @@ class AkkaParentProject(info: ProjectInfo) extends ParentProject(info) with Exec
|
|||
|
||||
val javaCompileSettings = Seq("-Xlint:unchecked")
|
||||
|
||||
system[String]("akka.mode").update("test")
|
||||
|
||||
// -------------------------------------------------------------------------------------------------------------------
|
||||
// All repositories *must* go here! See ModuleConigurations below.
|
||||
// -------------------------------------------------------------------------------------------------------------------
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue