}
private void testHigherOrderMethod(Component c)
throws Exception{
try{
final Component sz0 = c.method("size");
final Container yan = createYanContainer();
yan.registerComponent("list", c);
yan.registerComponent("size", sz0);
assertEquals(new Integer(0), yan.getInstance("size"));
final Component sz1 = c.followedBy(new Binder(){
public Creator bind(Object l){
return Components.value(l).method("add", new Class[]{Object.class})
.withArgument(0, Components.useKey("elem1"));
}
}).method("size", null);
yan.registerValue("elem1", "val1");
yan.registerComponent("size", sz1);
assertEquals(new Integer(1), yan.getInstance("size"));
final Component sz2 = c.followedBy(new Binder(){
public Creator bind(Object l){
final Component adder =
Components.value(l).method("add", new Class[]{Object.class});
return adder
.withArgument(0, Components.useKey("elem1"))
.seq(adder.withArgument(0, Components.useKey("elem2")));
}
}).method(java.util.List.class.getMethod("size", new Class[0]));
yan.registerValue("elem2", "val2");
yan.registerComponent("size", sz2);
assertEquals(new Integer(2), yan.getInstance("size"));
assertFalse(sz0.equals(sz1));
assertFalse(sz1.equals(sz0));
assertFalse(sz0.equals(sz2));
assertFalse(sz2.equals(sz0));
assertFalse(sz2.equals(sz1));