View Javadoc

1   package javax.faces.component;
2   import static org.easymock.EasyMock.expect;
3   import static org.testng.Assert.*;
4   
5   import java.lang.reflect.Method;
6   import java.util.ArrayList;
7   import java.util.Collection;
8   import java.util.HashMap;
9   import java.util.Map;
10  
11  import javax.el.ELContext;
12  import javax.el.ELException;
13  import javax.el.ValueExpression;
14  import javax.faces.FacesException;
15  import javax.faces.context.FacesContext;
16  import javax.faces.el.ValueBinding;
17  
18  import org.easymock.EasyMock;
19  import org.testng.annotations.BeforeMethod;
20  import org.testng.annotations.Test;
21  
22  /**
23   * Test for {@link UIComponent#getValueExpression(String)}. and
24   * {@link UIComponent#setValueExpression(String, javax.el.ValueExpression)}.
25   */
26  public class UIComponentValueExpressionTest extends UIComponentTestBase
27  {
28      private UIComponent _testimpl;
29      private ValueExpression _expression;
30      private ELContext _elContext;
31  
32      @Override
33      @BeforeMethod(alwaysRun = true)
34      protected void setUp() throws Exception
35      {
36          super.setUp();
37          Collection<Method> mockedMethods = new ArrayList<Method>();
38          Class<UIComponent> clazz = UIComponent.class;
39          mockedMethods.add(clazz.getDeclaredMethod("getAttributes", null));
40          mockedMethods.add(clazz.getDeclaredMethod("getFacesContext", null));
41          mockedMethods.add(clazz.getDeclaredMethod("getValueBinding", new Class[] { String.class }));
42  
43          _testimpl = _mocksControl.createMock(clazz, mockedMethods.toArray(new Method[mockedMethods.size()]));
44          _expression = _mocksControl.createMock(ValueExpression.class);
45          _elContext = _mocksControl.createMock(ELContext.class);
46          _mocksControl.checkOrder(true);
47      }
48  
49      @Test(expectedExceptions = { NullPointerException.class })
50      public void testValueExpressionArgumentNPE() throws Exception
51      {
52          _testimpl.setValueExpression(null, _expression);
53      }
54  
55      @Test(expectedExceptions = { IllegalArgumentException.class })
56      public void testValueExpressionArgumentId() throws Exception
57      {
58          _testimpl.setValueExpression("id", _expression);
59      }
60  
61      @Test(expectedExceptions = { IllegalArgumentException.class })
62      public void testValueExpressionArgumentsParent() throws Exception
63      {
64          _testimpl.setValueExpression("parent", _expression);
65      }
66  
67      @Test
68      public void testValueExpression() throws Exception
69      {
70          expect(_expression.isLiteralText()).andReturn(false);
71          _mocksControl.replay();
72          _testimpl.setValueExpression("xxx", _expression);
73          _mocksControl.verify();
74          assertEquals(_expression, _testimpl.getValueExpression("xxx"));
75          _testimpl.setValueExpression("xxx", null);
76          _mocksControl.verify();
77  
78          assertNull(_testimpl.getValueExpression("xxx"));
79          assertNull(_testimpl.bindings);
80      }
81  
82      @Test(expectedExceptions = { FacesException.class })
83      public void testValueExpressionWithExceptionOnGetValue() throws Exception
84      {
85          expect(_expression.isLiteralText()).andReturn(true);
86          expect(_testimpl.getFacesContext()).andReturn(_facesContext);
87          expect(_facesContext.getELContext()).andReturn(_elContext);
88          expect(_expression.getValue(EasyMock.eq(_elContext))).andThrow(new ELException());
89          Map map = new HashMap();
90          expect(_testimpl.getAttributes()).andReturn(map);
91          _mocksControl.replay();
92          _testimpl.setValueExpression("xxx", _expression);
93      }
94  
95      @Test
96      public void testValueExpressionWithLiteralText() throws Exception
97      {
98          expect(_expression.isLiteralText()).andReturn(true);
99          expect(_testimpl.getFacesContext()).andReturn(_facesContext);
100         expect(_facesContext.getELContext()).andReturn(_elContext);
101         expect(_expression.getValue(EasyMock.eq(_elContext))).andReturn("abc");
102         Map map = new HashMap();
103         expect(_testimpl.getAttributes()).andReturn(map);
104         _mocksControl.replay();
105         _testimpl.setValueExpression("xxx", _expression);
106         assertEquals("abc", map.get("xxx"));
107         _mocksControl.verify();
108         assertNull(_testimpl.getValueExpression("xxx"));
109     }
110 
111     @Test
112     public void testValueExpressionWithValueBindingFallback() throws Exception
113     {
114         ValueBinding valueBinding = _mocksControl.createMock(ValueBinding.class);
115         expect(_testimpl.getValueBinding("xxx")).andReturn(valueBinding);
116         _mocksControl.replay();
117         ValueExpression valueExpression = _testimpl.getValueExpression("xxx");
118         _mocksControl.verify();
119         assertTrue(valueExpression instanceof _ValueBindingToValueExpression);
120         _mocksControl.reset();
121         expect(_elContext.getContext(EasyMock.eq(FacesContext.class))).andReturn(_facesContext);
122         expect(valueBinding.getValue(EasyMock.eq(_facesContext))).andReturn("value");
123         _mocksControl.replay();
124         assertEquals("value", valueExpression.getValue(_elContext));
125         _mocksControl.verify();
126     }
127 }