summaryrefslogtreecommitdiff
path: root/cask
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2018-07-26 00:15:18 +0800
committerLi Haoyi <haoyi.sg@gmail.com>2018-07-26 00:15:18 +0800
commit3654b08845673a5a83be46f4bdcf885d0fad3341 (patch)
treef745984000361ec671ec4dd501b0f487bf99d79f /cask
parentf4e21bca86ec7c2b2ab96b9c0daa573a8b448efc (diff)
downloadcask-3654b08845673a5a83be46f4bdcf885d0fad3341.tar.gz
cask-3654b08845673a5a83be46f4bdcf885d0fad3341.tar.bz2
cask-3654b08845673a5a83be46f4bdcf885d0fad3341.zip
First decorator unit test works
Diffstat (limited to 'cask')
-rw-r--r--cask/src/cask/internal/Router.scala3
-rw-r--r--cask/src/cask/main/Main.scala1
-rw-r--r--cask/src/cask/main/Routes.scala9
-rw-r--r--cask/test/src/test/cask/Decorator.scala4
-rw-r--r--cask/test/src/test/cask/ExampleTests.scala2
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"
}
}