public function matchesReturnsFalseEarlyForAndedSubfilters()
{
$mockPointcutFilter1 = $this->getMockBuilder(Pointcut\PointcutFilterInterface::class)->disableOriginalConstructor()->getMock();
$mockPointcutFilter1->expects($this->any())->method('getRuntimeEvaluationsDefinition')->will($this->returnValue(['eval']));
$mockPointcutFilter1->expects($this->once())->method('matches')->will($this->returnValue(false));
$mockPointcutFilter2 = $this->getMockBuilder(Pointcut\PointcutFilterInterface::class)->disableOriginalConstructor()->getMock();
$mockPointcutFilter2->expects($this->any())->method('getRuntimeEvaluationsDefinition')->will($this->returnValue(['eval']));
$mockPointcutFilter2->expects($this->never())->method('matches')->will($this->returnValue(false));
$pointcutFilterComposite = new Pointcut\PointcutFilterComposite();
$pointcutFilterComposite->addFilter('&&', $mockPointcutFilter1);
$pointcutFilterComposite->addFilter('&&!', $mockPointcutFilter2);
$this->assertFalse($pointcutFilterComposite->matches('someClass', 'someMethod', 'someDeclaringClass', 1));
}