You are viewing a plain text version of this content. The canonical link for it is here.
Posted to adffaces-commits@incubator.apache.org by aw...@apache.org on 2006/12/29 00:58:50 UTC

svn commit: r490902 - in /incubator/adffaces/trunk/trinidad/trinidad-impl: pom.xml src/test/java/org/apache/myfaces/trinidadinternal/renderkit/TestResponseWriter.java

Author: awiner
Date: Thu Dec 28 16:58:49 2006
New Revision: 490902

URL: http://svn.apache.org/viewvc?view=rev&rev=490902
Log:
Add support to the renderkit test framework to fail on invalid IDs or use of block-level elements inside of inline elements.  Trinidad currently fails - BADLY - on both accounts, so this is turned off for now

Modified:
    incubator/adffaces/trunk/trinidad/trinidad-impl/pom.xml
    incubator/adffaces/trunk/trinidad/trinidad-impl/src/test/java/org/apache/myfaces/trinidadinternal/renderkit/TestResponseWriter.java

Modified: incubator/adffaces/trunk/trinidad/trinidad-impl/pom.xml
URL: http://svn.apache.org/viewvc/incubator/adffaces/trunk/trinidad/trinidad-impl/pom.xml?view=diff&rev=490902&r1=490901&r2=490902
==============================================================================
--- incubator/adffaces/trunk/trinidad/trinidad-impl/pom.xml (original)
+++ incubator/adffaces/trunk/trinidad/trinidad-impl/pom.xml Thu Dec 28 16:58:49 2006
@@ -47,6 +47,18 @@
         <artifactId>maven-surefire-plugin</artifactId>
         <configuration>
           <systemProperties>
+            <!-- Trinidad currently fails proper HTML ID validity,
+		 and rather badly - so turn that test off -->
+            <property>
+              <name>org.apache.myfaces.trinidad.TestIdValidity</name>
+              <value>false</value>
+            </property>
+            <!-- Trinidad currently puts a lot of block-elements inside
+		 of inline elements - so turn that test off too -->
+            <property>
+              <name>org.apache.myfaces.trinidad.TestBlockElementNesting</name>
+              <value>false</value>
+            </property>
             <property>
               <name>trinidad.renderkit.fulltests</name>
               <value>lenient</value>

Modified: incubator/adffaces/trunk/trinidad/trinidad-impl/src/test/java/org/apache/myfaces/trinidadinternal/renderkit/TestResponseWriter.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/trunk/trinidad/trinidad-impl/src/test/java/org/apache/myfaces/trinidadinternal/renderkit/TestResponseWriter.java?view=diff&rev=490902&r1=490901&r2=490902
==============================================================================
--- incubator/adffaces/trunk/trinidad/trinidad-impl/src/test/java/org/apache/myfaces/trinidadinternal/renderkit/TestResponseWriter.java (original)
+++ incubator/adffaces/trunk/trinidad/trinidad-impl/src/test/java/org/apache/myfaces/trinidadinternal/renderkit/TestResponseWriter.java Thu Dec 28 16:58:49 2006
@@ -19,9 +19,14 @@
 import java.io.Writer;
 import java.io.UnsupportedEncodingException;
 
+import java.util.regex.Pattern;
+
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.Iterator;
+import java.util.LinkedList;
 import java.util.Map;
+import java.util.Set;
 import java.util.TreeMap;
 
 
@@ -68,14 +73,15 @@
       throw new NullPointerException();
 
     _out = out;
-    // -= Simon Lessard =-
-    // TODO: Never read locally as of 2006-08-09. Remove for good if no problem 
-    //       show up.
-    //_contentType = contentType;
     _encoding = encoding;
     _test = test;
     _result = result;
     CaboHttpUtils.validateEncoding(encoding);
+
+    _onlyValidIds = "true".equals(
+       System.getProperty("org.apache.myfaces.trinidad.TestIdValidity"));
+    _testBlockLevel = "true".equals(
+       System.getProperty("org.apache.myfaces.trinidad.TestBlockElementNesting"));
   }
 
   @Override
@@ -177,6 +183,7 @@
                     element);
       }
 
+      _elementStack.removeFirst();
       Writer out = _out;
 
       // always turn escaping back on once an element ends
@@ -214,6 +221,12 @@
 
     }
 
+    if (_onlyValidIds && "id".equals(name))
+    {
+      if (!_VALID_ID_PATTERN.matcher(value.toString()).matches())
+        _LOG.severe("ID \"" + value + "\" is not a valid ID.");
+    }
+
     if (_attributes.containsKey(name))
     {
       AssertionFailedError failure = new AssertionFailedError(
@@ -407,6 +420,17 @@
     // note that we started a non-skipped element
     _pushOutputtedElement(name);
 
+    if (_testBlockLevel &&
+        !_elementStack.isEmpty() &&
+        _BLOCK_LEVEL_ELEMENTS.contains(name) &&
+        _isInline(_elementStack.getFirst()))
+    {
+      _LOG.severe("The block level element " + name + " may not be used " +
+                  "inside of the inline element " + _elementStack.getFirst());
+    }
+
+    _elementStack.addFirst(name);
+
     int depth = _depth++;
     _writeIndent(depth);
 
@@ -660,6 +684,14 @@
 
   }
 
+  static private boolean _isInline(String name)
+  {
+    return (!_BLOCK_LEVEL_ELEMENTS.contains(name) &&
+            !_NEUTRAL_ELEMENTS.contains(name));
+  }
+
+  private boolean     _testBlockLevel;
+  private boolean     _onlyValidIds;
 
   private boolean     _closeStart;
   private boolean     _dontEscape;
@@ -667,13 +699,10 @@
   private boolean _isCachedImage;
   private Map<String, Object> _attributes = new TreeMap<String, Object>();
   private Map<String, Object> _uriAttributes = new TreeMap<String, Object>();
+  private LinkedList<String> _elementStack = new LinkedList<String>();
   private int     _depth;
 
   private Writer       _out;
-  // -= Simon Lessard =-
-  // TODO: Never read locally as of 2006-08-09. Remove for good if no problem 
-  //       show up.
-  //private String       _contentType;
   private String       _encoding;
 
   // holds an element that will only be started if it has attributes
@@ -687,6 +716,9 @@
   private final ArrayList<String> _skippedElements = new ArrayList<String>(20);
 
 
+  private static final Pattern _VALID_ID_PATTERN  =
+    Pattern.compile("[A-Za-z][A-Za-z0-9:_.-]*");
+
   private static final Class<?> _CHAR_ARRAY_CLASS = (new char[0]).getClass();
   private static final Class<Boolean> _BOOLEAN_CLASS = Boolean.class;
   private static final Class<Integer> _INTEGER_CLASS = Integer.class;
@@ -707,6 +739,57 @@
     }
   }
 
+  static private final Set<String> _BLOCK_LEVEL_ELEMENTS =
+    new HashSet<String>();
+  static private final Set<String> _NEUTRAL_ELEMENTS =
+    new HashSet<String>();
+  {
+    _BLOCK_LEVEL_ELEMENTS.add("address");
+    _BLOCK_LEVEL_ELEMENTS.add("blockquote");
+    _BLOCK_LEVEL_ELEMENTS.add("center");
+    _BLOCK_LEVEL_ELEMENTS.add("dir");
+    _BLOCK_LEVEL_ELEMENTS.add("div");
+    _BLOCK_LEVEL_ELEMENTS.add("dl");
+    _BLOCK_LEVEL_ELEMENTS.add("fieldset");
+    _BLOCK_LEVEL_ELEMENTS.add("form");
+    _BLOCK_LEVEL_ELEMENTS.add("h1");
+    _BLOCK_LEVEL_ELEMENTS.add("h2");
+    _BLOCK_LEVEL_ELEMENTS.add("h3");
+    _BLOCK_LEVEL_ELEMENTS.add("h4");
+    _BLOCK_LEVEL_ELEMENTS.add("h5");
+    _BLOCK_LEVEL_ELEMENTS.add("h6");
+    _BLOCK_LEVEL_ELEMENTS.add("hr");
+    _BLOCK_LEVEL_ELEMENTS.add("isindex");
+    _BLOCK_LEVEL_ELEMENTS.add("menu");
+    _BLOCK_LEVEL_ELEMENTS.add("noframes");
+    _BLOCK_LEVEL_ELEMENTS.add("noscript");
+    _BLOCK_LEVEL_ELEMENTS.add("ol");
+    _BLOCK_LEVEL_ELEMENTS.add("p");
+    _BLOCK_LEVEL_ELEMENTS.add("pre");
+    _BLOCK_LEVEL_ELEMENTS.add("table");
+    _BLOCK_LEVEL_ELEMENTS.add("ul");
+    // These technically aren't block-level, but are allowed
+    // to contain block-level elements
+    _BLOCK_LEVEL_ELEMENTS.add("dd");
+    _BLOCK_LEVEL_ELEMENTS.add("dt");
+    _BLOCK_LEVEL_ELEMENTS.add("frameset");
+    _BLOCK_LEVEL_ELEMENTS.add("li");
+    _BLOCK_LEVEL_ELEMENTS.add("tbody");
+    _BLOCK_LEVEL_ELEMENTS.add("tfoot");
+    _BLOCK_LEVEL_ELEMENTS.add("th");
+    _BLOCK_LEVEL_ELEMENTS.add("thead");
+    _BLOCK_LEVEL_ELEMENTS.add("tr");
+    _BLOCK_LEVEL_ELEMENTS.add("td");
+    _NEUTRAL_ELEMENTS.add("applet");
+    _NEUTRAL_ELEMENTS.add("body");
+    _NEUTRAL_ELEMENTS.add("button");
+    _NEUTRAL_ELEMENTS.add("del");
+    _NEUTRAL_ELEMENTS.add("iframe");
+    _NEUTRAL_ELEMENTS.add("ins");
+    _NEUTRAL_ELEMENTS.add("map");
+    _NEUTRAL_ELEMENTS.add("object");
+    _NEUTRAL_ELEMENTS.add("script");
+  }
   static private final TrinidadLogger _LOG =
     TrinidadLogger.createTrinidadLogger(TestResponseWriter.class);
 }