| package org.apache.maven.doxia.module.docbook; |
| |
| /* |
| * 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 java.io.IOException; |
| import java.io.Reader; |
| import java.io.Writer; |
| |
| import java.util.Iterator; |
| |
| import org.apache.maven.doxia.parser.AbstractParserTest; |
| import org.apache.maven.doxia.parser.Parser; |
| import org.apache.maven.doxia.parser.ParseException; |
| import org.apache.maven.doxia.sink.Sink; |
| import org.apache.maven.doxia.sink.impl.SinkEventElement; |
| import org.apache.maven.doxia.sink.impl.SinkEventTestingSink; |
| import org.codehaus.plexus.util.IOUtil; |
| |
| /** |
| * @author <a href="mailto:lars@trieloff.net">Lars Trieloff</a> |
| * @version $Id$ |
| */ |
| public class DocBookParserTest extends AbstractParserTest |
| { |
| /** The parser to test. */ |
| private DocBookParser parser; |
| |
| @Override |
| protected void setUp() |
| throws Exception |
| { |
| super.setUp(); |
| |
| parser = lookup( Parser.ROLE, "docbook" ); |
| } |
| |
| /** {@inheritDoc} */ |
| protected Parser createParser() |
| { |
| return parser; |
| } |
| |
| /** {@inheritDoc} */ |
| protected String outputExtension() |
| { |
| return "xml"; |
| } |
| |
| /** |
| * Parses the test document test.xml and re-emits it into test.docbook. |
| * |
| * @throws IOException if something goes wrong |
| * @throws ParseException if something goes wrong |
| */ |
| public void testTestDocument() |
| throws IOException, ParseException |
| { |
| Writer writer = null; |
| Reader reader = null; |
| |
| try |
| { |
| writer = getTestWriter( "test", "docbook" ); |
| reader = getTestReader( "test" ); |
| |
| Sink sink = new DocBookSink( writer ); |
| |
| createParser().parse( reader, sink ); |
| |
| writer = getTestWriter( "sdocbook_full", "docbook" ); |
| reader = getTestReader( "sdocbook_full" ); |
| |
| sink = new DocBookSink( writer ); |
| |
| createParser().parse( reader, sink ); |
| } |
| finally |
| { |
| IOUtil.close( reader ); |
| IOUtil.close( writer ); |
| } |
| } |
| |
| /** @throws Exception */ |
| public void testSignificantWhiteSpace() |
| throws Exception |
| { |
| // NOTE significant white space |
| String text = "<para><command>word</command> <emphasis>word</emphasis></para>"; |
| |
| SinkEventTestingSink sink = new SinkEventTestingSink(); |
| |
| parser.parse( text, sink ); |
| |
| Iterator<SinkEventElement> it = sink.getEventList().iterator(); |
| |
| assertEquals( "paragraph", ( it.next() ).getName() ); |
| assertEquals( "bold", ( it.next() ).getName() ); |
| assertEquals( "text", ( it.next() ).getName() ); |
| assertEquals( "bold_", ( it.next() ).getName() ); |
| |
| SinkEventElement el = it.next(); |
| assertEquals( "text", el.getName() ); |
| assertEquals( " ", (String) el.getArgs()[0] ); |
| |
| assertEquals( "italic", ( it.next() ).getName() ); |
| assertEquals( "text", ( it.next() ).getName() ); |
| assertEquals( "italic_", ( it.next() ).getName() ); |
| assertEquals( "paragraph_", ( it.next() ).getName() ); |
| assertFalse( it.hasNext() ); |
| |
| |
| // same test with EOL |
| text = "<para><command>word</command>" + EOL + "<emphasis>word</emphasis></para>"; |
| |
| sink.reset(); |
| parser.parse( text, sink ); |
| it = sink.getEventList().iterator(); |
| |
| assertEquals( "paragraph", ( it.next() ).getName() ); |
| assertEquals( "bold", ( it.next() ).getName() ); |
| assertEquals( "text", ( it.next() ).getName() ); |
| assertEquals( "bold_", ( it.next() ).getName() ); |
| |
| el = it.next(); |
| assertEquals( "text", el.getName() ); |
| assertEquals( EOL, (String) el.getArgs()[0] ); |
| |
| assertEquals( "italic", ( it.next() ).getName() ); |
| assertEquals( "text", ( it.next() ).getName() ); |
| assertEquals( "italic_", ( it.next() ).getName() ); |
| assertEquals( "paragraph_", ( it.next() ).getName() ); |
| assertFalse( it.hasNext() ); |
| } |
| |
| /** @throws Exception */ |
| public void testIds() |
| throws Exception |
| { |
| final String text = "<article id=\"article\"><section id=\"section\">" |
| + "<title id=\"title\">Title</title><para id=\"para\">Paragraph</para></section></article>"; |
| |
| final SinkEventTestingSink sink = new SinkEventTestingSink(); |
| parser.parse( text, sink ); |
| Iterator<SinkEventElement> it = sink.getEventList().iterator(); |
| |
| SinkEventElement event = it.next(); |
| assertEquals( "head", event.getName() ); |
| assertEquals( " id=article", event.getArgs()[0].toString() ); |
| assertEquals( "head_", ( it.next() ).getName() ); |
| assertEquals( "body", ( it.next() ).getName() ); |
| |
| event = it.next(); |
| assertEquals( "section1", event.getName() ); |
| assertEquals( " id=section", event.getArgs()[0].toString() ); |
| |
| event = it.next(); |
| assertEquals( "sectionTitle1", event.getName() ); |
| assertEquals( " id=title", event.getArgs()[0].toString() ); |
| assertEquals( "text", ( it.next() ).getName() ); |
| assertEquals( "sectionTitle1_", ( it.next() ).getName() ); |
| |
| event = it.next(); |
| assertEquals( "paragraph", event.getName() ); |
| assertEquals( " id=para", event.getArgs()[0].toString() ); |
| assertEquals( "text", ( it.next() ).getName() ); |
| assertEquals( "paragraph_", ( it.next() ).getName() ); |
| assertEquals( "section1_", ( it.next() ).getName() ); |
| assertEquals( "body_", ( it.next() ).getName() ); |
| |
| assertFalse( it.hasNext() ); |
| } |
| |
| /** @throws Exception */ |
| public void testFigure() |
| throws Exception |
| { |
| String text = "<mediaobject><imageobject>" |
| + "<imagedata fileref=\"fileref\" format=\"PNG\" /></imageobject>" |
| + "<caption><para>Figure caption</para></caption></mediaobject>"; |
| |
| final SinkEventTestingSink sink = new SinkEventTestingSink(); |
| parser.parse( text, sink ); |
| Iterator<SinkEventElement> it = sink.getEventList().iterator(); |
| |
| assertEquals( "figure", ( it.next() ).getName() ); |
| assertEquals( "figureGraphics", ( it.next() ).getName() ); |
| assertEquals( "figureCaption", ( it.next() ).getName() ); |
| assertEquals( "text", ( it.next() ).getName() ); |
| assertEquals( "figureCaption_", ( it.next() ).getName() ); |
| assertEquals( "figure_", ( it.next() ).getName() ); |
| assertFalse( it.hasNext() ); |
| |
| sink.reset(); |
| text = "<figure><title>Title</title><mediaobject><imageobject>" |
| + "<imagedata fileref=\"fileref\" format=\"PNG\"/></imageobject>" |
| + "<textobject><phrase>text</phrase></textobject></mediaobject></figure>"; |
| parser.parse( text, sink ); |
| it = sink.getEventList().iterator(); |
| |
| assertEquals( "bold", ( it.next() ).getName() ); |
| assertEquals( "text", ( it.next() ).getName() ); |
| assertEquals( "bold_", ( it.next() ).getName() ); |
| assertEquals( "figure", ( it.next() ).getName() ); |
| assertEquals( "figureGraphics", ( it.next() ).getName() ); |
| assertEquals( "text", ( it.next() ).getName() ); |
| assertEquals( "figure_", ( it.next() ).getName() ); |
| assertFalse( it.hasNext() ); |
| } |
| |
| /** @throws Exception */ |
| public void testLinks() |
| throws Exception |
| { |
| final String text = "<para><anchor id=\"Anchor\" />Anchor<!-- anchor_end -->." |
| + "Link to <link linkend=\"Anchor\">Anchor</link>." |
| + "Link to <ulink url=\"url.com\">url.com</ulink>.</para>"; |
| |
| final SinkEventTestingSink sink = new SinkEventTestingSink(); |
| parser.parse( text, sink ); |
| final Iterator<SinkEventElement> it = sink.getEventList().iterator(); |
| |
| assertEquals( "paragraph", ( it.next() ).getName() ); |
| assertEquals( "anchor", ( it.next() ).getName() ); |
| assertEquals( "text", ( it.next() ).getName() ); |
| assertEquals( "anchor_", ( it.next() ).getName() ); |
| assertEquals( "text", ( it.next() ).getName() ); |
| |
| SinkEventElement event = it.next(); |
| assertEquals( "link", event.getName() ); |
| assertEquals( "#Anchor", event.getArgs()[0].toString() ); |
| |
| assertEquals( "text", ( it.next() ).getName() ); |
| assertEquals( "link_", ( it.next() ).getName() ); |
| assertEquals( "text", ( it.next() ).getName() ); |
| |
| event = it.next(); |
| assertEquals( "link", event.getName() ); |
| assertEquals( "url.com", event.getArgs()[0].toString() ); |
| assertEquals( "text", ( it.next() ).getName() ); |
| assertEquals( "link_", ( it.next() ).getName() ); |
| assertEquals( "text", ( it.next() ).getName() ); |
| assertEquals( "paragraph_", ( it.next() ).getName() ); |
| assertFalse( it.hasNext() ); |
| } |
| |
| /** @throws Exception */ |
| public void testStyles() |
| throws Exception |
| { |
| final String text = "<para><emphasis>Italic</emphasis><emphasis role=\"bold\">Bold</emphasis>" |
| + "<literal>Monospaced</literal></para>"; |
| |
| final SinkEventTestingSink sink = new SinkEventTestingSink(); |
| parser.parse( text, sink ); |
| final Iterator<SinkEventElement> it = sink.getEventList().iterator(); |
| |
| assertEquals( "paragraph", ( it.next() ).getName() ); |
| assertEquals( "italic", ( it.next() ).getName() ); |
| assertEquals( "text", ( it.next() ).getName() ); |
| assertEquals( "italic_", ( it.next() ).getName() ); |
| assertEquals( "bold", ( it.next() ).getName() ); |
| assertEquals( "text", ( it.next() ).getName() ); |
| assertEquals( "bold_", ( it.next() ).getName() ); |
| assertEquals( "monospaced", ( it.next() ).getName() ); |
| assertEquals( "text", ( it.next() ).getName() ); |
| assertEquals( "monospaced_", ( it.next() ).getName() ); |
| assertEquals( "paragraph_", ( it.next() ).getName() ); |
| assertFalse( it.hasNext() ); |
| } |
| |
| /** @throws Exception */ |
| public void testLists() |
| throws Exception |
| { |
| String text = "<itemizedlist><listitem><para>item</para></listitem></itemizedlist>"; |
| |
| final SinkEventTestingSink sink = new SinkEventTestingSink(); |
| parser.parse( text, sink ); |
| Iterator<SinkEventElement> it = sink.getEventList().iterator(); |
| |
| assertEquals( "list", ( it.next() ).getName() ); |
| assertEquals( "listItem", ( it.next() ).getName() ); |
| assertEquals( "text", ( it.next() ).getName() ); |
| assertEquals( "listItem_", ( it.next() ).getName() ); |
| assertEquals( "list_", ( it.next() ).getName() ); |
| assertFalse( it.hasNext() ); |
| |
| text = "<orderedlist numeration=\"upperalpha\"><listitem><para>item</para></listitem></orderedlist>"; |
| sink.reset(); |
| parser.parse( text, sink ); |
| it = sink.getEventList().iterator(); |
| |
| SinkEventElement event = it.next(); |
| assertEquals( "numberedList", event.getName() ); |
| assertEquals( Sink.NUMBERING_UPPER_ALPHA, ( (Integer) event.getArgs()[0] ).intValue() ); |
| assertEquals( "numberedListItem", ( it.next() ).getName() ); |
| assertEquals( "text", ( it.next() ).getName() ); |
| assertEquals( "numberedListItem_", ( it.next() ).getName() ); |
| assertEquals( "numberedList_", ( it.next() ).getName() ); |
| assertFalse( it.hasNext() ); |
| |
| text = "<variablelist><varlistentry><term>term</term><listitem><para>definition</para>" |
| + "</listitem></varlistentry></variablelist>"; |
| sink.reset(); |
| parser.parse( text, sink ); |
| it = sink.getEventList().iterator(); |
| |
| assertEquals( "definitionList", ( it.next() ).getName() ); |
| assertEquals( "definitionListItem", ( it.next() ).getName() ); |
| assertEquals( "definedTerm", ( it.next() ).getName() ); |
| assertEquals( "text", ( it.next() ).getName() ); |
| assertEquals( "definedTerm_", ( it.next() ).getName() ); |
| assertEquals( "definition", ( it.next() ).getName() ); |
| assertEquals( "text", ( it.next() ).getName() ); |
| assertEquals( "definition_", ( it.next() ).getName() ); |
| assertEquals( "definitionListItem_", ( it.next() ).getName() ); |
| assertEquals( "definitionList_", ( it.next() ).getName() ); |
| assertFalse( it.hasNext() ); |
| } |
| |
| /** @throws Exception */ |
| public void testTables() |
| throws Exception |
| { |
| String text = "<informaltable frame=\"none\"><tgroup cols=\"2\">" |
| + "<colspec colwidth=\"0.5in\"/><colspec colwidth=\"0.5in\"/>" |
| + "<thead><row><entry>head 1</entry><entry>head 2</entry></row></thead>" |
| + "<tbody><row><entry>1</entry><entry>2</entry></row></tbody></tgroup></informaltable>"; |
| |
| final SinkEventTestingSink sink = new SinkEventTestingSink(); |
| parser.parse( text, sink ); |
| final Iterator<SinkEventElement> it = sink.getEventList().iterator(); |
| |
| assertEquals( "table", ( it.next() ).getName() ); |
| assertEquals( "tableRows", ( it.next() ).getName() ); |
| assertEquals( "tableRow", ( it.next() ).getName() ); |
| assertEquals( "tableHeaderCell", ( it.next() ).getName() ); |
| assertEquals( "text", ( it.next() ).getName() ); |
| assertEquals( "tableHeaderCell_", ( it.next() ).getName() ); |
| assertEquals( "tableHeaderCell", ( it.next() ).getName() ); |
| assertEquals( "text", ( it.next() ).getName() ); |
| assertEquals( "tableHeaderCell_", ( it.next() ).getName() ); |
| assertEquals( "tableRow_", ( it.next() ).getName() ); |
| assertEquals( "tableRow", ( it.next() ).getName() ); |
| assertEquals( "tableCell", ( it.next() ).getName() ); |
| assertEquals( "text", ( it.next() ).getName() ); |
| assertEquals( "tableCell_", ( it.next() ).getName() ); |
| assertEquals( "tableCell", ( it.next() ).getName() ); |
| assertEquals( "text", ( it.next() ).getName() ); |
| assertEquals( "tableCell_", ( it.next() ).getName() ); |
| assertEquals( "tableRow_", ( it.next() ).getName() ); |
| assertEquals( "tableRows_", ( it.next() ).getName() ); |
| assertEquals( "table_", ( it.next() ).getName() ); |
| assertFalse( it.hasNext() ); |
| } |
| |
| /** @throws Exception */ |
| public void testHead() |
| throws Exception |
| { |
| String text = "<article><articleinfo><title>Title</title>" |
| + "<corpauthor>CorpAuthor</corpauthor><date>Date</date></articleinfo>" |
| + "<para>Paragraph</para></article>"; |
| |
| final SinkEventTestingSink sink = new SinkEventTestingSink(); |
| parser.parse( text, sink ); |
| |
| final Iterator<SinkEventElement> it = sink.getEventList().iterator(); |
| |
| assertEquals( "head", ( it.next() ).getName() ); |
| assertEquals( "title", ( it.next() ).getName() ); |
| assertEquals( "text", ( it.next() ).getName() ); |
| assertEquals( "title_", ( it.next() ).getName() ); |
| assertEquals( "author", ( it.next() ).getName() ); |
| assertEquals( "text", ( it.next() ).getName() ); |
| assertEquals( "author_", ( it.next() ).getName() ); |
| assertEquals( "date", ( it.next() ).getName() ); |
| assertEquals( "text", ( it.next() ).getName() ); |
| assertEquals( "date_", ( it.next() ).getName() ); |
| assertEquals( "head_", ( it.next() ).getName() ); |
| assertEquals( "body", ( it.next() ).getName() ); |
| assertEquals( "paragraph", ( it.next() ).getName() ); |
| assertEquals( "text", ( it.next() ).getName() ); |
| assertEquals( "paragraph_", ( it.next() ).getName() ); |
| assertEquals( "body_", ( it.next() ).getName() ); |
| assertFalse( it.hasNext() ); |
| } |
| } |