You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jspwiki.apache.org by ja...@apache.org on 2008/11/02 22:56:05 UTC

svn commit: r709946 - in /incubator/jspwiki/trunk: ./ src/com/ecyrd/jspwiki/auth/authorize/ src/com/ecyrd/jspwiki/auth/user/ src/com/ecyrd/jspwiki/parser/ src/com/ecyrd/jspwiki/providers/ src/com/ecyrd/jspwiki/ui/ src/webdocs/ src/webdocs/admin/ src/we...

Author: jalkanen
Date: Sun Nov  2 13:56:04 2008
New Revision: 709946

URL: http://svn.apache.org/viewvc?rev=709946&view=rev
Log:
Merged in changes from 2.8 branch.

Modified:
    incubator/jspwiki/trunk/ChangeLog
    incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/auth/authorize/XMLGroupDatabase.java
    incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/auth/user/XMLUserDatabase.java
    incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/parser/JSPWikiMarkupParser.java
    incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/providers/CachingProvider.java
    incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/ui/WikiJSPFilter.java
    incubator/jspwiki/trunk/src/webdocs/admin/SecurityConfig.jsp
    incubator/jspwiki/trunk/src/webdocs/rss.jsp
    incubator/jspwiki/trunk/src/webdocs/templates/default/jspwiki.css
    incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/parser/JSPWikiMarkupParserTest.java
    incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/plugin/TableOfContentsTest.java
    incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/render/CreoleRendererTest.java
    incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/util/AllTests.java

Modified: incubator/jspwiki/trunk/ChangeLog
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/ChangeLog?rev=709946&r1=709945&r2=709946&view=diff
==============================================================================
--- incubator/jspwiki/trunk/ChangeLog (original)
+++ incubator/jspwiki/trunk/ChangeLog Sun Nov  2 13:56:04 2008
@@ -1,3 +1,8 @@
+2008-11-02  Janne Jalkanen <ja...@apache.org>
+
+        * Merged changes from 2.8 branch: JSPWIKI-288, JSPWIKI-406,
+		JSPWIKI-348, JSPWIKI-389, JSPWIKI-138
+
 2008-10-26  Janne Jalkanen <ja...@apache.org>
 
         * Added the 3.0 API definition interfaces from the SVN.

Modified: incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/auth/authorize/XMLGroupDatabase.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/auth/authorize/XMLGroupDatabase.java?rev=709946&r1=709945&r2=709946&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/auth/authorize/XMLGroupDatabase.java (original)
+++ incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/auth/authorize/XMLGroupDatabase.java Sun Nov  2 13:56:04 2008
@@ -199,7 +199,7 @@
         String file = props.getProperty( PROP_DATABASE );
         if ( file == null )
         {
-            log.error( "XML group database property " + PROP_DATABASE + " not found; trying " + defaultFile );
+            log.warn( "XML group database property " + PROP_DATABASE + " not found; trying " + defaultFile );
             m_file = defaultFile;
         }
         else

Modified: incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/auth/user/XMLUserDatabase.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/auth/user/XMLUserDatabase.java?rev=709946&r1=709945&r2=709946&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/auth/user/XMLUserDatabase.java (original)
+++ incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/auth/user/XMLUserDatabase.java Sun Nov  2 13:56:04 2008
@@ -277,7 +277,7 @@
         String file = props.getProperty( PROP_USERDATABASE );
         if( file == null )
         {
-            log.error( "XML user database property " + PROP_USERDATABASE + " not found; trying " + defaultFile  );
+            log.warn( "XML user database property " + PROP_USERDATABASE + " not found; trying " + defaultFile  );
             c_file = defaultFile;
         }
         else 

Modified: incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/parser/JSPWikiMarkupParser.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/parser/JSPWikiMarkupParser.java?rev=709946&r1=709945&r2=709946&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/parser/JSPWikiMarkupParser.java (original)
+++ incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/parser/JSPWikiMarkupParser.java Sun Nov  2 13:56:04 2008
@@ -173,7 +173,8 @@
 
     private int                    m_rowNum              = 1;
 
-
+    private Heading                m_lastHeading         = null;
+    
     /**
      *  The default inlining pattern.  Currently "*.png"
      */
@@ -1213,6 +1214,7 @@
             throw new InternalWikiException("Illegal heading type "+level);
         }
 
+        
         return el;
     }
 
@@ -1933,6 +1935,8 @@
 
         callHeadingListenerChain( hd );
 
+        m_lastHeading = hd;
+        
         if( el != null ) pushElement(el);
 
         return el;
@@ -2678,6 +2682,7 @@
             }
         }
 
+        closeHeadings();
         popElement("domroot");
     }
 
@@ -2739,10 +2744,10 @@
             //
 
             // FIXME: This is not really very fast
+            
+            closeHeadings();
+              
             popElement("dl"); // Close definition lists.
-            popElement("h2");
-            popElement("h3");
-            popElement("h4");
             if( m_istable )
             {
                 popElement("tr");
@@ -2884,6 +2889,19 @@
         return el != null ? ELEMENT : CHARACTER;
     }
 
+    private void closeHeadings()
+    {
+        if( m_lastHeading != null )
+        {
+            // Add the hash anchor element at the end of the heading
+            addElement( new Element("a").setAttribute( "class","hashlink" ).setAttribute( "href","#"+m_lastHeading.m_titleAnchor ).setText( "#" ) );
+            m_lastHeading = null;
+        }
+        popElement("h2");
+        popElement("h3");
+        popElement("h4");
+    }
+
     /**
      *  Parses the entire document from the Reader given in the constructor or
      *  set by {@link #setInputReader(Reader)}.

Modified: incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/providers/CachingProvider.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/providers/CachingProvider.java?rev=709946&r1=709945&r2=709946&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/providers/CachingProvider.java (original)
+++ incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/providers/CachingProvider.java Sun Nov  2 13:56:04 2008
@@ -853,14 +853,21 @@
         synchronized(this)
         {
             // Clear any cached version of the old page
-            log.debug("Removing page "+from+" from cache");
-            m_cache.removeEntry( from );
-
+            log.debug("Removing from page "+from+" from cache");
+//            m_cache.removeEntry( from );
+            m_cache.putInCache( from, null );
+            m_textCache.putInCache( from, null );
+            m_historyCache.putInCache( from, null );
+            m_negCache.putInCache( from, from );
             // Clear the cache for the to page, if that page already exists
             //if ( m_cache.get( to ) != null )
             //{
-                log.debug("Removing page "+to+" from cache");
-                m_cache.removeEntry( to );
+                log.debug("Removing to page "+to+" from cache");
+//                m_cache.removeEntry( to );
+                m_cache.putInCache( to, null );
+                m_textCache.putInCache( to, null );
+                m_historyCache.putInCache( to, null );
+                m_negCache.putInCache( to, to );
             //}
         }
     }

Modified: incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/ui/WikiJSPFilter.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/ui/WikiJSPFilter.java?rev=709946&r1=709945&r2=709946&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/ui/WikiJSPFilter.java (original)
+++ incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/ui/WikiJSPFilter.java Sun Nov  2 13:56:04 2008
@@ -20,9 +20,7 @@
  */
 package com.ecyrd.jspwiki.ui;
 
-import java.io.CharArrayWriter;
-import java.io.IOException;
-import java.io.PrintWriter;
+import java.io.*;
 
 import javax.servlet.*;
 import javax.servlet.http.HttpServletRequest;
@@ -36,6 +34,7 @@
 import com.ecyrd.jspwiki.event.WikiEventManager;
 import com.ecyrd.jspwiki.event.WikiPageEvent;
 import com.ecyrd.jspwiki.url.DefaultURLConstructor;
+import com.ecyrd.jspwiki.util.UtilJ2eeCompat;
 import com.ecyrd.jspwiki.util.WatchDog;
 
 /**
@@ -69,7 +68,16 @@
  */
 public class WikiJSPFilter extends WikiServletFilter
 {
+    private Boolean m_useOutputStream;
+
     /** {@inheritDoc} */
+    public void init( FilterConfig config ) throws ServletException
+    {
+        super.init( config );
+        ServletContext context = config.getServletContext();
+        m_useOutputStream = UtilJ2eeCompat.useOutputStream( context.getServerInfo() );
+    }
+
     public void doFilter( ServletRequest  request,
                           ServletResponse response,
                           FilterChain     chain )
@@ -81,8 +89,19 @@
             NDC.push( m_engine.getApplicationName()+":"+((HttpServletRequest)request).getRequestURI() );
 
             w.enterState("Filtering for URL "+((HttpServletRequest)request).getRequestURI(), 90 );
-          
-            HttpServletResponseWrapper responseWrapper = new MyServletResponseWrapper( (HttpServletResponse)response );
+            HttpServletResponseWrapper responseWrapper;
+         
+            if( m_useOutputStream )
+            {
+                log.debug( "Using ByteArrayResponseWrapper" );
+                responseWrapper = new ByteArrayResponseWrapper( (HttpServletResponse)response );
+            }
+            else
+            {
+                log.debug( "Using MyServletResponseWrapper" );
+                responseWrapper = new MyServletResponseWrapper( (HttpServletResponse)response );
+                
+            }
         
             // fire PAGE_REQUESTED event
             String pagename = DefaultURLConstructor.parsePageFromURL(
@@ -284,6 +303,75 @@
         }
     }
 
+    /**
+     *  Response wrapper for application servers which do not work with CharArrayWriter
+     *  Currently only OC4J
+     */
+    private static class ByteArrayResponseWrapper
+        extends HttpServletResponseWrapper
+    {
+        private ByteArrayOutputStream m_output;
+        private HttpServletResponse m_response;
+      
+        /** 
+         *  How large the initial buffer should be.  This should be tuned to achieve
+         *  a balance in speed and memory consumption.
+         */
+        private static final int INIT_BUFFER_SIZE = 4096;
+        
+        public ByteArrayResponseWrapper( HttpServletResponse r )
+        {
+            super(r);
+            m_output = new ByteArrayOutputStream( INIT_BUFFER_SIZE );
+            m_response = r;
+        }
+        
+        /**
+         *  Returns a writer for output; this wraps the internal buffer
+         *  into a PrintWriter.
+         */
+        public PrintWriter getWriter()
+        {
+            return new PrintWriter( getOutputStream(), true );
+        }
+
+        public ServletOutputStream getOutputStream()
+        {
+            return new MyServletOutputStream( m_output );
+        }
+
+        static class MyServletOutputStream extends ServletOutputStream
+        {
+            private DataOutputStream m_stream;
+
+            public MyServletOutputStream( OutputStream aOutput )
+            {
+                super();
+                m_stream = new DataOutputStream( aOutput );
+            }
+
+            public void write( int aInt ) throws IOException
+            {
+                m_stream.write( aInt );
+            }
+        }
+        
+        /**
+         *  Returns whatever was written so far into the Writer.
+         */
+        public String toString()
+        {
+            try
+            {
+                return m_output.toString( m_response.getCharacterEncoding() );
+            }
+            catch( UnsupportedEncodingException e )
+            {
+                log.error( ByteArrayResponseWrapper.class + " Unsupported Encoding", e );
+                return null;
+            }
+        }
+    }
 
     // events processing .......................................................
 

Modified: incubator/jspwiki/trunk/src/webdocs/admin/SecurityConfig.jsp
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/webdocs/admin/SecurityConfig.jsp?rev=709946&r1=709945&r2=709946&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/webdocs/admin/SecurityConfig.jsp (original)
+++ incubator/jspwiki/trunk/src/webdocs/admin/SecurityConfig.jsp Sun Nov  2 13:56:04 2008
@@ -125,9 +125,9 @@
 <!-- Notify users which JAAS configs we need to find -->
 <p>JSPWiki wires up its own JAAS to define the authentication process, and does not rely on the JRE configuration. By default, JSPWiki configures its JAAS login stack to use the UserDatabaseLoginModule. You can specify a custom login module by setting the <code>jspwiki.loginModule.class</code> property in <code>jspwiki.properties</code>.</p>
 
-<wiki:Messages div="information" topic="<%=SecurityVerifier.INFO+"java.security.auth.login.config"%>" prefix="Good news: "/>
-<wiki:Messages div="warning" topic="<%=SecurityVerifier.WARNING+"java.security.auth.login.config"%>" prefix="We found some potential problems with your configuration: "/>
-<wiki:Messages div="error" topic="<%=SecurityVerifier.ERROR+"java.security.auth.login.config"%>" prefix="We found some errors with your configuration: " />
+<wiki:Messages div="information" topic='<%=SecurityVerifier.INFO+"java.security.auth.login.config"%>' prefix="Good news: "/>
+<wiki:Messages div="warning" topic='<%=SecurityVerifier.WARNING+"java.security.auth.login.config"%>' prefix="We found some potential problems with your configuration: "/>
+<wiki:Messages div="error" topic='<%=SecurityVerifier.ERROR+"java.security.auth.login.config"%>' prefix="We found some errors with your configuration: " />
 
 <!-- Print JAAS configuration status -->
 <p>The JAAS login configuration is correctly configured if the <code>jspwiki.loginModule.class</code> property specifies

Modified: incubator/jspwiki/trunk/src/webdocs/rss.jsp
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/webdocs/rss.jsp?rev=709946&r1=709945&r2=709946&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/webdocs/rss.jsp (original)
+++ incubator/jspwiki/trunk/src/webdocs/rss.jsp Sun Nov  2 13:56:04 2008
@@ -5,10 +5,13 @@
 <%@ page import="java.text.*" %>
 <%@ page import="com.ecyrd.jspwiki.rss.*" %>
 <%@ page import="com.ecyrd.jspwiki.util.*" %>
+<%@ page import="com.opensymphony.oscache.base.*" %>
 <%@ taglib uri="/WEB-INF/oscache.tld" prefix="oscache" %>
 
 <%!
     Logger log = Logger.getLogger("JSPWiki");
+    Cache m_cache = new Cache( true, false, false, true, 
+                               "com.opensymphony.oscache.base.algorithm.LRUCache", 256 );
 %>
 
 <%
@@ -104,10 +107,37 @@
 
     response.addDateHeader("Last-Modified",latest.getTime());
     response.addHeader("ETag", HttpUtil.createETag(wikipage) );
-%>
-<%-- <oscache:cache time="300"> --%>
-<%
-    out.println(wiki.getRSSGenerator().generateFeed( wikiContext, changed, mode, type ));
-%>
-<%-- </oscache:cache> --%>
-<% w.exitState(); %>
+    
+    //
+    //  Try to get the RSS XML from the cache.  We build the hashkey
+    //  based on the LastModified-date, so whenever it changes, so does
+    //  the hashkey so we don't have to make any special modifications.
+    //
+    //  TODO: Figure out if it would be a good idea to use a disk-based
+    //        cache here.
+    //
+    String hashKey = wikipage.getName()+";"+mode+";"+type+";"+latest.getTime();
+    
+    String rss = "";
+    
+    try
+    {
+        rss = (String)m_cache.getFromCache(hashKey);
+    }
+    catch( NeedsRefreshException e )
+    { 
+        try
+        {
+            rss = wiki.getRSSGenerator().generateFeed( wikiContext, changed, mode, type );
+            m_cache.putInCache(hashKey,rss);
+        }
+        catch( Exception e1 )
+        {
+            m_cache.cancelUpdate(hashKey);            
+        }
+    }
+    
+    out.println(rss);
+    
+    w.exitState(); 
+    %>

Modified: incubator/jspwiki/trunk/src/webdocs/templates/default/jspwiki.css
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/webdocs/templates/default/jspwiki.css?rev=709946&r1=709945&r2=709946&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/webdocs/templates/default/jspwiki.css (original)
+++ incubator/jspwiki/trunk/src/webdocs/templates/default/jspwiki.css Sun Nov  2 13:56:04 2008
@@ -347,7 +347,17 @@
 a.infolink img {
 	display:none;
 }*/
-
+/* hashlink */
+a.hashlink {
+	color:transparent;
+	line-height:1.2;
+	padding:0.25em;
+	text-decoration:none;
+}
+a.hashlink:hover {
+	background-color:#eee;
+	color:blue;
+}
 /* +++ 260 Image styles +++ */
 img {
 	border:none;

Modified: incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/parser/JSPWikiMarkupParserTest.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/parser/JSPWikiMarkupParserTest.java?rev=709946&r1=709945&r2=709946&view=diff
==============================================================================
--- incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/parser/JSPWikiMarkupParserTest.java (original)
+++ incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/parser/JSPWikiMarkupParserTest.java Sun Nov  2 13:56:04 2008
@@ -204,7 +204,7 @@
 
         String src = "!Heading Too\r\nThis should be a [HyperLink#heading too]";
 
-        assertEquals( "<h4 id=\"section-testpage-HeadingToo\">Heading Too</h4>\nThis should be a <a class=\"wikipage\" href=\"/Wiki.jsp?page=HyperLink#section-HyperLink-HeadingToo\">HyperLink#heading too</a>",
+        assertEquals( "<h4 id=\"section-testpage-HeadingToo\">Heading Too<a class=\"hashlink\" href=\"#section-testpage-HeadingToo\">#</a></h4>\nThis should be a <a class=\"wikipage\" href=\"/Wiki.jsp?page=HyperLink#section-HyperLink-HeadingToo\">HyperLink#heading too</a>",
                       translate(src) );
     }
     
@@ -917,7 +917,7 @@
     {
         String src = "\r\n\r\n!Testi\r\n\r\nFoo.";
 
-        assertEquals( "<p />\n<h4 id=\"section-testpage-Testi\">Testi</h4>\n<p>Foo.</p>",
+        assertEquals( "<p />\n<h4 id=\"section-testpage-Testi\">Testi<a class=\"hashlink\" href=\"#section-testpage-Testi\">#</a></h4>\n<p>Foo.</p>",
                       translate(src) );
     }
 
@@ -2017,7 +2017,7 @@
     {
         String src="!Hello\nThis is a test";
 
-        assertEquals( "<h4 id=\"section-testpage-Hello\">Hello</h4>\nThis is a test",
+        assertEquals( "<h4 id=\"section-testpage-Hello\">Hello<a class=\"hashlink\" href=\"#section-testpage-Hello\">#</a></h4>\nThis is a test",
                       translate(src) );
     }
 
@@ -2026,7 +2026,7 @@
     {
         String src="!!Hello, testing 1, 2, 3";
 
-        assertEquals( "<h3 id=\"section-testpage-HelloTesting123\">Hello, testing 1, 2, 3</h3>",
+        assertEquals( "<h3 id=\"section-testpage-HelloTesting123\">Hello, testing 1, 2, 3<a class=\"hashlink\" href=\"#section-testpage-HelloTesting123\">#</a></h3>",
                       translate(src) );
     }
 
@@ -2035,7 +2035,7 @@
     {
         String src="!!!Hello there, how are you doing?";
 
-        assertEquals( "<h2 id=\"section-testpage-HelloThereHowAreYouDoing\">Hello there, how are you doing?</h2>",
+        assertEquals( "<h2 id=\"section-testpage-HelloThereHowAreYouDoing\">Hello there, how are you doing?<a class=\"hashlink\" href=\"#section-testpage-HelloThereHowAreYouDoing\">#</a></h2>",
                       translate(src) );
     }
 
@@ -2044,7 +2044,7 @@
     {
         String src="!!![Hello]";
 
-        assertEquals( "<h2 id=\"section-testpage-Hello\"><a class=\"createpage\" href=\"/Edit.jsp?page=Hello\" title=\"Create &quot;Hello&quot;\">Hello</a></h2>",
+        assertEquals( "<h2 id=\"section-testpage-Hello\"><a class=\"createpage\" href=\"/Edit.jsp?page=Hello\" title=\"Create &quot;Hello&quot;\">Hello</a><a class=\"hashlink\" href=\"#section-testpage-Hello\">#</a></h2>",
                       translate(src) );
     }
 
@@ -2053,7 +2053,7 @@
     {
         String src="!!![Hello|http://www.google.com/]";
 
-        assertEquals( "<h2 id=\"section-testpage-Hello\"><a class=\"external\" href=\"http://www.google.com/\">Hello</a></h2>",
+        assertEquals( "<h2 id=\"section-testpage-Hello\"><a class=\"external\" href=\"http://www.google.com/\">Hello</a><a class=\"hashlink\" href=\"#section-testpage-Hello\">#</a></h2>",
                       translate(src) );
     }
 
@@ -2062,7 +2062,7 @@
     {
         String src="![Hello|http://www.google.com/?p=a&c=d]";
 
-        assertEquals( "<h4 id=\"section-testpage-Hello\"><a class=\"external\" href=\"http://www.google.com/?p=a&amp;c=d\">Hello</a></h4>",
+        assertEquals( "<h4 id=\"section-testpage-Hello\"><a class=\"external\" href=\"http://www.google.com/?p=a&amp;c=d\">Hello</a><a class=\"hashlink\" href=\"#section-testpage-Hello\">#</a></h4>",
                       translate(src) );
     }
 

Modified: incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/plugin/TableOfContentsTest.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/plugin/TableOfContentsTest.java?rev=709946&r1=709945&r2=709946&view=diff
==============================================================================
--- incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/plugin/TableOfContentsTest.java (original)
+++ incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/plugin/TableOfContentsTest.java Sun Nov  2 13:56:04 2008
@@ -60,7 +60,7 @@
                       "<ul>\n"+
                       "<li class=\"toclevel-1\"><a class=\"wikipage\" href=\"/Wiki.jsp?page=Test#section-Test-HeadingBar\">Heading bar</a></li>\n"+
                       "</ul>\n</div>\n</div>\n\n</p>"+
-                      "\n<h2 id=\"section-Test-HeadingBar\">Heading bar</h2>\n",
+                      "\n<h2 id=\"section-Test-HeadingBar\">Heading bar<a class=\"hashlink\" href=\"#section-Test-HeadingBar\">#</a></h2>\n",
                       res );
     }
 
@@ -81,9 +81,9 @@
                 "<li class=\"toclevel-2\"><a class=\"wikipage\" href=\"/Wiki.jsp?page=Test#section-Test-Subheading\">3.1 Subheading</a></li>\n"+
                 "<li class=\"toclevel-3\"><a class=\"wikipage\" href=\"/Wiki.jsp?page=Test#section-Test-Subsubheading\">3.1.1 Subsubheading</a></li>\n"+
                 "</ul>\n</div>\n</div>\n\n</p>"+
-                "\n<h2 id=\"section-Test-HeadingBar\">Heading bar</h2>"+
-                "\n<h3 id=\"section-Test-Subheading\">Subheading</h3>"+
-                "\n<h4 id=\"section-Test-Subsubheading\">Subsubheading</h4>\n";
+                "\n<h2 id=\"section-Test-HeadingBar\">Heading bar<a class=\"hashlink\" href=\"#section-Test-HeadingBar\">#</a></h2>"+
+                "\n<h3 id=\"section-Test-Subheading\">Subheading<a class=\"hashlink\" href=\"#section-Test-Subheading\">#</a></h3>"+
+                "\n<h4 id=\"section-Test-Subsubheading\">Subsubheading<a class=\"hashlink\" href=\"#section-Test-Subsubheading\">#</a></h4>\n";
                 
         assertEquals(expecting,
                 res );
@@ -111,14 +111,14 @@
         "<li class=\"toclevel-1\"><a class=\"wikipage\" href=\"/Wiki.jsp?page=Test#section-Test-Heading\">4 Heading</a></li>\n"+
         "<li class=\"toclevel-2\"><a class=\"wikipage\" href=\"/Wiki.jsp?page=Test#section-Test-Subheading3\">4.1 Subheading3</a></li>\n"+
         "</ul>\n</div>\n</div>\n\n</p>"+
-        "\n<h2 id=\"section-Test-HeadingBar\">Heading bar</h2>"+
-        "\n<h3 id=\"section-Test-Subheading\">Subheading</h3>"+
-        "\n<h4 id=\"section-Test-Subsubheading\">Subsubheading</h4>"+
-        "\n<h4 id=\"section-Test-Subsubheading2\">Subsubheading2</h4>"+
-        "\n<h3 id=\"section-Test-Subheading2\">Subheading2</h3>"+
-        "\n<h4 id=\"section-Test-Subsubheading3\">Subsubheading3</h4>"+
-        "\n<h2 id=\"section-Test-Heading\">Heading</h2>"+
-        "\n<h3 id=\"section-Test-Subheading3\">Subheading3</h3>\n";
+        "\n<h2 id=\"section-Test-HeadingBar\">Heading bar<a class=\"hashlink\" href=\"#section-Test-HeadingBar\">#</a></h2>"+
+        "\n<h3 id=\"section-Test-Subheading\">Subheading<a class=\"hashlink\" href=\"#section-Test-Subheading\">#</a></h3>"+
+        "\n<h4 id=\"section-Test-Subsubheading\">Subsubheading<a class=\"hashlink\" href=\"#section-Test-Subsubheading\">#</a></h4>"+
+        "\n<h4 id=\"section-Test-Subsubheading2\">Subsubheading2<a class=\"hashlink\" href=\"#section-Test-Subsubheading2\">#</a></h4>"+
+        "\n<h3 id=\"section-Test-Subheading2\">Subheading2<a class=\"hashlink\" href=\"#section-Test-Subheading2\">#</a></h3>"+
+        "\n<h4 id=\"section-Test-Subsubheading3\">Subsubheading3<a class=\"hashlink\" href=\"#section-Test-Subsubheading3\">#</a></h4>"+
+        "\n<h2 id=\"section-Test-Heading\">Heading<a class=\"hashlink\" href=\"#section-Test-Heading\">#</a></h2>"+
+        "\n<h3 id=\"section-Test-Subheading3\">Subheading3<a class=\"hashlink\" href=\"#section-Test-Subheading3\">#</a></h3>\n";
         
         assertEquals(expecting,
                 res );
@@ -147,15 +147,15 @@
         "<li class=\"toclevel-1\"><a class=\"wikipage\" href=\"/Wiki.jsp?page=Test#section-Test-Heading\">5 Heading</a></li>\n"+
         "<li class=\"toclevel-2\"><a class=\"wikipage\" href=\"/Wiki.jsp?page=Test#section-Test-Subheading3\">5.1 Subheading3</a></li>\n"+
         "</ul>\n</div>\n</div>\n\n</p>"+
-        "\n<h3 id=\"section-Test-Subheading0\">Subheading0</h3>"+
-        "\n<h2 id=\"section-Test-HeadingBar\">Heading bar</h2>"+
-        "\n<h3 id=\"section-Test-Subheading\">Subheading</h3>"+
-        "\n<h4 id=\"section-Test-Subsubheading\">Subsubheading</h4>"+
-        "\n<h4 id=\"section-Test-Subsubheading2\">Subsubheading2</h4>"+
-        "\n<h3 id=\"section-Test-Subheading2\">Subheading2</h3>"+
-        "\n<h4 id=\"section-Test-Subsubheading3\">Subsubheading3</h4>"+
-        "\n<h2 id=\"section-Test-Heading\">Heading</h2>"+
-        "\n<h3 id=\"section-Test-Subheading3\">Subheading3</h3>\n";
+        "\n<h3 id=\"section-Test-Subheading0\">Subheading0<a class=\"hashlink\" href=\"#section-Test-Subheading0\">#</a></h3>"+
+        "\n<h2 id=\"section-Test-HeadingBar\">Heading bar<a class=\"hashlink\" href=\"#section-Test-HeadingBar\">#</a></h2>"+
+        "\n<h3 id=\"section-Test-Subheading\">Subheading<a class=\"hashlink\" href=\"#section-Test-Subheading\">#</a></h3>"+
+        "\n<h4 id=\"section-Test-Subsubheading\">Subsubheading<a class=\"hashlink\" href=\"#section-Test-Subsubheading\">#</a></h4>"+
+        "\n<h4 id=\"section-Test-Subsubheading2\">Subsubheading2<a class=\"hashlink\" href=\"#section-Test-Subsubheading2\">#</a></h4>"+
+        "\n<h3 id=\"section-Test-Subheading2\">Subheading2<a class=\"hashlink\" href=\"#section-Test-Subheading2\">#</a></h3>"+
+        "\n<h4 id=\"section-Test-Subsubheading3\">Subsubheading3<a class=\"hashlink\" href=\"#section-Test-Subsubheading3\">#</a></h4>"+
+        "\n<h2 id=\"section-Test-Heading\">Heading<a class=\"hashlink\" href=\"#section-Test-Heading\">#</a></h2>"+
+        "\n<h3 id=\"section-Test-Subheading3\">Subheading3<a class=\"hashlink\" href=\"#section-Test-Subheading3\">#</a></h3>\n";
         
         assertEquals(expecting,
                      res );
@@ -178,9 +178,9 @@
         "<li class=\"toclevel-2\"><a class=\"wikipage\" href=\"/Wiki.jsp?page=Test#section-Test-Subheading\">FooBar-3.1 Subheading</a></li>\n"+
         "<li class=\"toclevel-3\"><a class=\"wikipage\" href=\"/Wiki.jsp?page=Test#section-Test-Subsubheading\">FooBar-3.1.1 Subsubheading</a></li>\n"+
         "</ul>\n</div>\n</div>\n\n</p>"+
-        "\n<h2 id=\"section-Test-HeadingBar\">Heading bar</h2>"+
-        "\n<h3 id=\"section-Test-Subheading\">Subheading</h3>"+
-        "\n<h4 id=\"section-Test-Subsubheading\">Subsubheading</h4>\n";
+        "\n<h2 id=\"section-Test-HeadingBar\">Heading bar<a class=\"hashlink\" href=\"#section-Test-HeadingBar\">#</a></h2>"+
+        "\n<h3 id=\"section-Test-Subheading\">Subheading<a class=\"hashlink\" href=\"#section-Test-Subheading\">#</a></h3>"+
+        "\n<h4 id=\"section-Test-Subsubheading\">Subsubheading<a class=\"hashlink\" href=\"#section-Test-Subsubheading\">#</a></h4>\n";
         
         assertEquals(expecting,
                 res );

Modified: incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/render/CreoleRendererTest.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/render/CreoleRendererTest.java?rev=709946&r1=709945&r2=709946&view=diff
==============================================================================
--- incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/render/CreoleRendererTest.java (original)
+++ incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/render/CreoleRendererTest.java Sun Nov  2 13:56:04 2008
@@ -112,6 +112,8 @@
         
         assertEquals( "<<Counter 1>> <<Counter 2>>", render(src) );
     }
+    /*
+    // FIXME: These shouldn't really be failing.
     public void testHeading1() throws Exception
     {
         String src = "!!!Hello";
@@ -132,7 +134,7 @@
         
         assertEquals( "==== Hello ====", render(src) );
     }
-
+*/
     public void testExternalAnchor() throws Exception
     {
         String src = "[http://www.jspwiki.org]";

Modified: incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/util/AllTests.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/util/AllTests.java?rev=709946&r1=709945&r2=709946&view=diff
==============================================================================
--- incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/util/AllTests.java (original)
+++ incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/util/AllTests.java Sun Nov  2 13:56:04 2008
@@ -23,6 +23,7 @@
         suite.addTest( SerializerTest.suite() );
         suite.addTest( TextUtilTest.suite() );
         suite.addTest( TimedCounterListTest.suite() );
+        suite.addTest( UtilJ2eeCompatTest.suite() );
         
         return suite;
     }