Skip to content

Commit

Permalink
Allow AsyncResults in functional tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
fernandezpablo85 committed May 9, 2012
1 parent 2091678 commit 3b6982b
Showing 1 changed file with 8 additions and 0 deletions.
Expand Up @@ -43,11 +43,13 @@ object JavaResults extends Results with DefaultWriteables with DefaultContentTyp
object JavaResultExtractor {

def getStatus(result: play.mvc.Result): Int = result.getWrappedResult match {
case r: AsyncResult => getStatus(new ResultWrapper(r.result.await.get))
case Result(status, _) => status
case r => sys.error("Cannot extract the Status code from a result of type " + r.getClass.getName)
}

def getCookies(result: play.mvc.Result): JCookies = result.getWrappedResult match {
case r: AsyncResult => getCookies(new ResultWrapper(r.result.await.get))
case Result(_, headers) => new JCookies {
def get(name: String) = {
Cookies(headers.get(HeaderNames.SET_COOKIE)).get(name).map { cookie =>
Expand All @@ -59,16 +61,22 @@ object JavaResultExtractor {
}

def getHeaders(result: play.mvc.Result): java.util.Map[String, String] = result.getWrappedResult match {
case r: AsyncResult => getHeaders(new ResultWrapper(r.result.await.get))
case Result(_, headers) => headers.asJava
case r => sys.error("Cannot extract the Status code from a result of type " + r.getClass.getName)
}

def getBody(result: play.mvc.Result): Array[Byte] = result.getWrappedResult match {
case r: AsyncResult => getBody(new ResultWrapper(r.result.await.get))
case r @ SimpleResult(_, bodyEnumerator) => {
var readAsBytes = Enumeratee.map[r.BODY_CONTENT](r.writeable.transform(_)).transform(Iteratee.consume[Array[Byte]]())
bodyEnumerator(readAsBytes).flatMap(_.run).value.get
}
case r => sys.error("Cannot extract the body content from a result of type " + r.getClass.getName)
}

class ResultWrapper(r: play.api.mvc.Result) extends play.mvc.Result {
def getWrappedResult = r
}

}

0 comments on commit 3b6982b

Please sign in to comment.