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.junit.JUnitSuite
|
||||||
import org.scalatest.WordSpec
|
import org.scalatest.WordSpec
|
||||||
import org.scalatest.matchers.MustMatchers
|
import org.scalatest.matchers.MustMatchers
|
||||||
|
import org.scalatest.BeforeAndAfterAll
|
||||||
import org.scalatest.prop.Checkers
|
import org.scalatest.prop.Checkers
|
||||||
import org.scalacheck._
|
import org.scalacheck._
|
||||||
import org.scalacheck.Arbitrary._
|
import org.scalacheck.Arbitrary._
|
||||||
|
|
@ -11,6 +12,8 @@ import org.scalacheck.Gen._
|
||||||
|
|
||||||
import akka.actor.{ Actor, ActorRef }
|
import akka.actor.{ Actor, ActorRef }
|
||||||
import Actor._
|
import Actor._
|
||||||
|
import akka.event.EventHandler
|
||||||
|
import akka.testkit.TestEvent._
|
||||||
import org.multiverse.api.latches.StandardLatch
|
import org.multiverse.api.latches.StandardLatch
|
||||||
import java.util.concurrent.{ TimeUnit, CountDownLatch }
|
import java.util.concurrent.{ TimeUnit, CountDownLatch }
|
||||||
|
|
||||||
|
|
@ -40,9 +43,17 @@ object FutureSpec {
|
||||||
|
|
||||||
class JavaFutureSpec extends JavaFutureTests with JUnitSuite
|
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._
|
import FutureSpec._
|
||||||
|
|
||||||
|
override def beforeAll() {
|
||||||
|
EventHandler.notify(Mute)
|
||||||
|
}
|
||||||
|
|
||||||
|
override def afterAll() {
|
||||||
|
EventHandler.notify(UnMute)
|
||||||
|
}
|
||||||
|
|
||||||
"A Promise" when {
|
"A Promise" when {
|
||||||
"never completed" must {
|
"never completed" must {
|
||||||
behave like emptyFuture(_(Promise()))
|
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")
|
val javaCompileSettings = Seq("-Xlint:unchecked")
|
||||||
|
|
||||||
|
system[String]("akka.mode").update("test")
|
||||||
|
|
||||||
// -------------------------------------------------------------------------------------------------------------------
|
// -------------------------------------------------------------------------------------------------------------------
|
||||||
// All repositories *must* go here! See ModuleConigurations below.
|
// All repositories *must* go here! See ModuleConigurations below.
|
||||||
// -------------------------------------------------------------------------------------------------------------------
|
// -------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue