001 package org.apache.tapestry.binding; 002 003 import org.apache.hivemind.ApplicationRuntimeException; 004 import org.apache.hivemind.Location; 005 import org.apache.tapestry.IComponent; 006 import org.apache.tapestry.coerce.ValueConverter; 007 import static org.easymock.EasyMock.checkOrder; 008 import static org.easymock.EasyMock.expect; 009 import org.testng.annotations.Test; 010 011 import java.util.Arrays; 012 import java.util.HashMap; 013 import java.util.List; 014 import java.util.Map; 015 016 /** 017 * Tests functionality of {@link ClientIdListBinding}. 018 */ 019 @Test 020 public class TestClientIdListBinding extends BindingTestCase { 021 022 public void test_Single_Component() 023 { 024 IComponent nested = newComponent(); 025 IComponent component = newMock(IComponent.class); 026 ValueConverter vc = newValueConverter(); 027 028 Map comps = new HashMap(); 029 comps.put("foo", nested); 030 031 expect(component.getComponents()).andReturn(comps); 032 expect(component.getComponent("foo")).andReturn(nested); 033 expect(nested.getClientId()).andReturn("fooClientId"); 034 035 List clientIds = Arrays.asList("fooClientId"); 036 037 expect(vc.coerceValue(clientIds, List.class)).andReturn(clientIds); 038 039 Location l = newLocation(); 040 041 replay(); 042 043 ClientIdListBinding b = new ClientIdListBinding("param", vc, l, component, new String[]{"foo"}); 044 045 assert component == b.getComponent(); 046 assertEquals(b.getObject(List.class), Arrays.asList("fooClientId")); 047 048 verify(); 049 } 050 051 public void test_Multiple_Components() 052 { 053 IComponent compA = newComponent(); 054 IComponent compB = newComponent(); 055 ValueConverter vc = newValueConverter(); 056 057 IComponent component = newMock(IComponent.class); 058 checkOrder(component, false); 059 060 Map comps = new HashMap(); 061 comps.put("fred", compA); 062 comps.put("barney", compB); 063 064 expect(component.getComponents()).andReturn(comps).anyTimes(); 065 expect(component.getComponent("fred")).andReturn(compA); 066 expect(compA.getClientId()).andReturn("comp_1"); 067 068 expect(component.getComponent("barney")).andReturn(compB); 069 expect(compB.getClientId()).andReturn("comp_0"); 070 071 List clientIds = Arrays.asList("comp_1", "comp_0"); 072 073 expect(vc.coerceValue(clientIds, List.class)).andReturn(clientIds); 074 075 Location l = newLocation(); 076 077 replay(); 078 079 ClientIdListBinding b = new ClientIdListBinding("param", vc, l, component, new String[]{"fred", "barney"}); 080 081 assert component == b.getComponent(); 082 assertEquals(b.getObject(List.class), Arrays.asList("comp_1", "comp_0")); 083 084 verify(); 085 } 086 087 public void test_Get_Object_Failure() 088 { 089 IComponent component = newMock(IComponent.class); 090 Map comps = new HashMap(); 091 092 expect(component.getComponents()).andReturn(comps); 093 expect(component.getPage()).andReturn(null); 094 095 ValueConverter vc = newValueConverter(); 096 097 Location l = newLocation(); 098 099 replay(); 100 101 ClientIdListBinding b = new ClientIdListBinding("param", vc, l, component, new String[]{"foo"}); 102 103 try 104 { 105 b.getObject(); 106 unreachable(); 107 } 108 catch (ApplicationRuntimeException ex) 109 { 110 assert ex.getMessage().indexOf("id foo not found in container") > -1; 111 assertSame(l, ex.getLocation()); 112 } 113 114 verify(); 115 } 116 }