blob: 9665d14e2e7d6f6b7d99d6614554cb37e4abc645 [file] [log] [blame]
/*
* 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.view.facelets.tag.jsf.html;
import java.io.StringWriter;
import javax.faces.component.UIComponent;
import javax.faces.component.UIForm;
import javax.faces.component.UIInput;
import javax.faces.component.UIOutput;
import javax.faces.component.UIViewRoot;
import javax.faces.component.html.HtmlBody;
import javax.faces.component.html.HtmlCommandButton;
import javax.faces.component.html.HtmlCommandLink;
import javax.faces.component.html.HtmlGraphicImage;
import javax.faces.component.html.HtmlHead;
import javax.faces.component.html.HtmlInputFile;
import javax.faces.component.html.HtmlInputHidden;
import javax.faces.component.html.HtmlInputSecret;
import javax.faces.component.html.HtmlInputText;
import javax.faces.component.html.HtmlInputTextarea;
import javax.faces.component.html.HtmlOutcomeTargetButton;
import javax.faces.component.html.HtmlOutcomeTargetLink;
import javax.faces.component.html.HtmlOutputLabel;
import javax.faces.component.html.HtmlOutputLink;
import javax.faces.component.html.HtmlSelectBooleanCheckbox;
import javax.faces.component.html.HtmlSelectManyListbox;
import javax.faces.component.html.HtmlSelectOneListbox;
import javax.faces.context.ResponseWriter;
import javax.faces.view.Location;
import javax.faces.view.facelets.Tag;
import javax.faces.view.facelets.TagAttribute;
import javax.faces.view.facelets.TagDecorator;
import org.apache.myfaces.config.MyfacesConfig;
import org.apache.myfaces.renderkit.html.HtmlResponseWriterImpl;
import org.apache.myfaces.renderkit.html.util.ResourceUtils;
import org.apache.myfaces.test.utils.HtmlCheckAttributesUtil;
import org.apache.myfaces.test.utils.HtmlRenderedAttr;
import org.apache.myfaces.view.facelets.FaceletTestCase;
import org.apache.myfaces.view.facelets.tag.TagAttributeImpl;
import org.apache.myfaces.view.facelets.tag.TagAttributesImpl;
import org.junit.Assert;
import org.junit.Test;
/**
*
* @author Leonardo Uribe
*/
public class DefaultHtmlDecoratorTestCase extends FaceletTestCase
{
@Override
protected void setUpServletObjects() throws Exception
{
super.setUpServletObjects();
//servletContext.addInitParameter(FaceletViewDeclarationLanguage.PARAM_DECORATORS,
// DefaultTagDecorator.class.getName());
servletContext.addInitParameter(MyfacesConfig.RENDER_CLIENTBEHAVIOR_SCRIPTS_AS_STRING, "true");
}
@Test
public void testHtmlPassthrough1() throws Exception
{
request.getSession().setAttribute("test", new MockBean());
UIViewRoot root = facesContext.getViewRoot();
vdl.buildView(facesContext, root, "testHtmlPassthrough1.xhtml");
checkTags();
//StringWriter sw = new StringWriter();
//MockResponseWriter mrw = new MockResponseWriter(sw);
//facesContext.setResponseWriter(mrw);
//sw.flush();
}
@Test
public void testHtmlPassthrough2() throws Exception
{
request.getSession().setAttribute("test", new MockBean());
UIViewRoot root = facesContext.getViewRoot();
vdl.buildView(facesContext, root, "testHtmlPassthrough2.xhtml");
checkTags();
//StringWriter sw = new StringWriter();
//MockResponseWriter mrw = new MockResponseWriter(sw);
//facesContext.setResponseWriter(mrw);
//sw.flush();
}
private void checkTags() throws Exception
{
UIViewRoot root = facesContext.getViewRoot();
HtmlHead head = (HtmlHead) root.findComponent("idHead");
int linksFound = 0;
int scriptsFound = 0;
for (UIComponent child : head.getChildren())
{
if (child instanceof UIOutput)
{
if (ResourceUtils.DEFAULT_SCRIPT_RENDERER_TYPE.equals(child.getRendererType()))
{
Assert.assertEquals("osc", child.getId());
scriptsFound++;
}
if (ResourceUtils.DEFAULT_STYLESHEET_RENDERER_TYPE.equals(child.getRendererType()))
{
Assert.assertEquals("osh", child.getId());
linksFound++;
}
}
}
for (UIComponent child : root.getComponentResources(facesContext, "head"))
{
if ("javax.faces.resource.Stylesheet".equals(child.getRendererType()))
{
Assert.assertEquals("osh", child.getId());
linksFound++;
}
}
Assert.assertEquals(1, linksFound);
Assert.assertEquals(1, scriptsFound);
HtmlBody body = (HtmlBody) root.findComponent("idBody");
Assert.assertNotNull(body);
UIForm form = (UIForm) root.findComponent("myForm");
Assert.assertNotNull(form);
HtmlCommandLink link1 = (HtmlCommandLink) form.findComponent("link1");
Assert.assertNotNull(link1);
Assert.assertEquals("#{test.testAction}", link1.getActionExpression().getExpressionString());
HtmlCommandLink link2 = (HtmlCommandLink) form.findComponent("link2");
Assert.assertNotNull(link2);
Assert.assertEquals(1, link2.getActionListeners().length);
HtmlOutputLink link3 = (HtmlOutputLink) form.findComponent("link3");
Assert.assertNotNull(link3);
Assert.assertEquals("/my/new/location.txt", link3.getValue());
HtmlOutcomeTargetLink link4 = (HtmlOutcomeTargetLink) form.findComponent("link4");
Assert.assertNotNull(link4);
Assert.assertEquals("rollback", link4.getOutcome());
HtmlCommandButton button = (HtmlCommandButton) form.findComponent("button1");
Assert.assertNotNull(button);
Assert.assertEquals("#{test.testAction}", button.getActionExpression().getExpressionString());
HtmlOutcomeTargetButton button2 = (HtmlOutcomeTargetButton) form.findComponent("button2");
Assert.assertNotNull(button2);
Assert.assertEquals("rollback", button2.getOutcome());
HtmlGraphicImage img1 = (HtmlGraphicImage) form.findComponent("img1");
Assert.assertNotNull(img1);
Assert.assertEquals("/my/image.png", img1.getUrl());
HtmlCommandButton input1 = (HtmlCommandButton) form.findComponent("input1");
Assert.assertNotNull(input1);
HtmlSelectBooleanCheckbox input2 = (HtmlSelectBooleanCheckbox) form.findComponent("input2");
Assert.assertNotNull(input2);
HtmlInputText input3 = (HtmlInputText) form.findComponent("input3");
Assert.assertNotNull(input3);
HtmlInputText input4 = (HtmlInputText) form.findComponent("input4");
Assert.assertNotNull(input4);
HtmlInputText input5 = (HtmlInputText) form.findComponent("input5");
Assert.assertNotNull(input5);
HtmlInputText input6 = (HtmlInputText) form.findComponent("input6");
Assert.assertNotNull(input6);
HtmlInputText input7 = (HtmlInputText) form.findComponent("input7");
Assert.assertNotNull(input7);
HtmlInputText input8 = (HtmlInputText) form.findComponent("input8");
Assert.assertNotNull(input8);
HtmlInputText input9 = (HtmlInputText) form.findComponent("input9");
Assert.assertNotNull(input9);
HtmlInputText input10 = (HtmlInputText) form.findComponent("input10");
Assert.assertNotNull(input10);
HtmlInputText input11 = (HtmlInputText) form.findComponent("input11");
Assert.assertNotNull(input11);
HtmlInputText input12 = (HtmlInputText) form.findComponent("input12");
Assert.assertNotNull(input12);
HtmlInputText input13 = (HtmlInputText) form.findComponent("input13");
Assert.assertNotNull(input13);
HtmlInputText input14 = (HtmlInputText) form.findComponent("input14");
Assert.assertNotNull(input14);
HtmlInputFile input15 = (HtmlInputFile) form.findComponent("input15");
Assert.assertNotNull(input15);
HtmlInputHidden input16 = (HtmlInputHidden) form.findComponent("input16");
Assert.assertNotNull(input16);
HtmlInputSecret input17 = (HtmlInputSecret) form.findComponent("input17");
Assert.assertNotNull(input17);
HtmlCommandButton input18 = (HtmlCommandButton) form.findComponent("input18");
Assert.assertNotNull(input18);
HtmlCommandButton input19 = (HtmlCommandButton) form.findComponent("input19");
Assert.assertNotNull(input19);
HtmlInputText input20 = (HtmlInputText) form.findComponent("input20");
Assert.assertNotNull(input20);
HtmlOutputLabel label1 = (HtmlOutputLabel) form.findComponent("label1");
Assert.assertNotNull(label1);
HtmlSelectOneListbox select1 = (HtmlSelectOneListbox) form.findComponent("select1");
Assert.assertNotNull(select1);
HtmlSelectManyListbox select2 = (HtmlSelectManyListbox) form.findComponent("select2");
Assert.assertNotNull(select2);
HtmlInputTextarea textarea1 = (HtmlInputTextarea) form.findComponent("textarea1");
Assert.assertNotNull(textarea1);
}
@Test
public void testDefaultTagDecorator1() throws Exception
{
Location location = new Location("/test.xhtml", 20, 5);
Tag tag = new Tag(location, DefaultTagDecorator.XHTML_NAMESPACE, "body", "body",
new TagAttributesImpl(new TagAttribute[]
{
new TagAttributeImpl(location, DefaultTagDecorator.JSF_NAMESPACE, "id", "jsf:id", "idBody")
}
));
TagDecorator tagDecorator = new DefaultTagDecorator();
Tag decoratedTag = tagDecorator.decorate(tag);
Assert.assertNotNull(decoratedTag);
}
@Test
public void testDefaultTagDecorator2() throws Exception
{
Location location = new Location("/test.xhtml", 20, 5);
Tag tag = new Tag(location, DefaultTagDecorator.XHTML_NAMESPACE, "a", "a",
new TagAttributesImpl(new TagAttribute[]
{
new TagAttributeImpl(location, DefaultTagDecorator.JSF_NAMESPACE, "action", "jsf:action", "#{test.testAction}")
}
));
TagDecorator tagDecorator = new DefaultTagDecorator();
Tag decoratedTag = tagDecorator.decorate(tag);
Assert.assertNotNull(decoratedTag);
}
@Test
public void testDefaultTagDecorator3() throws Exception
{
Location location = new Location("/test.xhtml", 20, 5);
Tag tag = new Tag(location, DefaultTagDecorator.XHTML_NAMESPACE, "body", "body",
new TagAttributesImpl(new TagAttribute[]
{
new TagAttributeImpl(location, DefaultTagDecorator.JSF_ALIAS_NAMESPACE, "id", "jsf:id", "idBody")
}
));
TagDecorator tagDecorator = new DefaultTagDecorator();
Tag decoratedTag = tagDecorator.decorate(tag);
Assert.assertNotNull(decoratedTag);
}
@Test
public void testDefaultTagDecorator4() throws Exception
{
Location location = new Location("/test.xhtml", 20, 5);
Tag tag = new Tag(location, DefaultTagDecorator.XHTML_NAMESPACE, "a", "a",
new TagAttributesImpl(new TagAttribute[]
{
new TagAttributeImpl(location, DefaultTagDecorator.JSF_ALIAS_NAMESPACE, "action", "jsf:action", "#{test.testAction}")
}
));
TagDecorator tagDecorator = new DefaultTagDecorator();
Tag decoratedTag = tagDecorator.decorate(tag);
Assert.assertNotNull(decoratedTag);
}
@Test
public void testNoMatchJSFElement1() throws Exception
{
request.getSession().setAttribute("test", new MockBean());
UIViewRoot root = facesContext.getViewRoot();
vdl.buildView(facesContext, root, "testNoMatchJSFElement1.xhtml");
UIComponent box1 = root.findComponent("myForm:box1");
Assert.assertNotNull(box1);
Assert.assertEquals(box1.getRendererType(), "javax.faces.passthrough.Element");
//StringWriter sw = new StringWriter();
//MockResponseWriter mrw = new MockResponseWriter(sw);
//facesContext.setResponseWriter(mrw);
//sw.flush();
}
@Test
public void testConvertTagAttributes1() throws Exception
{
request.getSession().setAttribute("test", new MockBean());
UIViewRoot root = facesContext.getViewRoot();
vdl.buildView(facesContext, root, "testConvertTagAttributes1.xhtml");
//<input jsf:id="box1" type="text"
// jsf:value="#{test.value}" jsf:customAttr="SomeValue"
// onclick="alert('hello')"
// placeholder="Enter text"
// pt:data_up="Going Up"/>
UIInput input1 = (UIInput) root.findComponent("myForm:box1");
Assert.assertNotNull(input1);
Assert.assertEquals(input1.getPassThroughAttributes().get("placeholder"), "Enter text");
Assert.assertNull(input1.getAttributes().get("placeholder"));
Assert.assertEquals(input1.getAttributes().get("customAttr"), "SomeValue");
// Attributes outside "id", "binding", "rendered" or "transient" can be
// copied on passthrough attribute map.
Assert.assertNull(input1.getPassThroughAttributes().get("customAttr"));
Assert.assertEquals(input1.getPassThroughAttributes().get("data_up"), "Going Up");
Assert.assertNull(input1.getAttributes().get("data_up"));
Assert.assertNotNull(input1.getValueExpression("value"));
//Assert.assertNotNull(input1.getPassThroughAttributes().get("value"));
Assert.assertNull(input1.getPassThroughAttributes().get("value"));
Assert.assertEquals(input1.getValue(), "value1");
Assert.assertEquals(input1.getAttributes().get("value"), "value1");
//<input jsf:id="box2" pt:elementName="meter"
// jsf:value="#{test.value}" jsf:customAttr="SomeValue"
// onclick="alert('hello')"
// placeholder="Enter text"
// pt:data_up="Going Up">Hello World!</input>
UIComponent input2 = root.findComponent("myForm:box2");
Assert.assertFalse(input2 instanceof UIInput);
Assert.assertEquals(input2.getRendererType(), "javax.faces.passthrough.Element");
Assert.assertEquals(input2.getPassThroughAttributes().get("placeholder"), "Enter text");
//Assert.assertEquals(input2.getAttributes().get("placeholder"), "Enter text");
Assert.assertNull(input2.getAttributes().get("placeholder"));
Assert.assertEquals(input2.getAttributes().get("customAttr"), "SomeValue");
//Assert.assertNull(input2.getAttributes().get("customAttr"));
//Assert.assertEquals(input2.getPassThroughAttributes().get("customAttr"), "SomeValue");
Assert.assertNull(input2.getPassThroughAttributes().get("customAttr"));
Assert.assertEquals(input2.getPassThroughAttributes().get("data_up"), "Going Up");
Assert.assertNull(input2.getAttributes().get("data_up"));
// note there is no type attribute, so it is translated into a jsf:element, and in that
// component, "value" is not defined, so it is set as passthrough
Assert.assertNotNull(input2.getValueExpression("value"));
Assert.assertNull(input2.getPassThroughAttributes().get("value"));
Assert.assertNotNull(input2.getAttributes().get("value"));
//<jsf:element id="box3" elementName="meter"
// value="#{test.value}" customAttr="SomeValue"
// onclick="alert('hello')"
// placeholder="Enter text"
// pt:data_up="Going Up">
// Hello Element!
//</jsf:element>
UIComponent input3 = root.findComponent("myForm:box3");
Assert.assertFalse(input3 instanceof UIInput);
Assert.assertEquals(input3.getRendererType(), "javax.faces.passthrough.Element");
Assert.assertEquals(input3.getAttributes().get("placeholder"), "Enter text");
Assert.assertNull(input3.getPassThroughAttributes().get("placeholder"));
Assert.assertNull(input3.getPassThroughAttributes().get("customAttr"));
Assert.assertEquals(input3.getAttributes().get("customAttr"), "SomeValue");
Assert.assertEquals(input3.getPassThroughAttributes().get("data_up"), "Going Up");
Assert.assertNull(input3.getAttributes().get("data_up"));
Assert.assertNotNull(input3.getValueExpression("value"));
Assert.assertNull(input3.getPassThroughAttributes().get("value"));
Assert.assertNotNull(input3.getAttributes().get("value"));
//Assert.assertEquals(input2.getPassThroughAttributes().get("elementName"), "meter");
//<h:panelGroup id="box4">
//<div jsf:class="noprint">
// MYBOX4
//</div>
//</h:panelGroup>
UIComponent box4 = root.findComponent("myForm:box4");
Assert.assertNotNull(box4);
UIComponent boxDiv4 = box4.getChildren().get(0);
Assert.assertNotNull(boxDiv4);
Assert.assertEquals(boxDiv4.getAttributes().get("styleClass"), "noprint");
//Assert.assertEquals(boxDiv4.getPassThroughAttributes().get("class"), "noprint");
Assert.assertNull(boxDiv4.getPassThroughAttributes().get("class"));
//<h:panelGroup id="box5">
//<div jsf:style="noprint">
// MYBOX5
//</div>
//</h:panelGroup>
UIComponent box5 = root.findComponent("myForm:box5");
Assert.assertNotNull(box5);
UIComponent boxDiv5 = box5.getChildren().get(0);
Assert.assertNotNull(boxDiv5);
Assert.assertNotNull(boxDiv5.getAttributes().get("style"));
//Assert.assertEquals(boxDiv5.getPassThroughAttributes().get("style"), "noprint");
Assert.assertNull(boxDiv5.getPassThroughAttributes().get("style"));
StringWriter sw = new StringWriter();
ResponseWriter mrw = new HtmlResponseWriterImpl(sw, "text/html", "UTF-8");
facesContext.setResponseWriter(mrw);
HtmlRenderedAttr[] attrs = {
new HtmlRenderedAttr("data_up", "Going Up"),
new HtmlRenderedAttr("placeholder", "Enter text"),
new HtmlRenderedAttr("onclick", "alert('hello')"),
//new HtmlRenderedAttr("customAttr", "SomeValue"),
new HtmlRenderedAttr("value", "value1")
};
input1.encodeAll(facesContext);
sw.flush();
HtmlCheckAttributesUtil.checkRenderedAttributes(attrs, sw.toString());
if(HtmlCheckAttributesUtil.hasFailedAttrRender(attrs))
{
Assert.fail(HtmlCheckAttributesUtil.constructErrorMessage(attrs, sw.toString()));
}
sw = new StringWriter();
mrw = new HtmlResponseWriterImpl(sw, "text/html", "UTF-8");
facesContext.setResponseWriter(mrw);
input2.encodeAll(facesContext);
sw.flush();
attrs = new HtmlRenderedAttr[]{
new HtmlRenderedAttr("data_up", "Going Up"),
new HtmlRenderedAttr("onclick", "alert('hello')"),
//new HtmlRenderedAttr("customAttr", "SomeValue"),
new HtmlRenderedAttr("placeholder", "Enter text")
};
HtmlCheckAttributesUtil.checkRenderedAttributes(attrs, sw.toString());
if(HtmlCheckAttributesUtil.hasFailedAttrRender(attrs))
{
Assert.fail(HtmlCheckAttributesUtil.constructErrorMessage(attrs, sw.toString()));
}
Assert.assertTrue(sw.toString().contains("<meter "));
Assert.assertTrue(sw.toString().contains("</meter>"));
sw = new StringWriter();
mrw = new HtmlResponseWriterImpl(sw, "text/html", "UTF-8");
facesContext.setResponseWriter(mrw);
input3.encodeAll(facesContext);
sw.flush();
attrs = new HtmlRenderedAttr[]{
new HtmlRenderedAttr("data_up", "Going Up"),
//new HtmlRenderedAttr("placeholder", "Enter text"),
//new HtmlRenderedAttr("customAttr", "SomeValue"),
//new HtmlRenderedAttr("value", "value1"),
new HtmlRenderedAttr("onclick", "alert('hello')"),
};
HtmlCheckAttributesUtil.checkRenderedAttributes(attrs, sw.toString());
if(HtmlCheckAttributesUtil.hasFailedAttrRender(attrs))
{
Assert.fail(HtmlCheckAttributesUtil.constructErrorMessage(attrs, sw.toString()));
}
Assert.assertTrue(sw.toString().contains("<meter "));
Assert.assertTrue(sw.toString().contains("</meter>"));
// TEST 4
sw = new StringWriter();
mrw = new HtmlResponseWriterImpl(sw, "text/html", "UTF-8");
facesContext.setResponseWriter(mrw);
boxDiv4.encodeAll(facesContext);
sw.flush();
attrs = new HtmlRenderedAttr[]{
new HtmlRenderedAttr("class", "noprint"),
};
HtmlCheckAttributesUtil.checkRenderedAttributes(attrs, sw.toString());
if(HtmlCheckAttributesUtil.hasFailedAttrRender(attrs))
{
Assert.fail(HtmlCheckAttributesUtil.constructErrorMessage(attrs, sw.toString()));
}
Assert.assertTrue(sw.toString().contains("MYBOX4"));
Assert.assertTrue(sw.toString().contains("<div "));
Assert.assertTrue(sw.toString().contains("</div>"));
// TEST 5
sw = new StringWriter();
mrw = new HtmlResponseWriterImpl(sw, "text/html", "UTF-8");
facesContext.setResponseWriter(mrw);
boxDiv5.encodeAll(facesContext);
sw.flush();
attrs = new HtmlRenderedAttr[]{
new HtmlRenderedAttr("style", "noprint"),
};
HtmlCheckAttributesUtil.checkRenderedAttributes(attrs, sw.toString());
if(HtmlCheckAttributesUtil.hasFailedAttrRender(attrs))
{
Assert.fail(HtmlCheckAttributesUtil.constructErrorMessage(attrs, sw.toString()));
}
Assert.assertTrue(sw.toString().contains("MYBOX5"));
Assert.assertTrue(sw.toString().contains("<div "));
Assert.assertTrue(sw.toString().contains("</div>"));
}
@Test
public void testConvertTagAttributes6() throws Exception
{
request.getSession().setAttribute("test", new MockBean());
UIViewRoot root = facesContext.getViewRoot();
vdl.buildView(facesContext, root, "testConvertTagAttributes6.xhtml");
//<div jsf:id="box6" jsf:onclick="alert('hello')">
// <f:ajax event="click" render="box5"/>
// MYBOX6
//</div>
// Try second time, to avoid the script section by f:ajax effect
UIComponent box6 = root.findComponent("myForm:box6");
Assert.assertNotNull(box6);
Assert.assertEquals(box6.getAttributes().get("onclick"), "alert('hello')");
StringWriter sw = new StringWriter();
ResponseWriter mrw = new HtmlResponseWriterImpl(sw, "text/html", "UTF-8");
facesContext.setResponseWriter(mrw);
box6.encodeAll(facesContext);
sw.flush();
HtmlRenderedAttr[] attrs = new HtmlRenderedAttr[]{
new HtmlRenderedAttr("onclick",
"jsf.util.chain(this, event,'alert(\\'hello\\')', "
+ "'myfaces.ab(this,event,\\'click\\',\\'\\',\\'myForm:box5\\')');"),
};
HtmlCheckAttributesUtil.checkRenderedAttributes(attrs, sw.toString());
if(HtmlCheckAttributesUtil.hasFailedAttrRender(attrs))
{
Assert.fail(HtmlCheckAttributesUtil.constructErrorMessage(attrs, sw.toString()));
}
Assert.assertTrue(sw.toString().contains("MYBOX6"));
Assert.assertTrue(sw.toString().contains("<div "));
Assert.assertTrue(sw.toString().contains("</div>"));
}
@Test
public void testConvertTagAttributes7() throws Exception
{
request.getSession().setAttribute("test", new MockBean());
UIViewRoot root = facesContext.getViewRoot();
vdl.buildView(facesContext, root, "testConvertTagAttributes7.xhtml");
//<h:panelGroup id="box7">
// <img jsf:name="external.png" alt="Some Logo"/>
//</h:panelGroup>
UIComponent box7 = root.findComponent("myForm:box7");
Assert.assertNotNull(box7);
UIComponent boxDiv7 = box7.getChildren().get(0);
Assert.assertNotNull(boxDiv7);
StringWriter sw = new StringWriter();
ResponseWriter mrw = new HtmlResponseWriterImpl(sw, "text/html", "UTF-8");
facesContext.setResponseWriter(mrw);
boxDiv7.encodeAll(facesContext);
sw.flush();
HtmlRenderedAttr[] attrs = new HtmlRenderedAttr[]{
new HtmlRenderedAttr("alt", "Some Logo"),
};
HtmlCheckAttributesUtil.checkRenderedAttributes(attrs, sw.toString());
if(HtmlCheckAttributesUtil.hasFailedAttrRender(attrs))
{
Assert.fail(HtmlCheckAttributesUtil.constructErrorMessage(attrs, sw.toString()));
}
Assert.assertTrue(sw.toString().contains("<img "));
Assert.assertTrue(sw.toString().contains("javax.faces.resource/external.png"));
}
}