You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2010/04/04 03:03:19 UTC

svn commit: r930604 - /myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/renderkit/html/HtmlEscapeRendererTest.java

Author: lu4242
Date: Sun Apr  4 01:03:19 2010
New Revision: 930604

URL: http://svn.apache.org/viewvc?rev=930604&view=rev
Log:
MYFACES-2508 add test for escape properties

Added:
    myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/renderkit/html/HtmlEscapeRendererTest.java

Added: myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/renderkit/html/HtmlEscapeRendererTest.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/renderkit/html/HtmlEscapeRendererTest.java?rev=930604&view=auto
==============================================================================
--- myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/renderkit/html/HtmlEscapeRendererTest.java (added)
+++ myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/renderkit/html/HtmlEscapeRendererTest.java Sun Apr  4 01:03:19 2010
@@ -0,0 +1,277 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.renderkit.html;
+
+import java.io.StringWriter;
+
+import javax.faces.component.UIComponent;
+import javax.faces.component.UISelectItem;
+import javax.faces.component.html.HtmlOutputLabel;
+import javax.faces.component.html.HtmlOutputText;
+import javax.faces.component.html.HtmlSelectManyCheckbox;
+import javax.faces.component.html.HtmlSelectManyListbox;
+import javax.faces.component.html.HtmlSelectManyMenu;
+import javax.faces.component.html.HtmlSelectOneListbox;
+import javax.faces.component.html.HtmlSelectOneMenu;
+import javax.faces.component.html.HtmlSelectOneRadio;
+import javax.faces.model.SelectItem;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.apache.myfaces.shared_impl.renderkit.html.HtmlResponseWriterImpl;
+import org.apache.myfaces.test.base.AbstractJsfTestCase;
+import org.apache.myfaces.test.mock.MockRenderKitFactory;
+
+public class HtmlEscapeRendererTest extends AbstractJsfTestCase
+{
+    
+    private static String ISO_8859_1 = "ISO-8859-1";
+    private static String UTF_8 = "UTF-8";
+    private static String HTML_CONTENT_TYPE = "text/html";
+    private static String XHTML_CONTENT_TYPE = "application/xhtml+xml";
+    private static String APPLICATION_XML_CONTENT_TYPE = "application/xml";
+    private static String TEXT_XML_CONTENT_TYPE = "text/xml";
+    
+    private static String[] CONTENT_TYPES = {HTML_CONTENT_TYPE,XHTML_CONTENT_TYPE,APPLICATION_XML_CONTENT_TYPE,TEXT_XML_CONTENT_TYPE};
+    private static String[] ENCODINGS = {ISO_8859_1,UTF_8};
+    
+    private static String TEST_STRING = "<b>Out&p&amp;ut&aacute;</b>";
+    private static String TEST_STRING_ESCAPED = "&lt;b&gt;Out&amp;p&amp;amp;ut&amp;aacute;&lt;/b&gt;";
+    
+    public static Test suite()
+    {
+        return new TestSuite(HtmlEscapeRendererTest.class); // needed in maven
+    }
+    
+    private HtmlOutputText outputText;
+    private HtmlOutputLabel outputLabel;
+    private HtmlSelectOneRadio selectOneRadio;
+    private HtmlSelectOneListbox selectOneListbox;
+    private HtmlSelectOneMenu selectOneMenu;
+    private HtmlSelectManyCheckbox selectManyCheckbox;
+    private HtmlSelectManyListbox selectManyListbox;
+    private HtmlSelectManyMenu selectManyMenu;
+ 
+    public HtmlEscapeRendererTest(String name)
+    {
+        super(name);
+    }
+
+    public void setUp() throws Exception
+    {
+        super.setUp();
+
+        outputText = new HtmlOutputText();
+        outputLabel = new HtmlOutputLabel();
+        selectOneRadio = new HtmlSelectOneRadio();
+        selectOneListbox = new HtmlSelectOneListbox();
+        selectOneMenu = new HtmlSelectOneMenu();
+        selectManyCheckbox = new HtmlSelectManyCheckbox();
+        selectManyListbox = new HtmlSelectManyListbox();
+        selectManyMenu = new HtmlSelectManyMenu();
+
+        // TODO remove these two lines once myfaces-test goes alpha, see MYFACES-1155
+        facesContext.getViewRoot().setRenderKitId(MockRenderKitFactory.HTML_BASIC_RENDER_KIT);
+        facesContext.getRenderKit().addRenderer(
+                outputText.getFamily(),
+                outputText.getRendererType(),
+                new HtmlTextRenderer());
+        facesContext.getRenderKit().addRenderer(
+                outputLabel.getFamily(),
+                outputLabel.getRendererType(),
+                new HtmlLabelRenderer());
+        facesContext.getRenderKit().addRenderer(
+                selectOneRadio.getFamily(),
+                selectOneRadio.getRendererType(),
+                new HtmlRadioRenderer());
+        facesContext.getRenderKit().addRenderer(
+                selectOneListbox.getFamily(),
+                selectOneListbox.getRendererType(),
+                new HtmlListboxRenderer());
+        facesContext.getRenderKit().addRenderer(
+                selectOneMenu.getFamily(),
+                selectOneMenu.getRendererType(),
+                new HtmlMenuRenderer());
+        facesContext.getRenderKit().addRenderer(
+                selectManyCheckbox.getFamily(),
+                selectManyCheckbox.getRendererType(),
+                new HtmlCheckboxRenderer());
+        facesContext.getRenderKit().addRenderer(
+                selectManyListbox.getFamily(),
+                selectManyListbox.getRendererType(),
+                new HtmlListboxRenderer());
+        facesContext.getRenderKit().addRenderer(
+                selectManyMenu.getFamily(),
+                selectManyMenu.getRendererType(),
+                new HtmlMenuRenderer());
+    }
+
+    public void tearDown() throws Exception
+    {
+        super.tearDown();
+        outputText = null;
+    }
+
+    public void testOutputTextEscapeValue() throws Exception
+    {
+        for (String contentType: CONTENT_TYPES)
+        {
+            for (String encoding : ENCODINGS)
+            {
+                StringWriter swriter = new StringWriter();
+                HtmlResponseWriterImpl writer = new HtmlResponseWriterImpl(swriter, contentType , encoding);
+                facesContext.setResponseWriter(writer);
+                // note if appear a &amp;, the & is escaped too,
+                // but when you see the output in a html browser
+                // the output it the same.
+                outputText.setValue(TEST_STRING);
+                outputText.setEscape(true);
+                outputText.encodeEnd(facesContext);
+                facesContext.renderResponse();
+                String output = swriter.toString();
+                assertTrue(output.contains(TEST_STRING_ESCAPED));
+            }
+        }
+    }
+
+    public void testOutputTextNoEscapeValue() throws Exception
+    {
+
+        for (String contentType: CONTENT_TYPES)
+        {
+            for (String encoding : ENCODINGS)
+            {
+                StringWriter swriter = new StringWriter();
+                HtmlResponseWriterImpl writer = new HtmlResponseWriterImpl(swriter, contentType , encoding);
+                facesContext.setResponseWriter(writer);
+                outputText.setValue(TEST_STRING);
+                outputText.setEscape(false);
+                outputText.encodeEnd(facesContext);
+                facesContext.renderResponse();
+                String output = swriter.toString();
+                assertTrue(output.contains(TEST_STRING));
+            }
+        }
+    }
+    
+    public void testOutputLabelEscapeValue() throws Exception
+    {
+        for (String contentType: CONTENT_TYPES)
+        {
+            for (String encoding : ENCODINGS)
+            {
+                StringWriter swriter = new StringWriter();
+                HtmlResponseWriterImpl writer = new HtmlResponseWriterImpl(swriter, contentType , encoding);
+                facesContext.setResponseWriter(writer);
+                // note if appear a &amp;, the & is escaped too,
+                // but when you see the output in a html browser
+                // the output it the same.
+                outputLabel.setValue(TEST_STRING);
+                outputLabel.setEscape(true);
+                outputLabel.encodeAll(facesContext);
+                facesContext.renderResponse();
+                String output = swriter.toString();
+                assertTrue(output.contains(TEST_STRING_ESCAPED));
+            }
+        }
+    }
+    
+    public void testOutputLabelNoEscapeValue() throws Exception
+    {
+
+        for (String contentType: CONTENT_TYPES)
+        {
+            for (String encoding : ENCODINGS)
+            {
+                StringWriter swriter = new StringWriter();
+                HtmlResponseWriterImpl writer = new HtmlResponseWriterImpl(swriter, contentType , encoding);
+                facesContext.setResponseWriter(writer);
+                outputLabel.setValue(TEST_STRING);
+                outputLabel.setEscape(false);
+                outputLabel.encodeAll(facesContext);
+                facesContext.renderResponse();
+                String output = swriter.toString();
+                assertTrue(output.contains(TEST_STRING));
+            }
+        }
+    }
+    
+    public void testUISelectOneEscapeValue() throws Exception
+    {
+        for (String contentType: CONTENT_TYPES)
+        {
+            for (String encoding : ENCODINGS)
+            {
+                tryUISelectEscapeValue(selectOneRadio, contentType, encoding);
+                tryUISelectEscapeValue(selectOneListbox, contentType, encoding);
+                tryUISelectEscapeValue(selectOneMenu, contentType, encoding);
+                tryUISelectEscapeValue(selectManyCheckbox, contentType, encoding);
+                tryUISelectEscapeValue(selectManyListbox, contentType, encoding);
+                tryUISelectEscapeValue(selectManyMenu, contentType, encoding);
+            }
+        }
+    }
+    
+    public void tryUISelectEscapeValue(UIComponent component, String contentType, String encoding) throws Exception
+    {
+        StringWriter swriter = new StringWriter();
+        HtmlResponseWriterImpl writer = new HtmlResponseWriterImpl(swriter, contentType , encoding);
+        facesContext.setResponseWriter(writer);
+        UISelectItem uiSelectItem = new UISelectItem();
+        SelectItem item = new SelectItem("Output",TEST_STRING,"",false,true);
+        uiSelectItem.setValue(item);
+        component.getChildren().add(uiSelectItem);
+        component.encodeAll(facesContext);
+        facesContext.renderResponse();
+        String output = swriter.toString();
+        assertTrue(output.contains(TEST_STRING_ESCAPED));
+    }
+    
+    public void testUISelectNoEscapeValue() throws Exception
+    {
+        for (String contentType: CONTENT_TYPES)
+        {
+            for (String encoding : ENCODINGS)
+            {
+                tryUISelectNoEscapeValue(selectOneRadio, contentType, encoding);
+                tryUISelectNoEscapeValue(selectOneListbox, contentType, encoding);
+                tryUISelectNoEscapeValue(selectOneMenu, contentType, encoding);
+                tryUISelectNoEscapeValue(selectManyCheckbox, contentType, encoding);
+                tryUISelectNoEscapeValue(selectManyListbox, contentType, encoding);
+                tryUISelectNoEscapeValue(selectManyMenu, contentType, encoding);
+            }
+        }
+    }
+    
+    public void tryUISelectNoEscapeValue(UIComponent component, String contentType, String encoding) throws Exception
+    {
+        StringWriter swriter = new StringWriter();
+        HtmlResponseWriterImpl writer = new HtmlResponseWriterImpl(swriter, contentType , encoding);
+        facesContext.setResponseWriter(writer);
+        UISelectItem uiSelectItem = new UISelectItem();
+        SelectItem item = new SelectItem("Output",TEST_STRING,"",false,false);
+        uiSelectItem.setValue(item);
+        component.getChildren().add(uiSelectItem);
+        component.encodeAll(facesContext);
+        facesContext.renderResponse();
+        String output = swriter.toString();
+        assertTrue(output.contains(TEST_STRING));
+    }
+}