diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2018-07-25 20:17:33 +0800 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2018-07-25 20:17:33 +0800 |
commit | 3e636ddada96b7f1a8b10da764b3fce0a360e26f (patch) | |
tree | 289404ca1ea46ae2298ab701cfe267af4794dc24 | |
parent | b985aa5d25d97794b26402f936c4323f977c4073 (diff) | |
download | cask-3e636ddada96b7f1a8b10da764b3fce0a360e26f.tar.gz cask-3e636ddada96b7f1a8b10da764b3fce0a360e26f.tar.bz2 cask-3e636ddada96b7f1a8b10da764b3fce0a360e26f.zip |
Fix tests
-rw-r--r-- | cask/src/cask/endpoints/FormEndpoint.scala | 9 | ||||
-rw-r--r-- | cask/src/cask/internal/Router.scala | 6 | ||||
-rw-r--r-- | cask/src/cask/main/Main.scala | 11 | ||||
-rw-r--r-- | cask/test/src/test/cask/ExampleTests.scala | 8 |
4 files changed, 18 insertions, 16 deletions
diff --git a/cask/src/cask/endpoints/FormEndpoint.scala b/cask/src/cask/endpoints/FormEndpoint.scala index 2b8cf25..10d1af3 100644 --- a/cask/src/cask/endpoints/FormEndpoint.scala +++ b/cask/src/cask/endpoints/FormEndpoint.scala @@ -4,7 +4,7 @@ import cask.internal.Router.EntryPoint import cask.internal.Router import cask.main.Routes import cask.model.{FormValue, ParamContext, Response} -import io.undertow.server.handlers.form.{FormParserFactory} +import io.undertow.server.handlers.form.FormParserFactory import collection.JavaConverters._ @@ -14,7 +14,7 @@ object FormReader{ def arity = implicitly[QueryParamReader[T]].arity def read(ctx: ParamContext, label: String, input: Seq[FormValue]) = { - implicitly[QueryParamReader[T]].read(ctx, label, input.map(_.value)) + implicitly[QueryParamReader[T]].read(ctx, label, if (input == null) null else input.map(_.value)) } } @@ -52,11 +52,12 @@ class postForm(val path: String, override val subpath: Boolean = false) extends .asScala .map(k => (k, formData.get(k).asScala.map(FormValue.fromUndertow).toSeq)) - val pathBindings = bindings.map{case (k, v) => (k, Seq(new FormValue.Plain(v, new io.undertow.util.HeaderMap())))} - entryPoint.invoke(routes, ctx, pathBindings ++ formDataBindings) + val allBindings = pathBindings ++ formDataBindings + + entryPoint.invoke(routes, ctx, allBindings) .asInstanceOf[Router.Result[Response]] } } diff --git a/cask/src/cask/internal/Router.scala b/cask/src/cask/internal/Router.scala index 9302e45..b89fef3 100644 --- a/cask/src/cask/internal/Router.scala +++ b/cask/src/cask/internal/Router.scala @@ -124,9 +124,7 @@ object Router{ } } - type FailMaybe = Either[Seq[Result.ParamError], Any] - type FailAll = Either[Seq[Result.ParamError], Seq[Any]] def validate(args: Seq[FailMaybe]): Result[Seq[Any]] = { val lefts = args.collect{case Left(x) => x}.flatten @@ -155,9 +153,7 @@ object Router{ tryEither(arg.reads.read(ctx, arg.name, x), Result.ParamError.Invalid(arg, x.toString, _)).left.map(Seq(_)) } } - } - } @@ -201,7 +197,7 @@ class Router[C <: Context](val c: C) { else None } val argListSymbol = q"${c.fresh[TermName]("argsList")}" - val extrasSymbol = q"${c.fresh[TermName]("extras")}" + val defaults = for ((arg, i) <- flattenedArgLists.zipWithIndex) yield { val arg = TermName(c.freshName()) hasDefault(i).map(defaultName => q"($arg: $curCls) => $arg.${newTermName(defaultName)}") diff --git a/cask/src/cask/main/Main.scala b/cask/src/cask/main/Main.scala index f7789e3..9362e20 100644 --- a/cask/src/cask/main/Main.scala +++ b/cask/src/cask/main/Main.scala @@ -1,5 +1,7 @@ package cask.main +import java.io.{PrintWriter, StringWriter} + import cask.model._ import cask.internal.Router.EntryPoint import cask.internal.{DispatchTrie, Router, Util} @@ -139,10 +141,13 @@ abstract class BaseMain{ val thingies = x.map{ case Router.Result.ParamError.Invalid(p, v, ex) => val literalV = literalize(v) - - s"${p.name}: ${p.typeString} = $literalV failed to parse with $ex" + val trace = new StringWriter() + ex.printStackTrace(new PrintWriter(trace)) + s"${p.name}: ${p.typeString} = $literalV failed to parse with $ex\n$trace" case Router.Result.ParamError.DefaultFailed(p, ex) => - s"${p.name}'s default value failed to evaluate with $ex" + val trace = new StringWriter() + ex.printStackTrace(new PrintWriter(trace)) + s"${p.name}'s default value failed to evaluate with $ex\n$trace" } s"""The following $argumentsStr failed to parse: diff --git a/cask/test/src/test/cask/ExampleTests.scala b/cask/test/src/test/cask/ExampleTests.scala index d336627..c1c007e 100644 --- a/cask/test/src/test/cask/ExampleTests.scala +++ b/cask/test/src/test/cask/ExampleTests.scala @@ -76,14 +76,14 @@ object ExampleTests extends TestSuite{ resp.text() ==> "my-best-image.txt" } 'FormJsonPost - test(FormJsonPost){ host => - requests.post(host + "/json", data = """{"value1": true, "value2": [1, 2]""") ==> - "OK true [1, 2]" + requests.post(host + "/json", data = """{"value1": true, "value2": [3]}""").text() ==> + "OK true Vector(3)" requests.post( host + "/form", data = Seq("value1" -> "hello", "value2" -> "1", "value2" -> "2") - ) ==> - "OK hello 1 2" + ).text() ==> + "OK Plain(hello,null) List(1, 2)" } } |