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()));
+ }
}