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 9bc2e93  RestClient tests.
9bc2e93 is described below

commit 9bc2e93f01fc255fc668f8932982798c0e9910d4
Author: JamesBognar <[email protected]>
AuthorDate: Wed Jul 1 11:24:47 2020 -0400

    RestClient tests.
---
 .../org/apache/juneau/http/HeaderSupplierTest.java | 19 +++++------
 ...ierTest.java => NameValuePairSupplierTest.java} | 38 ++++++++++------------
 .../org/apache/juneau/http/HeaderSupplier.java     | 26 +++++++++++++++
 .../apache/juneau/http/NameValuePairSupplier.java  | 26 +++++++++++++++
 juneau-doc/docs/ReleaseNotes/8.1.4.html            |  9 +++++
 .../apache/juneau/rest/client2/Remote_Test.java    | 35 ++++++++++++++++++++
 6 files changed, 123 insertions(+), 30 deletions(-)

diff --git 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/HeaderSupplierTest.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/HeaderSupplierTest.java
index 4900fc9..639cd0b 100644
--- 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/HeaderSupplierTest.java
+++ 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/HeaderSupplierTest.java
@@ -24,28 +24,27 @@ public class HeaderSupplierTest {
 
        @Test
        public void a01_basic() {
-               HeaderSupplier h = HeaderSupplier.create();
+               HeaderSupplier h = HeaderSupplier.of();
                assertObject(h.iterator()).json().is("[]");
                h.add(header("Foo","bar"));
                assertObject(h.iterator()).json().is("['Foo: bar']");
                h.add(header("Foo","baz"));
                assertObject(h.iterator()).json().is("['Foo: bar','Foo: baz']");
-               h.add(HeaderSupplier.create());
+               h.add(HeaderSupplier.of());
                assertObject(h.iterator()).json().is("['Foo: bar','Foo: baz']");
-               h.add(HeaderSupplier.create().add(header("Foo","qux")));
+               h.add(HeaderSupplier.of(header("Foo","qux")));
                assertObject(h.iterator()).json().is("['Foo: bar','Foo: 
baz','Foo: qux']");
-               
h.add(HeaderSupplier.create().add(header("Foo","quux")).add(header("Foo","quuux")));
-               assertObject(h.iterator()).json().is("['Foo: bar','Foo: 
baz','Foo: qux','Foo: quux','Foo: quuux']");
-               
h.add(HeaderSupplier.create().add(HeaderSupplier.create().add(header("Foo","ruux")).add(header("Foo","ruuux"))));
-               assertObject(h.iterator()).json().is("['Foo: bar','Foo: 
baz','Foo: qux','Foo: quux','Foo: quuux','Foo: ruux','Foo: ruuux']");
+               h.add(HeaderSupplier.of(header("Foo","q2x"), 
header("Foo","q3x")));
+               assertObject(h.iterator()).json().is("['Foo: bar','Foo: 
baz','Foo: qux','Foo: q2x','Foo: q3x']");
+               
h.add(HeaderSupplier.of(HeaderSupplier.of(header("Foo","q4x"),header("Foo","q5x"))));
+               assertObject(h.iterator()).json().is("['Foo: bar','Foo: 
baz','Foo: qux','Foo: q2x','Foo: q3x','Foo: q4x','Foo: q5x']");
                h.add((Header)null);
-               assertObject(h.iterator()).json().is("['Foo: bar','Foo: 
baz','Foo: qux','Foo: quux','Foo: quuux','Foo: ruux','Foo: ruuux']");
+               assertObject(h.iterator()).json().is("['Foo: bar','Foo: 
baz','Foo: qux','Foo: q2x','Foo: q3x','Foo: q4x','Foo: q5x']");
                h.add((HeaderSupplier)null);
-               assertObject(h.iterator()).json().is("['Foo: bar','Foo: 
baz','Foo: qux','Foo: quux','Foo: quuux','Foo: ruux','Foo: ruuux']");
+               assertObject(h.iterator()).json().is("['Foo: bar','Foo: 
baz','Foo: qux','Foo: q2x','Foo: q3x','Foo: q4x','Foo: q5x']");
        }
 
        private static Header header(String name, Object val) {
                return BasicHeader.of(name, val);
        }
-
 }
diff --git 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/HeaderSupplierTest.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/NameValuePairSupplierTest.java
similarity index 51%
copy from 
juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/HeaderSupplierTest.java
copy to 
juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/NameValuePairSupplierTest.java
index 4900fc9..00ce76a 100644
--- 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/HeaderSupplierTest.java
+++ 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/NameValuePairSupplierTest.java
@@ -16,36 +16,34 @@ import static org.apache.juneau.assertions.Assertions.*;
 import static org.junit.runners.MethodSorters.*;
 
 import org.apache.http.*;
-import org.apache.juneau.http.header.*;
 import org.junit.*;
 
 @FixMethodOrder(NAME_ASCENDING)
-public class HeaderSupplierTest {
+public class NameValuePairSupplierTest {
 
        @Test
        public void a01_basic() {
-               HeaderSupplier h = HeaderSupplier.create();
+               NameValuePairSupplier h = NameValuePairSupplier.of();
                assertObject(h.iterator()).json().is("[]");
                h.add(header("Foo","bar"));
-               assertObject(h.iterator()).json().is("['Foo: bar']");
+               
assertObject(h.iterator()).json().is("[{name:'Foo',value:'bar'}]");
                h.add(header("Foo","baz"));
-               assertObject(h.iterator()).json().is("['Foo: bar','Foo: baz']");
-               h.add(HeaderSupplier.create());
-               assertObject(h.iterator()).json().is("['Foo: bar','Foo: baz']");
-               h.add(HeaderSupplier.create().add(header("Foo","qux")));
-               assertObject(h.iterator()).json().is("['Foo: bar','Foo: 
baz','Foo: qux']");
-               
h.add(HeaderSupplier.create().add(header("Foo","quux")).add(header("Foo","quuux")));
-               assertObject(h.iterator()).json().is("['Foo: bar','Foo: 
baz','Foo: qux','Foo: quux','Foo: quuux']");
-               
h.add(HeaderSupplier.create().add(HeaderSupplier.create().add(header("Foo","ruux")).add(header("Foo","ruuux"))));
-               assertObject(h.iterator()).json().is("['Foo: bar','Foo: 
baz','Foo: qux','Foo: quux','Foo: quuux','Foo: ruux','Foo: ruuux']");
-               h.add((Header)null);
-               assertObject(h.iterator()).json().is("['Foo: bar','Foo: 
baz','Foo: qux','Foo: quux','Foo: quuux','Foo: ruux','Foo: ruuux']");
-               h.add((HeaderSupplier)null);
-               assertObject(h.iterator()).json().is("['Foo: bar','Foo: 
baz','Foo: qux','Foo: quux','Foo: quuux','Foo: ruux','Foo: ruuux']");
+               
assertObject(h.iterator()).json().is("[{name:'Foo',value:'bar'},{name:'Foo',value:'baz'}]");
+               h.add(NameValuePairSupplier.of());
+               
assertObject(h.iterator()).json().is("[{name:'Foo',value:'bar'},{name:'Foo',value:'baz'}]");
+               h.add(NameValuePairSupplier.of(header("Foo","qux")));
+               
assertObject(h.iterator()).json().is("[{name:'Foo',value:'bar'},{name:'Foo',value:'baz'},{name:'Foo',value:'qux'}]");
+               h.add(NameValuePairSupplier.of(header("Foo","q2x"), 
header("Foo","q3x")));
+               
assertObject(h.iterator()).json().is("[{name:'Foo',value:'bar'},{name:'Foo',value:'baz'},{name:'Foo',value:'qux'},{name:'Foo',value:'q2x'},{name:'Foo',value:'q3x'}]");
+               
h.add(NameValuePairSupplier.of(NameValuePairSupplier.of(header("Foo","q4x"),header("Foo","q5x"))));
+               
assertObject(h.iterator()).json().is("[{name:'Foo',value:'bar'},{name:'Foo',value:'baz'},{name:'Foo',value:'qux'},{name:'Foo',value:'q2x'},{name:'Foo',value:'q3x'},{name:'Foo',value:'q4x'},{name:'Foo',value:'q5x'}]");
+               h.add((NameValuePair)null);
+               
assertObject(h.iterator()).json().is("[{name:'Foo',value:'bar'},{name:'Foo',value:'baz'},{name:'Foo',value:'qux'},{name:'Foo',value:'q2x'},{name:'Foo',value:'q3x'},{name:'Foo',value:'q4x'},{name:'Foo',value:'q5x'}]");
+               h.add((NameValuePairSupplier)null);
+               
assertObject(h.iterator()).json().is("[{name:'Foo',value:'bar'},{name:'Foo',value:'baz'},{name:'Foo',value:'qux'},{name:'Foo',value:'q2x'},{name:'Foo',value:'q3x'},{name:'Foo',value:'q4x'},{name:'Foo',value:'q5x'}]");
        }
 
-       private static Header header(String name, Object val) {
-               return BasicHeader.of(name, val);
+       private static NameValuePair header(String name, Object val) {
+               return BasicNameValuePair.of(name, val);
        }
-
 }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HeaderSupplier.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HeaderSupplier.java
index 01b6b34..e78861f 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HeaderSupplier.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HeaderSupplier.java
@@ -16,6 +16,7 @@ import java.util.*;
 import java.util.concurrent.*;
 
 import org.apache.http.*;
+import org.apache.juneau.*;
 import org.apache.juneau.internal.*;
 
 /**
@@ -37,6 +38,31 @@ public class HeaderSupplier implements Iterable<Header> {
                return new HeaderSupplier();
        }
 
+       /**
+        * Convenience creator.
+        *
+        * @param values
+        *      The values to populate this supplier with.
+        *      <br>Can be any of the following types:
+        *      <ul>
+        *              <li>{@link Header}.
+        *              <li>{@link HeaderSupplier}.
+        *      </ul>
+        * @return A new {@link HeaderSupplier} object.
+        */
+       public static HeaderSupplier of(Object...values) {
+               HeaderSupplier s = HeaderSupplier.create();
+               for (Object v : values) {
+                       if (v instanceof Header)
+                               s.add((Header)v);
+                       else if (v instanceof HeaderSupplier)
+                               s.add((HeaderSupplier)v);
+                       else if (v != null)
+                               throw new BasicRuntimeException("Invalid type 
passed to HeaderSupplier.of(): {0}", v.getClass().getName());
+               }
+               return s;
+       }
+
        private final List<Iterable<Header>> headers = new 
CopyOnWriteArrayList<>();
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/NameValuePairSupplier.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/NameValuePairSupplier.java
index 4646614..55fc012 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/NameValuePairSupplier.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/NameValuePairSupplier.java
@@ -16,6 +16,7 @@ import java.util.*;
 import java.util.concurrent.*;
 
 import org.apache.http.*;
+import org.apache.juneau.*;
 import org.apache.juneau.internal.*;
 
 /**
@@ -37,6 +38,31 @@ public class NameValuePairSupplier implements 
Iterable<NameValuePair> {
                return new NameValuePairSupplier();
        }
 
+       /**
+        * Convenience creator.
+        *
+        * @param values
+        *      The values to populate this supplier with.
+        *      <br>Can be any of the following types:
+        *      <ul>
+        *              <li>{@link NameValuePair}.
+        *              <li>{@link NameValuePairSupplier}.
+        *      </ul>
+        * @return A new {@link NameValuePairSupplier} object.
+        */
+       public static NameValuePairSupplier of(Object...values) {
+               NameValuePairSupplier s = NameValuePairSupplier.create();
+               for (Object v : values) {
+                       if (v instanceof NameValuePair)
+                               s.add((NameValuePair)v);
+                       else if (v instanceof NameValuePairSupplier)
+                               s.add((NameValuePairSupplier)v);
+                       else if (v != null)
+                               throw new BasicRuntimeException("Invalid type 
passed to NameValuePairSupplier.of(): {0}", v.getClass().getName());
+               }
+               return s;
+       }
+
        private final List<Iterable<NameValuePair>> pairs = new 
CopyOnWriteArrayList<>();
 
        /**
diff --git a/juneau-doc/docs/ReleaseNotes/8.1.4.html 
b/juneau-doc/docs/ReleaseNotes/8.1.4.html
index 1a62c16..a43d901 100644
--- a/juneau-doc/docs/ReleaseNotes/8.1.4.html
+++ b/juneau-doc/docs/ReleaseNotes/8.1.4.html
@@ -437,6 +437,15 @@
        )
        <jk>public</jk> String 
doGet(<ja>@Path</ja>(name=<js>"foo"</js>,required=<jk>false</jk>) String foo) 
{...}
                </p>
+       <li>
+               The {@link oajr.annotation.RestMethod @RestMethod} annotation 
is now implied on all unannotated methods of a {@link oajr.annotation.Rest 
@Rest}-annotated
+               interface.
+               <p class='bpcode w800'>
+       <ja>@Rest
+       <jk>public interface</jk> MyRest {
+               String getFoo();  <jc>// @RestMethod(name=GET,path="/foo") is 
implied.</jc>
+       }
+               </p>
 </ul>
 
 <h5 class='topic w800'>juneau-rest-server-springboot</h5>
diff --git 
a/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/Remote_Test.java
 
b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/Remote_Test.java
index aa53c16..79645ef 100644
--- 
a/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/Remote_Test.java
+++ 
b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/Remote_Test.java
@@ -17,12 +17,15 @@ import static org.junit.runners.MethodSorters.*;
 import static org.apache.juneau.assertions.Assertions.*;
 import java.util.concurrent.*;
 
+import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.config.*;
 import org.apache.juneau.http.*;
+import org.apache.juneau.http.header.*;
 import org.apache.juneau.http.remote.*;
 import org.apache.juneau.http.remote.RemoteMethod;
 import org.apache.juneau.http.remote.RemoteReturn;
+import org.apache.juneau.marshall.*;
 import org.apache.juneau.rest.mock2.*;
 import org.junit.*;
 
@@ -499,4 +502,36 @@ public class Remote_Test {
                RestClient x = MockRestClient.create(E6.class).json().build();
                
assertThrown(()->x.getRrpcInterface(E5b.class,"/proxy").echo("foo")).contains("foobar");
        }
+
+       
//-----------------------------------------------------------------------------------------------------------------
+       // @Remote headers
+       
//-----------------------------------------------------------------------------------------------------------------
+
+       @Rest
+       public static class F extends BasicRest {
+               @RestMethod
+               public String[] getHeaders(org.apache.juneau.rest.RestRequest 
req) {
+                       return req.getHeaders().get(req.getHeader("Check"));
+               }
+       }
+
+       @Remote(headers="Foo:bar",headerSupplier=F2.class,version="1.2.3")
+       public static interface F1 {
+               String[] getHeaders();
+       }
+
+       public static class F2 extends HeaderSupplier {
+               public F2() {
+                       add(BasicHeader.of("Foo","baz"));
+                       add(HeaderSupplier.of(BasicHeader.of("Foo",()->"qux")));
+               }
+       }
+
+       @Test
+       public void f01_headers() throws Exception {
+               F1 x = 
MockRestClient.create(F.class).json().header("Check","Foo").build().getRemote(F1.class);
+               
assertEquals("['bar','baz','qux']",SimpleJson.DEFAULT.toString(x.getHeaders()));
+               x = 
MockRestClient.create(F.class).json().header("Check","X-Client-Version").build().getRemote(F1.class);
+               
assertEquals("['1.2.3']",SimpleJson.DEFAULT.toString(x.getHeaders()));
+       }
 }

Reply via email to