001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: package org.apache.jetspeed.rewriter;
018:
019: import java.io.File;
020: import java.io.FileReader;
021: import java.io.FileWriter;
022: import java.io.IOException;
023: import java.io.InputStream;
024: import java.io.InputStreamReader;
025: import java.io.Reader;
026: import java.net.URL;
027: import java.util.Arrays;
028: import java.util.Iterator;
029:
030: import junit.framework.Test;
031: import junit.framework.TestCase;
032: import junit.framework.TestSuite;
033:
034: import org.apache.commons.httpclient.HttpClient;
035: import org.apache.commons.httpclient.methods.GetMethod;
036: import org.apache.jetspeed.rewriter.html.SwingParserAdaptor;
037: import org.apache.jetspeed.rewriter.rules.Attribute;
038: import org.apache.jetspeed.rewriter.rules.Rule;
039: import org.apache.jetspeed.rewriter.rules.Ruleset;
040: import org.apache.jetspeed.rewriter.rules.Tag;
041: import org.apache.jetspeed.rewriter.xml.SaxParserAdaptor;
042:
043: /**
044: * TestRewriterRules
045: *
046: * @author <a href="mailto:taylor@apache.org">David Sean Taylor </a>
047: * @version $Id: TestRewriterController.java,v 1.3 2004/10/13 15:53:22 weaver
048: * Exp $
049: */
050: public class TestRewriterController extends TestCase {
051:
052: /**
053: * Defines the testcase name for JUnit.
054: *
055: * @param name
056: * the testcase's name.
057: */
058: public TestRewriterController(String name) {
059: super (name);
060: }
061:
062: public String getBaseProject() {
063: return "components/jetspeed";
064: }
065:
066: /**
067: * Start the tests.
068: *
069: * @param args
070: * the arguments. Not used
071: */
072: public static void main(String args[]) {
073: junit.awtui.TestRunner
074: .main(new String[] { TestRewriterController.class
075: .getName() });
076: }
077:
078: public static Test suite() {
079: // All methods starting with "test" will be executed in the test suite.
080: return new TestSuite(TestRewriterController.class);
081: }
082:
083: public void testFactories() throws Exception {
084: RewriterController component = getController();
085: assertNotNull("template component is null", component);
086:
087: Rewriter basic = component.createRewriter();
088: assertNotNull("basic rewriter is null", basic);
089: FileReader reader = new FileReader(
090: "test/rewriter/test-rewriter-rules.xml");
091: Ruleset ruleset = component.loadRuleset(reader);
092: assertNotNull("ruleset is null", ruleset);
093: RulesetRewriter rewriter = component.createRewriter(ruleset);
094: assertNotNull("ruleset rewriter is null", rewriter);
095: assertNotNull("ruleset is null", rewriter.getRuleset());
096: }
097:
098: public void testRules() throws Exception {
099: RewriterController component = getController();
100: assertNotNull("template component is null", component);
101:
102: assertNotNull("rewriter component is null", component);
103: FileReader reader = new FileReader(
104: "test/rewriter/test-rewriter-rules.xml");
105: Ruleset ruleset = component.loadRuleset(reader);
106: assertNotNull("ruleset is null", ruleset);
107: assertEquals("ruleset id", "test-set-101", ruleset.getId());
108: Iterator rules = ruleset.getRules().iterator();
109: assertNotNull("rules is null", rules);
110:
111: //
112: // test tags
113: //
114: Iterator tags = ruleset.getTags().iterator();
115: while (tags.hasNext()) {
116: Tag tag = (Tag) tags.next();
117: if (tag.getId().equalsIgnoreCase("FORM")) {
118: assertFalse("Remove", tag.getRemove());
119: Iterator attributes = tag.getAttributes().iterator();
120: while (attributes.hasNext()) {
121: Attribute attribute = (Attribute) attributes.next();
122: assertTrue("attribute is not ACTION", attribute
123: .getId().equals("ACTION"));
124: assertEquals("attribute rule not equal", attribute
125: .getRule().getId(), "merge");
126: }
127: } else if (tag.getId().equalsIgnoreCase("INPUT")) {
128: assertFalse("Remove", tag.getRemove());
129: Iterator attributes = tag.getAttributes().iterator();
130: while (attributes.hasNext()) {
131: Attribute attribute = (Attribute) attributes.next();
132: assertTrue("attribute is not SOURCE", attribute
133: .getId().equals("SOURCE"));
134: assertEquals("attribute rule not equal", attribute
135: .getRule().getId(), "test");
136: }
137:
138: } else if (tag.getId().equalsIgnoreCase("LINK")) {
139: assertFalse("Remove", tag.getRemove());
140: Iterator attributes = tag.getAttributes().iterator();
141: while (attributes.hasNext()) {
142: Attribute attribute = (Attribute) attributes.next();
143: assertTrue("attribute is not HREF", attribute
144: .getId().equals("HREF"));
145: assertEquals("attribute rule not equal", attribute
146: .getRule().getId(), "merge");
147: }
148: } else if (tag.getId().equalsIgnoreCase("HEAD")) {
149: assertTrue("Remove", tag.getRemove());
150: } else {
151: assertTrue("tag name unexpected: " + tag.getId(), false);
152: }
153:
154: }
155: assertNotNull("tags is null", tags);
156:
157: //
158: // test rules
159: //
160: while (rules.hasNext()) {
161: Rule rule = (Rule) rules.next();
162: assertNotNull("rule is null", rule);
163: if (rule.getId().equals("merge")) {
164: assertEquals("Rule id", rule.getId(), "merge");
165: assertTrue("Rule Use Base", rule.getUseBase());
166: assertFalse("Rule Popup", rule.getPopup());
167: assertEquals("Rule Suffix", rule.getSuffix(), "/web");
168: } else if (rule.getId().equals("test")) {
169: assertEquals("Rule id", rule.getId(), "test");
170: assertFalse("Rule Use Base", rule.getUseBase());
171: assertTrue("Rule Popup", rule.getPopup());
172: assertEquals("Rule Suffix", rule.getSuffix(),
173: "/whatever&xxx=1");
174: } else {
175: assertTrue("rule name unexpected: " + rule.getId(),
176: false);
177: }
178: }
179:
180: }
181:
182: public void testRewriting() throws Exception {
183: RewriterController component = getController();
184: assertNotNull("template component is null", component);
185:
186: assertNotNull("rewriter component is null", component);
187:
188: FileReader reader = new FileReader(
189: "test/rewriter/test-remove-rules.xml");
190:
191: Ruleset ruleset = component.loadRuleset(reader);
192: reader.close();
193: assertNotNull("ruleset is null", ruleset);
194: RulesetRewriter rewriter = component.createRewriter(ruleset);
195: assertNotNull("ruleset rewriter is null", rewriter);
196: assertNotNull("ruleset is null", rewriter.getRuleset());
197:
198: FileReader htmlReader = new FileReader(
199: "test/rewriter/test-001.html");
200: FileWriter htmlWriter = getTestWriter("test-001-output.html");
201:
202: ParserAdaptor adaptor = component
203: .createParserAdaptor("text/html");
204: rewriter.setBaseUrl("http://www.rewriter.com");
205: rewriter.rewrite(adaptor, htmlReader, htmlWriter);
206: htmlWriter.close();
207: htmlReader.close();
208:
209: // validate result
210: FileReader testReader = new FileReader(
211: "target/test/rewriter/test-001-output.html");
212: UnitTestRewriter testRewriter = new UnitTestRewriter();
213: testRewriter.parse(component.createParserAdaptor("text/html"),
214: testReader);
215: assertTrue("1st rewritten anchor: "
216: + testRewriter.getAnchorValue("1"), testRewriter
217: .getAnchorValue("1").equals(
218: "http://www.bluesunrise.com/suffix"));
219: assertTrue(
220: "2nd rewritten anchor: "
221: + testRewriter.getAnchorValue("2"),
222: testRewriter
223: .getAnchorValue("2")
224: .equals(
225: "http://www.rewriter.com/stuff/junk/stuffedjunk.html/suffix"));
226: assertTrue(
227: "3rd rewritten anchor: "
228: + testRewriter.getAnchorValue("3"),
229: testRewriter
230: .getAnchorValue("3")
231: .equals(
232: "http://www.rewriter.com/stuff/junk/stuffedjunk.html/suffix"));
233: assertTrue("4th rewritten anchor: "
234: + testRewriter.getAnchorValue("4"), testRewriter
235: .getAnchorValue("4").equals("javascript:whatever()"));
236: assertTrue("5th rewritten anchor: "
237: + testRewriter.getAnchorValue("5"), testRewriter
238: .getAnchorValue("5").equals(
239: "mailto:david@bluesunrise.com"));
240: assertTrue("6th rewritten anchor: "
241: + testRewriter.getAnchorValue("6"), testRewriter
242: .getAnchorValue("6").equals("#INTERNAL"));
243:
244: assertTrue("Paragraph text: " + testRewriter.getParagraph(),
245: testRewriter.getParagraph().equals("This is a test"));
246: }
247:
248: /**
249: * Gets a writer for a given filename in the test directory.
250: *
251: * @return A file reader to the test rules file
252: * @throws IOException
253: */
254: private FileWriter getTestWriter(String filename)
255: throws IOException {
256: new File("target/test/rewriter").mkdirs();
257: return new FileWriter("target/test/rewriter/" + filename);
258: }
259:
260: private RewriterController getController() throws Exception {
261: Class[] rewriterClasses = new Class[] {
262: RulesetRewriterImpl.class, RulesetRewriterImpl.class };
263:
264: //Class[] rewriterClasses = new Class[]
265: // { WebContentRewriter.class, WebContentRewriter.class};
266:
267: Class[] adaptorClasses = new Class[] {
268: SwingParserAdaptor.class, SaxParserAdaptor.class };
269: return new JetspeedRewriterController(
270: "test/WEB-INF/conf/rewriter-rules-mapping.xml", Arrays
271: .asList(rewriterClasses), Arrays
272: .asList(adaptorClasses));
273: }
274:
275: public void XXXtestExternalRewriting() throws Exception {
276: RewriterController component = getController();
277: assertNotNull("template component is null", component);
278:
279: assertNotNull("rewriter component is null", component);
280:
281: Reader reader = new FileReader(
282: "test/rewriter/default-rewriter-rules.xml");
283:
284: Ruleset ruleset = component.loadRuleset(reader);
285: reader.close();
286: assertNotNull("ruleset is null", ruleset);
287: RulesetRewriter rewriter = component.createRewriter(ruleset);
288: assertNotNull("ruleset rewriter is null", rewriter);
289: assertNotNull("ruleset is null", rewriter.getRuleset());
290:
291: String source = "http://jakarta.apache.org/tomcat/";
292: Reader htmlReader = getRemoteReader(source);
293: FileWriter htmlWriter = getTestWriter("test-002-output.html");
294:
295: ParserAdaptor adaptor = component
296: .createParserAdaptor("text/html");
297:
298: URL baseURL = new URL(source);
299: String baseurl = baseURL.getProtocol() + "://"
300: + baseURL.getHost();
301:
302: rewriter.setBaseUrl(baseurl);
303: rewriter.rewrite(adaptor, htmlReader, htmlWriter);
304: htmlWriter.close();
305: htmlReader.close();
306: }
307:
308: private Reader getRemoteReader(String uri) throws IOException {
309: HttpClient client = new HttpClient();
310: GetMethod get = new GetMethod(uri);
311: client.executeMethod(get);
312: InputStream is = get.getResponseBodyAsStream();
313: return new InputStreamReader(is);
314: }
315:
316: }
|