9 use PHPUnit\Framework\TestCase as TestCase;
10 use PHPUnit_Framework_MockObject_MockObject as MockObject;
11 use PHPUnit\Framework\MockObject\Matcher\InvokedRecorder as InvokedRecorder;
12 use PHPUnit\Framework\MockObject\Builder\InvocationMocker as InvocationMocker;
15 use PHPMD\AbstractNode;
16 use PHPMD\Node\ClassNode;
17 use PHPMD\Node\MethodNode;
18 use BadMethodCallException;
29 $finalizableNode = $this->createFinalizableNodeMock($nodeType);
30 $finalizableNode->method(
'isFinal')->willReturn(
false);
33 $this->expectsRuleViolation(
$rule, $this->never());
34 $rule->apply($finalizableNode);
44 $finalizableNode = $this->createFinalizableNodeMock($nodeType);
45 $finalizableNode->method(
'isFinal')->willReturn(
true);
48 $this->expectsRuleViolation(
$rule, $this->once());
49 $rule->apply($finalizableNode);
59 $finalizableNode = $this->createFinalizableNodeMock($nodeType);
61 $finalizableNode->expects($this->atLeastOnce())
65 $rule->apply($finalizableNode);
73 $someNode = $this->getMockBuilder(AbstractNode::class)
74 ->disableOriginalConstructor()
75 ->getMockForAbstractClass();
78 $rule->apply($someNode);
100 private function createFinalizableNodeMock($nodeType)
102 $finalizableNode = $this->getMockBuilder($nodeType)
103 ->disableOriginalConstructor()
104 ->disableProxyingToOriginalMethods()
113 return $finalizableNode;
121 private function expectsRuleViolation(FinalImplementation
$rule, InvokedRecorder $violationExpectation)
123 $report = $this->getMockBuilder(Report::class)->getMock();
124 $invokation = $report->expects($violationExpectation)->method(
'addRuleViolation');
125 $rule->setReport($report);
testRuleFailsOnNotFinalizableNodes()
finalizableNodeTypesProvider()
testRuleAppliesToFinalFinalizable($nodeType)
testRuleNotAppliesToNotFinalFinalizable($nodeType)
testRuleVerifiesFinalizableNodes($nodeType)