function it_checks_an_invalid_node_with_only_rule(RuleInterface $rule, NodeInterface $node, ViolationInterface $violation)
 {
     $rule->getSubject()->willReturn('foo\\bar');
     $rule->getRequirements()->willReturn(array('blu', 'bla', 'bli'));
     $rule->getType()->willReturn(RuleInterface::TYPE_ONLY);
     $node->getSubject()->willReturn('foo\\bar\\baz');
     $node->getTokens()->willReturn(array('blu', 'bla', 'blo', 'bly'));
     $violation->getNode()->willReturn($node);
     $violation->getRule()->willReturn($rule);
     $violation->getType()->willReturn(ViolationInterface::TYPE_ERROR);
     $violation->getTokenViolations()->willReturn(array('blo', 'bly'));
     $this->check($rule, $node)->shouldBeLikeExpectedViolation($violation);
 }
 /**
  * Checks if a node respects a "only" rule.
  * A node respects such a rule if the node contains only tokens defined in the rule.
  *
  * @param RuleInterface $rule
  * @param NodeInterface $node
  *
  * @return Violation|null
  */
 private function checkOnlyRule(RuleInterface $rule, NodeInterface $node)
 {
     $errors = array();
     foreach ($node->getTokens() as $token) {
         if (!$this->checkTokenForOnlyRule($rule, $token) && !in_array($token, $errors)) {
             $errors[] = $token;
         }
     }
     if (count($errors)) {
         return new Violation($node, $rule, $errors, ViolationInterface::TYPE_ERROR);
     }
     return;
 }