This is an automated email from the ASF dual-hosted git repository.

jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git


The following commit(s) were added to refs/heads/master by this push:
     new f9065c0  Tests.
f9065c0 is described below

commit f9065c013555630df15627904562f2682f54b99c
Author: JamesBognar <[email protected]>
AuthorDate: Sat May 12 21:50:17 2018 -0400

    Tests.
---
 .../juneau/rest/test/CharsetEncodingsResource.java |  76 --------------
 .../apache/juneau/rest/test/FormDataResource.java  |  36 -------
 .../java/org/apache/juneau/rest/test/Root.java     |   2 -
 .../juneau/rest/test/CharsetEncodingsTest.java     | 110 ---------------------
 .../apache/juneau/rest/test/ClientVersionTest.java |  77 ---------------
 .../org/apache/juneau/rest/test/FormDataTest.java  |  34 -------
 .../org/apache/juneau/rest/test/_TestSuite.java    |   2 -
 .../juneau/rest/mock/MockServletRequest.java       |  42 +++++++-
 .../org/apache/juneau/rest/ClientVersionTest.java  |  80 +++++++++------
 .../rest/annotation/FormDataAnnotationTest.java    |  62 ++++++++++++
 10 files changed, 153 insertions(+), 368 deletions(-)

diff --git 
a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/CharsetEncodingsResource.java
 
b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/CharsetEncodingsResource.java
deleted file mode 100644
index d386ee7..0000000
--- 
a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/CharsetEncodingsResource.java
+++ /dev/null
@@ -1,76 +0,0 @@
-// 
***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                
                                              *
-// *                                                                           
                                              *
-// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
-// *                                                                           
                                              *
-// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the 
License.                                              *
-// 
***************************************************************************************************************************
-package org.apache.juneau.rest.test;
-
-import static org.apache.juneau.internal.IOUtils.*;
-import static org.apache.juneau.http.HttpMethodName.*;
-
-import org.apache.juneau.*;
-import org.apache.juneau.parser.*;
-import org.apache.juneau.rest.*;
-import org.apache.juneau.rest.annotation.*;
-import org.apache.juneau.serializer.*;
-
-/**
- * JUnit automated testcase resource.
- */
-@RestResource(
-       path="/testCharsetEncodings",
-       defaultRequestHeaders={"Accept: text/s", "Content-Type: text/p"},
-       parsers={CharsetEncodingsResource.CtParser.class}, 
serializers={CharsetEncodingsResource.ASerializer.class}
-)
-public class CharsetEncodingsResource extends RestServlet {
-       private static final long serialVersionUID = 1L;
-
-       public static class CtParser extends ReaderParser {
-
-               public CtParser(PropertyStore ps) {
-                       super(ps, "text/p");
-               }
-
-               @Override /* Parser */
-               public ReaderParserSession createSession(ParserSessionArgs 
args) {
-                       return new ReaderParserSession(args) {
-
-                               @Override /* ParserSession */
-                               @SuppressWarnings("unchecked")
-                               protected <T> T doParse(ParserPipe pipe, 
ClassMeta<T> type) throws Exception {
-                                       return (T)read(pipe.getReader());
-                               }
-                       };
-               }
-       }
-
-       public static class ASerializer extends WriterSerializer {
-
-               public ASerializer(PropertyStore ps) {
-                       super(ps, "text/s", null);
-               }
-
-               @Override /* Serializer */
-               public WriterSerializerSession 
createSession(SerializerSessionArgs args) {
-                       return new WriterSerializerSession(args) {
-
-                               @Override /* SerializerSession */
-                               protected void doSerialize(SerializerPipe out, 
Object o) throws Exception {
-                                       out.getWriter().write(o.toString());
-                               }
-                       };
-               }
-       }
-
-       @RestMethod(name=PUT, path="/")
-       public String test1(RestRequest req, @Body String in) {
-               return req.getCharacterEncoding() + "/" + in + "/" + 
req.getCharacterEncoding();
-       }
-}
diff --git 
a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/FormDataResource.java
 
b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/FormDataResource.java
index 0f61d78..1183d5b 100644
--- 
a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/FormDataResource.java
+++ 
b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/FormDataResource.java
@@ -17,7 +17,6 @@ import static org.apache.juneau.http.HttpMethodName.*;
 
 import java.io.*;
 
-import org.apache.juneau.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 
@@ -38,39 +37,4 @@ public class FormDataResource extends BasicRestServlet {
                return new 
StringReader("Content-Type=["+req.getContentType()+"], 
contents=["+read(req.getReader())+"]");
        }
 
-       
//====================================================================================================
-       // Default values.
-       
//====================================================================================================
-
-       @RestMethod(name=POST, path="/defaultFormData", 
defaultFormData={"f1:1","f2=2"," f3 : 3 "})
-       public ObjectMap defaultFormData(RequestFormData formData) {
-               return new ObjectMap()
-                       .append("f1", formData.getString("f1"))
-                       .append("f2", formData.getString("f2"))
-                       .append("f3", formData.getString("f3"));
-       }
-
-       @RestMethod(name=POST, path="/annotatedFormData")
-       public ObjectMap annotatedFormData(@FormData("f1") String f1, 
@FormData("f2") String f2, @FormData("f3") String f3) {
-               return new ObjectMap()
-                       .append("f1", f1)
-                       .append("f2", f2)
-                       .append("f3", f3);
-       }
-
-       @RestMethod(name=POST, path="/annotatedFormDataDefault")
-       public ObjectMap 
annotatedFormDataDefault(@FormData(value="f1",_default="1") String f1, 
@FormData(value="f2",_default="2") String f2, 
@FormData(value="f3",_default="3") String f3) {
-               return new ObjectMap()
-                       .append("f1", f1)
-                       .append("f2", f2)
-                       .append("f3", f3);
-       }
-
-       @RestMethod(name=POST, path="/annotatedAndDefaultFormData", 
defaultFormData={"f1:1","f2=2"," f3 : 3 "})
-       public ObjectMap 
annotatedAndDefaultFormData(@FormData(value="f1",_default="4") String f1, 
@FormData(value="f2",_default="5") String f2, 
@FormData(value="f3",_default="6") String f3) {
-               return new ObjectMap()
-                       .append("f1", f1)
-                       .append("f2", f2)
-                       .append("f3", f3);
-       }
 }
diff --git 
a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/Root.java
 
b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/Root.java
index 4e8d6e4..b45068f 100644
--- 
a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/Root.java
+++ 
b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/Root.java
@@ -26,9 +26,7 @@ import org.apache.juneau.rest.helper.*;
                LogsResource.class,
                BpiResource.class,
                CallbackStringsResource.class,
-               CharsetEncodingsResource.class,
                ClientFuturesResource.class,
-               ClientVersionResource.class,
                ConfigResource.class,
                TransformsResource.class,
                FormDataResource.class,
diff --git 
a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/CharsetEncodingsTest.java
 
b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/CharsetEncodingsTest.java
deleted file mode 100644
index b103aea..0000000
--- 
a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/CharsetEncodingsTest.java
+++ /dev/null
@@ -1,110 +0,0 @@
-// 
***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                
                                              *
-// *                                                                           
                                              *
-// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
-// *                                                                           
                                              *
-// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the 
License.                                              *
-// 
***************************************************************************************************************************
-package org.apache.juneau.rest.test;
-
-import static javax.servlet.http.HttpServletResponse.*;
-import static org.apache.juneau.internal.IOUtils.*;
-import static org.apache.juneau.microservice.testutils.TestUtils.*;
-import static org.junit.Assert.*;
-
-import java.io.*;
-
-import org.apache.juneau.rest.client.*;
-import org.junit.*;
-
-
-public class CharsetEncodingsTest extends RestTestcase {
-
-       private static boolean debug = false;
-
-       /**
-        * Basic tests to ensure that the correct charsets are found and used
-        * under a variety of scenarios.
-        */
-       @Test
-       public void test() throws Exception {
-               String url = "/testCharsetEncodings";
-               RestClientBuilder cb = 
TestMicroservice.client().accept("text/s").contentType("text/p");
-               RestClient client = cb.build();
-               InputStream is;
-               String r;
-
-               r = client.doPut(url, new 
StringReader("foo")).getResponseAsString();
-               if (debug) System.err.println(r);
-               assertEquals("utf-8/foo/utf-8", r);
-
-               is = client.doPut(url, new 
StringReader("foo")).getInputStream();
-               r = read(new InputStreamReader(is, "utf-8"));
-               if (debug) System.err.println(r);
-               assertEquals("utf-8/foo/utf-8", r);
-
-               client.closeQuietly();
-
-               client = 
cb.acceptCharset("utf-8").contentType("text/p;charset=utf-8").build();
-               is = client.doPut(url, new 
StringReader("foo")).acceptCharset("utf-8").contentType("text/p;charset=utf-8").getInputStream();
-               r = read(new InputStreamReader(is, "utf-8"));
-               if (debug) System.err.println(r);
-               assertEquals("utf-8/foo/utf-8", r);
-
-               client.closeQuietly();
-
-               client = 
cb.acceptCharset("Shift_JIS").contentType("text/p;charset=shift_jis").build();
-               is = client.doPut(url, new 
StringReader("foo")).getInputStream();
-               r = read(new InputStreamReader(is, "Shift_JIS"));
-               if (debug) System.err.println(r);
-               assertEquals("shift_jis/foo/shift_jis", r);
-
-               client.closeQuietly();
-
-               try {
-                       client = 
cb.acceptCharset("BAD").contentType("text/p;charset=sjis").build();
-                       is = client.doPut(url + "?noTrace=true", new 
StringReader("foo")).getInputStream();
-                       r = read(new InputStreamReader(is, "sjis"));
-                       if (debug) System.err.println(r);
-                       fail("Exception expected");
-               } catch (RestCallException e) {
-                       checkErrorResponse(debug, e, SC_NOT_ACCEPTABLE, "No 
supported charsets in header 'Accept-Charset': 'BAD'");
-               }
-
-               client.closeQuietly();
-
-               client = 
cb.accept("text/s").acceptCharset("utf-8").contentType("text/p").build();
-               is = client.doPut(url+"?Content-Type=text/p", new 
StringReader("foo")).getInputStream();
-               r = read(new InputStreamReader(is, "utf-8"));
-               if (debug) System.err.println(r);
-               assertEquals("utf-8/foo/utf-8", r);
-
-               client.closeQuietly();
-
-               client = 
cb.accept("text/s").contentType("text/bad").acceptCharset("utf-8").build();
-               is = client.doPut(url+"?Content-Type=text/p;charset=utf-8", new 
StringReader("foo")).getInputStream();
-               r = read(new InputStreamReader(is, "utf-8"));
-               if (debug) System.err.println(r);
-               assertEquals("utf-8/foo/utf-8", r);
-
-               client.closeQuietly();
-
-               try {
-                       client = 
cb.accept("text/s").contentType("text/p").acceptCharset("utf-8").build();
-                       is = 
client.doPut(url+"?Content-Type=text/p;charset=BAD&noTrace=true", new 
StringReader("foo")).getInputStream();
-                       r = read(new InputStreamReader(is, "utf-8"));
-                       if (debug) System.err.println(r);
-                       assertEquals("utf-8/foo/utf-8", r);
-                       fail("Exception expected");
-               } catch (RestCallException e) {
-                       checkErrorResponse(debug, e, SC_UNSUPPORTED_MEDIA_TYPE, 
"Unsupported charset in header 'Content-Type': 'text/p;charset=BAD'");
-               }
-
-               client.closeQuietly();
-       }
-}
diff --git 
a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ClientVersionTest.java
 
b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ClientVersionTest.java
deleted file mode 100644
index 3eda27b..0000000
--- 
a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ClientVersionTest.java
+++ /dev/null
@@ -1,77 +0,0 @@
-// 
***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                
                                              *
-// *                                                                           
                                              *
-// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
-// *                                                                           
                                              *
-// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the 
License.                                              *
-// 
***************************************************************************************************************************
-package org.apache.juneau.rest.test;
-
-import static org.junit.Assert.*;
-
-import org.apache.juneau.rest.client.*;
-import org.junit.*;
-
-public class ClientVersionTest extends RestTestcase {
-
-       private static String URL = "/testClientVersion";
-
-       
//====================================================================================================
-       // Basic tests - default X-Client-Version header.
-       
//====================================================================================================
-       @Test
-       public void testDefaultHeader() throws Exception {
-               RestClient client = TestMicroservice.DEFAULT_CLIENT_PLAINTEXT;
-               String url = URL + "/defaultHeader";
-
-               assertEquals("no-version", 
client.doGet(url).getResponseAsString());
-
-//             for (String s : "0, 0.0, 0.1, .1, .9, .99".split("\\s*,\\s*")) {
-//                     assertEquals(s, "[0.0,1.0)", 
client.doGet(url).clientVersion(s).getResponseAsString());
-//             }
-
-               for (String s : "1, 1.0, 1.0.0, 1.0.1".split("\\s*,\\s*")) {
-                       assertEquals(s, "[1.0,1.0]", 
client.doGet(url).clientVersion(s).getResponseAsString());
-               }
-
-               for (String s : "1.1, 1.1.1, 1.2, 1.9.9".split("\\s*,\\s*")) {
-                       assertEquals(s, "[1.1,2)", 
client.doGet(url).clientVersion(s).getResponseAsString());
-               }
-
-               for (String s : "2, 2.0, 2.1, 9, 9.9".split("\\s*,\\s*")) {
-                       assertEquals(s, "2", 
client.doGet(url).clientVersion(s).getResponseAsString());
-               }
-       }
-
-       
//====================================================================================================
-       // Basic tests - Custom-Client-Version header.
-       
//====================================================================================================
-       @Test
-       public void testCustomHeader() throws Exception {
-               RestClient client = TestMicroservice.DEFAULT_CLIENT_PLAINTEXT;
-               String url = URL + "/customHeader";
-
-               assertEquals("no-version", 
client.doGet(url).getResponseAsString());
-
-               for (String s : "0, 0.0, 0.1, .1, .9, .99".split("\\s*,\\s*")) {
-                       assertEquals("[0.0,1.0)", 
client.doGet(url).header("Custom-Client-Version", s).getResponseAsString());
-               }
-
-               for (String s : "1, 1.0, 1.0.0, 1.0.1".split("\\s*,\\s*")) {
-                       assertEquals("[1.0,1.0]", 
client.doGet(url).header("Custom-Client-Version", s).getResponseAsString());
-               }
-
-               for (String s : "1.1, 1.1.1, 1.2, 1.9.9".split("\\s*,\\s*")) {
-                       assertEquals("[1.1,2)", 
client.doGet(url).header("Custom-Client-Version", s).getResponseAsString());
-               }
-
-               for (String s : "2, 2.0, 2.1, 9, 9.9".split("\\s*,\\s*")) {
-                       assertEquals("2", 
client.doGet(url).header("Custom-Client-Version", s).getResponseAsString());
-               }
-       }
-}
diff --git 
a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/FormDataTest.java
 
b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/FormDataTest.java
index 54bc8f7..b78a4fd 100644
--- 
a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/FormDataTest.java
+++ 
b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/FormDataTest.java
@@ -12,12 +12,10 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.rest.test;
 
-import static org.apache.juneau.rest.testutils.TestUtils.*;
 import static org.junit.Assert.*;
 
 import java.util.*;
 
-import org.apache.juneau.*;
 import org.apache.juneau.rest.client.*;
 import org.apache.juneau.urlencoding.*;
 import org.apache.juneau.utils.*;
@@ -104,36 +102,4 @@ public class FormDataTest extends RestTestcase {
                        c.close();
                }
        }
-
-       
//====================================================================================================
-       // Default values.
-       
//====================================================================================================
-
-       @Test
-       public void defaultFormData() throws Exception {
-               assertObjectEquals("{f1:'1',f2:'2',f3:'3'}", client.doPost(URL 
+ "/defaultFormData").getResponse(ObjectMap.class));
-               assertObjectEquals("{f1:'4',f2:'5',f3:'6'}", client.doPost(URL 
+ 
"/defaultFormData").formData("f1",4).formData("f2",5).formData("f3",6).getResponse(ObjectMap.class));
-               assertObjectEquals("{f1:'4',f2:'5',f3:'6'}", client.doPost(URL 
+ 
"/defaultFormData").formData("f1",4).formData("f2",5).formData("f3",6).getResponse(ObjectMap.class));
-       }
-
-       @Test
-       public void annotatedFormData() throws Exception {
-               assertObjectEquals("{f1:null,f2:null,f3:null}", 
client.doPost(URL + "/annotatedFormData").getResponse(ObjectMap.class));
-               assertObjectEquals("{f1:'4',f2:'5',f3:'6'}", client.doPost(URL 
+ 
"/annotatedFormData").formData("f1",4).formData("f2",5).formData("f3",6).getResponse(ObjectMap.class));
-               assertObjectEquals("{f1:'4',f2:'5',f3:'6'}", client.doPost(URL 
+ 
"/annotatedFormData").formData("f1",4).formData("f2",5).formData("f3",6).getResponse(ObjectMap.class));
-       }
-
-       @Test
-       public void annotatedFormDataDefault() throws Exception {
-               assertObjectEquals("{f1:'1',f2:'2',f3:'3'}", client.doPost(URL 
+ "/annotatedFormDataDefault").getResponse(ObjectMap.class));
-               assertObjectEquals("{f1:'4',f2:'5',f3:'6'}", client.doPost(URL 
+ 
"/annotatedFormDataDefault").formData("f1",4).formData("f2",5).formData("f3",6).getResponse(ObjectMap.class));
-               assertObjectEquals("{f1:'4',f2:'5',f3:'6'}", client.doPost(URL 
+ 
"/annotatedFormDataDefault").formData("f1",4).formData("f2",5).formData("f3",6).getResponse(ObjectMap.class));
-       }
-
-       @Test
-       public void annotatedAndDefaultFormData() throws Exception {
-               assertObjectEquals("{f1:'4',f2:'5',f3:'6'}", client.doPost(URL 
+ "/annotatedAndDefaultFormData").getResponse(ObjectMap.class));
-               assertObjectEquals("{f1:'7',f2:'8',f3:'9'}", client.doPost(URL 
+ 
"/annotatedAndDefaultFormData").formData("f1",7).formData("f2",8).formData("f3",9).getResponse(ObjectMap.class));
-               assertObjectEquals("{f1:'7',f2:'8',f3:'9'}", client.doPost(URL 
+ 
"/annotatedAndDefaultFormData").formData("f1",7).formData("f2",8).formData("f3",9).getResponse(ObjectMap.class));
-       }
 }
diff --git 
a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/_TestSuite.java
 
b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/_TestSuite.java
index 04d902a..a952343 100644
--- 
a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/_TestSuite.java
+++ 
b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/_TestSuite.java
@@ -25,9 +25,7 @@ import org.junit.runners.Suite.*;
 @RunWith(Suite.class)
 @SuiteClasses({
        CallbackStringsTest.class,
-       CharsetEncodingsTest.class,
        ClientFuturesTest.class,
-       ClientVersionTest.class,
        ConfigTest.class,
        FormDataTest.class,
        GroupsTest.class,
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/mock/MockServletRequest.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/mock/MockServletRequest.java
index 3f4de59..d18e88d 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/mock/MockServletRequest.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/mock/MockServletRequest.java
@@ -24,6 +24,8 @@ import javax.servlet.http.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.util.*;
+import org.apache.juneau.urlencoding.*;
+import org.apache.juneau.utils.*;
 
 /**
  * An implementation of {@link HttpServletRequest} for mocking purposes.
@@ -37,6 +39,7 @@ public class MockServletRequest implements HttpServletRequest 
{
        
        private String method = "GET";
        private Map<String,String[]> parameterMap;
+       private Map<String,String[]> formDataMap;
        private Map<String,String[]> headerMap = new LinkedHashMap<>(); 
        private Map<String,Object> attributeMap = new LinkedHashMap<>();
        private String characterEncoding = "UTF-8";
@@ -645,6 +648,8 @@ public class MockServletRequest implements 
HttpServletRequest {
 
        @Override /* HttpServletRequest */
        public ServletInputStream getInputStream() throws IOException {
+               if (formDataMap != null)
+                       body = 
UrlEncodingSerializer.DEFAULT.toString(formDataMap).getBytes();
                return new BoundedServletInputStream(new 
ByteArrayInputStream(body), Integer.MAX_VALUE);
        }
 
@@ -669,7 +674,10 @@ public class MockServletRequest implements 
HttpServletRequest {
                if (parameterMap == null) {
                        try {
                                if ("POST".equalsIgnoreCase(method)) {
-                                       parameterMap = 
RestUtils.parseQuery(IOUtils.read(body));
+                                       if (formDataMap != null)
+                                               parameterMap = formDataMap;
+                                       else
+                                               parameterMap = 
RestUtils.parseQuery(IOUtils.read(body));
                                } else {
                                        parameterMap = 
RestUtils.parseQuery(getQueryString());
                                }
@@ -702,7 +710,7 @@ public class MockServletRequest implements 
HttpServletRequest {
 
        @Override /* HttpServletRequest */
        public BufferedReader getReader() throws IOException {
-               return new BufferedReader(new InputStreamReader(new 
ByteArrayInputStream(body), characterEncoding));
+               return new BufferedReader(new 
InputStreamReader(getInputStream(), characterEncoding));
        }
 
        @Override /* HttpServletRequest */
@@ -1027,4 +1035,34 @@ public class MockServletRequest implements 
HttpServletRequest {
        public MockServletRequest acceptCharset(String value) {
                return header("Accept-Charset", value);
        }
+
+       /**
+        * Specifies the <code>X-Client-Version</code> header value on the 
request.
+        * 
+        * @param value The new value.
+        * @return This object (for method chaining).
+        */
+       public MockServletRequest clientVersion(String value) {
+               return header("X-Client-Version", value);
+       }
+
+       /**
+        * Adds a form data entry to this request.
+        * 
+        * @param key 
+        * @param value 
+        * @return This object (for method chaining).
+        */
+       public MockServletRequest formData(String key, Object value) {
+               if (formDataMap == null)
+                       formDataMap = new LinkedHashMap<>();
+               String s = asString(value);
+               String[] existing = formDataMap.get(key);
+               if (existing == null)
+                       existing = new String[]{s};
+               else
+                       existing = new 
AList<>().appendAll(Arrays.asList(existing)).append(s).toArray(new String[0]);
+               formDataMap.put(key, existing);
+               return this;
+       }
 }
diff --git 
a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/ClientVersionResource.java
 
b/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/ClientVersionTest.java
similarity index 52%
rename from 
juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/ClientVersionResource.java
rename to 
juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/ClientVersionTest.java
index 5a9e6e6..daf961d 100644
--- 
a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/ClientVersionResource.java
+++ 
b/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/ClientVersionTest.java
@@ -10,86 +10,108 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
 // * specific language governing permissions and limitations under the 
License.                                              *
 // 
***************************************************************************************************************************
-package org.apache.juneau.rest.test;
+package org.apache.juneau.rest;
 
 import static org.apache.juneau.http.HttpMethodName.*;
 
-import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
+import org.apache.juneau.rest.mock.*;
+import org.junit.*;
+import org.junit.runners.*;
 
 /**
- * JUnit automated testcase resource.
+ * Tests the @RestResource(clientVersion) attribute.
  */
-@RestResource(
-       path="/testClientVersion",
-       children={
-               ClientVersionResource.DefaultHeader.class,
-               ClientVersionResource.CustomHeader.class
-       }
-)
-@SuppressWarnings("serial")
-public class ClientVersionResource extends BasicRestServlet {
+@SuppressWarnings({"javadoc"})
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class ClientVersionTest {
 
-       @RestResource(
-               path="/defaultHeader"
-       )
-       public static class DefaultHeader extends BasicRestServlet {
+       
//====================================================================================================
+       // Basic tests - default X-Client-Version header.
+       
//====================================================================================================
 
+       @RestResource
+       public static class A {
                @RestMethod(name=GET, path="/")
                public String test0() {
                        return "no-version";
                }
-
                @RestMethod(name=GET, path="/", clientVersion="[0.0,1.0)")
                public String test1() {
                        return "[0.0,1.0)";
                }
-
                @RestMethod(name=GET, path="/", clientVersion="[1.0,1.0]")
                public String test2() {
                        return "[1.0,1.0]";
                }
-
                @RestMethod(name=GET, path="/", clientVersion="[1.1,2)")
                public String test3() {
                        return "[1.1,2)";
                }
-
                @RestMethod(name=GET, path="/", clientVersion="2")
                public String test4() {
                        return "2";
                }
        }
+       static MockRest a = MockRest.create(A.class);
+       
+       @Test
+       public void a01_defaultHeader() throws Exception {
+               a.request("GET", "/").execute().assertBody("no-version");
+               for (String s : "1, 1.0, 1.0.0, 1.0.1".split("\\s*,\\s*")) {
+                       a.request("GET", 
"/").clientVersion(s).execute().assertBody("[1.0,1.0]");
+               }
+               for (String s : "1.1, 1.1.1, 1.2, 1.9.9".split("\\s*,\\s*")) {
+                       a.request("GET", 
"/").clientVersion(s).execute().assertBody("[1.1,2)");
+               }
+               for (String s : "2, 2.0, 2.1, 9, 9.9".split("\\s*,\\s*")) {
+                       a.request("GET", 
"/").clientVersion(s).execute().assertBody("2");
+               }
+       }
 
-       @RestResource(
-               path="/customHeader",
-               clientVersionHeader="Custom-Client-Version"
-       )
-       public static class CustomHeader extends BasicRestServlet {
+       
//====================================================================================================
+       // Basic tests - Custom-Client-Version header.
+       
//====================================================================================================
 
+       @RestResource(clientVersionHeader="Custom-Client-Version")
+       public static class B {
                @RestMethod(name=GET, path="/")
                public String test0() {
                        return "no-version";
                }
-
                @RestMethod(name=GET, path="/", clientVersion="[0.0,1.0)")
                public String test1() {
                        return "[0.0,1.0)";
                }
-
                @RestMethod(name=GET, path="/", clientVersion="[1.0,1.0]")
                public String test2() {
                        return "[1.0,1.0]";
                }
-
                @RestMethod(name=GET, path="/", clientVersion="[1.1,2)")
                public String test3() {
                        return "[1.1,2)";
                }
-
                @RestMethod(name=GET, path="/", clientVersion="2")
                public String test4() {
                        return "2";
                }
        }
+       static MockRest b = MockRest.create(B.class);
+       
+       @Test
+       public void b01_testCustomHeader() throws Exception {
+               b.request("GET", "/").execute().assertBody("no-version");
+               for (String s : "0, 0.0, 0.1, .1, .9, .99".split("\\s*,\\s*")) {
+                       b.request("GET", "/").header("Custom-Client-Version", 
s).execute().assertBody("[0.0,1.0)");
+               }
+               for (String s : "1, 1.0, 1.0.0, 1.0.1".split("\\s*,\\s*")) {
+                       b.request("GET", "/").header("Custom-Client-Version", 
s).execute().assertBody("[1.0,1.0]");
+               }
+               for (String s : "1.1, 1.1.1, 1.2, 1.9.9".split("\\s*,\\s*")) {
+                       b.request("GET", "/").header("Custom-Client-Version", 
s).execute().assertBody("[1.1,2)");
+               }
+               for (String s : "2, 2.0, 2.1, 9, 9.9".split("\\s*,\\s*")) {
+                       b.request("GET", "/").header("Custom-Client-Version", 
s).execute().assertBody("2");
+               }
+       }
 }
diff --git 
a/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/annotation/FormDataAnnotationTest.java
 
b/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/annotation/FormDataAnnotationTest.java
index 270108a..ed83464 100644
--- 
a/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/annotation/FormDataAnnotationTest.java
+++ 
b/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/annotation/FormDataAnnotationTest.java
@@ -14,6 +14,7 @@ package org.apache.juneau.rest.annotation;
 
 import static org.apache.juneau.http.HttpMethodName.*;
 
+import org.apache.juneau.*;
 import org.apache.juneau.httppart.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.mock.*;
@@ -75,4 +76,65 @@ public class FormDataAnnotationTest {
                b.request("POST", 
"").body("p1=p1").contentType("application/x-www-form-urlencoded").execute().assertBody("p1=[p1,p1,p1]");
                b.request("POST", 
"").body("p1='p1'").contentType("application/x-www-form-urlencoded").execute().assertBody("p1=['p1','p1',p1]");
        }
+       
+       
//====================================================================================================
+       // Default values.
+       
//====================================================================================================
+
+       @RestResource
+       public static class C {
+               @RestMethod(name=POST, path="/defaultFormData", 
defaultFormData={"f1:1","f2=2"," f3 : 3 "})
+               public ObjectMap c01(RequestFormData formData) {
+                       return new ObjectMap()
+                               .append("f1", formData.getString("f1"))
+                               .append("f2", formData.getString("f2"))
+                               .append("f3", formData.getString("f3"));
+               }
+               @RestMethod(name=POST, path="/annotatedFormData")
+               public ObjectMap c02(@FormData("f1") String f1, @FormData("f2") 
String f2, @FormData("f3") String f3) {
+                       return new ObjectMap()
+                               .append("f1", f1)
+                               .append("f2", f2)
+                               .append("f3", f3);
+               }
+               @RestMethod(name=POST, path="/annotatedFormDataDefault")
+               public ObjectMap c03(@FormData(value="f1",_default="1") String 
f1, @FormData(value="f2",_default="2") String f2, 
@FormData(value="f3",_default="3") String f3) {
+                       return new ObjectMap()
+                               .append("f1", f1)
+                               .append("f2", f2)
+                               .append("f3", f3);
+               }
+               @RestMethod(name=POST, path="/annotatedAndDefaultFormData", 
defaultFormData={"f1:1","f2=2"," f3 : 3 "})
+               public ObjectMap c04(@FormData(value="f1",_default="4") String 
f1, @FormData(value="f2",_default="5") String f2, 
@FormData(value="f3",_default="6") String f3) {
+                       return new ObjectMap()
+                               .append("f1", f1)
+                               .append("f2", f2)
+                               .append("f3", f3);
+               }
+       }
+       static MockRest c = MockRest.create(C.class);
+
+       @Test
+       public void c01_defaultFormData() throws Exception {
+               c.request("POST", 
"/defaultFormData").contentType("application/x-www-form-urlencoded").execute().assertBody("{f1:'1',f2:'2',f3:'3'}");
+               c.request("POST", 
"/defaultFormData").contentType("application/x-www-form-urlencoded").formData("f1",4).formData("f2",5).formData("f3",6).execute().assertBody("{f1:'4',f2:'5',f3:'6'}");
+       }
+
+       @Test
+       public void c02_annotatedFormData() throws Exception {
+               c.request("POST", 
"/annotatedFormData").contentType("application/x-www-form-urlencoded").execute().assertBody("{f1:null,f2:null,f3:null}");
+               c.request("POST", 
"/annotatedFormData").contentType("application/x-www-form-urlencoded").formData("f1",4).formData("f2",5).formData("f3",6).execute().assertBody("{f1:'4',f2:'5',f3:'6'}");
+       }
+
+       @Test
+       public void c03_annotatedFormDataDefault() throws Exception {
+               c.request("POST", 
"/annotatedFormDataDefault").contentType("application/x-www-form-urlencoded").execute().assertBody("{f1:'1',f2:'2',f3:'3'}");
+               c.request("POST", 
"/annotatedFormDataDefault").contentType("application/x-www-form-urlencoded").formData("f1",4).formData("f2",5).formData("f3",6).execute().assertBody("{f1:'4',f2:'5',f3:'6'}");
+       }
+
+       @Test
+       public void c04_annotatedAndDefaultFormData() throws Exception {
+               c.request("POST", 
"/annotatedAndDefaultFormData").contentType("application/x-www-form-urlencoded").execute().assertBody("{f1:'4',f2:'5',f3:'6'}");
+               c.request("POST", 
"/annotatedAndDefaultFormData").contentType("application/x-www-form-urlencoded").formData("f1",7).formData("f2",8).formData("f3",9).execute().assertBody("{f1:'7',f2:'8',f3:'9'}");
+       }
 }

-- 
To stop receiving notification emails like this one, please contact
[email protected].

Reply via email to