1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.seasar.cubby.tags;
17
18 import static org.junit.Assert.assertEquals;
19
20 import java.util.Arrays;
21 import java.util.List;
22
23 import javax.servlet.jsp.PageContext;
24 import javax.servlet.jsp.tagext.JspTag;
25
26 import org.jdom.Element;
27 import org.junit.Before;
28 import org.junit.Test;
29 import org.seasar.cubby.CubbyConstants;
30 import org.seasar.cubby.action.RequestMethod;
31 import org.seasar.cubby.mock.MockContainerProvider;
32 import org.seasar.cubby.mock.MockPathResolverProvider;
33 import org.seasar.cubby.plugin.PluginRegistry;
34 import org.seasar.cubby.plugins.BinderPlugin;
35 import org.seasar.cubby.routing.PathResolver;
36 import org.seasar.cubby.routing.impl.PathResolverImpl;
37 import org.seasar.cubby.routing.impl.PathTemplateParserImpl;
38 import org.seasar.cubby.spi.ContainerProvider;
39 import org.seasar.cubby.spi.PathResolverProvider;
40 import org.seasar.cubby.spi.container.Container;
41 import org.seasar.cubby.spi.container.LookupException;
42
43 public class LinkTagTest extends AbstractStandardTagTestCase {
44
45 private final PluginRegistry pluginRegistry = PluginRegistry.getInstance();
46
47 private LinkTag tag;
48
49 @Before
50 public void setup() throws Exception {
51 tag = new LinkTag();
52 setupBodyTag(tag);
53 setupErrors(context);
54 context.setAttribute(CubbyConstants.ATTR_CONTEXT_PATH, "/brabra",
55 PageContext.REQUEST_SCOPE);
56 }
57
58 @Before
59 public void setupContainer() {
60 final BinderPlugin binderPlugin = new BinderPlugin();
61 binderPlugin.bind(ContainerProvider.class).toInstance(
62 new MockContainerProvider(new Container() {
63
64 public <T> T lookup(Class<T> type) {
65 throw new LookupException();
66 }
67 }));
68 final PathResolver pathResolver = new PathResolverImpl(
69 new PathTemplateParserImpl());
70 pathResolver.add("/mockFormTagTest/foo", MockFormTagTestAction.class,
71 "foo", RequestMethod.GET, null, 0);
72 pathResolver.add("/mockFormTagTest/bar/{id}",
73 MockFormTagTestAction.class, "bar", RequestMethod.GET, null, 0);
74 binderPlugin.bind(PathResolverProvider.class).toInstance(
75 new MockPathResolverProvider(pathResolver));
76 pluginRegistry.register(binderPlugin);
77 }
78
79 @Test
80 public void doTag() throws Exception {
81 tag.setActionClass(MockFormTagTestAction.class.getCanonicalName());
82 tag.setActionMethod("foo");
83 doLifecycle(tag);
84
85 System.out.println(context.getResult());
86
87 assertEquals("URL出力", "/brabra/mockFormTagTest/foo", context
88 .getResult());
89 }
90
91 @Test
92 public void doTagWithParam() throws Exception {
93 tag.setActionClass(MockFormTagTestAction.class.getCanonicalName());
94 tag.setActionMethod("bar");
95 doLifecycle(tag, new ChildrenFactory() {
96 public List<JspTag> create() {
97 ParamTag paramTag1 = new ParamTag();
98 paramTag1.setParent(tag);
99 paramTag1.setName("id");
100 paramTag1.setValue("123");
101 ParamTag paramTag2 = new ParamTag();
102 paramTag2.setParent(tag);
103 paramTag2.setName("token");
104 paramTag2.setValue("abc");
105 return Arrays.asList(new JspTag[] { paramTag1, paramTag2 });
106 }
107 });
108
109 System.out.println(context.getResult());
110
111 assertEquals("パラメータ付きでURL出力",
112 "/brabra/mockFormTagTest/bar/123?token=abc", context
113 .getResult());
114 }
115
116 @Test
117 public void doTagOutputTag() throws Exception {
118 tag.setActionClass(MockFormTagTestAction.class.getCanonicalName());
119 tag.setActionMethod("foo");
120 tag.setTag("a");
121 tag.setAttr("href");
122 jspBody.setBody("body");
123 doLifecycle(tag);
124
125 System.out.println(context.getResult());
126
127 Element element = getResultAsElementFromContext();
128 String message = "タグ出力";
129 assertEquals(message, "a", element.getName());
130 assertEquals(message, 1, element.getAttributes().size());
131 assertEquals(message, "/brabra/mockFormTagTest/foo", element
132 .getAttributeValue("href"));
133 assertEquals(message, 0, element.getChildren().size());
134 assertEquals(message, "body", element.getValue());
135 }
136
137 @Test
138 public void doTagOutputTagWithParam() throws Exception {
139 tag.setActionClass(MockFormTagTestAction.class.getCanonicalName());
140 tag.setActionMethod("bar");
141 tag.setTag("img");
142 tag.setAttr("src");
143 doLifecycle(tag, new ChildrenFactory() {
144 public List<JspTag> create() {
145 ParamTag paramTag1 = new ParamTag();
146 paramTag1.setParent(tag);
147 paramTag1.setName("id");
148 paramTag1.setValue("123");
149 ParamTag paramTag2 = new ParamTag();
150 paramTag2.setParent(tag);
151 paramTag2.setName("token");
152 paramTag2.setValue("abc");
153 return Arrays.asList(new JspTag[] { paramTag1, paramTag2 });
154 }
155 });
156
157 System.out.println(context.getResult());
158
159 Element element = getResultAsElementFromContext();
160 String message = "パラメータ付きでタグ出力";
161 assertEquals(message, "img", element.getName());
162 assertEquals(message, 1, element.getAttributes().size());
163 assertEquals(message, "/brabra/mockFormTagTest/bar/123?token=abc",
164 element.getAttributeValue("src"));
165 assertEquals(message, 0, element.getChildren().size());
166 }
167
168 public void testDoTagWithProtocol() throws Exception {
169 tag.setActionClass(MockFormTagTestAction.class.getCanonicalName());
170 tag.setActionMethod("foo");
171 tag.setProtocol("https");
172 doLifecycle(tag);
173
174 System.out.println(context.getResult());
175
176 assertEquals("URL出力", "https://localhost/brabra/mockFormTagTest/foo",
177 context.getResult());
178 }
179
180 public void testDoTagWithPort() throws Exception {
181 tag.setActionClass(MockFormTagTestAction.class.getCanonicalName());
182 tag.setActionMethod("foo");
183 tag.setPort(8080);
184 doLifecycle(tag);
185
186 System.out.println(context.getResult());
187
188 assertEquals("URL出力",
189 "http://localhost:8080/brabra/mockFormTagTest/foo", context
190 .getResult());
191 }
192
193 public void testDoTagWithProtocolAndPort() throws Exception {
194 tag.setActionClass(MockFormTagTestAction.class.getCanonicalName());
195 tag.setActionMethod("foo");
196 tag.setProtocol("https");
197 tag.setPort(8080);
198 doLifecycle(tag);
199
200 System.out.println(context.getResult());
201
202 assertEquals("URL出力",
203 "https://localhost:8080/brabra/mockFormTagTest/foo", context
204 .getResult());
205 }
206 }