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.behavior;
20  
21  import javax.faces.component.UIComponent;
22  import javax.faces.component.behavior.AjaxBehavior;
23  import javax.faces.component.behavior.ClientBehaviorHolder;
24  import javax.faces.component.html.HtmlBody;
25  
26  import org.apache.myfaces.shared.renderkit.ClientBehaviorEvents;
27  import org.apache.myfaces.shared.renderkit.html.HTML;
28  import org.junit.Assert;
29  
30  /**
31   * @author Leonardo Uribe (latest modification by $Author: struberg $)
32   * @version $Revision: 1188694 $ $Date: 2011-10-25 10:07:44 -0500 (Tue, 25 Oct 2011) $
33   */
34  public class HtmlBodyClientBehaviorRendererTest extends AbstractClientBehaviorTestCase
35  {
36      private HtmlRenderedClientEventAttr[] attrs = null;
37      
38      @Override
39      public void setUp() throws Exception
40      {
41          super.setUp();
42          attrs = (HtmlRenderedClientEventAttr[]) 
43              org.apache.myfaces.shared.util.ArrayUtils.concat( 
44                      HtmlClientEventAttributesUtil.generateClientBehaviorEventAttrs(),
45                  new HtmlRenderedClientEventAttr[]{
46                      new HtmlRenderedClientEventAttr(HTML.ONLOAD_ATTR, ClientBehaviorEvents.LOAD),
47                      new HtmlRenderedClientEventAttr(HTML.ONUNLOAD_ATTR, ClientBehaviorEvents.UNLOAD)
48                  });
49      }
50  
51      @Override
52      public void tearDown() throws Exception
53      {
54          super.tearDown();
55          attrs = null;
56      }
57  
58      @Override
59      protected UIComponent createComponentToTest()
60      {
61          return new HtmlBody();
62      }
63  
64      @Override
65      protected HtmlRenderedClientEventAttr[] getClientBehaviorHtmlRenderedAttributes()
66      {
67          return attrs;
68      }
69      
70      /**
71       * Components that render client behaviors should always render "id" and "name" attribute
72       * <body> does not have "name", so we just need to check "id"
73       */
74      public void testClientBehaviorHolderRendersIdAndName() 
75      {
76          HtmlRenderedClientEventAttr[] attrs = getClientBehaviorHtmlRenderedAttributes();
77          
78          for (int i = 0; i < attrs.length; i++)
79          {
80              UIComponent component = createComponentToTest();
81              ClientBehaviorHolder clientBehaviorHolder = (ClientBehaviorHolder) component;
82              clientBehaviorHolder.addClientBehavior(attrs[i].getClientEvent(), new AjaxBehavior());
83              try 
84              {
85                  component.encodeAll(facesContext);
86                  String output = outputWriter.toString();
87                  Assert.assertTrue(output.matches(".+ id=\".+\".+"));
88                  outputWriter.reset();
89              }
90              catch (Exception e)
91              {
92                  Assert.fail(e.getMessage());
93              }
94          }
95      }
96  
97  }