Return-Path: Delivered-To: apmail-maven-commits-archive@www.apache.org Received: (qmail 10911 invoked from network); 28 Sep 2007 13:28:31 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 28 Sep 2007 13:28:31 -0000 Received: (qmail 68444 invoked by uid 500); 28 Sep 2007 13:28:21 -0000 Delivered-To: apmail-maven-commits-archive@maven.apache.org Received: (qmail 68383 invoked by uid 500); 28 Sep 2007 13:28:21 -0000 Mailing-List: contact commits-help@maven.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@maven.apache.org Delivered-To: mailing list commits@maven.apache.org Received: (qmail 68370 invoked by uid 99); 28 Sep 2007 13:28:20 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 28 Sep 2007 06:28:20 -0700 X-ASF-Spam-Status: No, hits=-98.8 required=10.0 tests=ALL_TRUSTED,DNS_FROM_DOB,RCVD_IN_DOB X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 28 Sep 2007 13:28:19 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 5DD841A9832; Fri, 28 Sep 2007 06:27:59 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r580346 - in /maven/shared/trunk/maven-reporting-impl: ./ src/main/java/org/apache/maven/reporting/ src/test/java/org/apache/maven/reporting/ Date: Fri, 28 Sep 2007 13:27:58 -0000 To: commits@maven.apache.org From: vsiveton@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20070928132759.5DD841A9832@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: vsiveton Date: Fri Sep 28 06:27:58 2007 New Revision: 580346 URL: http://svn.apache.org/viewvc?rev=580346&view=rev Log: o bumped to doxia's release 1.0-alpha-9 o bumped to maven-reporting-api:2.0.8-SNAPSHOT o updated javadoc o updated license header Modified: maven/shared/trunk/maven-reporting-impl/pom.xml maven/shared/trunk/maven-reporting-impl/src/main/java/org/apache/maven/reporting/AbstractMavenReport.java maven/shared/trunk/maven-reporting-impl/src/main/java/org/apache/maven/reporting/AbstractMavenReportRenderer.java maven/shared/trunk/maven-reporting-impl/src/test/java/org/apache/maven/reporting/AbstractMavenReportRendererTest.java Modified: maven/shared/trunk/maven-reporting-impl/pom.xml URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-reporting-impl/pom.xml?rev=580346&r1=580345&r2=580346&view=diff ============================================================================== --- maven/shared/trunk/maven-reporting-impl/pom.xml (original) +++ maven/shared/trunk/maven-reporting-impl/pom.xml Fri Sep 28 06:27:58 2007 @@ -25,13 +25,14 @@ maven-shared-components 7 + org.apache.maven.reporting maven-reporting-impl - Maven Reporting Implementation 2.1-SNAPSHOT + Maven Reporting Implementation - 1.0-alpha-9-SNAPSHOT + 1.0-alpha-9 @@ -58,11 +59,6 @@ org.apache.maven.doxia - doxia-sink-api - ${doxiaVersion} - - - org.apache.maven.doxia doxia-core ${doxiaVersion} @@ -84,7 +80,7 @@ org.apache.maven.reporting maven-reporting-api - 2.0.4 + 2.0.8-SNAPSHOT junit-addons @@ -93,6 +89,7 @@ test + scm:svn:http://svn.apache.org/repos/asf/maven/shared/trunk/maven-reporting-impl scm:svn:https://svn.apache.org/repos/asf/maven/shared/trunk/maven-reporting-impl Modified: maven/shared/trunk/maven-reporting-impl/src/main/java/org/apache/maven/reporting/AbstractMavenReport.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-reporting-impl/src/main/java/org/apache/maven/reporting/AbstractMavenReport.java?rev=580346&r1=580345&r2=580346&view=diff ============================================================================== --- maven/shared/trunk/maven-reporting-impl/src/main/java/org/apache/maven/reporting/AbstractMavenReport.java (original) +++ maven/shared/trunk/maven-reporting-impl/src/main/java/org/apache/maven/reporting/AbstractMavenReport.java Fri Sep 28 06:27:58 2007 @@ -1,19 +1,22 @@ package org.apache.maven.reporting; /* - * Copyright 2001-2005 The Apache Software Foundation. + * 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 * - * Licensed 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 * - * 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. + * 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 org.apache.maven.doxia.sink.Sink; @@ -31,27 +34,24 @@ * * @author Emmanuel Venisse * @version $Id$ + * @since 2.0 */ public abstract class AbstractMavenReport extends AbstractMojo implements MavenReport { + /** The current sink to use */ private Sink sink; + /** The sink factory to use */ private SinkFactory sinkFactory; - protected abstract Renderer getSiteRenderer(); - - protected abstract String getOutputDirectory(); - - protected abstract MavenProject getProject(); - + /** The current report output directory to use */ private File reportOutputDirectory; /** - * TODO: This method is never called - all reports are rendered by maven-site-plugin's - * ReportDocumentRender. - * + * This method should be never called - all reports are rendered by Maven site-plugin's + * @see org.apache.maven.plugins.site.ReportDocumentRender * @see org.apache.maven.plugin.Mojo#execute() */ public void execute() @@ -61,31 +61,42 @@ } /** - * @see org.apache.maven.reporting.MavenReport#generate(org.apache.maven.doxia.sink.Sink, org.apache.maven.reporting.SinkFactory, java.util.Locale) - * @deprecated + * Generate a report. + * + * @param aSink the sink to use for the generation. + * @param aLocale the wanted locale to generate the report, could be null. + * @throws MavenReportException if any + * @deprecated using {@link #generate(Sink, SinkFactory, Locale)} instead of */ - public void generate( org.codehaus.doxia.sink.Sink sink, Locale locale ) + public void generate( org.codehaus.doxia.sink.Sink aSink, Locale aLocale ) throws MavenReportException { - getLog().warn( "Deprecated API called - no SinkFactory available. Please update this plugin." ); - generate( sink, null, locale ); + getLog().warn( "Deprecated API called - not org.apache.maven.doxia.sink.Sink instance and no SinkFactory available. Please update this plugin." ); + generate( aSink, null, aLocale ); } /** - * @see org.apache.maven.reporting.MavenReport#generate(org.apache.maven.doxia.sink.Sink, org.apache.maven.reporting.SinkFactory, java.util.Locale) - * @deprecated + * Generate a report. + * + * @see org.apache.maven.reporting.MavenReport#generate(org.apache.maven.doxia.sink.Sink, java.util.Locale) + * @deprecated using {@link #generate(Sink, SinkFactory, Locale)} instead of */ - public void generate( Sink sink, Locale locale ) + public void generate( Sink aSink, Locale aLocale ) throws MavenReportException { getLog().warn( "Deprecated API called - no SinkFactory available. Please update this plugin." ); - generate( sink, null, locale ); + generate( aSink, null, aLocale ); } /** - * @see org.apache.maven.reporting.MavenReport#generate(org.apache.maven.doxia.sink.Sink, org.apache.maven.reporting.SinkFactory, java.util.Locale) + * Generate a report. + * + * @param aSink + * @param aSinkFactory + * @param aLocale + * @throws MavenReportException */ - public void generate( Sink sink, SinkFactory sinkFactory, Locale locale ) + public void generate( Sink aSink, SinkFactory aSinkFactory, Locale aLocale ) throws MavenReportException { if ( sink == null ) @@ -99,58 +110,98 @@ return; } - this.sink = sink; - - this.sinkFactory = sinkFactory; - - executeReport( locale ); + this.sink = aSink; - closeReport(); - } + this.sinkFactory = aSinkFactory; - protected abstract void executeReport( Locale locale ) - throws MavenReportException; + executeReport( aLocale ); - protected void closeReport() - { + closeReport(); } + /** {@inheritDoc} */ public String getCategoryName() { return CATEGORY_PROJECT_REPORTS; } + /** {@inheritDoc} */ public File getReportOutputDirectory() { if ( reportOutputDirectory == null ) { reportOutputDirectory = new File( getOutputDirectory() ); } + return reportOutputDirectory; } + /** {@inheritDoc} */ public void setReportOutputDirectory( File reportOutputDirectory ) { this.reportOutputDirectory = reportOutputDirectory; } + /** + * Actions when closing the report. By default, nothing to do. + */ + protected void closeReport() + { + // nop + } + + /** + * @return the sink used + */ public Sink getSink() { return sink; } + /** + * @return the sink factory used + */ public SinkFactory getSinkFactory() { return sinkFactory; } + /** + * @see org.apache.maven.reporting.MavenReport#isExternalReport() + * @return false by default. + */ public boolean isExternalReport() { return false; } + /** {@inheritDoc} */ public boolean canGenerateReport() { return true; } + + /** + * @return the site renderer used. + */ + protected abstract Renderer getSiteRenderer(); + + /** + * @return the output directory path. + */ + protected abstract String getOutputDirectory(); + + /** + * @return the Maven project instance. + */ + protected abstract MavenProject getProject(); + + /** + * Execute the generation of the report. + * + * @param locale the wanted locale to return the report's description, could be null. + * @throws MavenReportException if any + */ + protected abstract void executeReport( Locale locale ) + throws MavenReportException; } Modified: maven/shared/trunk/maven-reporting-impl/src/main/java/org/apache/maven/reporting/AbstractMavenReportRenderer.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-reporting-impl/src/main/java/org/apache/maven/reporting/AbstractMavenReportRenderer.java?rev=580346&r1=580345&r2=580346&view=diff ============================================================================== --- maven/shared/trunk/maven-reporting-impl/src/main/java/org/apache/maven/reporting/AbstractMavenReportRenderer.java (original) +++ maven/shared/trunk/maven-reporting-impl/src/main/java/org/apache/maven/reporting/AbstractMavenReportRenderer.java Fri Sep 28 06:27:58 2007 @@ -1,19 +1,22 @@ package org.apache.maven.reporting; /* - * Copyright 2001-2005 The Apache Software Foundation. + * 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 * - * Licensed 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 * - * 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. + * 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 org.apache.commons.validator.EmailValidator; @@ -34,36 +37,43 @@ * @author Emmanuel Venisse * @author Vincent Siveton * @version $Id$ - * @todo Later it may be appropriate to create something like a VelocityMavenReportRenderer that could take a velocity template and pipe that through Doxia rather than coding them up like this. + * @since 2.0 + * @TODO Later it may be appropriate to create something like a VelocityMavenReportRenderer + * that could take a velocity template and pipe that through Doxia rather than coding them + * up like this. */ public abstract class AbstractMavenReportRenderer implements MavenReportRenderer { + /** The current sink to use */ protected Sink sink; + /** The current section number */ private int section; + /** + * Default constructor. + * + * @param sink the sink to use. + */ public AbstractMavenReportRenderer( Sink sink ) { this.sink = sink; } + /** {@inheritDoc} */ public void render() { sink.head(); sink.title(); - text( getTitle() ); - sink.title_(); sink.head_(); sink.body(); - renderBody(); - sink.body_(); sink.flush(); @@ -71,16 +81,31 @@ sink.close(); } - protected void startTable() - { - sink.table(); - } - - protected void endTable() - { - sink.table_(); - } + // ---------------------------------------------------------------------- + // Section handler + // ---------------------------------------------------------------------- + /** + * Convenience method to wrap section creation in the current sink. + * + * @param name the name of this section, could be null. + * @see #text(String) + * @see Sink#section1() + * @see Sink#sectionTitle1() + * @see Sink#sectionTitle1_() + * @see Sink#section2() + * @see Sink#sectionTitle2() + * @see Sink#sectionTitle2_() + * @see Sink#section3() + * @see Sink#sectionTitle3() + * @see Sink#sectionTitle3_() + * @see Sink#section4() + * @see Sink#sectionTitle4() + * @see Sink#sectionTitle4_() + * @see Sink#section5() + * @see Sink#sectionTitle5() + * @see Sink#sectionTitle5_() + */ protected void startSection( String name ) { section = section + 1; @@ -139,6 +164,16 @@ } } + /** + * Convenience method to wrap section ending in the current sink. + * + * @see Sink#section1_() + * @see Sink#section2_() + * @see Sink#section3_() + * @see Sink#section4_() + * @see Sink#section5_() + * @IllegalStateException if too many closing sections. + */ protected void endSection() { switch ( section ) @@ -172,6 +207,38 @@ } } + // ---------------------------------------------------------------------- + // Table handler + // ---------------------------------------------------------------------- + + /** + * Convenience method to wrap the table start in the current sink. + * + * @see Sink#table() + */ + protected void startTable() + { + sink.table(); + } + + /** + * Convenience method to wrap the table ending in the current sink. + * + * @see Sink#table_() + */ + protected void endTable() + { + sink.table_(); + } + + /** + * Convenience method to wrap the table header cell start in the current sink. + * + * @param text the text to put in this cell, could be null. + * @see #text(String) + * @see Sink#tableHeaderCell() + * @see Sink#tableHeaderCell_() + */ protected void tableHeaderCell( String text ) { sink.tableHeaderCell(); @@ -182,11 +249,12 @@ } /** - * Add a cell in a table. + * Convenience method to wrap a table cell start in the current sink. *

The text could be a link patterned text defined by {text, url}

* - * @param text + * @param text the text to put in this cell, could be null. * @see #linkPatternedText(String) + * @see #tableCell(String) */ protected void tableCell( String text ) { @@ -194,11 +262,16 @@ } /** - * Add a cell in a table. + * Convenience method to wrap a table cell start in the current sink. + *

The text could be a link patterned text defined by {text, url}

*

If asHtml is true, add the text as Html

* - * @param text - * @param asHtml + * @param text the text to put in this cell, could be null. + * @param asHtml true to add the text as Html, false otherwise. + * @see #linkPatternedText(String) + * @see Sink#tableCell() + * @see Sink#tableCell_() + * @see Sink#rawText(String) */ protected void tableCell( String text, boolean asHtml ) { @@ -216,30 +289,62 @@ sink.tableCell_(); } + /** + * Convenience method to wrap a table row start in the current sink. + *

The texts in the content could be link patterned texts defined by {text, url}

+ * + * @param content an array of text to put in the cells in this row, could be null. + * @see #tableCell(String) + * @see Sink#tableRow() + * @see Sink#tableRow_() + */ protected void tableRow( String[] content ) { sink.tableRow(); - for ( int i = 0; i < content.length; i++ ) + if ( content != null ) { - tableCell( content[i] ); + for ( int i = 0; i < content.length; i++ ) + { + tableCell( content[i] ); + } } sink.tableRow_(); } + /** + * Convenience method to wrap a table header row start in the current sink. + *

The texts in the content could be link patterned texts defined by {text, url}

+ * + * @param content an array of text to put in the cells in this row header, could be null. + * @see #tableHeaderCell(String) + * @see Sink#tableRow() + * @see Sink#tableRow_() + */ protected void tableHeader( String[] content ) { sink.tableRow(); - for ( int i = 0; i < content.length; i++ ) + if ( content != null ) { - tableHeaderCell( content[i] ); + for ( int i = 0; i < content.length; i++ ) + { + tableHeaderCell( content[i] ); + } } sink.tableRow_(); } + /** + * Convenience method to wrap a table caption in the current sink. + * + * @param caption the caption of the table, could be null. + * @see #text(String) + * @see Sink#tableCaption() + * @see Sink#tableCaption_() + */ protected void tableCaption( String caption ) { sink.tableCaption(); @@ -249,6 +354,18 @@ sink.tableCaption_(); } + // ---------------------------------------------------------------------- + // Paragraph handler + // ---------------------------------------------------------------------- + + /** + * Convenience method to wrap a paragraph in the current sink. + * + * @param paragraph the paragraph to add, could be null. + * @see #text(String) + * @see Sink#paragraph() + * @see Sink#paragraph_() + */ protected void paragraph( String paragraph ) { sink.paragraph(); @@ -258,6 +375,14 @@ sink.paragraph_(); } + /** + * Convenience method to wrap a link in the current sink. + * + * @param paragraph the link to add, could be null. + * @see #text(String) + * @see Sink#link(String) + * @see Sink#link_() + */ protected void link( String href, String name ) { sink.link( href ); @@ -268,14 +393,15 @@ } /** - * Add a new text. - *

If text is empty of has a null value, add the "-" charater

+ * Convenience method to wrap a text in the current sink. + *

If text is empty or has a null value, add the "-" charater

* - * @param text a string + * @param text a text, could be null. + * @see Sink#text(String) */ protected void text( String text ) { - if ( text == null || text.length() == 0 ) // Take care of spaces + if ( StringUtils.isEmpty( text ) ) // Take care of spaces { sink.text( "-" ); } @@ -286,10 +412,12 @@ } /** - * Add a verbatim text. + * Convenience method to wrap a text as verbatim style in the current sink . * - * @param text a string + * @param text a text, could be null. * @see #text(String) + * @see Sink#verbatim(boolean) + * @see Sink#verbatim_() */ protected void verbatimText( String text ) { @@ -301,11 +429,14 @@ } /** - * Add a verbatim text with a specific link. + * Convenience method to wrap a text with a given link href as verbatim style in the current sink. * * @param text a string * @param href an href could be null * @see #link(String, String) + * @see #verbatimText(String) + * @see Sink#verbatim(boolean) + * @see Sink#verbatim_() */ protected void verbatimLink( String text, String href ) { @@ -324,9 +455,10 @@ } /** - * Add a Javascript code. + * Convenience method to add a Javascript code in the current sink. * * @param jsCode a string of Javascript + * @see Sink#rawText(String) */ protected void javaScript( String jsCode ) { @@ -334,12 +466,13 @@ } /** - * Add a text with links inside. + * Convenience method to wrap a patterned text in the current link. *

The text variable should contained this given pattern {text, url} * to handle the link creation.

* * @param text a text with link pattern defined. * @see #text(String) + * @see #link(String, String) * @see #applyPattern(String) */ public void linkPatternedText( String text ) @@ -412,9 +545,9 @@ } /** - * Convenience method to display a Properties object comma separated. + * Convenience method to display a Properties object as comma separated String. * - * @param props + * @param props the properties to display. * @return the properties object as comma separated String */ protected static String propertiesToString( Properties props ) @@ -439,16 +572,25 @@ return sb.toString(); } + // ---------------------------------------------------------------------- + // Private methods + // ---------------------------------------------------------------------- + /** * Return a valid href. *

A valid href could start by mailto:.

*

For a relative path, the href should start by ./ to be valid.

* - * @param href an href - * @return a valid href or null if the href is not valid. + * @param href an href, could be null. + * @return a valid href or null if the href is null or not valid. */ private static String getValidHref( String href ) { + if ( StringUtils.isEmpty( href ) ) + { + return null; + } + href = href.trim(); String[] schemes = {"http", "https"}; @@ -470,8 +612,6 @@ } else { - // TODO Waiting for new release of Validator - // http://issues.apache.org/bugzilla/show_bug.cgi?id=30686 String hrefTmp; if ( !href.endsWith( "/" ) ) { @@ -493,10 +633,8 @@ { return href.substring(2, href.length() ); } - else - { - return "."; - } + + return "."; } return null; @@ -634,7 +772,15 @@ return Collections.unmodifiableList( segments ); } + // ---------------------------------------------------------------------- + // Abstract methods + // ---------------------------------------------------------------------- + + /** {@inheritDoc} */ public abstract String getTitle(); + /** + * Renderer the body content of the report. + */ protected abstract void renderBody(); } Modified: maven/shared/trunk/maven-reporting-impl/src/test/java/org/apache/maven/reporting/AbstractMavenReportRendererTest.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-reporting-impl/src/test/java/org/apache/maven/reporting/AbstractMavenReportRendererTest.java?rev=580346&r1=580345&r2=580346&view=diff ============================================================================== --- maven/shared/trunk/maven-reporting-impl/src/test/java/org/apache/maven/reporting/AbstractMavenReportRendererTest.java (original) +++ maven/shared/trunk/maven-reporting-impl/src/test/java/org/apache/maven/reporting/AbstractMavenReportRendererTest.java Fri Sep 28 06:27:58 2007 @@ -1,19 +1,22 @@ package org.apache.maven.reporting; /* - * Copyright 2001-2007 The Apache Software Foundation. + * 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 * - * Licensed 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 * - * 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. + * 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.util.Iterator; @@ -23,6 +26,9 @@ import junit.framework.TestCase; import junitx.util.PrivateAccessor; +/** + * Test case for some public method in AbstractMavenReportRenderer. + */ public class AbstractMavenReportRendererTest extends TestCase { private static List applyPattern( String pattern ) throws Throwable @@ -59,6 +65,9 @@ } } + /** + * @throws Throwable if any + */ public void testApplyPattern() throws Throwable { // the most simple test @@ -96,5 +105,4 @@ checkPattern( "it's a question of {chance, http://en.wikipedia.org/wiki/Chance}", new String[] { "it's a question of {chance, http://en.wikipedia.org/wiki/Chance}", null } ); } - }