1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.jetspeed.rewriter;
18
19 import java.io.File;
20 import java.io.FileReader;
21 import java.io.FileWriter;
22 import java.io.IOException;
23 import java.io.InputStream;
24 import java.io.InputStreamReader;
25 import java.io.Reader;
26 import java.net.URL;
27 import java.util.Arrays;
28 import java.util.Iterator;
29
30 import junit.framework.Test;
31 import junit.framework.TestCase;
32 import junit.framework.TestSuite;
33
34 import org.apache.commons.httpclient.HttpClient;
35 import org.apache.commons.httpclient.methods.GetMethod;
36 import org.apache.jetspeed.rewriter.html.SwingParserAdaptor;
37 import org.apache.jetspeed.rewriter.rules.Attribute;
38 import org.apache.jetspeed.rewriter.rules.Rule;
39 import org.apache.jetspeed.rewriter.rules.Ruleset;
40 import org.apache.jetspeed.rewriter.rules.Tag;
41 import org.apache.jetspeed.rewriter.xml.SaxParserAdaptor;
42
43 /***
44 * TestRewriterRules
45 *
46 * @author <a href="mailto:taylor@apache.org">David Sean Taylor </a>
47 * @version $Id: TestRewriterController.java,v 1.3 2004/10/13 15:53:22 weaver
48 * Exp $
49 */
50 public class TestRewriterController extends TestCase
51 {
52
53 /***
54 * Defines the testcase name for JUnit.
55 *
56 * @param name
57 * the testcase's name.
58 */
59 public TestRewriterController(String name)
60 {
61 super(name);
62 }
63
64 public String getBaseProject()
65 {
66 return "components/jetspeed";
67 }
68
69 /***
70 * Start the tests.
71 *
72 * @param args
73 * the arguments. Not used
74 */
75 public static void main(String args[])
76 {
77 junit.awtui.TestRunner.main(new String[]
78 { TestRewriterController.class.getName()});
79 }
80
81 public static Test suite()
82 {
83
84 return new TestSuite(TestRewriterController.class);
85 }
86
87 public void testFactories() throws Exception
88 {
89 RewriterController component = getController();
90 assertNotNull("template component is null", component);
91
92 Rewriter basic = component.createRewriter();
93 assertNotNull("basic rewriter is null", basic);
94 FileReader reader = new FileReader("test/rewriter/test-rewriter-rules.xml");
95 Ruleset ruleset = component.loadRuleset(reader);
96 assertNotNull("ruleset is null", ruleset);
97 RulesetRewriter rewriter = component.createRewriter(ruleset);
98 assertNotNull("ruleset rewriter is null", rewriter);
99 assertNotNull("ruleset is null", rewriter.getRuleset());
100 }
101
102 public void testRules() throws Exception
103 {
104 RewriterController component = getController();
105 assertNotNull("template component is null", component);
106
107 assertNotNull("rewriter component is null", component);
108 FileReader reader = new FileReader("test/rewriter/test-rewriter-rules.xml");
109 Ruleset ruleset = component.loadRuleset(reader);
110 assertNotNull("ruleset is null", ruleset);
111 assertEquals("ruleset id", "test-set-101", ruleset.getId());
112 Iterator rules = ruleset.getRules().iterator();
113 assertNotNull("rules is null", rules);
114
115
116
117
118 Iterator tags = ruleset.getTags().iterator();
119 while (tags.hasNext())
120 {
121 Tag tag = (Tag) tags.next();
122 if (tag.getId().equalsIgnoreCase("FORM"))
123 {
124 assertFalse("Remove", tag.getRemove());
125 Iterator attributes = tag.getAttributes().iterator();
126 while (attributes.hasNext())
127 {
128 Attribute attribute = (Attribute) attributes.next();
129 assertTrue("attribute is not ACTION", attribute.getId().equals("ACTION"));
130 assertEquals("attribute rule not equal", attribute.getRule().getId(), "merge");
131 }
132 }
133 else if (tag.getId().equalsIgnoreCase("INPUT"))
134 {
135 assertFalse("Remove", tag.getRemove());
136 Iterator attributes = tag.getAttributes().iterator();
137 while (attributes.hasNext())
138 {
139 Attribute attribute = (Attribute) attributes.next();
140 assertTrue("attribute is not SOURCE", attribute.getId().equals("SOURCE"));
141 assertEquals("attribute rule not equal", attribute.getRule().getId(), "test");
142 }
143
144 }
145 else if (tag.getId().equalsIgnoreCase("LINK"))
146 {
147 assertFalse("Remove", tag.getRemove());
148 Iterator attributes = tag.getAttributes().iterator();
149 while (attributes.hasNext())
150 {
151 Attribute attribute = (Attribute) attributes.next();
152 assertTrue("attribute is not HREF", attribute.getId().equals("HREF"));
153 assertEquals("attribute rule not equal", attribute.getRule().getId(), "merge");
154 }
155 }
156 else if (tag.getId().equalsIgnoreCase("HEAD"))
157 {
158 assertTrue("Remove", tag.getRemove());
159 }
160 else
161 {
162 assertTrue("tag name unexpected: " + tag.getId(), false);
163 }
164
165 }
166 assertNotNull("tags is null", tags);
167
168
169
170
171 while (rules.hasNext())
172 {
173 Rule rule = (Rule) rules.next();
174 assertNotNull("rule is null", rule);
175 if (rule.getId().equals("merge"))
176 {
177 assertEquals("Rule id", rule.getId(), "merge");
178 assertTrue("Rule Use Base", rule.getUseBase());
179 assertFalse("Rule Popup", rule.getPopup());
180 assertEquals("Rule Suffix", rule.getSuffix(), "/web");
181 }
182 else if (rule.getId().equals("test"))
183 {
184 assertEquals("Rule id", rule.getId(), "test");
185 assertFalse("Rule Use Base", rule.getUseBase());
186 assertTrue("Rule Popup", rule.getPopup());
187 assertEquals("Rule Suffix", rule.getSuffix(), "/whatever&xxx=1");
188 }
189 else
190 {
191 assertTrue("rule name unexpected: " + rule.getId(), false);
192 }
193 }
194
195 }
196
197 public void testRewriting() throws Exception
198 {
199 RewriterController component = getController();
200 assertNotNull("template component is null", component);
201
202 assertNotNull("rewriter component is null", component);
203
204 FileReader reader = new FileReader("test/rewriter/test-remove-rules.xml");
205
206 Ruleset ruleset = component.loadRuleset(reader);
207 reader.close();
208 assertNotNull("ruleset is null", ruleset);
209 RulesetRewriter rewriter = component.createRewriter(ruleset);
210 assertNotNull("ruleset rewriter is null", rewriter);
211 assertNotNull("ruleset is null", rewriter.getRuleset());
212
213 FileReader htmlReader = new FileReader("test/rewriter/test-001.html");
214 FileWriter htmlWriter = getTestWriter("test-001-output.html");
215
216 ParserAdaptor adaptor = component.createParserAdaptor("text/html");
217 rewriter.setBaseUrl("http://www.rewriter.com");
218 rewriter.rewrite(adaptor, htmlReader, htmlWriter);
219 htmlWriter.close();
220 htmlReader.close();
221
222
223 FileReader testReader = new FileReader("target/test/rewriter/test-001-output.html");
224 UnitTestRewriter testRewriter = new UnitTestRewriter();
225 testRewriter.parse(component.createParserAdaptor("text/html"), testReader);
226 assertTrue("1st rewritten anchor: " + testRewriter.getAnchorValue("1"), testRewriter.getAnchorValue("1")
227 .equals("http://www.bluesunrise.com/suffix"));
228 assertTrue("2nd rewritten anchor: " + testRewriter.getAnchorValue("2"), testRewriter.getAnchorValue("2")
229 .equals("http://www.rewriter.com/stuff/junk/stuffedjunk.html/suffix"));
230 assertTrue("3rd rewritten anchor: " + testRewriter.getAnchorValue("3"), testRewriter.getAnchorValue("3")
231 .equals("http://www.rewriter.com/stuff/junk/stuffedjunk.html/suffix"));
232 assertTrue("4th rewritten anchor: " + testRewriter.getAnchorValue("4"), testRewriter.getAnchorValue("4")
233 .equals("javascript:whatever()"));
234 assertTrue("5th rewritten anchor: " + testRewriter.getAnchorValue("5"), testRewriter.getAnchorValue("5")
235 .equals("mailto:david@bluesunrise.com"));
236 assertTrue("6th rewritten anchor: " + testRewriter.getAnchorValue("6"), testRewriter.getAnchorValue("6")
237 .equals("#INTERNAL"));
238
239 assertTrue("Paragraph text: " + testRewriter.getParagraph(), testRewriter.getParagraph().equals(
240 "This is a test"));
241 }
242
243 /***
244 * Gets a writer for a given filename in the test directory.
245 *
246 * @return A file reader to the test rules file
247 * @throws IOException
248 */
249 private FileWriter getTestWriter(String filename) throws IOException
250 {
251 new File("target/test/rewriter").mkdirs();
252 return new FileWriter("target/test/rewriter/" + filename);
253 }
254
255
256 private RewriterController getController() throws Exception
257 {
258 Class[] rewriterClasses = new Class[]
259 { RulesetRewriterImpl.class, RulesetRewriterImpl.class};
260
261
262
263
264 Class[] adaptorClasses = new Class[]
265 { SwingParserAdaptor.class, SaxParserAdaptor.class};
266 return new JetspeedRewriterController("test/WEB-INF/conf/rewriter-rules-mapping.xml", Arrays
267 .asList(rewriterClasses), Arrays.asList(adaptorClasses));
268 }
269
270 public void XXXtestExternalRewriting() throws Exception
271 {
272 RewriterController component = getController();
273 assertNotNull("template component is null", component);
274
275 assertNotNull("rewriter component is null", component);
276
277 Reader reader = new FileReader("test/rewriter/default-rewriter-rules.xml");
278
279 Ruleset ruleset = component.loadRuleset(reader);
280 reader.close();
281 assertNotNull("ruleset is null", ruleset);
282 RulesetRewriter rewriter = component.createRewriter(ruleset);
283 assertNotNull("ruleset rewriter is null", rewriter);
284 assertNotNull("ruleset is null", rewriter.getRuleset());
285
286 String source = "http://jakarta.apache.org/tomcat/";
287 Reader htmlReader = getRemoteReader(source);
288 FileWriter htmlWriter = getTestWriter("test-002-output.html");
289
290 ParserAdaptor adaptor = component.createParserAdaptor("text/html");
291
292 URL baseURL = new URL(source);
293 String baseurl = baseURL.getProtocol() + "://" + baseURL.getHost();
294
295 rewriter.setBaseUrl(baseurl);
296 rewriter.rewrite(adaptor, htmlReader, htmlWriter);
297 htmlWriter.close();
298 htmlReader.close();
299 }
300
301 private Reader getRemoteReader(String uri) throws IOException
302 {
303 HttpClient client = new HttpClient();
304 GetMethod get = new GetMethod(uri);
305 client.executeMethod(get);
306 InputStream is = get.getResponseBodyAsStream();
307 return new InputStreamReader(is);
308 }
309
310 }