[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