Created
November 30, 2011 13:42
-
-
Save casualjim/1409096 to your computer and use it in GitHub Desktop.
Specs2 with Akka and jodatime support
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
trait ActorSpecification extends BaseSpecification | |
with ArgumentsArgs | |
with ArgumentsShortcuts | |
with MustThrownMatchers | |
with ShouldThrownMatchers | |
with FormattingFragments | |
with StandardResults | |
with StandardMatchResults | |
with PendingUntilFixed | |
with TimeHelpers | |
with Contexts { | |
/** transform a context to a result to allow the implicit passing of a context to each example */ | |
implicit def contextToResult[T](t: MatchResult[T])(implicit context: Context = defaultContext): Result = context(asResult(t)) | |
/** use an available outside context to transform a function returning a MatchResult into a result */ | |
implicit def outsideFunctionToResult[T, S](implicit o: Outside[T]) = (f: T => MatchResult[S]) => { o((t1:T) => f(t1).toResult) } | |
override def map(fs: => Fragments) = super.map(fs) ^ Step(Actor.registry.shutdownAll()) ^ Step(Scheduler.restart()) | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import akka.testkit._ | |
import akka.actor._ | |
import Actor.actorOf | |
class MyActor extends Actor { | |
protected def receive = { | |
case m => self.sender foreach { _ ! (m + " reply") } | |
} | |
} | |
class MyActorSpec extends AkkaSpecification { | |
def is = | |
"My actor should" ^ | |
"reply to a message" ! context.repliesToMessage ^ end | |
def context = new ActorContext | |
class ActorContext extends TestKit { | |
def repliesToMessage = { | |
val sut = actorOf[MyActor].start() | |
sut ! "hello" | |
receiveOne(2.seconds) must_== "hello reply" | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package org.scala_tools.time | |
import akka.util.{FiniteDuration, Duration => AkkaDuration } | |
import java.util.concurrent.TimeUnit | |
trait AkkaImplicits { | |
implicit def forceAkkaDuration(builder: DurationBuilder): AkkaDuration = { | |
builder.underlying.getMillis match { | |
case Int.MaxValue => AkkaDuration.Inf | |
case Int.MinValue => AkkaDuration.MinusInf | |
case 0 => new FiniteDuration(0, TimeUnit.NANOSECONDS) | |
case v => AkkaDuration(v, TimeUnit.MILLISECONDS) | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package mojolly | |
package testing | |
import org.scala_tools.time.Imports._ | |
import akka.util.Duration.timeFactor | |
/** | |
* Multiplying numbers used in test timeouts by a factor, set by system property. | |
* Useful for Jenkins builds (where the machine may need more time). | |
*/ | |
trait TimeHelpers { | |
def testTime(t: Int): Int = (timeFactor * t).toInt | |
def testTime(t: Long): Long = (timeFactor * t).toLong | |
def testTime(t: Float): Float = (timeFactor * t).toFloat | |
def testTime(t: Double): Double = timeFactor * t | |
object sleep { | |
def ->(duration:Duration) = Thread.sleep(testTime(duration.millis)) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment