You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2012/08/18 01:11:38 UTC
git commit: TAP5-1976: XML Parser adds attributes with default values
and produces invalid HTML5 markup
Updated Branches:
refs/heads/5.4-js-rewrite 7b397e31d -> d25c14234
TAP5-1976: XML Parser adds attributes with default values and produces invalid HTML5 markup
Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/d25c1423
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/d25c1423
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/d25c1423
Branch: refs/heads/5.4-js-rewrite
Commit: d25c142345e03869f71ab7f4133734cc8eb2ee13
Parents: 7b397e3
Author: Howard M. Lewis Ship <hl...@apache.org>
Authored: Fri Aug 17 16:11:22 2012 -0700
Committer: Howard M. Lewis Ship <hl...@apache.org>
Committed: Fri Aug 17 16:11:22 2012 -0700
----------------------------------------------------------------------
.../internal/services/XMLTokenStream.java | 13 +++++-
.../internal/services/TemplateParserImplTest.java | 37 +++++++++++++--
.../services/default_attributes_not_included.tml | 1 +
3 files changed, 46 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/d25c1423/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/XMLTokenStream.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/XMLTokenStream.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/XMLTokenStream.java
index dc830ce..a2b04d8 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/XMLTokenStream.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/XMLTokenStream.java
@@ -1,4 +1,4 @@
-// Copyright 2009, 2011 The Apache Software Foundation
+// Copyright 2009, 2011, 2012 The Apache Software Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -20,6 +20,7 @@ import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
import org.apache.tapestry5.ioc.internal.util.InternalUtils;
import org.apache.tapestry5.ioc.internal.util.LocationImpl;
import org.xml.sax.*;
+import org.xml.sax.ext.Attributes2;
import org.xml.sax.ext.LexicalHandler;
import org.xml.sax.helpers.XMLReaderFactory;
@@ -198,6 +199,8 @@ public class XMLTokenStream
// The XML parser tends to reuse the same Attributes object, so
// capture the data out of it.
+ Attributes2 a2 = (attributes instanceof Attributes2) ? (Attributes2) attributes : null;
+
if (attributes.getLength() == 0)
{
token.attributes = Collections.emptyList();
@@ -207,6 +210,14 @@ public class XMLTokenStream
for (int i = 0; i < attributes.getLength(); i++)
{
+ // Filter out attributes that are not present in the XML input stream, but were
+ // instead provided by DTD defaulting.
+
+ if (a2 != null && !a2.isSpecified(i))
+ {
+ continue;
+ }
+
String prefixedName = attributes.getQName(i);
int lastColon = prefixedName.lastIndexOf(':');
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/d25c1423/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/TemplateParserImplTest.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/TemplateParserImplTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/TemplateParserImplTest.java
index 496a43e..7335805 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/TemplateParserImplTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/TemplateParserImplTest.java
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007, 2008, 2009, 2010, 2011, 2012 The Apache Software Foundation
+// Copyright 2006-2012 The Apache Software Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -1017,10 +1017,39 @@ public class TemplateParserImplTest extends InternalBaseTestCase
{
List<TemplateToken> tokens = tokens("block_can_nest_inside_extend.tml");
- System.out.println(tokens);
-
BlockToken token = get(tokens, 0);
- assert (token.getId().equals("myBlock"));
+ assertEquals(token.getId(), "myBlock");
+ }
+
+ /**
+ * See <a href="https://issues.apache.org/jira/browse/TAP5-1976">TAP5-1976</a>
+ *
+ * @since 5.3.5
+ */
+ @Test
+ public void default_attributes_not_included()
+ {
+ List<TemplateToken> tokens = tokens("default_attributes_not_included.tml");
+
+ assertEquals(tokens.size(), 2);
+
+ // TAP5-1976 meant that a default attribute ("Attribute[shape=rect]") would be included.
+
+ assertEquals(toString(tokens), "Start[a] End");
+ }
+
+ private String toString(List<TemplateToken> tokens)
+ {
+ StringBuilder builder = new StringBuilder();
+ String sep = "";
+
+ for (TemplateToken token : tokens)
+ {
+ builder.append(sep).append(token.toString());
+ sep = " ";
+ }
+
+ return builder.toString();
}
}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/d25c1423/tapestry-core/src/test/resources/org/apache/tapestry5/internal/services/default_attributes_not_included.tml
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/resources/org/apache/tapestry5/internal/services/default_attributes_not_included.tml b/tapestry-core/src/test/resources/org/apache/tapestry5/internal/services/default_attributes_not_included.tml
new file mode 100644
index 0000000..bb9b580
--- /dev/null
+++ b/tapestry-core/src/test/resources/org/apache/tapestry5/internal/services/default_attributes_not_included.tml
@@ -0,0 +1 @@
+<a/>
\ No newline at end of file