1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.seasar.cubby.action;
17
18 import static org.easymock.EasyMock.createMock;
19 import static org.easymock.EasyMock.expect;
20 import static org.easymock.EasyMock.replay;
21 import static org.easymock.EasyMock.verify;
22 import static org.junit.Assert.assertEquals;
23
24 import java.io.PrintWriter;
25 import java.io.StringWriter;
26 import java.lang.reflect.Method;
27
28 import javax.servlet.http.HttpServletRequest;
29 import javax.servlet.http.HttpServletResponse;
30
31 import org.junit.After;
32 import org.junit.Before;
33 import org.junit.Test;
34 import org.seasar.cubby.mock.MockActionContext;
35 import org.seasar.cubby.mock.MockJsonProvider;
36 import org.seasar.cubby.plugin.PluginRegistry;
37 import org.seasar.cubby.plugins.BinderPlugin;
38 import org.seasar.cubby.spi.JsonProvider;
39
40 public class JsonTest {
41
42 private final PluginRegistry pluginRegistry = PluginRegistry.getInstance();
43
44 @Before
45 public void setupProvider() {
46 final BinderPlugin binderPlugin = new BinderPlugin();
47 binderPlugin.bind(JsonProvider.class)
48 .toInstance(new MockJsonProvider());
49 pluginRegistry.register(binderPlugin);
50 }
51
52 @After
53 public void tearDownProvider() {
54 pluginRegistry.clear();
55 }
56
57 @Test
58 public void execute() throws Exception {
59 final MockAction action = new MockAction();
60
61 final HttpServletRequest request = createMock(HttpServletRequest.class);
62 final HttpServletResponse response = createMock(HttpServletResponse.class);
63 final StringWriter writer = new StringWriter();
64 response.setCharacterEncoding("utf-8");
65 response.setContentType("text/javascript; charset=utf-8");
66 response.setHeader("Cache-Control", "no-cache");
67 response.setHeader("Pragma", "no-cache");
68 expect(response.getWriter()).andReturn(new PrintWriter(writer));
69
70 replay(request, response);
71
72 final Method method = action.getClass().getMethod("dummy1");
73
74 final Json json = new Json(createBean());
75 final ActionContext actionContext = new MockActionContext(action,
76 MockAction.class, method);
77 json.execute(actionContext, request, response);
78 assertEquals(MockJsonProvider.JSON_STRING, writer.toString());
79
80 verify(request, response);
81 }
82
83 @Test
84 public void executeWithContentTypeAndEncoding() throws Exception {
85 final MockAction action = new MockAction();
86
87 final HttpServletRequest request = createMock(HttpServletRequest.class);
88 final HttpServletResponse response = createMock(HttpServletResponse.class);
89 final StringWriter writer = new StringWriter();
90 response.setCharacterEncoding("Shift_JIS");
91 response.setContentType("text/javascript+json; charset=Shift_JIS");
92 response.setHeader("Cache-Control", "no-cache");
93 response.setHeader("Pragma", "no-cache");
94 expect(response.getWriter()).andReturn(new PrintWriter(writer));
95 replay(request, response);
96
97 final Method method = action.getClass().getMethod("dummy1");
98
99 final Json json = new Json(createBean()).contentType(
100 "text/javascript+json").encoding("Shift_JIS");
101 final ActionContext actionContext = new MockActionContext(action,
102 MockAction.class, method);
103 json.execute(actionContext, request, response);
104 assertEquals(MockJsonProvider.JSON_STRING, writer.toString());
105
106 verify(request, response);
107 }
108
109 private Foo createBean() {
110 final Foo bean = new Foo();
111 bean.setName("カビー");
112 bean.setAge(30);
113 return bean;
114 }
115
116 public static class Foo {
117 private String name;
118 private Integer age;
119
120 public String getName() {
121 return name;
122 }
123
124 public void setName(final String name) {
125 this.name = name;
126 }
127
128 public Integer getAge() {
129 return age;
130 }
131
132 public void setAge(final Integer age) {
133 this.age = age;
134 }
135 }
136
137 }