From 3654b08845673a5a83be46f4bdcf885d0fad3341 Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Thu, 26 Jul 2018 00:15:18 +0800 Subject: First decorator unit test works --- cask/src/cask/internal/Router.scala | 3 ++- cask/src/cask/main/Main.scala | 1 + cask/src/cask/main/Routes.scala | 9 ++++----- cask/test/src/test/cask/Decorator.scala | 4 ++-- cask/test/src/test/cask/ExampleTests.scala | 2 +- 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/cask/src/cask/internal/Router.scala b/cask/src/cask/internal/Router.scala index 50d0ea4..460c5e4 100644 --- a/cask/src/cask/internal/Router.scala +++ b/cask/src/cask/internal/Router.scala @@ -268,7 +268,7 @@ class Router[C <: Context](val c: C) { q""" cask.internal.Router.ArgSig[$annotDeserializeType, $curCls, $docUnwrappedType, $ctx]( ${arg.name.toString}, - ${docUnwrappedType.toString + (if (vararg) "*" else "")}, + ${docUnwrappedType.toString}, $docTree, $defaultOpt )($argReader[$docUnwrappedType]) @@ -333,6 +333,7 @@ class Router[C <: Context](val c: C) { c.internal.setPos(t, meth.pos) a.default(t) } + res } diff --git a/cask/src/cask/main/Main.scala b/cask/src/cask/main/Main.scala index 0523fb1..8e21e2e 100644 --- a/cask/src/cask/main/Main.scala +++ b/cask/src/cask/main/Main.scala @@ -63,6 +63,7 @@ abstract class BaseMain{ Seq(metadata.endpoint.handle(ParamContext(exchange, remaining)) ++ bindings.mapValues(metadata.endpoint.wrapPathSegment)) ++ metadata.decorators.map(e => e.handle(ParamContext(exchange, remaining))) + val result = metadata.entryPoint .asInstanceOf[EntryPoint[cask.main.Routes, cask.model.ParamContext]] .invoke(routes, ParamContext(exchange, remaining), providers) diff --git a/cask/src/cask/main/Routes.scala b/cask/src/cask/main/Routes.scala index b8dcbc1..548162d 100644 --- a/cask/src/cask/main/Routes.scala +++ b/cask/src/cask/main/Routes.scala @@ -35,10 +35,9 @@ object Routes{ val routeParts = for{ m <- c.weakTypeOf[T].members - val annotations = m.annotations.filter(_.tree.tpe <:< c.weakTypeOf[Decorator]) + val annotations = m.annotations.filter(_.tree.tpe <:< c.weakTypeOf[Decorator]).reverse if annotations.nonEmpty } yield { - val annotObjects = for(annot <- annotations) yield q"new ${annot.tree.tpe}(..${annot.tree.children.tail})" @@ -48,7 +47,7 @@ object Routes{ val route = router.extractMethod( m.asInstanceOf[MethodSymbol], weakTypeOf[T], - (t: router.c.universe.Tree) => q"${annotObjectSyms.last}.wrapMethodOutput(ctx, $t)", + (t: router.c.universe.Tree) => q"${annotObjectSyms.head}.wrapMethodOutput(ctx, $t)", c.weakTypeOf[ParamContext], annotObjectSyms.map(annotObjectSym => q"$annotObjectSym.parseMethodInput"), annotObjectSyms.map(annotObjectSym => tq"$annotObjectSym.InputType") @@ -62,8 +61,8 @@ object Routes{ val res = q"""{ ..$declarations cask.main.Routes.EndpointMetadata( - Seq(..${annotObjectSyms.dropRight(1)}), - ${annotObjectSyms.last}, + Seq(..${annotObjectSyms.drop(1)}), + ${annotObjectSyms.head}, $route ) }""" diff --git a/cask/test/src/test/cask/Decorator.scala b/cask/test/src/test/cask/Decorator.scala index 0e31019..e8927cf 100644 --- a/cask/test/src/test/cask/Decorator.scala +++ b/cask/test/src/test/cask/Decorator.scala @@ -10,9 +10,9 @@ object Decorator extends cask.MainRoutes{ def handle(ctx: ParamContext) = Map("extra" -> 31337) def parseMethodInput[T] = new ArgReader[Int, T, ParamContext] { - def arity = 0 + def arity = 1 - def read(ctx: ParamContext, label: String, input: Int) = 0.asInstanceOf[T] + def read(ctx: ParamContext, label: String, input: Int) = input.asInstanceOf[T] } } diff --git a/cask/test/src/test/cask/ExampleTests.scala b/cask/test/src/test/cask/ExampleTests.scala index 8787b3a..be0000c 100644 --- a/cask/test/src/test/cask/ExampleTests.scala +++ b/cask/test/src/test/cask/ExampleTests.scala @@ -87,7 +87,7 @@ object ExampleTests extends TestSuite{ "OK Plain(hello,null) List(1, 2)" } 'Decorator - test(Decorator){ host => - requests.get(host + "/hello/woo").text() + requests.get(host + "/hello/woo").text() ==> "woo31337" } } -- cgit v1.2.3