Author: drobiazko
Date: Sat Mar  6 19:40:50 2010
New Revision: 919830

URL: http://svn.apache.org/viewvc?rev=919830&view=rev
Log:
TAP5-919: Calling MarkupWriter.element() with an even number of arguments 
throws ArrayIndexOutOfBounds exception, not a useful exception about omitting a 
attribute name or value

Modified:
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/MarkupWriterImpl.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ServicesMessages.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/internal/services/ServicesStrings.properties
    
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/MarkupWriterImplTest.java

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/MarkupWriterImpl.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/MarkupWriterImpl.java?rev=919830&r1=919829&r2=919830&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/MarkupWriterImpl.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/MarkupWriterImpl.java
 Sat Mar  6 19:40:50 2010
@@ -117,8 +117,13 @@
         ensureCurrentElement();
 
         int i = 0;
+        
+        int length = namesAndValues.length;
+        
+        if(length % 2 != 0)
+            throw new 
IllegalArgumentException(ServicesMessages.markupWriterAttributeNameOrValueOmitted(current.getName(),
 namesAndValues));
 
-        while (i < namesAndValues.length)
+        while (i < length)
         {
             // name should never be null.
 

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ServicesMessages.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ServicesMessages.java?rev=919830&r1=919829&r2=919830&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ServicesMessages.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ServicesMessages.java
 Sat Mar  6 19:40:50 2010
@@ -29,6 +29,7 @@
 import org.apache.tapestry5.runtime.RenderCommand;
 import org.apache.tapestry5.services.TransformMethodSignature;
 
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
 import java.util.Locale;
@@ -359,4 +360,9 @@
     {
         return MESSAGES.get("link-rewrite-returned-null");
     }
+
+    public static String markupWriterAttributeNameOrValueOmitted(String 
element, Object[] namesAndValues)
+    {
+        return 
MESSAGES.format("markup-writer-attribute-name-or-value-omitted", element, 
InternalUtils.join(Arrays.asList(namesAndValues)));
+    }
 }

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/internal/services/ServicesStrings.properties
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/internal/services/ServicesStrings.properties?rev=919830&r1=919829&r2=919830&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/internal/services/ServicesStrings.properties
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/internal/services/ServicesStrings.properties
 Sat Mar  6 19:40:50 2010
@@ -85,3 +85,4 @@
 literal-conduit-not-updateable=Literal values are not updateable.
 request-rewrite-returned-null=URLRewriterRule.process returned null while 
processing incoming request
 link-rewrite-returned-null=URLRewriterRule.process returned null while 
processing outbound link.
+markup-writer-attribute-name-or-value-omitted=Writing attributes of the 
element '%s' failed. A attribute name or value is omitted [%s]. Please provide 
an even number of values, alternating names and values

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/MarkupWriterImplTest.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/MarkupWriterImplTest.java?rev=919830&r1=919829&r2=919830&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/MarkupWriterImplTest.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/MarkupWriterImplTest.java
 Sat Mar  6 19:40:50 2010
@@ -183,6 +183,27 @@
 
         assertEquals(w.toString(), "<root gnip=\"gnop\" foo=\"bar\"></root>");
     }
+    
+    @Test
+    public void attributes_odd_number()
+    {
+        MarkupWriter w = new MarkupWriterImpl();
+
+        w.element("img");
+
+        try
+        {
+            w.attributes("src", "foo.png", "width", 20, 30);
+            unreachable();
+        }
+        catch (RuntimeException ex)
+        {
+            assertMessageContains(ex, 
+                    "Writing attributes of the element 'img' failed.", 
+                    "A attribute name or value is omitted [src, foo.png, 
width, 20, 30].",
+                    "Please provide an even number of values, alternating 
names and values");
+        }
+    }
 
     @Test
     public void comment()


Reply via email to