1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.juneau.http.header;
18
19 import static java.time.format.DateTimeFormatter.*;
20 import static java.time.temporal.ChronoUnit.*;
21 import static org.apache.juneau.TestUtils.*;
22 import static org.apache.juneau.http.HttpHeaders.*;
23
24 import java.io.*;
25 import java.time.*;
26 import java.util.function.*;
27
28 import org.apache.juneau.*;
29 import org.apache.juneau.annotation.*;
30 import org.apache.juneau.common.utils.*;
31 import org.apache.juneau.http.annotation.*;
32 import org.apache.juneau.rest.annotation.*;
33 import org.apache.juneau.rest.client.*;
34 import org.apache.juneau.rest.mock.*;
35 import org.junit.jupiter.api.*;
36
37 class IfRange_Test extends TestBase {
38
39 private static final String HEADER = "If-Range";
40 private static final String VALUE1 = "\"foo\"";
41 private static final String VALUE2 = "W/\"foo\"";
42 private static final String VALUE3 = "Sat, 29 Oct 1994 19:43:31 GMT";
43 private static final EntityTag PARSED1 = EntityTag.of(VALUE1);
44 private static final EntityTag PARSED2 = EntityTag.of(VALUE2);
45 private static final ZonedDateTime PARSED3 = ZonedDateTime.from(RFC_1123_DATE_TIME.parse(VALUE3)).truncatedTo(SECONDS);
46
47 @Rest
48 public static class A {
49 @RestOp
50 public StringReader get(@Header(name=HEADER) @Schema(cf="multi") String[] h) {
51 return reader(h == null ? "null" : Utils.join(h, ','));
52 }
53 }
54
55
56
57
58
59 @Test void a01_basic() throws Exception {
60 var c = client().build();
61
62
63 c.get().header(ifRange(VALUE1)).run().assertContent(VALUE1);
64 c.get().header(ifRange(VALUE1)).run().assertContent(VALUE1);
65 c.get().header(ifRange(PARSED1)).run().assertContent(VALUE1);
66 c.get().header(ifRange(()->PARSED1)).run().assertContent(VALUE1);
67
68 c.get().header(ifRange(VALUE2)).run().assertContent(VALUE2);
69 c.get().header(ifRange(VALUE2)).run().assertContent(VALUE2);
70 c.get().header(ifRange(PARSED2)).run().assertContent(VALUE2);
71 c.get().header(ifRange(()->PARSED2)).run().assertContent(VALUE2);
72
73 c.get().header(ifRange(VALUE3)).run().assertContent(VALUE3);
74 c.get().header(ifRange(VALUE3)).run().assertContent(VALUE3);
75 c.get().header(ifRange(PARSED3)).run().assertContent(VALUE3);
76 c.get().header(ifRange(()->PARSED3)).run().assertContent(VALUE3);
77
78
79 c.get().header(ifRange((String)null)).run().assertContent().isEmpty();
80 c.get().header(ifRange((Supplier<ZonedDateTime>)null)).run().assertContent().isEmpty();
81 c.get().header(ifRange(()->null)).run().assertContent().isEmpty();
82 }
83
84 @Test void a02_asEntityTag() {
85 var x = ifRange(VALUE1).asEntityTag().get();
86 assertString("\"foo\"", x);
87 assertEmpty(ifRange(()->null).asEntityTag());
88 assertEmpty(ifRange(()->PARSED3).asEntityTag());
89 }
90
91
92
93
94
95 private static RestClient.Builder client() {
96 return MockRestClient.create(A.class);
97 }
98 }