View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.juneau.http;
18  
19  import static org.apache.juneau.TestUtils.*;
20  import static org.apache.juneau.commons.utils.CollectionUtils.*;
21  import static org.apache.juneau.http.HttpHeaders.*;
22  import static org.apache.juneau.http.HttpParts.*;
23  import static org.apache.juneau.junit.bct.BctAssertions.*;
24  import static org.junit.jupiter.api.Assertions.*;
25  
26  import java.util.*;
27  import java.util.function.*;
28  
29  import org.apache.http.*;
30  import org.apache.juneau.*;
31  import org.apache.juneau.http.header.*;
32  import org.apache.juneau.http.part.*;
33  import org.apache.juneau.marshaller.*;
34  import org.junit.jupiter.api.*;
35  
36  class BasicPart_Test extends TestBase {
37  
38  	@Test void a01_ofPair() {
39  		var x = basicPart("Foo:bar");
40  		assertEquals("Foo", x.getName());
41  		assertEquals("bar", x.getValue());
42  
43  		x = basicPart(" Foo : bar ");
44  		assertEquals("Foo", x.getName());
45  		assertEquals("bar", x.getValue());
46  
47  		x = basicPart(" Foo : bar : baz ");
48  		assertEquals("Foo", x.getName());
49  		assertEquals("bar : baz", x.getValue());
50  
51  		x = basicPart("Foo");
52  		assertEquals("Foo", x.getName());
53  		assertEquals("", x.getValue());
54  
55  		assertNull(basicPart((String)null));
56  	}
57  
58  	@Test void a02_of() {
59  		var x = part("Foo","bar");
60  		assertString("Foo=bar", x);
61  		x = part("Foo",()->"bar");
62  		assertString("Foo=bar", x);
63  	}
64  
65  	@Test void a03_cast() {
66  		var x1 = part("X1","1");
67  		var x2 = serializedPart("X2","2");
68  		var x3 = header("X3","3");
69  		var x4 = serializedHeader("X4","4");
70  		Map.Entry<String,Object> x5 = m("X5",(Object)"5").entrySet().iterator().next();
71  		org.apache.http.message.BasicNameValuePair x6 = new org.apache.http.message.BasicNameValuePair("X6","6");
72  		NameValuePairable x7 = () -> part("X7","7");
73  		Headerable x8 = () -> header("X8","8");
74  
75  		assertTypeAndJson(NameValuePair.class, "'X1=1'", BasicPart.cast(x1));
76  		assertTypeAndJson(NameValuePair.class, "'X2=2'", BasicPart.cast(x2));
77  		assertTypeAndJson(NameValuePair.class, "'X3: 3'", BasicPart.cast(x3));
78  		assertTypeAndJson(NameValuePair.class, "'X4: 4'", BasicPart.cast(x4));
79  		assertTypeAndJson(NameValuePair.class, "'X5=5'", BasicPart.cast(x5));
80  		assertTypeAndJson(NameValuePair.class, "{name:'X6',value:'6'}", BasicPart.cast(x6));
81  		assertTypeAndJson(NameValuePair.class, "'X7=7'", BasicPart.cast(x7));
82  		assertTypeAndJson(NameValuePair.class, "'X8=8'", BasicPart.cast(x8));
83  
84  		assertThrowsWithMessage(RuntimeException.class, "Object of type java.lang.String could not be converted to a Part.", ()->BasicPart.cast("X"));
85  		assertThrowsWithMessage(RuntimeException.class, "Object of type null could not be converted to a Part.", ()->BasicPart.cast(null));
86  
87  		assertTrue(BasicPart.canCast(x1));
88  		assertTrue(BasicPart.canCast(x2));
89  		assertTrue(BasicPart.canCast(x3));
90  		assertTrue(BasicPart.canCast(x4));
91  		assertTrue(BasicPart.canCast(x5));
92  		assertTrue(BasicPart.canCast(x6));
93  		assertTrue(BasicPart.canCast(x7));
94  
95  		assertFalse(BasicPart.canCast("X"));
96  		assertFalse(BasicPart.canCast(null));
97  	}
98  
99  	@Test void a04_asHeader() {
100 		var x = part("X1","1");
101 		assertString("X1: 1", x.asHeader());
102 	}
103 
104 	@Test void a05_assertions() {
105 		var x = part("X1","1");
106 		x.assertName().is("X1").assertValue().is("1");
107 	}
108 
109 	//------------------------------------------------------------------------------------------------------------------
110 	// Utility methods
111 	//------------------------------------------------------------------------------------------------------------------
112 
113 	private static BasicHeader header(String name, Object val) {
114 		return basicHeader(name, val);
115 	}
116 
117 	private static BasicPart part(String name, Supplier<?> val) {
118 		return basicPart(name, val);
119 	}
120 
121 	private static BasicPart part(String name, Object val) {
122 		return basicPart(name, val);
123 	}
124 
125 	/**
126 	 * Asserts the JSON5 representation of the specified object.
127 	 */
128 	private static void assertTypeAndJson(Class<?> c, String json, Object value) {
129 		assertInstanceOf(c, value);
130 		assertEquals(json, Json5.DEFAULT.write(value));
131 	}
132 }