function it_does_complain_if_the_number_of_interfaces_is_too_large(ReflectionClass $sus, Params $params, Reporter $reporter)
 {
     $params->getNumberOfInterfaces()->willReturn(self::DEFAULT_NUMBER_OF_INTERFACES);
     $sus->getInterfaces()->willReturn(['interface 1', 'interface 2', 'interface 3', 'interface 4']);
     $sus->getName()->willReturn('Enormo Class');
     $reporter->act($sus, 'Elfiggo\\Brobdingnagian\\Detector\\NumberOfInterfaces', 'Enormo Class has too many interfaces (4)', 'Too many interfaces')->willThrow(TooManyInterfacesDetected::class);
     $this->shouldThrow(TooManyInterfacesDetected::class)->duringCheck($sus, $params, $reporter);
 }
 function it_complains_if_class_size_is_too_large(ReflectionClass $sus, Params $params, Reporter $reporter)
 {
     $sus->getEndLine()->willReturn(self::GREATER_THAN_300);
     $params->getClassSize()->willReturn(self::LESS_THAN_300);
     $sus->getName()->willReturn("Elfiggo/Brobdingnagian/Detector/ClassSize");
     $reporter->act($sus, 'Elfiggo\\Brobdingnagian\\Detector\\ClassSize', 'Elfiggo/Brobdingnagian/Detector/ClassSize class size is too large (301)', 'Class size')->willThrow(ClassSizeTooLarge::class);
     $this->shouldThrow(ClassSizeTooLarge::class)->duringCheck($sus, $params, $reporter);
 }
 /**
  * @param ReflectionClass $sus
  * @param Params          $params
  * @param Reporter        $reporter
  */
 public function check(ReflectionClass $sus, Params $params, Reporter $reporter)
 {
     foreach ($sus->getMethods() as $method) {
         if ($method->getNumberOfParameters() > $params->getDependenciesLimit()) {
             $reporter->act($sus, self::class, "{$method->getName()} has too many dependencies ({$method->getNumberOfParameters()})", 'Dependencies size');
         }
     }
 }
 function it_does_complain_if_the_number_of_traits_is_too_large(ReflectionClass $sus, Params $params, Reporter $reporter)
 {
     $params->getNumberOfTraits()->willReturn(self::DEFAULT_NUMBER_OF_TRAITS);
     $sus->getTraits()->willReturn(['trait 1', 'trait 2', 'trait 3', 'trait 4']);
     $sus->getName()->willReturn('Enormo Class');
     $reporter->act($sus, 'Elfiggo\\Brobdingnagian\\Detector\\NumberOfTraits', 'Enormo Class has too many traits (4)', 'Too many traits')->willThrow(TooManyTraitsDetected::class);
     $this->shouldThrow(TooManyTraitsDetected::class)->duringCheck($sus, $params, $reporter);
 }
 function it_does_complain_if_the_number_of_methods_is_too_large(ReflectionClass $sus, Params $params, Reporter $reporter)
 {
     $params->getNumberOfMethods()->willReturn(1);
     $sus->getMethods()->willReturn(['method 1', 'method 2']);
     $sus->getName()->willReturn('Enormo Class');
     $reporter->act($sus, 'Elfiggo\\Brobdingnagian\\Detector\\NumberOfMethods', 'Enormo Class has too many methods (2)', 'Too many methods')->willThrow(TooManyMethodsDetected::class);
     $this->shouldThrow(TooManyMethodsDetected::class)->duringCheck($sus, $params, $reporter);
 }
 /**
  * @param ReflectionClass $sus
  * @param Params          $params
  * @param Reporter        $reporter
  */
 public function check(ReflectionClass $sus, Params $params, Reporter $reporter)
 {
     foreach ($sus->getMethods($params->getFilterMethods()) as $method) {
         $lineSize = $method->getEndLine() - $method->getStartLine();
         if ($lineSize > $params->getMethodSize()) {
             $reporter->act($sus, self::class, "{$method->getName()}() size is {$lineSize} lines long", 'Method size');
         }
     }
 }
 function it_calculates_the_number_of_lines_in_a_method(ReflectionClass $sus, Params $params, ReflectionMethod $method, Reporter $reporter)
 {
     $method->getStartLine()->willReturn(self::START_LINE);
     $method->getEndLine()->willReturn(self::END_LINE);
     $method->getName()->willReturn('method_size_1');
     $sus->getMethods(0)->willReturn([$method]);
     $reporter->act($sus, 'Elfiggo\\Brobdingnagian\\Detector\\MethodSize', 'method_size_1() size is 40 lines long', 'Method size')->willThrow(MethodSizeTooLarge::class);
     $params->getMethodSize()->willReturn(15);
     $this->shouldThrow(MethodSizeTooLarge::class)->duringCheck($sus, $params, $reporter);
 }
 function it_complains_if_the_number_of_dependencies_are_high(ReflectionClass $sus, Params $params, Reporter $reporter, ReflectionMethod $reflectionMethod)
 {
     $params->getDependenciesLimit()->willReturn(self::DEPENDENCIES_LIMIT);
     $sus->getName()->willReturn("Elfiggo/Brobdingnagian/Detector/DependenciesSize");
     $reflectionMethod->getName()->willReturn('random_method');
     $reflectionMethod->getNumberOfParameters()->willReturn(20);
     $sus->getMethods()->willReturn([$reflectionMethod]);
     $reporter->act($sus, 'Elfiggo\\Brobdingnagian\\Detector\\DependenciesSize', 'random_method has too many dependencies (20)', 'Dependencies size')->willThrow(DependenciesSizeTooLarge::class);
     $this->shouldThrow(DependenciesSizeTooLarge::class)->duringCheck($sus, $params, $reporter);
 }
 function it_should_analyse_the_number_of_methods_size(SpecificationEvent $specificationEvent, SpecificationNode $specificationNode, Params $params, Reporter $reporter)
 {
     $specificationEvent->getSpecification()->willReturn($specificationNode);
     $specificationNode->getTitle()->willReturn('Elfiggo\\Brobdingnagian\\Detector\\ClassSize');
     $this->shouldNotThrow('Elfiggo\\Brobdingnagian\\Exception\\TooManyMethodsDetected');
     $params->getFilterMethods()->willReturn(0);
     $params->getClassSize()->willReturn(200);
     $params->getDependenciesLimit()->willReturn(2);
     $params->getNumberOfMethods()->willReturn(5);
     $params->getMethodSize()->willReturn(10);
     $params->getNumberOfInterfaces()->willReturn(2);
     $params->getNumberOfTraits()->willReturn(1);
     $this->analyse($specificationEvent, $params, $reporter);
 }
 /**
  * @param ReflectionClass $sus
  * @param Params          $param
  * @param Reporter        $reporter
  */
 public function check(ReflectionClass $sus, Params $param, Reporter $reporter)
 {
     if (count($sus->getTraits()) > $param->getNumberOfTraits()) {
         $reporter->act($sus, self::class, "{$sus->getName()} has too many traits (" . count($sus->getTraits()) . ')', 'Too many traits');
     }
 }
 function it_should_not_generate_csv(Params $params, Reporter $reporter)
 {
     $params->getCsv()->willReturn(false);
     $reporter->csvOutput()->shouldNotBeCalled();
     $this->generateCsv();
 }
 /**
  * @param ReflectionClass $sus
  * @param Params          $params
  * @param Reporter        $reporter
  */
 public function check(ReflectionClass $sus, Params $params, Reporter $reporter)
 {
     if (count($sus->getMethods($params->getFilterMethods())) > $params->getNumberOfMethods()) {
         $reporter->act($sus, self::class, "{$sus->getName()} has too many methods (" . count($sus->getMethods()) . ')', 'Too many methods');
     }
 }
 /**
  * @param ReflectionClass $sus
  * @param Params          $params
  * @param Reporter        $reporter
  */
 public function check(ReflectionClass $sus, Params $params, Reporter $reporter)
 {
     if ($sus->getEndLine() > $params->getClassSize()) {
         $reporter->act($sus, self::class, "{$sus->getName()} class size is too large ({$sus->getEndLine()})", 'Class size');
     }
 }
 public function __construct(Params $params, LoggerHandler $loggerHandler, ExceptionHandler $exceptionHandler)
 {
     $this->handler = $params->getBrobList() ? $loggerHandler : $exceptionHandler;
 }
 function it_should_return_logger_handler_for_true(Params $params, LoggerHandler $loggerHandler)
 {
     $params->getBrobList()->willReturn(true);
     $this->handlerType()->shouldReturn(get_class($loggerHandler->getWrappedObject()));
 }