/**
  * Invoke all delegates containing in the chain.
  * Stops invoking if delegate return a not null result
  *
  */
 function invoke()
 {
     $args = func_get_args();
     return lmbDelegate::invokeChain($this->delegates, $args);
 }
 function testInvokeChain()
 {
     $s1 = new DelegateTestingStub();
     $s2 = new DelegateTestingStub();
     $s3 = new DelegateTestingStub();
     $d1 = new lmbDelegate($s1, 'instanceMethod');
     $d2 = new lmbDelegate($s2, 'instanceReturningMethod');
     //returns argument
     $d3 = new lmbDelegate($s3, 'instanceMethod');
     lmbDelegate::invokeChain(array($d1, $d2, $d3), array('bar'));
     $this->assertTrue($s1->instance_called);
     $this->assertEqual($s1->instance_arg, 'bar');
     $this->assertTrue($s2->instance_called);
     $this->assertFalse($s3->instance_called);
     $this->assertNull($s3->instance_arg);
 }