View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.myfaces.renderkit.html;
20  
21  import java.io.StringWriter;
22  
23  import javax.faces.component.behavior.AjaxBehavior;
24  import javax.faces.component.html.HtmlGraphicImage;
25  
26  import junit.framework.Test;
27  import junit.framework.TestSuite;
28  
29  import org.apache.myfaces.test.utils.HtmlCheckAttributesUtil;
30  import org.apache.myfaces.test.utils.HtmlRenderedAttr;
31  import org.apache.myfaces.test.base.AbstractJsfTestCase;
32  import org.apache.myfaces.test.mock.MockRenderKitFactory;
33  import org.apache.myfaces.test.mock.MockResponseWriter;
34  
35  /**
36   * @author Bruno Aranda (latest modification by $Author: bommel $)
37   * @version $Revision: 1187701 $ $Date: 2011-10-22 07:21:54 -0500 (Sat, 22 Oct 2011) $
38   */
39  public class HtmlImageRendererTest extends AbstractJsfTestCase
40  {
41      private MockResponseWriter writer ;
42      private HtmlGraphicImage graphicImage;
43      
44      public HtmlImageRendererTest(String name)
45      {
46          super(name);
47      }
48      
49      public static Test suite() {
50          return new TestSuite(HtmlImageRendererTest.class);
51      }
52  
53      public void setUp() throws Exception
54      {
55          super.setUp();
56  
57          graphicImage = new HtmlGraphicImage();
58  
59          writer = new MockResponseWriter(new StringWriter(), null, null);
60          facesContext.setResponseWriter(writer);
61  
62          facesContext.getViewRoot().setRenderKitId(MockRenderKitFactory.HTML_BASIC_RENDER_KIT);
63          facesContext.getRenderKit().addRenderer(
64                  graphicImage.getFamily(),
65                  graphicImage.getRendererType(),
66                  new HtmlImageRenderer());
67          facesContext.getAttributes().put("org.apache.myfaces.RENDERED_JSF_JS", Boolean.TRUE);
68      }
69  
70      public void tearDown() throws Exception
71      {
72          super.tearDown();
73          graphicImage = null;
74          writer = null;
75      }
76  
77      public void testRenderDefault() throws Exception
78      {
79          String imgUrl = "http://www.apache.org/images/feather.gif";
80          String src = facesContext.getApplication().getViewHandler().getResourceURL(facesContext, imgUrl);
81          
82          graphicImage.setId("img1");
83          graphicImage.setValue(imgUrl);
84          graphicImage.encodeBegin(facesContext);
85          graphicImage.encodeChildren(facesContext);
86          graphicImage.encodeEnd(facesContext);
87          facesContext.renderResponse();
88  
89          String output = writer.getWriter().toString();
90          assertEquals("<img id=\"img1\" src=\"" + src + "\"/>", output);
91      }
92  
93      public void testHtmlPropertyPassTru() throws Exception
94      { 
95          HtmlRenderedAttr[] attrs = HtmlCheckAttributesUtil.generateBasicReadOnlyAttrs();
96          
97          graphicImage.setId("img1");
98          graphicImage.setValue("http://www.apache.org/images/feather.gif");
99          
100         HtmlCheckAttributesUtil.checkRenderedAttributes(
101                 graphicImage, facesContext, writer, attrs);
102         if(HtmlCheckAttributesUtil.hasFailedAttrRender(attrs)) {
103             fail(HtmlCheckAttributesUtil.constructErrorMessage(attrs, writer.getWriter().toString()));
104         }
105     }
106     
107     public void testHtmlPropertyPassTruNotRendered() throws Exception
108     { 
109         HtmlRenderedAttr[] attrs = HtmlCheckAttributesUtil.generateAttrsNotRenderedForReadOnly();
110         
111         graphicImage.setId("img1");
112         graphicImage.setValue("http://www.apache.org/images/feather.gif");
113         
114         HtmlCheckAttributesUtil.checkRenderedAttributes(
115                 graphicImage, facesContext, writer, attrs);
116         if(HtmlCheckAttributesUtil.hasFailedAttrRender(attrs)) {
117             fail(HtmlCheckAttributesUtil.constructErrorMessage(attrs, writer.getWriter().toString()));
118         }
119     }
120     
121     /**
122      * Components that render client behaviors should always render "id" and "name" attribute
123      */
124     public void testClientBehaviorHolderRendersIdAndName() 
125     {
126         graphicImage.addClientBehavior("keypress", new AjaxBehavior());
127         try 
128         {
129             graphicImage.encodeAll(facesContext);
130             String output = ((StringWriter) writer.getWriter()).getBuffer().toString();
131             assertTrue(output.matches(".+id=\".+\".+"));
132             assertTrue(output.matches(".+name=\".+\".+"));
133         }
134         catch (Exception e)
135         {
136             fail(e.getMessage());
137         }
138         
139     }
140 }