1 package com.atlassian.httpclient.api;
2
3 import com.google.common.base.Charsets;
4 import com.google.common.io.CharStreams;
5 import org.junit.Test;
6
7 import java.io.IOException;
8 import java.io.InputStreamReader;
9
10 import static junit.framework.Assert.assertEquals;
11
12 public class DefaultFormBuilderTest {
13 @Test
14 public void testOneEmptyParam() {
15 FormBuilder form = new DefaultFormBuilder();
16 form.addParam("foo");
17 assertEquals("foo", toString(form));
18 }
19
20 @Test
21 public void testTwoLikeEmptyParams() {
22 FormBuilder form = new DefaultFormBuilder();
23 form.addParam("foo");
24 form.addParam("foo");
25 assertEquals("foo&foo", toString(form));
26 }
27
28 @Test
29 public void testTwoEmptyParams() {
30 FormBuilder form = new DefaultFormBuilder();
31 form.addParam("foo");
32 form.addParam("bar");
33 assertEquals("foo&bar", toString(form));
34 }
35
36 @Test
37 public void testOneParam() {
38 FormBuilder form = new DefaultFormBuilder();
39 form.addParam("foo", "bar");
40 assertEquals("foo=bar", toString(form));
41 }
42
43 @Test
44 public void testTwoLikeParams() {
45 FormBuilder form = new DefaultFormBuilder();
46 form.addParam("one", "a");
47 form.addParam("one", "b");
48 assertEquals("one=a&one=b", toString(form));
49 }
50
51 @Test
52 public void testTwoParams() {
53 FormBuilder form = new DefaultFormBuilder();
54 form.addParam("one", "1");
55 form.addParam("two", "2");
56 assertEquals("one=1&two=2", toString(form));
57 }
58
59 @Test
60 public void testUrlEncoding() {
61 FormBuilder form = new DefaultFormBuilder();
62 form.addParam("one param", "one value");
63 form.addParam("two/param", "two/value");
64 form.addParam("three∫param", "three∫value");
65 form.addParam("four¶m", "four&value");
66 assertEquals("one+param=one+value&two%2Fparam=two%2Fvalue&three%E2%88%ABparam=three%E2%88%ABvalue&four%26param=four%26value", toString(form));
67 }
68
69 @Test
70 public void testHeaders() {
71 FormBuilder form = new DefaultFormBuilder();
72 EntityBuilder.Entity entity = form.build();
73 assertEquals("application/x-www-form-urlencoded; charset=UTF-8", entity.getHeaders().get("Content-Type"));
74 }
75
76 private static String toString(final FormBuilder form) {
77 try {
78 return CharStreams.toString(new InputStreamReader(form.build().getInputStream(), Charsets.UTF_8));
79 } catch (IOException e) {
80 throw new RuntimeException(e);
81 }
82 }
83 }