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 2011/04/01 20:57:44 UTC
svn commit: r1087850 - in /myfaces/core/branches/2.1.x/impl/src:
main/java/org/apache/myfaces/renderkit/html/HtmlDoctypeRenderer.java
test/java/org/apache/myfaces/renderkit/html/HtmlDoctypeRendererTest.java
Author: lu4242
Date: Fri Apr 1 18:57:44 2011
New Revision: 1087850
URL: http://svn.apache.org/viewvc?rev=1087850&view=rev
Log:
MYFACES-3086 Add h:doctype component
Added:
myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlDoctypeRenderer.java
myfaces/core/branches/2.1.x/impl/src/test/java/org/apache/myfaces/renderkit/html/HtmlDoctypeRendererTest.java
Added: myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlDoctypeRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlDoctypeRenderer.java?rev=1087850&view=auto
==============================================================================
--- myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlDoctypeRenderer.java (added)
+++ myfaces/core/branches/2.1.x/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlDoctypeRenderer.java Fri Apr 1 18:57:44 2011
@@ -0,0 +1,76 @@
+/*
+ * 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.IOException;
+import java.util.Map;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import javax.faces.render.Renderer;
+
+import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFRenderer;
+
+/**
+ * Rendered used by h:doctype tag
+ *
+ * @since 2.1.0
+ * @author Leonardo Uribe
+ *
+ */
+@JSFRenderer(renderKitId = "HTML_BASIC", family = "javax.faces.Output", type = "javax.faces.Doctype")
+public class HtmlDoctypeRenderer extends Renderer
+{
+
+ @Override
+ public void encodeChildren(FacesContext context, UIComponent component)
+ throws IOException
+ {
+ }
+
+ @Override
+ public void encodeEnd(FacesContext context, UIComponent component)
+ throws IOException
+ {
+ super.encodeEnd(context, component);
+
+ ResponseWriter writer = context.getResponseWriter();
+
+ Map<String, Object> attributes = component.getAttributes();
+ //<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+ writer.write("<!DOCTYPE ");
+ writer.write((String) attributes.get("rootElement"));
+ String publicValue = (String) attributes.get("public");
+ if (publicValue != null && publicValue.length() > 0)
+ {
+ writer.write(" PUBLIC \"");
+ writer.write(publicValue);
+ writer.write("\"");
+ }
+ String systemValue = (String) attributes.get("system");
+ if (systemValue != null && systemValue.length() > 0)
+ {
+ writer.write(" \"");
+ writer.write(systemValue);
+ writer.write("\"");
+ }
+ writer.write(">");
+ }
+}
\ No newline at end of file
Added: myfaces/core/branches/2.1.x/impl/src/test/java/org/apache/myfaces/renderkit/html/HtmlDoctypeRendererTest.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.1.x/impl/src/test/java/org/apache/myfaces/renderkit/html/HtmlDoctypeRendererTest.java?rev=1087850&view=auto
==============================================================================
--- myfaces/core/branches/2.1.x/impl/src/test/java/org/apache/myfaces/renderkit/html/HtmlDoctypeRendererTest.java (added)
+++ myfaces/core/branches/2.1.x/impl/src/test/java/org/apache/myfaces/renderkit/html/HtmlDoctypeRendererTest.java Fri Apr 1 18:57:44 2011
@@ -0,0 +1,106 @@
+/*
+ * 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.html.HtmlDoctype;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.apache.myfaces.test.base.AbstractJsfTestCase;
+import org.apache.myfaces.test.mock.MockRenderKitFactory;
+import org.apache.myfaces.test.mock.MockResponseWriter;
+import org.apache.myfaces.test.utils.HtmlCheckAttributesUtil;
+import org.apache.myfaces.test.utils.HtmlRenderedAttr;
+import org.junit.Assert;
+
+/**
+ * @author Leonardo Uribe
+ */
+public class HtmlDoctypeRendererTest extends AbstractJsfTestCase
+{
+
+ private MockResponseWriter writer ;
+ private HtmlDoctype doctype;
+
+ public HtmlDoctypeRendererTest(String name)
+ {
+ super(name);
+ }
+
+ public static Test suite() {
+ return new TestSuite(HtmlDoctypeRendererTest.class);
+ }
+
+ public void setUp() throws Exception
+ {
+ super.setUp();
+
+ doctype = new HtmlDoctype();
+
+ writer = new MockResponseWriter(new StringWriter(), null, null);
+ facesContext.setResponseWriter(writer);
+
+ facesContext.getViewRoot().setRenderKitId(MockRenderKitFactory.HTML_BASIC_RENDER_KIT);
+ facesContext.getRenderKit().addRenderer(
+ doctype.getFamily(),
+ doctype.getRendererType(),
+ new HtmlDoctypeRenderer());
+
+ facesContext.getAttributes().put("org.apache.myfaces.RENDERED_JSF_JS", Boolean.TRUE);
+ }
+
+ public void tearDown()throws Exception
+ {
+ super.tearDown();
+ writer = null;
+ }
+
+ public void testHtmlPropertyPassTru() throws Exception
+ {
+ HtmlRenderedAttr[] attrs = {
+ new HtmlRenderedAttr("rootElement","rootElement", "rootElement"),
+ new HtmlRenderedAttr("public","-//W3C//DTD XHTML 1.0 Transitional//EN", "\"-//W3C//DTD XHTML 1.0 Transitional//EN\""),
+ new HtmlRenderedAttr("system","http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd", "\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"")
+ };
+
+ HtmlCheckAttributesUtil.checkRenderedAttributes(
+ doctype, facesContext, writer, attrs);
+ if(HtmlCheckAttributesUtil.hasFailedAttrRender(attrs)) {
+ fail(HtmlCheckAttributesUtil.constructErrorMessage(attrs, writer.getWriter().toString()));
+ }
+
+ Assert.assertTrue("Does not match with: <!DOCTYPE rootElement PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">",
+ writer.getWriter().toString().contains("<!DOCTYPE rootElement PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">"));
+ }
+
+ public void testHtml5Doctype() throws Exception
+ {
+ doctype.setRootElement("html");
+
+ doctype.encodeAll(facesContext);
+ facesContext.renderResponse();
+
+ Assert.assertTrue("Does not match with: <!DOCTYPE html>",
+ writer.getWriter().toString().contains("<!DOCTYPE html>"));
+ }
+
+}