Skip to content

Commit

Permalink
Manage single scalar values for some configuration keys
Browse files Browse the repository at this point in the history
  • Loading branch information
soullivaneuh committed Nov 19, 2015
1 parent bc246f6 commit b9d0539
Show file tree
Hide file tree
Showing 2 changed files with 182 additions and 64 deletions.
88 changes: 60 additions & 28 deletions src/StyleCI/Configuration.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
namespace SLLH\StyleCIBridge\StyleCI;

use SLLH\StyleCIFixers\Fixers;
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
use Symfony\Component\Config\Definition\Builder\NodeDefinition;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;

Expand Down Expand Up @@ -31,6 +33,10 @@ public function getConfigTreeBuilder()
->defaultTrue()
->end()
->arrayNode('enabled')
->beforeNormalization()
->ifString()
->then(function ($v) { return array($v); })
->end()
->prototype('scalar')
->validate()
->ifNotInArray($validFixers)
Expand All @@ -39,41 +45,18 @@ public function getConfigTreeBuilder()
->end()
->end()
->arrayNode('disabled')
->beforeNormalization()
->ifString()
->then(function ($v) { return array($v); })
->end()
->prototype('scalar')
->validate()
->ifNotInArray($validFixers)
->thenInvalid('Invalid disabled fixer %s.')
->end()
->end()
->end()
->arrayNode('finder')
->children()
->arrayNode('exclude')
->prototype('scalar')->end()
->end()
->arrayNode('name')
->prototype('scalar')->end()
->end()
->arrayNode('not_name')
->prototype('scalar')->end()
->end()
->arrayNode('contains')
->prototype('scalar')->end()
->end()
->arrayNode('not_contains')
->prototype('scalar')->end()
->end()
->arrayNode('path')
->prototype('scalar')->end()
->end()
->arrayNode('not_path')
->prototype('scalar')->end()
->end()
->arrayNode('depth')
->prototype('scalar')->end()
->end()
->end()
->end()
->append($this->getFinderConfigurationNode())
->end()
->validate()
->ifTrue(function ($config) {
Expand All @@ -97,4 +80,53 @@ public function getConfigTreeBuilder()

return $treeBuilder;
}

/**
* @return ArrayNodeDefinition|NodeDefinition
*/
private function getFinderConfigurationNode()
{
$treeBuilder = new TreeBuilder();
$node = $treeBuilder->root('finder');

$node
->beforeNormalization()
->always(function ($v) {
foreach ($v as $option => $value) {
$v[$option] = (array) $value;
}

return $v;
})
->end()
->children()
->arrayNode('exclude')
->prototype('scalar')->end()
->end()
->arrayNode('name')
->prototype('scalar')->end()
->end()
->arrayNode('not_name')
->prototype('scalar')->end()
->end()
->arrayNode('contains')
->prototype('scalar')->end()
->end()
->arrayNode('not_contains')
->prototype('scalar')->end()
->end()
->arrayNode('path')
->prototype('scalar')->end()
->end()
->arrayNode('not_path')
->prototype('scalar')->end()
->end()
->arrayNode('depth')
->prototype('scalar')->end()
->end()
->end()
;

return $node;
}
}
158 changes: 122 additions & 36 deletions tests/StyleCI/ConfigurationTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,53 +19,139 @@ protected function getConfiguration()
* @dataProvider validConfigurations
*
* @param array $configuration
* @param array $expectedProcessedConfiguration
*/
public function testValidConfiguration(array $configuration)
public function testValidConfiguration(array $configuration, array $expectedProcessedConfiguration = null)
{
$this->assertConfigurationIsValid(array('styleci' => $configuration));

// Set default expected configuration
$expectedProcessedConfiguration = array_merge(array(
'linting' => true,
'enabled' => array(),
'disabled' => array(),
), $expectedProcessedConfiguration ?: $configuration);

if (isset($configuration['finder'])) {
$expectedFinderProcessedConfiguration = array_merge_recursive(array(
'exclude' => array(),
'name' => array(),
'not_name' => array(),
'contains' => array(),
'not_contains' => array(),
'path' => array(),
'not_path' => array(),
'depth' => array(),
), $expectedProcessedConfiguration && isset($expectedProcessedConfiguration['finder']) ? $expectedProcessedConfiguration['finder'] : $configuration['finder']);

$expectedProcessedConfiguration['finder'] = $expectedFinderProcessedConfiguration;
}

$this->assertProcessedConfigurationEquals(array('styleci' => $configuration), $expectedProcessedConfiguration);
}

public function validConfigurations()
{
return array(
array(array(
'preset' => 'psr1',
)),
array(array(
'preset' => 'psr2',
)),
array(array(
'preset' => 'symfony',
)),
array(array(
'preset' => 'laravel',
)),
array(array(
'preset' => 'recommended',
)),
array(array(
'preset' => 'symfony',
'linting' => false,
'enabled' => array(
'return',
'phpdoc_params',
array(
array(
'preset' => 'psr1',
),
'disabled' => array(
'short_array_syntax',
),
array(
array(
'preset' => 'psr2',
),
'finder' => array(
'not-name' => array('*.dummy'),
),
array(
array(
'preset' => 'symfony',
),
)),
array(array(
'preset' => 'symfony',
'enabled' => array(
'align_double_arrow',
),
array(
array(
'preset' => 'laravel',
),
'disabled' => array(
'unalign_double_arrow',
),
array(
array(
'preset' => 'recommended',
),
)),
),
array(
array(
'preset' => 'symfony',
'linting' => false,
'enabled' => array(
'return',
'phpdoc_params',
),
'disabled' => array(
'short_array_syntax',
),
'finder' => array(
'not_name' => array('*.dummy'),
),
),
),
array(
array(
'preset' => 'symfony',
'finder' => array(
'not-name' => array('*.dummy'),
),
),
array(
'preset' => 'symfony',
'finder' => array(
'not_name' => array('*.dummy'),
),
),
),
array(
array(
'preset' => 'symfony',
'enabled' => array(
'align_double_arrow',
),
'disabled' => array(
'unalign_double_arrow',
),
),
),
// Scalar values
array(
array(
'preset' => 'symfony',
'enabled' => 'return',
'disabled' => 'long_array_syntax',
'finder' => array(
'exclude' => 'foo',
'name' => 'foo',
'not_name' => 'foo',
'contains' => 'foo',
'not_contains' => 'foo',
'path' => 'foo',
'not_path' => 'foo',
'depth' => 'foo',
),
),
array(
'preset' => 'symfony',
'enabled' => array('return'),
'disabled' => array('long_array_syntax'),
'finder' => array(
'exclude' => array('foo'),
'name' => array('foo'),
'not_name' => array('foo'),
'contains' => array('foo'),
'not_contains' => array('foo'),
'path' => array('foo'),
'not_path' => array('foo'),
'depth' => array('foo'),
),
),
),
);
}

Expand Down Expand Up @@ -115,8 +201,8 @@ public function invalidConfigurations()
),
)),
array(array(
'preset' => 'symfony',
'finder' => array(
'preset' => 'symfony',
'finder' => array(
'not-existing-method' => array('*.dummy'),
),
)),
Expand Down

0 comments on commit b9d0539

Please sign in to comment.