|
13 | 13 | */
|
14 | 14 | package org.asynchttpclient.util;
|
15 | 15 |
|
| 16 | +import static java.nio.charset.StandardCharsets.*; |
16 | 17 | import static org.testng.Assert.*;
|
| 18 | +import io.netty.buffer.ByteBuf; |
| 19 | +import io.netty.buffer.Unpooled; |
17 | 20 |
|
| 21 | +import java.net.URLEncoder; |
| 22 | +import java.nio.ByteBuffer; |
| 23 | +import java.nio.charset.CharacterCodingException; |
18 | 24 | import java.nio.charset.Charset;
|
19 |
| -import java.nio.charset.StandardCharsets; |
| 25 | +import java.util.ArrayList; |
| 26 | +import java.util.List; |
20 | 27 |
|
21 | 28 | import org.asynchttpclient.DefaultAsyncHttpClientConfig;
|
22 | 29 | import org.asynchttpclient.Dsl;
|
| 30 | +import org.asynchttpclient.Param; |
23 | 31 | import org.asynchttpclient.Request;
|
| 32 | +import org.asynchttpclient.netty.util.ByteBufUtils; |
24 | 33 | import org.asynchttpclient.uri.Uri;
|
25 | 34 | import org.testng.annotations.Test;
|
26 | 35 |
|
@@ -92,19 +101,19 @@ public void testIsSameBaseUrlReturnsTrueWhenOneUriHasDefaultPort() {
|
92 | 101 | @Test
|
93 | 102 | public void testParseCharsetWithoutQuotes() {
|
94 | 103 | Charset charset = HttpUtils.parseCharset("Content-type: application/json; charset=utf-8");
|
95 |
| - assertEquals(charset, StandardCharsets.UTF_8, "parseCharset returned wrong Charset"); |
| 104 | + assertEquals(charset, UTF_8, "parseCharset returned wrong Charset"); |
96 | 105 | }
|
97 | 106 |
|
98 | 107 | @Test
|
99 | 108 | public void testParseCharsetWithSingleQuotes() {
|
100 | 109 | Charset charset = HttpUtils.parseCharset("Content-type: application/json; charset='utf-8'");
|
101 |
| - assertEquals(charset, StandardCharsets.UTF_8, "parseCharset returned wrong Charset"); |
| 110 | + assertEquals(charset, UTF_8, "parseCharset returned wrong Charset"); |
102 | 111 | }
|
103 | 112 |
|
104 | 113 | @Test
|
105 | 114 | public void testParseCharsetWithDoubleQuotes() {
|
106 | 115 | Charset charset = HttpUtils.parseCharset("Content-type: application/json; charset=\"utf-8\"");
|
107 |
| - assertEquals(charset, StandardCharsets.UTF_8, "parseCharset returned wrong Charset"); |
| 116 | + assertEquals(charset, UTF_8, "parseCharset returned wrong Charset"); |
108 | 117 | }
|
109 | 118 |
|
110 | 119 | @Test
|
@@ -160,4 +169,34 @@ public void testGetFollowRedirectPriorityGivenToRequest() {
|
160 | 169 | boolean followRedirect = HttpUtils.followRedirect(config, request);
|
161 | 170 | assertFalse(followRedirect, "Follow redirect value set in request should be given priority");
|
162 | 171 | }
|
| 172 | + |
| 173 | + private void formUrlEncoding(Charset charset) throws Exception { |
| 174 | + String key = "key"; |
| 175 | + String value = "中文"; |
| 176 | + List<Param> params = new ArrayList<>(); |
| 177 | + params.add(new Param(key, value)); |
| 178 | + ByteBuffer ahcBytes = HttpUtils.urlEncodeFormParams(params, charset); |
| 179 | + String ahcString = toUsAsciiString(ahcBytes); |
| 180 | + String jdkString = key + "=" + URLEncoder.encode(value, charset.name()); |
| 181 | + assertEquals(ahcString, jdkString); |
| 182 | + } |
| 183 | + |
| 184 | + @Test |
| 185 | + public void formUrlEncodingShouldSupportUtf8Charset() throws Exception { |
| 186 | + formUrlEncoding(UTF_8); |
| 187 | + } |
| 188 | + |
| 189 | + @Test |
| 190 | + public void formUrlEncodingShouldSupportNonUtf8Charset() throws Exception { |
| 191 | + formUrlEncoding(Charset.forName("GBK")); |
| 192 | + } |
| 193 | + |
| 194 | + private static String toUsAsciiString(ByteBuffer buf) throws CharacterCodingException { |
| 195 | + ByteBuf bb = Unpooled.wrappedBuffer(buf); |
| 196 | + try { |
| 197 | + return ByteBufUtils.byteBuf2String(US_ASCII, bb); |
| 198 | + } finally { |
| 199 | + bb.release(); |
| 200 | + } |
| 201 | + } |
163 | 202 | }
|
0 commit comments