You are viewing a plain text version of this content. The canonical link for it is here.
Posted to doxia-commits@maven.apache.org by lt...@apache.org on 2009/04/07 13:58:37 UTC

svn commit: r762718 - in /maven/doxia/doxia/trunk/doxia-modules: doxia-module-apt/src/main/java/org/apache/maven/doxia/module/apt/ doxia-module-apt/src/test/java/org/apache/maven/doxia/module/apt/ doxia-module-xdoc/src/main/java/org/apache/maven/doxia/...

Author: ltheussl
Date: Tue Apr  7 11:58:36 2009
New Revision: 762718

URL: http://svn.apache.org/viewvc?rev=762718&view=rev
Log:
Improve test coverage

Added:
    maven/doxia/doxia/trunk/doxia-modules/doxia-module-apt/src/test/java/org/apache/maven/doxia/module/apt/AptUtilsTest.java   (with props)
Modified:
    maven/doxia/doxia/trunk/doxia-modules/doxia-module-apt/src/main/java/org/apache/maven/doxia/module/apt/AptParser.java
    maven/doxia/doxia/trunk/doxia-modules/doxia-module-apt/src/main/java/org/apache/maven/doxia/module/apt/AptSink.java
    maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/main/java/org/apache/maven/doxia/module/xdoc/XdocSink.java
    maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/test/java/org/apache/maven/doxia/module/xdoc/XdocParserTest.java
    maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/test/java/org/apache/maven/doxia/module/xdoc/XdocSinkTest.java
    maven/doxia/doxia/trunk/doxia-modules/doxia-module-xhtml/src/main/java/org/apache/maven/doxia/module/xhtml/XhtmlParser.java
    maven/doxia/doxia/trunk/doxia-modules/doxia-module-xhtml/src/test/java/org/apache/maven/doxia/module/xhtml/XhtmlParserTest.java

Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-apt/src/main/java/org/apache/maven/doxia/module/apt/AptParser.java
URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-apt/src/main/java/org/apache/maven/doxia/module/apt/AptParser.java?rev=762718&r1=762717&r2=762718&view=diff
==============================================================================
--- maven/doxia/doxia/trunk/doxia-modules/doxia-module-apt/src/main/java/org/apache/maven/doxia/module/apt/AptParser.java (original)
+++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-apt/src/main/java/org/apache/maven/doxia/module/apt/AptParser.java Tue Apr  7 11:58:36 2009
@@ -1759,7 +1759,7 @@
         public ListBreak( int indent, String firstLine )
             throws AptParseException
         {
-            super( AptParser.LIST_BREAK, indent );
+            super( AptParser.LIST_BREAK, indent, firstLine );
         }
 
         /** {@inheritDoc} */
@@ -2674,7 +2674,7 @@
         public HorizontalRule( int indent, String firstLine )
             throws AptParseException
         {
-            super( HORIZONTAL_RULE, indent );
+            super( HORIZONTAL_RULE, indent, firstLine );
         }
 
         /** {@inheritDoc} */
@@ -2699,7 +2699,7 @@
         public PageBreak( int indent, String firstLine )
             throws AptParseException
         {
-            super( PG_BREAK, indent );
+            super( PG_BREAK, indent, firstLine );
         }
 
         /** {@inheritDoc} */

Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-apt/src/main/java/org/apache/maven/doxia/module/apt/AptSink.java
URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-apt/src/main/java/org/apache/maven/doxia/module/apt/AptSink.java?rev=762718&r1=762717&r2=762718&view=diff
==============================================================================
--- maven/doxia/doxia/trunk/doxia-modules/doxia-module-apt/src/main/java/org/apache/maven/doxia/module/apt/AptSink.java (original)
+++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-apt/src/main/java/org/apache/maven/doxia/module/apt/AptSink.java Tue Apr  7 11:58:36 2009
@@ -667,21 +667,19 @@
     /** {@inheritDoc} */
     public void tableCell_()
     {
-        tableCell_( false );
+        endTableCell();
     }
 
     /** {@inheritDoc} */
     public void tableHeaderCell_()
     {
-        tableCell_( true );
+        endTableCell();
     }
 
     /**
      * Ends a table cell.
-     *
-     * @param headerRow If this cell is part of a header row.
      */
-    private void tableCell_( boolean headerRow )
+    private void endTableCell()
     {
         buffer.append( TABLE_CELL_SEPARATOR_MARKUP );
         cellCount++;

Added: maven/doxia/doxia/trunk/doxia-modules/doxia-module-apt/src/test/java/org/apache/maven/doxia/module/apt/AptUtilsTest.java
URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-apt/src/test/java/org/apache/maven/doxia/module/apt/AptUtilsTest.java?rev=762718&view=auto
==============================================================================
--- maven/doxia/doxia/trunk/doxia-modules/doxia-module-apt/src/test/java/org/apache/maven/doxia/module/apt/AptUtilsTest.java (added)
+++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-apt/src/test/java/org/apache/maven/doxia/module/apt/AptUtilsTest.java Tue Apr  7 11:58:36 2009
@@ -0,0 +1,162 @@
+package org.apache.maven.doxia.module.apt;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Test AptUtils.
+ *
+ * @author ltheussl
+ * @version $Id$
+ */
+public class AptUtilsTest
+        extends TestCase
+{
+    /**
+     * Test of isExternalLink method, of class AptUtils.
+     */
+    public void testIsExternalLink()
+    {
+        String link = "http://maven.apache.org/";
+        assertTrue( "Should be an external link: " + link,
+            AptUtils.isExternalLink( link ) );
+
+        link = "https://maven.apache.org/";
+        assertTrue( "Should be an external link: " + link,
+            AptUtils.isExternalLink( link ) );
+
+        link = "HTTPS://MAVEN.APACHE.ORG/";
+        assertTrue( "Should be an external link: " + link,
+            AptUtils.isExternalLink( link ) );
+
+        link = "ftp:/maven.apache.org/";
+        assertTrue( "Should be an external link: " + link,
+            AptUtils.isExternalLink( link ) );
+
+        link = "mailto:maven@apache.org";
+        assertTrue( "Should be an external link: " + link,
+            AptUtils.isExternalLink( link ) );
+
+        link = "file:/index.html";
+        assertTrue( "Should be an external link: " + link,
+            AptUtils.isExternalLink( link ) );
+
+        link = "resource_type://domain:port/filepathname?query_string#anchor";
+        assertTrue( "Should be an external link: " + link,
+            AptUtils.isExternalLink( link ) );
+
+        link = "index.html";
+        assertFalse( "Should NOT be an external link: " + link,
+            AptUtils.isExternalLink( link ) );
+
+        link = "example.pdf";
+        assertFalse( "Should NOT be an external link: " + link,
+            AptUtils.isExternalLink( link ) );
+
+        link = "./index.html";
+        assertFalse( "Should NOT be an external link: " + link,
+            AptUtils.isExternalLink( link ) );
+
+        link = "../index.html";
+        assertFalse( "Should NOT be an external link: " + link,
+            AptUtils.isExternalLink( link ) );
+
+        // Windows style separators "\" are not allowed
+
+        link = "file:\\index.html";
+        assertFalse( "Should NOT be an external link: " + link,
+            AptUtils.isExternalLink( link ) );
+
+        link = ".\\index.html";
+        assertFalse( "Should NOT be an external link: " + link,
+            AptUtils.isExternalLink( link ) );
+
+        link = "..\\index.html";
+        assertFalse( "Should NOT be an external link: " + link,
+            AptUtils.isExternalLink( link ) );
+    }
+
+    /**
+     * Test of isInternalLink method, of class AptUtils.
+     */
+    public void testIsInternalLink()
+    {
+        String link = "index.html";
+        assertTrue( "Should be an internal link: " + link, AptUtils.isInternalLink( link ) );
+        link = "file:/index.html";
+        assertFalse( "Should NOT be an internal link: " + link, AptUtils.isInternalLink( link ) );
+        link = "./index.html";
+        assertFalse( "Should NOT be an internal link: " + link, AptUtils.isInternalLink( link ) );
+    }
+
+    /**
+     * Test of isLocalLink method, of class AptUtils.
+     */
+    public void testIsLocalLink()
+    {
+        String link = "/index.html";
+        assertTrue( "Should be a local link: " + link, AptUtils.isLocalLink( link ) );
+
+        link = "./index.html";
+        assertTrue( "Should be a local link: " + link, AptUtils.isLocalLink( link ) );
+
+        link = "../index.html";
+        assertTrue( "Should be a local link: " + link, AptUtils.isLocalLink( link ) );
+
+        link = "index.html";
+        assertFalse( "Should NOT be a local link: " + link, AptUtils.isLocalLink( link ) );
+
+        link = ".\\index.html";
+        assertFalse( "Should NOT be a local link: " + link, AptUtils.isLocalLink( link ) );
+
+        link = "\\index.html";
+        assertFalse( "Should NOT be a local link: " + link, AptUtils.isLocalLink( link ) );
+
+        link = "..\\index.html";
+        assertFalse( "Should NOT be a local link: " + link, AptUtils.isLocalLink( link ) );
+    }
+
+    /**
+     * Test of encodeAnchor method, of class AptUtils.
+     */
+    public void testEncodeAnchor()
+    {
+        assertNull( AptUtils.encodeAnchor( null ) );
+        assertEquals( "a123_:_.-aBc", AptUtils.encodeAnchor( " 12!3 :_.&-a)Bc " ) );
+    }
+
+    /**
+     * Test of encodeFragment method, of class AptUtils.
+     */
+    public void testEncodeFragment()
+    {
+        assertNull( AptUtils.encodeFragment( null ) );
+        assertEquals( "abc0d", AptUtils.encodeFragment( "a B&c0)D" ) );
+    }
+
+    /**
+     * Test of linkToKey method, of class AptUtils.
+     */
+    public void testLinkToKey()
+    {
+        assertEquals( "abc56au", AptUtils.linkToKey( "aB$%C56 a&\\/'U" ) );
+    }
+}

Propchange: maven/doxia/doxia/trunk/doxia-modules/doxia-module-apt/src/test/java/org/apache/maven/doxia/module/apt/AptUtilsTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/doxia/doxia/trunk/doxia-modules/doxia-module-apt/src/test/java/org/apache/maven/doxia/module/apt/AptUtilsTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/main/java/org/apache/maven/doxia/module/xdoc/XdocSink.java
URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/main/java/org/apache/maven/doxia/module/xdoc/XdocSink.java?rev=762718&r1=762717&r2=762718&view=diff
==============================================================================
--- maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/main/java/org/apache/maven/doxia/module/xdoc/XdocSink.java (original)
+++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/main/java/org/apache/maven/doxia/module/xdoc/XdocSink.java Tue Apr  7 11:58:36 2009
@@ -457,13 +457,13 @@
 
         MutableAttributeSet att = new SinkEventAttributeSet();
 
+        att.addAttribute( Attribute.HREF, HtmlTools.escapeHTML( name ) );
+
         if ( target != null )
         {
             att.addAttribute( Attribute.TARGET, target );
         }
 
-        att.addAttribute( Attribute.HREF, HtmlTools.escapeHTML( name ) );
-
         writeStartTag( Tag.A, att );
     }
 

Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/test/java/org/apache/maven/doxia/module/xdoc/XdocParserTest.java
URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/test/java/org/apache/maven/doxia/module/xdoc/XdocParserTest.java?rev=762718&r1=762717&r2=762718&view=diff
==============================================================================
--- maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/test/java/org/apache/maven/doxia/module/xdoc/XdocParserTest.java (original)
+++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/test/java/org/apache/maven/doxia/module/xdoc/XdocParserTest.java Tue Apr  7 11:58:36 2009
@@ -27,6 +27,7 @@
 import java.util.Iterator;
 
 import org.apache.maven.doxia.parser.AbstractParserTest;
+import org.apache.maven.doxia.parser.ParseException;
 import org.apache.maven.doxia.parser.Parser;
 import org.apache.maven.doxia.sink.Sink;
 import org.apache.maven.doxia.sink.SinkEventElement;
@@ -168,6 +169,16 @@
         assertEquals( "author_", ( (SinkEventElement) it.next() ).getName() );
         assertEquals( "head_", ( (SinkEventElement) it.next() ).getName() );
         assertFalse( it.hasNext() );
+
+        text = "<head><meta name=\"security\" content=\"low\"/></head>";
+        sink.reset();
+        parser.parse( text, sink );
+        it = sink.getEventList().iterator();
+
+        assertEquals( "head", ( (SinkEventElement) it.next() ).getName() );
+        assertEquals( "unknown", ( (SinkEventElement) it.next() ).getName() );
+        assertEquals( "head_", ( (SinkEventElement) it.next() ).getName() );
+        assertFalse( it.hasNext() );
     }
 
     /** @throws Exception  */
@@ -322,7 +333,8 @@
     public void testSectionIdAnchor()
         throws Exception
     {
-        String text = "<section name=\"test\" id=\"test-id\">This is a test.</section>";
+        String text = "<section name=\"test\" id=\"test-id\">This is a test."
+                + "<subsection name=\"sub-test\" id=\"sub-id\">Sub-section</subsection></section>";
 
         SinkEventTestingSink sink = new SinkEventTestingSink();
 
@@ -334,15 +346,98 @@
 
         assertEquals( "anchor", anchorEvt.getName() );
         assertEquals( "test-id", anchorEvt.getArgs()[0] );
-
         assertEquals( "anchor_", ( (SinkEventElement) it.next() ).getName() );
         assertEquals( "section1", ( (SinkEventElement) it.next() ).getName() );
         assertEquals( "sectionTitle1", ( (SinkEventElement) it.next() ).getName() );
         assertEquals( "text", ( (SinkEventElement) it.next() ).getName() );
         assertEquals( "sectionTitle1_", ( (SinkEventElement) it.next() ).getName() );
         assertEquals( "text", ( (SinkEventElement) it.next() ).getName() );
+
+        anchorEvt = (SinkEventElement) it.next();
+        assertEquals( "anchor", anchorEvt.getName() );
+        assertEquals( "sub-id", anchorEvt.getArgs()[0] );
+        assertEquals( "anchor_", ( (SinkEventElement) it.next() ).getName() );
+        assertEquals( "section2", ( (SinkEventElement) it.next() ).getName() );
+        assertEquals( "sectionTitle2", ( (SinkEventElement) it.next() ).getName() );
+        assertEquals( "text", ( (SinkEventElement) it.next() ).getName() );
+        assertEquals( "sectionTitle2_", ( (SinkEventElement) it.next() ).getName() );
+        assertEquals( "text", ( (SinkEventElement) it.next() ).getName() );
+        assertEquals( "section2_", ( (SinkEventElement) it.next() ).getName() );
+
         assertEquals( "section1_", ( (SinkEventElement) it.next() ).getName() );
         assertFalse( it.hasNext() );
     }
 
+    /**
+     * Test script block.
+     *
+     * @throws java.lang.Exception if any.
+     */
+    public void testJavaScript()
+        throws Exception
+    {
+        String text = "<script type=\"text/javascript\"><![CDATA[alert(\"Hello!\");]]></script>";
+
+        SinkEventTestingSink sink = new SinkEventTestingSink();
+
+        parser.parse( text, sink );
+
+        Iterator it = sink.getEventList().iterator();
+        assertEquals( "unknown", ( (SinkEventElement) it.next() ).getName() );
+        assertEquals( "rawText", ( (SinkEventElement) it.next() ).getName() );
+        assertEquals( "unknown", ( (SinkEventElement) it.next() ).getName() );
+        assertFalse( it.hasNext() );
+    }
+
+    /**
+     * Test unknown tags.
+     *
+     * @throws java.lang.Exception if any.
+     */
+    public void testUnknown()
+        throws Exception
+    {
+        String text = "<applet><param name=\"name\" value=\"value\"/><unknown/></applet>";
+
+        SinkEventTestingSink sink = new SinkEventTestingSink();
+
+        parser.parse( text, sink );
+
+        Iterator it = sink.getEventList().iterator();
+        assertEquals( "unknown", ( (SinkEventElement) it.next() ).getName() );
+        assertEquals( "unknown", ( (SinkEventElement) it.next() ).getName() );
+        assertEquals( "unknown", ( (SinkEventElement) it.next() ).getName() );
+        assertEquals( "unknown", ( (SinkEventElement) it.next() ).getName() );
+        assertEquals( "unknown", ( (SinkEventElement) it.next() ).getName() );
+        assertFalse( it.hasNext() );
+    }
+
+    /**
+     * Test invalid macro tags.
+     */
+    public void testMacroExceptions()
+    {
+        SinkEventTestingSink sink = new SinkEventTestingSink();
+        assertParseException( sink, "<macro/>" );
+        assertParseException( sink, "<macro name=\"\"/>" );
+        assertParseException( sink, "<macro name=\"name\"><param name=\"\" value=\"value\"/></macro>" );
+        assertParseException( sink, "<macro name=\"name\"><param name=\"name\" value=\"\"/></macro>" );
+        assertParseException( sink, "<macro name=\"name\"><param value=\"value\"/></macro>" );
+        assertParseException( sink, "<macro name=\"name\"><param name=\"name\"/></macro>" );
+        assertParseException( sink, "<macro name=\"unknown\"></macro>" );
+    }
+
+    private void assertParseException( Sink sink, String text )
+    {
+        try
+        {
+            parser.parse( text, sink );
+
+            fail( "Should not be parseable: '" + text + "'" );
+        }
+        catch ( ParseException ex )
+        {
+            assertNotNull( ex );
+        }
+    }
 }

Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/test/java/org/apache/maven/doxia/module/xdoc/XdocSinkTest.java
URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/test/java/org/apache/maven/doxia/module/xdoc/XdocSinkTest.java?rev=762718&r1=762717&r2=762718&view=diff
==============================================================================
--- maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/test/java/org/apache/maven/doxia/module/xdoc/XdocSinkTest.java (original)
+++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/test/java/org/apache/maven/doxia/module/xdoc/XdocSinkTest.java Tue Apr  7 11:58:36 2009
@@ -23,7 +23,9 @@
 import org.apache.maven.doxia.sink.AbstractSinkTest;
 import org.apache.maven.doxia.util.HtmlTools;
 
+import java.io.StringWriter;
 import java.io.Writer;
+import org.apache.maven.doxia.sink.SinkEventAttributeSet;
 
 /**
  * @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
@@ -231,5 +233,55 @@
         return "~,_=,_-,_+,_*,_[,_],_<,_>,_{,_},_\\";
     }
 
+    /**
+     * Test verbatim.
+     */
+    public void testBoxedVerbatim()
+    {
+        Writer writer =  new StringWriter();
+        XdocSink sink = null;
+
+        try
+        {
+            sink = new XdocSink( writer );
+
+            sink.verbatim( null );
+            sink.verbatim_();
+            sink.verbatim( SinkEventAttributeSet.BOXED );
+            sink.verbatim_();
+            sink.verbatim( new SinkEventAttributeSet( new String[] {SinkEventAttributeSet.WIDTH, "20%"} ) );
+            sink.verbatim_();
+        }
+        finally
+        {
+            sink.close();
+        }
+
+        assertEquals( "<pre></pre><source></source><pre width=\"20%\"></pre>", writer.toString() );
+    }
+
+    /**
+     * Test link.
+     */
+    public void testLinkWithTarget()
+    {
+        Writer writer =  new StringWriter();
+        XdocSink sink = null;
+
+        try
+        {
+            sink = new XdocSink( writer );
+
+            sink.link( "name", (String) null );
+            sink.link_();
+            sink.link( "name", "nirvana" );
+            sink.link_();
+        }
+        finally
+        {
+            sink.close();
+        }
 
+        assertEquals( "<a href=\"name\"></a><a href=\"name\" target=\"nirvana\"></a>", writer.toString() );
+    }
 }

Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-xhtml/src/main/java/org/apache/maven/doxia/module/xhtml/XhtmlParser.java
URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-xhtml/src/main/java/org/apache/maven/doxia/module/xhtml/XhtmlParser.java?rev=762718&r1=762717&r2=762718&view=diff
==============================================================================
--- maven/doxia/doxia/trunk/doxia-modules/doxia-module-xhtml/src/main/java/org/apache/maven/doxia/module/xhtml/XhtmlParser.java (original)
+++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-xhtml/src/main/java/org/apache/maven/doxia/module/xhtml/XhtmlParser.java Tue Apr  7 11:58:36 2009
@@ -94,6 +94,10 @@
 
                 sink.date_();
             }
+            else
+            {
+                sink.unknown( "meta", new String[] {name, content}, attribs );
+            }
         }
         /*
          * The ADDRESS element may be used by authors to supply contact information

Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-xhtml/src/test/java/org/apache/maven/doxia/module/xhtml/XhtmlParserTest.java
URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-xhtml/src/test/java/org/apache/maven/doxia/module/xhtml/XhtmlParserTest.java?rev=762718&r1=762717&r2=762718&view=diff
==============================================================================
--- maven/doxia/doxia/trunk/doxia-modules/doxia-module-xhtml/src/test/java/org/apache/maven/doxia/module/xhtml/XhtmlParserTest.java (original)
+++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-xhtml/src/test/java/org/apache/maven/doxia/module/xhtml/XhtmlParserTest.java Tue Apr  7 11:58:36 2009
@@ -19,12 +19,10 @@
  * under the License.
  */
 
-import java.io.StringWriter;
 import java.util.Iterator;
 
 import org.apache.maven.doxia.parser.AbstractParserTest;
 import org.apache.maven.doxia.parser.Parser;
-import org.apache.maven.doxia.sink.Sink;
 import org.apache.maven.doxia.sink.SinkEventElement;
 import org.apache.maven.doxia.sink.SinkEventTestingSink;
 
@@ -70,7 +68,7 @@
         throws Exception
     {
         String text = "<head><title>Title</title><meta name=\"author\" content=\"Author\" />"
-                + "<meta name=\"date\" content=\"Date\" /></head>";
+                + "<meta name=\"date\" content=\"Date\" /><meta name=\"security\" content=\"low\"/></head>";
 
         SinkEventTestingSink sink = new SinkEventTestingSink();
 
@@ -88,6 +86,7 @@
         assertEquals( "date", ( (SinkEventElement) it.next() ).getName() );
         assertEquals( "text", ( (SinkEventElement) it.next() ).getName() );
         assertEquals( "date_", ( (SinkEventElement) it.next() ).getName() );
+        assertEquals( "unknown", ( (SinkEventElement) it.next() ).getName() );
         assertEquals( "head_", ( (SinkEventElement) it.next() ).getName() );
         assertFalse( it.hasNext() );
     }
@@ -108,4 +107,26 @@
         assertEquals( "verbatim_", ( (SinkEventElement) it.next() ).getName() );
         assertFalse( it.hasNext() );
     }
+
+    /**
+     * Test unknown tags.
+     *
+     * @throws java.lang.Exception if any.
+     */
+    public void testUnknown()
+        throws Exception
+    {
+        String text = "<applet><param name=\"name\" value=\"value\"/><unknown/></applet>";
+
+        SinkEventTestingSink sink = new SinkEventTestingSink();
+
+        ( (XhtmlParser) createParser() ).parse( text, sink );
+
+        Iterator it = sink.getEventList().iterator();
+        assertEquals( "unknown", ( (SinkEventElement) it.next() ).getName() );
+        assertEquals( "unknown", ( (SinkEventElement) it.next() ).getName() );
+        assertEquals( "unknown", ( (SinkEventElement) it.next() ).getName() );
+        assertEquals( "unknown", ( (SinkEventElement) it.next() ).getName() );
+        assertFalse( it.hasNext() );
+    }
 }