public static function fromArray(array $arr)
 {
     $options = (new OptionsResolver())->setRequired(['layers', 'paths', 'exclude_files', 'ruleset'])->addAllowedTypes('layers', 'array')->addAllowedTypes('paths', 'array')->addAllowedTypes('exclude_files', ['array', 'null'])->addAllowedTypes('ruleset', 'array')->resolve($arr);
     return new static(array_map(function ($v) {
         return ConfigurationLayer::fromArray($v);
     }, $options['layers']), ConfigurationRuleset::fromArray($options['ruleset']), $options['paths'], (array) $options['exclude_files']);
 }
 public function testFromArray()
 {
     $configurationLayer = ConfigurationLayer::fromArray(['name' => 'some_name', 'collectors' => [['type' => 'foo1', 'foo' => 'bar'], ['type' => 'foo2', 'foo' => 'bar']]]);
     $this->assertEquals('some_name', $configurationLayer->getName());
     $this->assertCount(2, $configurationLayer->getCollectors());
     $this->assertEquals('foo1', $configurationLayer->getCollectors()[0]->getType());
     $this->assertEquals(['type' => 'foo1', 'foo' => 'bar'], $configurationLayer->getCollectors()[0]->getArgs());
     $this->assertEquals('foo2', $configurationLayer->getCollectors()[1]->getType());
     $this->assertEquals(['type' => 'foo2', 'foo' => 'bar'], $configurationLayer->getCollectors()[1]->getArgs());
 }
 /**
  * @param $collectA
  * @param $collectB1
  * @param $collectB2
  * @param array $expectedLayers
  * @dataProvider provideGetLayersByClassName
  */
 public function testGetLayersByClassName($collectA, $collectB1, $collectB2, array $expectedLayers)
 {
     $configuration = $this->prophesize(Configuration::class);
     $configuration->getLayers()->willReturn([ConfigurationLayer::fromArray(['name' => 'LayerA', 'collectors' => [['type' => 'CollectorA']]]), ConfigurationLayer::fromArray(['name' => 'LayerB', 'collectors' => [['type' => 'CollectorB1'], ['type' => 'CollectorB2']]])]);
     $astMap = $this->prophesize(AstMap::class);
     $collectorFactory = $this->prophesize(CollectorFactory::class);
     $collectorFactory->getCollector('CollectorA')->willReturn($this->getCollector($collectA, ['type' => 'CollectorA', 'foo' => 'bar']));
     $collectorFactory->getCollector('CollectorB1')->willReturn($this->getCollector($collectB1, ['type' => 'CollectorB', 'foo' => 'bar']));
     $collectorFactory->getCollector('CollectorB2')->willReturn($this->getCollector($collectB2, ['type' => 'CollectorB', 'foo' => 'bar']));
     $resolver = new ClassNameLayerResolver($configuration->reveal(), $astMap->reveal(), $collectorFactory->reveal(), $this->prophesize(AstParserInterface::class)->reveal());
     $this->assertEquals($expectedLayers, $resolver->getLayersByClassName('classA'));
 }