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>