[jboss-cvs] jboss-portal/cms/src/main/org/jboss/portal/test/cms ...
Roy Russo
russo at jboss.com
Tue Aug 22 17:03:43 EDT 2006
User: russo
Date: 06/08/22 17:03:43
Added: cms/src/main/org/jboss/portal/test/cms Tag:
JBoss_Portal_Branch_2_4 TestRegEx.java
Log:
JBPORTAL-937 - done.
Revision Changes Path
No revision
No revision
1.1.2.2 +148 -0 jboss-portal/cms/src/main/org/jboss/portal/test/cms/TestRegEx.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: TestRegEx.java
===================================================================
RCS file: TestRegEx.java
diff -N TestRegEx.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ TestRegEx.java 22 Aug 2006 21:03:43 -0000 1.1.2.2
@@ -0,0 +1,148 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.portal.test.cms;
+
+import junit.framework.TestCase;
+import org.jboss.portal.cms.util.FileUtil;
+
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Tests for the CMS Regex when retrieving stored content.
+ *
+ * @author <a href="mailto:roy at jboss.org">Roy Russo</a>
+ */
+public class TestRegEx extends TestCase
+{
+
+ String HTMLHeaderFile = "resources/test/jcr/headerpage.html";
+ String HTMLHeaderFile_Good = "resources/test/jcr/headerpage_good.html";
+
+ private static final String URI_schemeRegex = "[a-z][-+.0-9a-z]*:";
+
+ /**
+ * For our purposes, ignore URIs that start with a scheme idicator,
+ * a slash (indicating an absolute path), or a hash sign (# = ASCII hex 23).
+ */
+ private static final String URI_ignoreRegex = "" + URI_schemeRegex + "|/|\\x23";
+
+ private static final String
+ regex = "((?:href|src)\\s*=\\s*) # Capture preliminaries in $1. \n"
+ + "(?: # First look for URL in quotes. \n"
+ + " ([\"\']) # Capture open quote in $2. \n"
+ + " (?!" + URI_ignoreRegex + ") # If it isn't absolute... \n"
+ + " /?(.+?) # ...capture URL in $3 \n"
+ + " \\2 # Match the closing quote \n"
+ + " | # Look for non-quoted URL. \n"
+ + " (?![\"\']|" + URI_ignoreRegex + ") # If it isn't absolute... \n"
+ + " /?([^\\s>]+) # ...capture URL in $4 \n"
+ + ")";
+
+ /**
+ * Removes header content, and leaves content between body tags
+ */
+ private static final String HTMLStripperRegex = "(.*<body[^>]*>(.+)</body>.*)";
+ //private static final String HTMLStripperRegex = "(.*<body[^>]*>(.+)</body>.*')";
+
+ private static final Pattern RELATIVE_URI_PATTERN = Pattern.compile(regex, Pattern.MULTILINE | Pattern.CASE_INSENSITIVE | Pattern.COMMENTS);
+
+ private static final Pattern STRIP_TAGS_PATTERN = Pattern.compile(HTMLStripperRegex, Pattern.DOTALL | Pattern.CASE_INSENSITIVE);
+
+ public void setUp() throws Exception
+ {
+ super.setUp();
+ }
+
+ /**
+ * Tests HTML rewriting of header content and links in CMSPortlet.
+ *
+ * @throws Exception
+ */
+ public void testHTMLPageHeaderRewrite() throws Exception
+ {
+ String fileHTML = "";
+ StringBuffer fileData = new StringBuffer(1000);
+ BufferedReader reader = new BufferedReader(new FileReader(HTMLHeaderFile));
+ char[] buffer = new char[1024];
+ int count = 0;
+ while((count = reader.read(buffer)) != -1)
+ {
+ String read = String.valueOf(buffer, 0, count);
+ fileData.append(read);
+ buffer = new char[1024];
+ }
+ reader.close();
+ fileHTML = fileData.toString();
+
+ // begin cleaner
+ String CleanHTML = "";
+ Matcher h = STRIP_TAGS_PATTERN.matcher(fileHTML);
+ while(h.find())
+ {
+ CleanHTML = h.group(2);
+ }
+ // begin modifying links
+ StringBuffer stringbuffer = new StringBuffer();
+ Matcher m = RELATIVE_URI_PATTERN.matcher(CleanHTML);
+ while(m.find())
+ {
+ String relURI = m.group(3) != null ? m.group(3) : m.group(4);
+ String absoluteURI = this.buildURL("/" + relURI);
+ m.appendReplacement(stringbuffer, "$1$2" + FileUtil.cleanDoubleSlashes(absoluteURI) + "$2");
+ }
+ m.appendTail(stringbuffer);
+ CleanHTML = stringbuffer.toString();
+
+ /* Assert */
+ String goodHTML = "";
+ fileData = new StringBuffer(1000);
+ reader = new BufferedReader(new FileReader(HTMLHeaderFile_Good));
+ buffer = new char[1024];
+ count = 0;
+ while((count = reader.read(buffer)) != -1)
+ {
+ String read = String.valueOf(buffer, 0, count);
+ fileData.append(read);
+ buffer = new char[1024];
+ }
+ reader.close();
+ goodHTML = fileData.toString();
+
+ assertEquals("RegEx failed to match!", CleanHTML, goodHTML);
+ }
+
+ protected void tearDown() throws Exception
+ {
+ super.tearDown();
+ }
+
+ /**
+ * Faking it.
+ */
+ private String buildURL(String path)
+ {
+ return "http://localhost:8080/portal/content" + path;
+ }
+}
More information about the jboss-cvs-commits
mailing list