added (occasionally) failing test related to [DIGESTER-163]
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/digester/trunk@1301174 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/core/src/test/java/org/apache/commons/digester3/binder/Digester163TestCase.java b/core/src/test/java/org/apache/commons/digester3/binder/Digester163TestCase.java
index 982e93d..209c6f7 100644
--- a/core/src/test/java/org/apache/commons/digester3/binder/Digester163TestCase.java
+++ b/core/src/test/java/org/apache/commons/digester3/binder/Digester163TestCase.java
@@ -24,7 +24,7 @@
import static org.apache.commons.digester3.binder.DigesterLoader.newLoader;
import java.io.IOException;
-import java.io.InputStream;
+import java.net.URL;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
@@ -33,6 +33,7 @@
import org.apache.commons.digester3.xmlrules.FromXmlRulesModule;
import org.junit.Before;
import org.junit.Test;
+import org.xml.sax.SAXException;
/**
* Test.
@@ -47,19 +48,30 @@
@Before
public void before()
{
+ final URL url = getClass().getResource( "rules.xml" );
loader = newLoader( new FromXmlRulesModule()
{
-
@Override
protected void loadRules()
{
- loadXMLRules( getClass().getResourceAsStream( "rules.xml" ) );
+ loadXMLRules( url );
}
} );
}
@Test
+ public void testSingle()
+ throws IOException, SAXException
+ {
+ Digester dig = loader.newDigester();
+ URL url = Digester163TestCase.class.getResource( "test.xml" );
+ // lets parse - result does not matter here
+ Entity et = dig.parse( url );
+ assertEquals( "Author 1", et.getAuthor() );
+ }
+
+ @Test
public void test()
throws InterruptedException
{
@@ -68,43 +80,24 @@
Long.MAX_VALUE,
TimeUnit.NANOSECONDS,
new LinkedBlockingQueue<Runnable>() );
+ final URL url = Digester163TestCase.class.getResource( "test.xml" );
final LinkedBlockingQueue<Exception> exceptions = new LinkedBlockingQueue<Exception>();
for ( int i = 0; i < MAX_THREADS * 2; i++ )
{
executor.submit( new Runnable()
{
-
public void run()
{
-
- Digester dig = null;
- InputStream in = null;
try
{
- dig = loader.newDigester();
- in = Digester163TestCase.class.getResourceAsStream( "test.xml" );
- Entity et = dig.parse( in );
- assertEquals( "Author 1", et.getAuthor() );
+ Digester dig = loader.newDigester();
+ // lets parse - result does not matter here
+ dig.parse( url );
}
catch ( Exception e )
{
exceptions.add( e );
}
- finally
- {
- if ( in != null )
- {
- try
- {
- in.close();
- }
- catch ( IOException e )
- {
- // close quietly
- }
- }
- }
-
}
} );
}
@@ -121,12 +114,20 @@
}
}
- Exception e = exceptions.poll();
+ Exception e = exceptions.peek();
if ( e != null )
{
- e.printStackTrace();
- fail( "Throwable caught -> " + e.getMessage() != null ? e.getMessage() : "" );
+ while ( true )
+ {
+ e = exceptions.poll();
+ if ( e == null )
+ {
+ break;
+ }
+ e.printStackTrace();
+ }
+ fail( "Caught " + exceptions.size() + " exceptions." );
}
-
}
+
}
diff --git a/core/src/test/resources/org/apache/commons/digester3/binder/rules.xml b/core/src/test/resources/org/apache/commons/digester3/binder/rules.xml
index ac04b84..71f1d34 100644
--- a/core/src/test/resources/org/apache/commons/digester3/binder/rules.xml
+++ b/core/src/test/resources/org/apache/commons/digester3/binder/rules.xml
@@ -17,7 +17,10 @@
limitations under the License.
-->
<digester-rules>
- <object-create-rule classname="org.apache.commons.digester3.binder.Entity" pattern="container"/>
- <!-- author -->
- <call-method-rule methodname="setAuthor" paramcount="1" pattern="container/header/authors/author"/>
+ <pattern value="employee">
+ <object-create-rule classname="org.apache.commons.digester3.binder.Entity" />
+ <pattern value="name">
+ <call-method-rule methodname="setAuthor" paramcount="1" paramtypes="java.lang.String" usingElementBodyAsArgument="true" />
+ </pattern>
+ </pattern>
</digester-rules>
diff --git a/core/src/test/resources/org/apache/commons/digester3/binder/test.xml b/core/src/test/resources/org/apache/commons/digester3/binder/test.xml
index 8d8e84e..f45332a 100644
--- a/core/src/test/resources/org/apache/commons/digester3/binder/test.xml
+++ b/core/src/test/resources/org/apache/commons/digester3/binder/test.xml
@@ -15,10 +15,6 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<container>
- <header>
- <authors>
- <author>Author 1</author>
- </authors>
- </header>
-</container>
+<employee>
+ <name>Author 1</name>
+</employee>