public function testMethodFiltering() { $test = new MockMethodFiltering(); $result = $test->method(array('Starting test')); $expected = array('Starting test', 'Starting outer method call', 'Inside method implementation', 'Ending outer method call'); $this->assertEqual($expected, $result); $test->applyFilter('method', function ($self, $params, $chain) { $params['data'][] = 'Starting filter'; $result = $chain->next($self, $params, $chain); $result[] = 'Ending filter'; return $result; }); $result = $test->method(array('Starting test')); $expected = array('Starting test', 'Starting outer method call', 'Starting filter', 'Inside method implementation', 'Ending filter', 'Ending outer method call'); $this->assertEqual($expected, $result); $test->applyFilter('method', function ($self, $params, $chain) { $params['data'][] = 'Starting inner filter'; $result = $chain->next($self, $params, $chain); $result[] = 'Ending inner filter'; return $result; }); $result = $test->method(array('Starting test')); $expected = array('Starting test', 'Starting outer method call', 'Starting filter', 'Starting inner filter', 'Inside method implementation', 'Ending inner filter', 'Ending filter', 'Ending outer method call'); $this->assertEqual($expected, $result); }