Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .php-cs-fixer.dist.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
->enable('ordered_imports')
->enable('ordered_interfaces')
->enable('phpdoc_line_span')
->enable('PedroTroller/line_break_between_method_arguments', ['max-length' => 80])
->disable('method_chaining_indentation')
->disable('no_break_comment')
->disable('no_superfluous_phpdoc_tags')
Expand Down
11 changes: 11 additions & 0 deletions phpstan-baseline.neon
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
parameters:
ignoreErrors:
-
message: "#^Method Knp\\\\DictionaryBundle\\\\Dictionary\\\\Factory\\\\Value\\:\\:create\\(\\) should return Knp\\\\DictionaryBundle\\\\Dictionary\\<int\\|string, mixed\\> but returns Knp\\\\DictionaryBundle\\\\Dictionary\\\\Simple\\<int, mixed\\>\\.$#"
count: 1
path: src/Knp/DictionaryBundle/Dictionary/Factory/Value.php

-
message: "#^Parameter \\#1 \\$array of function array_flip expects array\\<int\\|string\\>, array\\<int, mixed\\> given\\.$#"
count: 1
path: src/Knp/DictionaryBundle/Form/Type/DictionaryType.php
5 changes: 4 additions & 1 deletion phpstan.neon.dist
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
includes:
- phpstan-baseline.neon

parameters:
level: 8
level: max
paths:
- src
- spec/PHPSpec
Expand Down
3 changes: 3 additions & 0 deletions rector.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use Rector\Config\RectorConfig;
use Rector\Core\ValueObject\PhpVersion;
use Rector\Set\ValueObject\LevelSetList;
use Rector\Set\ValueObject\SetList;

return static function (RectorConfig $rectorConfig): void {
$rectorConfig
Expand All @@ -25,6 +26,8 @@
->sets(
[
LevelSetList::UP_TO_PHP_80,
SetList::CODE_QUALITY,
SetList::DEAD_CODE,
]
)
;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,9 @@ function it_is_initializable()
$this->shouldHaveType(DictionaryBuildingPass::class);
}

function it_builds_a_value_as_key_dictionary_from_the_config(ContainerBuilder $container)
{
function it_builds_a_value_as_key_dictionary_from_the_config(
ContainerBuilder $container
) {
$config = [
'dictionaries' => [
'dico1' => [
Expand Down Expand Up @@ -66,8 +67,9 @@ function it_builds_a_value_as_key_dictionary_from_the_config(ContainerBuilder $c
$this->process($container);
}

function it_builds_a_value_dictionary_from_the_config(ContainerBuilder $container)
{
function it_builds_a_value_dictionary_from_the_config(
ContainerBuilder $container
) {
$config = [
'dictionaries' => [
'dico1' => [
Expand Down Expand Up @@ -109,8 +111,9 @@ function it_builds_a_value_dictionary_from_the_config(ContainerBuilder $containe
$this->process($container);
}

function it_builds_a_key_value_dictionary_from_the_config(ContainerBuilder $container)
{
function it_builds_a_key_value_dictionary_from_the_config(
ContainerBuilder $container
) {
$config = [
'dictionaries' => [
'dico1' => [
Expand Down
14 changes: 7 additions & 7 deletions spec/Knp/DictionaryBundle/Dictionary/CollectionSpec.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@

final class CollectionSpec extends ObjectBehavior
{
function let(Dictionary $dictionary, Dictionary $dictionary2)
function let(Dictionary $dictionary1, Dictionary $dictionary2)
{
$this->beConstructedWith($dictionary, $dictionary2);
$dictionary->getName()->willReturn('foo');
$this->beConstructedWith($dictionary1, $dictionary2);
$dictionary1->getName()->willReturn('foo');
$dictionary2->getName()->willReturn('dictionary');
}

Expand Down Expand Up @@ -49,13 +49,13 @@ function it_should_entry_if_it_exists()

function it_counts_entries()
{
$this->count()->shouldReturn(2);
$this->shouldHaveCount(2);
}

function it_is_a_list_ob_dictionaries($dictionary, $dictionary2)
function it_is_a_list_of_dictionaries($dictionary1, $dictionary2)
{
$this->getIterator()->getArrayCopy()->shouldReturn([
'foo' => $dictionary,
$this->shouldYieldLike([
'foo' => $dictionary1,
'dictionary' => $dictionary2,
]);
}
Expand Down
130 changes: 31 additions & 99 deletions spec/Knp/DictionaryBundle/Dictionary/CombinedSpec.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,38 @@

namespace spec\Knp\DictionaryBundle\Dictionary;

use ArrayIterator;
use Knp\DictionaryBundle\Dictionary;
use Knp\DictionaryBundle\Dictionary\Combined;
use PhpSpec\ObjectBehavior;

final class CombinedSpec extends ObjectBehavior
{
function let(Dictionary $dictionary1, Dictionary $dictionary2, Dictionary $dictionary3)
use DictionaryBehavior;

function let()
{
$this->beConstructedWith(
'combined_dictionary',
$dictionary1,
$dictionary2,
$dictionary3
new Dictionary\Simple(
'dictionary1',
[
'foo' => 1,
'bar' => 2,
]
),
new Dictionary\Simple(
'dictionary2',
[
'bar' => 3,
'baz' => 4,
]
),
new Dictionary\Simple(
'dictionary3',
[
'baz' => 5,
]
),
);
}

Expand All @@ -26,103 +44,17 @@ function it_is_initializable()
$this->shouldHaveType(Combined::class);
}

function it_is_a_dictionary()
{
$this->shouldImplement(Dictionary::class);
}

function it_access_to_value_like_an_array($dictionary1, $dictionary2, $dictionary3)
protected function getExpectedResult(): array
{
$dictionary1->getIterator()->willReturn(new ArrayIterator(['foo1' => 'foo10']));

$dictionary2->getIterator()->willReturn(new ArrayIterator(['bar1' => 'bar10']));

$dictionary3->getIterator()->willReturn(new ArrayIterator(['baz1' => 'baz10']));

$this['foo1']->shouldBe('foo10');
$this['bar1']->shouldBe('bar10');
$this['baz1']->shouldBe('baz10');
}

function it_getvalues_should_return_dictionaries_values($dictionary1, $dictionary2, $dictionary3)
{
$dictionary1->getIterator()->willReturn(new ArrayIterator([
'foo1' => 'foo10',
'foo2' => 'foo20',
]));

$dictionary2->getIterator()->willReturn(new ArrayIterator([
'bar1' => 'bar10',
'bar2' => 'bar20',
]));

$dictionary3->getIterator()->willReturn(new ArrayIterator([
'foo1' => 'baz10',
'bar2' => 'baz20',
]));

$this->getKeys()->shouldReturn([
'foo1',
'foo2',
'bar1',
'bar2',
]);
$this->getValues()->shouldReturn([
'foo1' => 'baz10',
'foo2' => 'foo20',
'bar1' => 'bar10',
'bar2' => 'baz20',
]);
}

function it_can_iterate_over_dictionaries($dictionary1, $dictionary2, $dictionary3)
{
$dictionary1->getIterator()->willReturn(new ArrayIterator([
'foo1' => 'foo10',
'foo2' => 'foo20',
]));

$dictionary2->getIterator()->willReturn(new ArrayIterator([
'bar1' => 'bar10',
'bar2' => 'bar20',
]));

$dictionary3->getIterator()->willReturn(new ArrayIterator([
'foo2' => 'baz20',
'bar2' => 'baz20',
]));

$this->shouldIterateLike([
'foo1' => 'foo10',
'foo2' => 'baz20',
'bar1' => 'bar10',
'bar2' => 'baz20',
]);
}

function it_sums_the_count_of_elements($dictionary1, $dictionary2, $dictionary3)
{
$dictionary1->getIterator()->willReturn(new ArrayIterator([
'foo1' => 'foo10',
]));

$dictionary2->getIterator()->willReturn(new ArrayIterator([
'bar1' => 'bar10',
'bar2' => 'bar20',
]));

$dictionary3->getIterator()->willReturn(new ArrayIterator([
'baz1' => 'baz10',
'baz2' => 'baz20',
'baz3' => 'baz30',
'baz4' => 'baz40',
]));

$this->count()->shouldReturn(7);
return [
'foo' => 1,
'bar' => 3,
'baz' => 5,
];
}

function its_getname_should_return_dictionary_name()
protected function getExpectedName(): string
{
$this->getName()->shouldReturn('combined_dictionary');
return 'combined_dictionary';
}
}
66 changes: 66 additions & 0 deletions spec/Knp/DictionaryBundle/Dictionary/DictionaryBehavior.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
<?php

declare(strict_types=1);

namespace spec\Knp\DictionaryBundle\Dictionary;

use Knp\DictionaryBundle\Dictionary;

trait DictionaryBehavior
{
public function it_is_a_dictionary(): void
{
$this
->shouldImplement(Dictionary::class)
;
}

public function it_access_to_value_like_an_array(): void
{
foreach ($this->getExpectedResult() as $key => $value) {
$this[$key]->shouldBe($value);
}
}

public function it_provides_keys(): void
{
$this
->getKeys()
->shouldReturn(array_keys($this->getExpectedResult()))
;
}

public function it_provides_values(): void
{
$this
->getValues()
->shouldReturn(array_values($this->getExpectedResult()))
;
}

public function it_provides_combination_of_keys_and_values(): void
{
$this
->shouldYieldLike($this->getExpectedResult())
;
}

public function it_is_countable(): void
{
$this
->shouldHaveCount(\count($this->getExpectedResult()))
;
}

public function it_has_a_name(): void
{
$this
->getName()
->shouldReturn($this->getExpectedName())
;
}

abstract protected function getExpectedResult(): array;

abstract protected function getExpectedName(): string;
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,11 @@ function it_is_a_factory()
$this->shouldHaveType(Factory::class);
}

function it_supports_if_one_factory_supports(Factory $factory1, Factory $factory2, Factory $factory3)
{
function it_supports_if_one_factory_supports(
Factory $factory1,
Factory $factory2,
Factory $factory3
) {
$this->addFactory($factory1);
$this->addFactory($factory2);

Expand Down
7 changes: 5 additions & 2 deletions spec/Knp/DictionaryBundle/Dictionary/Factory/CombinedSpec.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,11 @@ function it_supports_specific_config()
$this->supports(['type' => 'combined'])->shouldReturn(true);
}

function it_creates_a_dictionary(Dictionary $dictionary1, Dictionary $dictionary2, Dictionary $dictionary3)
{
function it_creates_a_dictionary(
Dictionary $dictionary1,
Dictionary $dictionary2,
Dictionary $dictionary3
) {
$dictionary1->getIterator()->willReturn(new ArrayIterator(['foo1' => 'foo10', 'foo2' => 'foo20']));
$dictionary1->getName()->willReturn('dictionary1');

Expand Down
7 changes: 5 additions & 2 deletions spec/Knp/DictionaryBundle/Dictionary/Factory/ExtendedSpec.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,11 @@ function it_supports_specific_config()
$this->supports(['extends' => 'my_dictionary'])->shouldReturn(true);
}

function it_creates_a_dictionary($factory, Dictionary $initialDictionary, Dictionary $extendsDictionary)
{
function it_creates_a_dictionary(
$factory,
Dictionary $initialDictionary,
Dictionary $extendsDictionary
) {
$initialDictionary->getName()->willReturn('initial_dictionary');
$initialDictionary->getIterator()->willReturn(new ArrayIterator(['foo1', 'foo2']));

Expand Down
5 changes: 3 additions & 2 deletions spec/Knp/DictionaryBundle/Dictionary/InvokableSpec.php
Original file line number Diff line number Diff line change
Expand Up @@ -101,8 +101,9 @@ function it_access_to_value_like_an_array()
$this['baz']->shouldReturn(2);
}

function it_throws_an_exception_if_callable_returns_somthing_else_than_an_array_or_an_array_access($nothing)
{
function it_throws_an_exception_if_callable_returns_somthing_else_than_an_array_or_an_array_access(
$nothing
) {
$this->beConstructedWith('foo', function (): void {});

$this
Expand Down
Loading