diff --git a/src/AccessorPairAsserter.php b/src/AccessorPairAsserter.php index c87c7ad..e8e168a 100644 --- a/src/AccessorPairAsserter.php +++ b/src/AccessorPairAsserter.php @@ -9,6 +9,19 @@ trait AccessorPairAsserter { + /** + * Assert the constructor parameter - method pairs. Will use default configuration + * with ConstraintConfig::setAssertPropertyDefaults(true) + * + * @param string $object The fully qualified name of the class that should be tested + * @param string $message Custom PHPUnit error message in case of constraint failure + */ + public static function assertAccessorPropertyDefaults(string $object, string $message = ''): void + { + $config = (new ConstraintConfig())->setAssertPropertyDefaults(true); + Assert::assertThat($object, new AccessorPairConstraint($config), $message); + } + /** * @param string $object The fully qualified name of the class that should be tested * @param ConstraintConfig|null $config Configuration of the constraint. @@ -23,4 +36,17 @@ public static function assertAccessorPairs(string $object, ConstraintConfig $con Assert::assertThat($object, new AccessorPairConstraint($config), $message); } + + /** + * Only assert accessor pairs from the class itself and none of it's parents. Will use default configuration + * with ConstraintConfig::setAssertParentMethods(false) + * + * @param string $object The fully qualified name of the class that should be tested + * @param string $message Custom PHPUnit error message in case of constraint failure + */ + public static function assertOwnAccessorPairs(string $object, string $message = ''): void + { + $config = (new ConstraintConfig())->setAssertParentMethods(false); + Assert::assertThat($object, new AccessorPairConstraint($config), $message); + } } diff --git a/src/Constraint/AccessorPairConstraint.php b/src/Constraint/AccessorPairConstraint.php index 5e657c5..1099683 100644 --- a/src/Constraint/AccessorPairConstraint.php +++ b/src/Constraint/AccessorPairConstraint.php @@ -40,8 +40,8 @@ class AccessorPairConstraint extends Constraint public function __construct(ConstraintConfig $config) { - $this->accessorPairProvider = new AccessorPairProvider(); - $this->constructorPairProvider = new ConstructorPairProvider(); + $this->accessorPairProvider = new AccessorPairProvider($config); + $this->constructorPairProvider = new ConstructorPairProvider($config); $this->valueProviderFactory = new ValueProviderFactory(); $this->config = $config; diff --git a/src/Constraint/ConstraintConfig.php b/src/Constraint/ConstraintConfig.php index b520438..3e391d1 100644 --- a/src/Constraint/ConstraintConfig.php +++ b/src/Constraint/ConstraintConfig.php @@ -14,6 +14,12 @@ class ConstraintConfig /** @var bool */ private $assertPropertyDefaults = false; + /** @var bool */ + private $assertParentMethods = true; + + /** @var string[] */ + private $excludedMethods = []; + /** @var null|callable(): mixed[] */ private $constructorCallback = null; @@ -69,6 +75,41 @@ public function setAssertPropertyDefaults(bool $assertPropertyDefaults): self return $this; } + public function isAssertParentMethods(): bool + { + return $this->assertParentMethods; + } + + /** + * Enabled by default. + * When disabled, only the direct class methods will be asserted and none of the parent's + * class methods. + */ + public function setAssertParentMethods(bool $assertParentMethods): self + { + $this->assertParentMethods = $assertParentMethods; + + return $this; + } + + /** + * @return string[] + */ + public function getExcludedMethods(): array + { + return $this->excludedMethods; + } + + /** + * @param string[] $excludedMethods A list of exact method names that should be excluded from the assertions. + */ + public function setExcludedMethods(array $excludedMethods): self + { + $this->excludedMethods = $excludedMethods; + + return $this; + } + public function getConstructorCallback(): ?callable { return $this->constructorCallback; diff --git a/src/Constraint/MethodPair/AccessorPair/AccessorPairProvider.php b/src/Constraint/MethodPair/AccessorPair/AccessorPairProvider.php index 52b8a91..044771b 100644 --- a/src/Constraint/MethodPair/AccessorPair/AccessorPairProvider.php +++ b/src/Constraint/MethodPair/AccessorPair/AccessorPairProvider.php @@ -3,13 +3,14 @@ namespace DigitalRevolution\AccessorPairConstraint\Constraint\MethodPair\AccessorPair; +use DigitalRevolution\AccessorPairConstraint\Constraint\ConstraintConfig; +use DigitalRevolution\AccessorPairConstraint\Constraint\MethodPair\ClassMethodProvider; use DigitalRevolution\AccessorPairConstraint\Constraint\Typehint\TypehintResolver; use Doctrine\Inflector\Inflector; use Doctrine\Inflector\InflectorFactory; use LogicException; use phpDocumentor\Reflection\Types\Array_; use ReflectionClass; -use ReflectionException; use ReflectionMethod; class AccessorPairProvider @@ -20,8 +21,12 @@ class AccessorPairProvider /** @var Inflector */ private $inflector; - public function __construct() + /** @var ConstraintConfig */ + private $config; + + public function __construct(ConstraintConfig $config) { + $this->config = $config; $this->inflector = InflectorFactory::create()->build(); } @@ -30,13 +35,12 @@ public function __construct() * Loops over the public methods, and for each "getter" it tries to find the corresponding "set" and/or "add" method * * @return AccessorPair[] - * @throws ReflectionException * @throws LogicException */ public function getAccessorPairs(ReflectionClass $class): array { $pairs = []; - foreach ($class->getMethods(ReflectionMethod::IS_PUBLIC) as $method) { + foreach ((new ClassMethodProvider($this->config))->getMethods($class) as $method) { // Check multiple "getter" prefixes, add each getter method with corresponding setter to the inspectionMethod list $methodName = $method->getName(); foreach (static::GET_PREFIXES as $getterPrefix) { @@ -47,17 +51,7 @@ public function getAccessorPairs(ReflectionClass $class): array // Try and find the corresponding set/add method $baseMethodNames = $this->getMethodBaseNames($methodName, $getterPrefix); foreach ($baseMethodNames as $baseMethodName) { - foreach (static::SET_PREFIXES as $setterPrefix) { - $setterName = $setterPrefix . $baseMethodName; - if ($class->hasMethod($setterName) === false) { - continue; - } - - $setterMethod = $class->getMethod($setterName); - if ($setterMethod->isPublic() === false) { - continue; - } - + foreach ($this->getSetters($class, $baseMethodName) as $setterMethod) { $accessorPair = new AccessorPair($class, $method, $setterMethod); if ($this->validateAccessorPair($accessorPair)) { $pairs[] = $accessorPair; @@ -85,6 +79,37 @@ protected function getMethodBaseNames(string $methodName, string $getterPrefix): return $baseMethodNames; } + /** + * @return ReflectionMethod[] + */ + protected function getSetters(ReflectionClass $class, string $baseMethodName): array + { + $setters = []; + foreach (static::SET_PREFIXES as $setterPrefix) { + $setterName = $setterPrefix . $baseMethodName; + if ($class->hasMethod($setterName) === false) { + continue; + } + + $setterMethod = $class->getMethod($setterName); + if ($setterMethod->isPublic() === false) { + continue; + } + + if (in_array($setterMethod->getName(), $this->config->getExcludedMethods(), true)) { + continue; + } + + if ($this->config->isAssertParentMethods() === false && $class->getName() !== $setterMethod->getDeclaringClass()->getName()) { + continue; + } + + $setters[] = $setterMethod; + } + + return $setters; + } + /** * @throws LogicException */ diff --git a/src/Constraint/MethodPair/ClassMethodProvider.php b/src/Constraint/MethodPair/ClassMethodProvider.php new file mode 100644 index 0000000..2cf262e --- /dev/null +++ b/src/Constraint/MethodPair/ClassMethodProvider.php @@ -0,0 +1,45 @@ +config = $config; + } + + /** + * @return ReflectionMethod[] + */ + public function getMethods(ReflectionClass $class): array + { + $excludeParentMethods = $this->config->isAssertParentMethods() === false; + $excludedMethods = $this->config->getExcludedMethods(); + + $methods = []; + foreach ($class->getMethods(ReflectionMethod::IS_PUBLIC) as $method) { + // exclude all methods that are not from the class' parent class. + if ($excludeParentMethods && $class->getName() !== $method->getDeclaringClass()->getName()) { + continue; + } + + // method is specifically excluded + if (in_array($method->getName(), $excludedMethods, true)) { + continue; + } + + $methods[] = $method; + } + + return $methods; + } +} diff --git a/src/Constraint/MethodPair/ConstructorPair/ConstructorPairProvider.php b/src/Constraint/MethodPair/ConstructorPair/ConstructorPairProvider.php index 11d6f3a..ce37af8 100644 --- a/src/Constraint/MethodPair/ConstructorPair/ConstructorPairProvider.php +++ b/src/Constraint/MethodPair/ConstructorPair/ConstructorPairProvider.php @@ -3,13 +3,14 @@ namespace DigitalRevolution\AccessorPairConstraint\Constraint\MethodPair\ConstructorPair; +use DigitalRevolution\AccessorPairConstraint\Constraint\ConstraintConfig; +use DigitalRevolution\AccessorPairConstraint\Constraint\MethodPair\ClassMethodProvider; use DigitalRevolution\AccessorPairConstraint\Constraint\Typehint\TypehintResolver; use Doctrine\Inflector\Inflector; use Doctrine\Inflector\InflectorFactory; use LogicException; use phpDocumentor\Reflection\Types\Array_; use ReflectionClass; -use ReflectionMethod; use ReflectionParameter; class ConstructorPairProvider @@ -19,8 +20,12 @@ class ConstructorPairProvider /** @var Inflector */ private $inflector; - public function __construct() + /** @var ConstraintConfig */ + private $config; + + public function __construct(ConstraintConfig $config) { + $this->config = $config; $this->inflector = InflectorFactory::create()->build(); } @@ -36,7 +41,7 @@ public function getConstructorPairs(ReflectionClass $class): array } $pairs = []; - foreach ($class->getMethods(ReflectionMethod::IS_PUBLIC) as $method) { + foreach ((new ClassMethodProvider($this->config))->getMethods($class) as $method) { // Check multiple "getter" prefixes, add each getter method with corresponding setter to the inspectionMethod list $methodName = $method->getName(); @@ -75,6 +80,12 @@ protected function getParameters(ReflectionClass $class): array return []; } + // skip parent constructor + $excludeParentMethods = $this->config->isAssertParentMethods() === false; + if ($excludeParentMethods && $constructor->getDeclaringClass()->getName() !== $class->getName()) { + return []; + } + $parameters = []; foreach ($constructor->getParameters() as $parameter) { $parameters[strtolower($parameter->getName())] = $parameter; diff --git a/tests/Integration/AccessorPairAsserterTest.php b/tests/Integration/AccessorPairAsserterTest.php index c01bc88..7775531 100644 --- a/tests/Integration/AccessorPairAsserterTest.php +++ b/tests/Integration/AccessorPairAsserterTest.php @@ -73,6 +73,14 @@ public function testMatchesSuccessInitialState(object $class): void static::assertAccessorPairs(get_class($class), (new ConstraintConfig())->setAssertPropertyDefaults(true)); } + /** + * @dataProvider successInitialStateDataProvider + */ + public function testMatchesSuccessInitialStateWithDefaultMethod(object $class): void + { + static::assertAccessorPropertyDefaults(get_class($class)); + } + /** * When turning off the propertyDefaultCheck, we can safely pass classes we know will fail the constraint * diff --git a/tests/TestCase.php b/tests/TestCase.php index a912ddc..d68e350 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -27,6 +27,10 @@ public function getClassDataProvider(string $path, string $namespacePrefix): Gen continue; } + if (strpos($file->getFilename(), 'Abstract') === 0) { + continue; + } + require_once $file->getPathname(); $key = str_replace([$path, '/'], ['', '\\'], $file->getPath()) . '\\' . $file->getBasename('.php'); diff --git a/tests/Unit/Constraint/ConstraintConfigTest.php b/tests/Unit/Constraint/ConstraintConfigTest.php index f73331c..896199b 100644 --- a/tests/Unit/Constraint/ConstraintConfigTest.php +++ b/tests/Unit/Constraint/ConstraintConfigTest.php @@ -18,6 +18,10 @@ class ConstraintConfigTest extends TestCase * @covers ::hasAssertConstructor * @covers ::setAssertPropertyDefaults * @covers ::hasPropertyDefaultCheck + * @covers ::setAssertParentMethods + * @covers ::isAssertParentMethods + * @covers ::setExcludedMethods + * @covers ::getExcludedMethods * @covers ::getConstructorCallback * @covers ::setConstructorCallback */ @@ -27,16 +31,21 @@ public function testConfig(): void static::assertTrue($config->hasAccessorPairCheck()); static::assertTrue($config->hasAssertConstructor()); static::assertFalse($config->hasPropertyDefaultCheck()); + static::assertTrue($config->isAssertParentMethods()); + static::assertSame([], $config->getExcludedMethods()); $config = new ConstraintConfig(); static::assertFalse($config->setAssertAccessorPair(false)->hasAccessorPairCheck()); static::assertFalse($config->setAssertConstructor(false)->hasAssertConstructor()); static::assertFalse($config->setAssertPropertyDefaults(false)->hasPropertyDefaultCheck()); + static::assertFalse($config->setAssertParentMethods(false)->isAssertParentMethods()); + static::assertSame(['foobar'], $config->setExcludedMethods(['foobar'])->getExcludedMethods()); $config = new ConstraintConfig(); static::assertTrue($config->setAssertAccessorPair(true)->hasAccessorPairCheck()); static::assertTrue($config->setAssertConstructor(true)->hasAssertConstructor()); static::assertTrue($config->setAssertPropertyDefaults(true)->hasPropertyDefaultCheck()); + static::assertTrue($config->setAssertParentMethods(true)->isAssertParentMethods()); $config = new ConstraintConfig(); $callback = static function (): array { diff --git a/tests/Unit/Constraint/MethodPair/AbstractDataClass.php b/tests/Unit/Constraint/MethodPair/AbstractDataClass.php new file mode 100644 index 0000000..faeb956 --- /dev/null +++ b/tests/Unit/Constraint/MethodPair/AbstractDataClass.php @@ -0,0 +1,29 @@ + + */ + abstract public function getExpectedPairs(): array; +} diff --git a/tests/Unit/Constraint/MethodPair/AccessorPair/AccessorPairProviderTest.php b/tests/Unit/Constraint/MethodPair/AccessorPair/AccessorPairProviderTest.php index 40d9f61..8be6be7 100644 --- a/tests/Unit/Constraint/MethodPair/AccessorPair/AccessorPairProviderTest.php +++ b/tests/Unit/Constraint/MethodPair/AccessorPair/AccessorPairProviderTest.php @@ -5,7 +5,7 @@ use DigitalRevolution\AccessorPairConstraint\Constraint\MethodPair\AccessorPair\AccessorPairProvider; use DigitalRevolution\AccessorPairConstraint\Tests\TestCase; -use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\DataInterface; +use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AbstractDataClass; use Generator; use ReflectionClass; use ReflectionException; @@ -23,13 +23,15 @@ class AccessorPairProviderTest extends TestCase * @covers ::getAccessorPairs * @covers ::validateAccessorPair * @covers ::getMethodBaseNames + * @covers ::getSetters * @covers \DigitalRevolution\AccessorPairConstraint\Constraint\MethodPair\AbstractMethodPair * @covers \DigitalRevolution\AccessorPairConstraint\Constraint\MethodPair\AccessorPair\AccessorPair - * @throws ReflectionException + * @uses \DigitalRevolution\AccessorPairConstraint\Constraint\ConstraintConfig + * @uses \DigitalRevolution\AccessorPairConstraint\Constraint\MethodPair\ClassMethodProvider */ - public function testGetAccessorPairs(DataInterface $class): void + public function testGetAccessorPairs(AbstractDataClass $class): void { - $provider = new AccessorPairProvider(); + $provider = new AccessorPairProvider($class->getConfig()); $actualPairs = $provider->getAccessorPairs(new ReflectionClass($class)); $expectedPairs = $class->getExpectedPairs(); @@ -44,7 +46,7 @@ public function testGetAccessorPairs(DataInterface $class): void } /** - * @return Generator> + * @return Generator> * @throws ReflectionException */ public function dataProvider(): Generator diff --git a/tests/Unit/Constraint/MethodPair/AccessorPair/data/failure/GetAdd.php b/tests/Unit/Constraint/MethodPair/AccessorPair/data/failure/GetAdd.php index c8a8593..0fa76d0 100644 --- a/tests/Unit/Constraint/MethodPair/AccessorPair/data/failure/GetAdd.php +++ b/tests/Unit/Constraint/MethodPair/AccessorPair/data/failure/GetAdd.php @@ -3,13 +3,13 @@ namespace DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AccessorPair\data\failure; -use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\DataInterface; +use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AbstractDataClass; /** * The add method receives a string, so we expect "string[]" back from getProperty. * The generic "array" return type there is not accepted and should be expanded using docblock. */ -class GetAdd implements DataInterface +class GetAdd extends AbstractDataClass { /** @var string[] */ private $property = []; diff --git a/tests/Unit/Constraint/MethodPair/AccessorPair/data/failure/GetParams.php b/tests/Unit/Constraint/MethodPair/AccessorPair/data/failure/GetParams.php index 83df4d8..8a38be1 100644 --- a/tests/Unit/Constraint/MethodPair/AccessorPair/data/failure/GetParams.php +++ b/tests/Unit/Constraint/MethodPair/AccessorPair/data/failure/GetParams.php @@ -3,13 +3,13 @@ namespace DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AccessorPair\data\failure; -use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\DataInterface; +use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AbstractDataClass; /** * The goal of the constraint is to test if the getter returns the same value as the setter received. * This can't be tested when the getter also has parameters. */ -class GetParams implements DataInterface +class GetParams extends AbstractDataClass { /** @var string */ private $property; diff --git a/tests/Unit/Constraint/MethodPair/AccessorPair/data/failure/GetPrivateSet.php b/tests/Unit/Constraint/MethodPair/AccessorPair/data/failure/GetPrivateSet.php index 66b5b19..3580412 100644 --- a/tests/Unit/Constraint/MethodPair/AccessorPair/data/failure/GetPrivateSet.php +++ b/tests/Unit/Constraint/MethodPair/AccessorPair/data/failure/GetPrivateSet.php @@ -3,12 +3,12 @@ namespace DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AccessorPair\data\failure; -use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\DataInterface; +use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AbstractDataClass; /** * The getter method is private, so it's not possible to select the accessormethod pair */ -class GetPrivateSet implements DataInterface +class GetPrivateSet extends AbstractDataClass { /** @var string */ private $property = ''; diff --git a/tests/Unit/Constraint/MethodPair/AccessorPair/data/failure/GetSet.php b/tests/Unit/Constraint/MethodPair/AccessorPair/data/failure/GetSet.php index fc8ce1e..df2482a 100644 --- a/tests/Unit/Constraint/MethodPair/AccessorPair/data/failure/GetSet.php +++ b/tests/Unit/Constraint/MethodPair/AccessorPair/data/failure/GetSet.php @@ -3,12 +3,12 @@ namespace DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AccessorPair\data\failure; -use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\DataInterface; +use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AbstractDataClass; /** * The getter returns a different type than the setter receives */ -class GetSet implements DataInterface +class GetSet extends AbstractDataClass { private $property; diff --git a/tests/Unit/Constraint/MethodPair/AccessorPair/data/failure/GetSetMultiParam.php b/tests/Unit/Constraint/MethodPair/AccessorPair/data/failure/GetSetMultiParam.php index 14d491d..3a41fc8 100644 --- a/tests/Unit/Constraint/MethodPair/AccessorPair/data/failure/GetSetMultiParam.php +++ b/tests/Unit/Constraint/MethodPair/AccessorPair/data/failure/GetSetMultiParam.php @@ -3,13 +3,13 @@ namespace DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AccessorPair\data\failure; -use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\DataInterface; +use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AbstractDataClass; /** * The setter has multiple parameters * The constraint can't test that the received input will be correctly returned by the getter here */ -class GetSetMultiParam implements DataInterface +class GetSetMultiParam extends AbstractDataClass { /** @var string */ private $property; diff --git a/tests/Unit/Constraint/MethodPair/AccessorPair/data/failure/GetSetPrivate.php b/tests/Unit/Constraint/MethodPair/AccessorPair/data/failure/GetSetPrivate.php index b5d14f8..1afc516 100644 --- a/tests/Unit/Constraint/MethodPair/AccessorPair/data/failure/GetSetPrivate.php +++ b/tests/Unit/Constraint/MethodPair/AccessorPair/data/failure/GetSetPrivate.php @@ -3,12 +3,12 @@ namespace DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AccessorPair\data\failure; -use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\DataInterface; +use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AbstractDataClass; /** * The setter method is private, so it's not possible to select the accessormethod pair */ -class GetSetPrivate implements DataInterface +class GetSetPrivate extends AbstractDataClass { /** @var string */ private $property = ''; diff --git a/tests/Unit/Constraint/MethodPair/AccessorPair/data/failure/GetVariadicSet.php b/tests/Unit/Constraint/MethodPair/AccessorPair/data/failure/GetVariadicSet.php index da955b6..20dd932 100644 --- a/tests/Unit/Constraint/MethodPair/AccessorPair/data/failure/GetVariadicSet.php +++ b/tests/Unit/Constraint/MethodPair/AccessorPair/data/failure/GetVariadicSet.php @@ -3,12 +3,12 @@ namespace DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AccessorPair\data\failure; -use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\DataInterface; +use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AbstractDataClass; /** * The setter receives multiple float values, but the getter returns an array of bool values */ -class GetVariadicSet implements DataInterface +class GetVariadicSet extends AbstractDataClass { /** @var bool[] */ private $property = []; diff --git a/tests/Unit/Constraint/MethodPair/AccessorPair/data/parentchild/AbstractParentClass.php b/tests/Unit/Constraint/MethodPair/AccessorPair/data/parentchild/AbstractParentClass.php new file mode 100644 index 0000000..0f8e494 --- /dev/null +++ b/tests/Unit/Constraint/MethodPair/AccessorPair/data/parentchild/AbstractParentClass.php @@ -0,0 +1,41 @@ +value = $valueA; + } + + public function getValueB(): string + { + return ""; + } + + public function setItem(string $item): void + { + $this->value = $item; + } + + public function getItem(): string + { + return ""; + } + + public function getConfig(): ConstraintConfig + { + return (new ConstraintConfig())->setAssertParentMethods($this->assertParentMethod); + } +} diff --git a/tests/Unit/Constraint/MethodPair/AccessorPair/data/parentchild/ExcludeParentGetterChildSetter.php b/tests/Unit/Constraint/MethodPair/AccessorPair/data/parentchild/ExcludeParentGetterChildSetter.php new file mode 100644 index 0000000..7d63d75 --- /dev/null +++ b/tests/Unit/Constraint/MethodPair/AccessorPair/data/parentchild/ExcludeParentGetterChildSetter.php @@ -0,0 +1,21 @@ +items = $items; + } + + /** + * @return stdClass[] + */ + public function getItems(): array + { + return $this->items; + } + + public function getExpectedPairs(): array + { + return [['getItems', 'setItems', false]]; + } +} diff --git a/tests/Unit/Constraint/MethodPair/AccessorPair/data/parentchild/ExcludeParentSetterChildGetter.php b/tests/Unit/Constraint/MethodPair/AccessorPair/data/parentchild/ExcludeParentSetterChildGetter.php new file mode 100644 index 0000000..5083d4e --- /dev/null +++ b/tests/Unit/Constraint/MethodPair/AccessorPair/data/parentchild/ExcludeParentSetterChildGetter.php @@ -0,0 +1,22 @@ +items = $items; + } + + /** + * @return stdClass[] + */ + public function getItems(): array + { + return $this->items; + } + + public function getExpectedPairs(): array + { + return [['getItems', 'setItems', false], ['getItem', 'setItem', false]]; + } +} diff --git a/tests/Unit/Constraint/MethodPair/AccessorPair/data/parentchild/IncludeParentSetterChildGetter.php b/tests/Unit/Constraint/MethodPair/AccessorPair/data/parentchild/IncludeParentSetterChildGetter.php new file mode 100644 index 0000000..39d9aa0 --- /dev/null +++ b/tests/Unit/Constraint/MethodPair/AccessorPair/data/parentchild/IncludeParentSetterChildGetter.php @@ -0,0 +1,22 @@ +item = $item; + } + + public function getItem(): string + { + return $this->item . "foobar"; + } + + /** + * @param stdClass[] $items + */ + public function setItems(array $items): void + { + $this->items = $items; + } + + /** + * @return stdClass[] + */ + public function getItems(): array + { + return $this->items; + } + + public function getConfig(): ConstraintConfig + { + return (new ConstraintConfig())->setExcludedMethods(['setItem']); + } + + public function getExpectedPairs(): array + { + return [['getItems', 'setItems', false]]; + } +} diff --git a/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetAdd.php b/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetAdd.php index e847892..70d426e 100644 --- a/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetAdd.php +++ b/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetAdd.php @@ -3,9 +3,9 @@ namespace DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AccessorPair\data\success; -use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\DataInterface; +use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AbstractDataClass; -class GetAdd implements DataInterface +class GetAdd extends AbstractDataClass { /** @var string[] */ private $property = []; diff --git a/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetAddChildren.php b/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetAddChildren.php index 72414a8..dff4f0a 100644 --- a/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetAddChildren.php +++ b/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetAddChildren.php @@ -3,9 +3,9 @@ namespace DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AccessorPair\data\success; -use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\DataInterface; +use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AbstractDataClass; -class GetAddChildren implements DataInterface +class GetAddChildren extends AbstractDataClass { /** @var string[] */ private $children = []; diff --git a/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetAddPlurals.php b/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetAddPlurals.php index e9868ef..6eeecc4 100644 --- a/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetAddPlurals.php +++ b/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetAddPlurals.php @@ -3,9 +3,9 @@ namespace DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AccessorPair\data\success; -use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\DataInterface; +use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AbstractDataClass; -class GetAddPlurals implements DataInterface +class GetAddPlurals extends AbstractDataClass { /** @var string[] */ private $values = []; diff --git a/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetAddPluraly.php b/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetAddPluraly.php index 76517f4..8ef5770 100644 --- a/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetAddPluraly.php +++ b/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetAddPluraly.php @@ -3,12 +3,12 @@ namespace DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AccessorPair\data\success; -use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\DataInterface; +use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AbstractDataClass; /** * Get/add pair for fields ending in y (plural: - ies). */ -class GetAddPluraly implements DataInterface +class GetAddPluraly extends AbstractDataClass { /** @var string[] */ private $properties = []; diff --git a/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetOptionalSet.php b/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetOptionalSet.php index 3f68d72..e09f231 100644 --- a/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetOptionalSet.php +++ b/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetOptionalSet.php @@ -3,9 +3,9 @@ namespace DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AccessorPair\data\success; -use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\DataInterface; +use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AbstractDataClass; -class GetOptionalSet implements DataInterface +class GetOptionalSet extends AbstractDataClass { /** @var string|null */ private $property; diff --git a/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetSet.php b/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetSet.php index 88f6e88..3864082 100644 --- a/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetSet.php +++ b/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetSet.php @@ -3,9 +3,9 @@ namespace DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AccessorPair\data\success; -use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\DataInterface; +use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AbstractDataClass; -class GetSet implements DataInterface +class GetSet extends AbstractDataClass { /** @var string */ private $property; diff --git a/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetSetAdd.php b/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetSetAdd.php index 6d3baeb..c82702b 100644 --- a/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetSetAdd.php +++ b/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetSetAdd.php @@ -3,9 +3,9 @@ namespace DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AccessorPair\data\success; -use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\DataInterface; +use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AbstractDataClass; -class GetSetAdd implements DataInterface +class GetSetAdd extends AbstractDataClass { /** @var string[] */ private $property = []; diff --git a/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetSetAddPlural.php b/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetSetAddPlural.php index 9b58ded..6c12111 100644 --- a/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetSetAddPlural.php +++ b/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetSetAddPlural.php @@ -3,9 +3,9 @@ namespace DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AccessorPair\data\success; -use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\DataInterface; +use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AbstractDataClass; -class GetSetAddPlural implements DataInterface +class GetSetAddPlural extends AbstractDataClass { /** @var string[] */ private $properties = []; diff --git a/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetSetPlurals.php b/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetSetPlurals.php index 4098092..1569328 100644 --- a/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetSetPlurals.php +++ b/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetSetPlurals.php @@ -3,9 +3,9 @@ namespace DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AccessorPair\data\success; -use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\DataInterface; +use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AbstractDataClass; -class GetSetPlurals implements DataInterface +class GetSetPlurals extends AbstractDataClass { /** @var string[] */ private $values = []; diff --git a/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetSetPluraly.php b/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetSetPluraly.php index 7f8459f..0d0a11b 100644 --- a/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetSetPluraly.php +++ b/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetSetPluraly.php @@ -3,9 +3,9 @@ namespace DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AccessorPair\data\success; -use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\DataInterface; +use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AbstractDataClass; -class GetSetPluraly implements DataInterface +class GetSetPluraly extends AbstractDataClass { /** @var string[] */ private $properties = []; diff --git a/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetVariadicSet.php b/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetVariadicSet.php index 9af9ff7..36b0612 100644 --- a/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetVariadicSet.php +++ b/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/GetVariadicSet.php @@ -3,9 +3,9 @@ namespace DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AccessorPair\data\success; -use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\DataInterface; +use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AbstractDataClass; -class GetVariadicSet implements DataInterface +class GetVariadicSet extends AbstractDataClass { /** @var string[] */ private $property = []; diff --git a/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/NullableGetSet.php b/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/NullableGetSet.php index 5d5d9d7..126fcc7 100644 --- a/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/NullableGetSet.php +++ b/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/NullableGetSet.php @@ -3,9 +3,9 @@ namespace DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AccessorPair\data\success; -use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\DataInterface; +use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AbstractDataClass; -class NullableGetSet implements DataInterface +class NullableGetSet extends AbstractDataClass { /** @var string|null */ private $property; diff --git a/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/NullableGetVariadicSet.php b/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/NullableGetVariadicSet.php index 672f28c..3c03b8e 100644 --- a/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/NullableGetVariadicSet.php +++ b/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/NullableGetVariadicSet.php @@ -3,9 +3,9 @@ namespace DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AccessorPair\data\success; -use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\DataInterface; +use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AbstractDataClass; -class NullableGetVariadicSet implements DataInterface +class NullableGetVariadicSet extends AbstractDataClass { /** @var string[]|null */ private $property = []; diff --git a/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/TypedFullArrayGetSet.php b/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/TypedFullArrayGetSet.php index be42a30..e95fd48 100644 --- a/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/TypedFullArrayGetSet.php +++ b/tests/Unit/Constraint/MethodPair/AccessorPair/data/success/TypedFullArrayGetSet.php @@ -3,9 +3,9 @@ namespace DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AccessorPair\data\success; -use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\DataInterface; +use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AbstractDataClass; -class TypedFullArrayGetSet implements DataInterface +class TypedFullArrayGetSet extends AbstractDataClass { /** @var array */ private $property = []; diff --git a/tests/Unit/Constraint/MethodPair/ClassMethodProviderTest.php b/tests/Unit/Constraint/MethodPair/ClassMethodProviderTest.php new file mode 100644 index 0000000..54b3c31 --- /dev/null +++ b/tests/Unit/Constraint/MethodPair/ClassMethodProviderTest.php @@ -0,0 +1,71 @@ +getMethods(new ReflectionClass(SimpleClassWithOneMethod::class)); + + static::assertCount(1, $methods); + static::assertSame('foobar', $methods[0]->getName()); + } + + /** + * @covers ::getMethods + * @uses \DigitalRevolution\AccessorPairConstraint\Constraint\ConstraintConfig + */ + public function testGetMethodsWithParent(): void + { + $provider = new ClassMethodProvider(new ConstraintConfig()); + $methods = $provider->getMethods(new ReflectionClass(SimpleClassWithParent::class)); + + static::assertCount(2, $methods); + static::assertSame('childMethod', $methods[0]->getName()); + static::assertSame('foobar', $methods[1]->getName()); + } + + /** + * @covers ::getMethods + * @uses \DigitalRevolution\AccessorPairConstraint\Constraint\ConstraintConfig + */ + public function testGetMethodsWithParentExcluded(): void + { + $provider = new ClassMethodProvider((new ConstraintConfig())->setAssertParentMethods(false)); + $methods = $provider->getMethods(new ReflectionClass(SimpleClassWithParent::class)); + + static::assertCount(1, $methods); + static::assertSame('childMethod', $methods[0]->getName()); + } + + /** + * @covers ::getMethods + * @uses \DigitalRevolution\AccessorPairConstraint\Constraint\ConstraintConfig + */ + public function testGetMethodsWithMethodExcluded(): void + { + $provider = new ClassMethodProvider((new ConstraintConfig())->setExcludedMethods(['childMethod'])); + $methods = $provider->getMethods(new ReflectionClass(SimpleClassWithParent::class)); + + static::assertCount(1, $methods); + static::assertSame('foobar', $methods[0]->getName()); + } +} diff --git a/tests/Unit/Constraint/MethodPair/ConstructorPair/ConstructorPairProviderTest.php b/tests/Unit/Constraint/MethodPair/ConstructorPair/ConstructorPairProviderTest.php index c337db5..38aac21 100644 --- a/tests/Unit/Constraint/MethodPair/ConstructorPair/ConstructorPairProviderTest.php +++ b/tests/Unit/Constraint/MethodPair/ConstructorPair/ConstructorPairProviderTest.php @@ -5,7 +5,7 @@ use DigitalRevolution\AccessorPairConstraint\Constraint\MethodPair\ConstructorPair\ConstructorPairProvider; use DigitalRevolution\AccessorPairConstraint\Tests\TestCase; -use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\DataInterface; +use DigitalRevolution\AccessorPairConstraint\Tests\Unit\Constraint\MethodPair\AbstractDataClass; use Generator; use ReflectionClass; use ReflectionException; @@ -26,10 +26,12 @@ class ConstructorPairProviderTest extends TestCase * @covers ::getMethodBaseNames * @covers \DigitalRevolution\AccessorPairConstraint\Constraint\MethodPair\AbstractMethodPair * @covers \DigitalRevolution\AccessorPairConstraint\Constraint\MethodPair\ConstructorPair\ConstructorPair + * @uses \DigitalRevolution\AccessorPairConstraint\Constraint\ConstraintConfig + * @uses \DigitalRevolution\AccessorPairConstraint\Constraint\MethodPair\ClassMethodProvider */ - public function testGetConstructorPairs(DataInterface $class): void + public function testGetConstructorPairs(AbstractDataClass $class): void { - $provider = new ConstructorPairProvider(); + $provider = new ConstructorPairProvider($class->getConfig()); $actualPairs = $provider->getConstructorPairs(new ReflectionClass($class)); $expectedPairs = $class->getExpectedPairs(); @@ -43,7 +45,7 @@ public function testGetConstructorPairs(DataInterface $class): void } /** - * @return Generator> + * @return Generator> * @throws ReflectionException */ public function dataProvider(): Generator diff --git a/tests/Unit/Constraint/MethodPair/ConstructorPair/data/GetParams.php b/tests/Unit/Constraint/MethodPair/ConstructorPair/data/failure/GetParams.php similarity index 80% rename from tests/Unit/Constraint/MethodPair/ConstructorPair/data/GetParams.php rename to tests/Unit/Constraint/MethodPair/ConstructorPair/data/failure/GetParams.php index 85f14ee..3918f55 100644 --- a/tests/Unit/Constraint/MethodPair/ConstructorPair/data/GetParams.php +++ b/tests/Unit/Constraint/MethodPair/ConstructorPair/data/failure/GetParams.php @@ -1,11 +1,11 @@ value = $value; + } +} diff --git a/tests/Unit/Constraint/MethodPair/ConstructorPair/data/parentchild/AbstractParentGetterChildConstructor.php b/tests/Unit/Constraint/MethodPair/ConstructorPair/data/parentchild/AbstractParentGetterChildConstructor.php new file mode 100644 index 0000000..f2e7b31 --- /dev/null +++ b/tests/Unit/Constraint/MethodPair/ConstructorPair/data/parentchild/AbstractParentGetterChildConstructor.php @@ -0,0 +1,17 @@ +value; + } +} diff --git a/tests/Unit/Constraint/MethodPair/ConstructorPair/data/parentchild/ExcludeParentConstructorChildGetter.php b/tests/Unit/Constraint/MethodPair/ConstructorPair/data/parentchild/ExcludeParentConstructorChildGetter.php new file mode 100644 index 0000000..200cee5 --- /dev/null +++ b/tests/Unit/Constraint/MethodPair/ConstructorPair/data/parentchild/ExcludeParentConstructorChildGetter.php @@ -0,0 +1,24 @@ +value; + } + + public function getConfig(): ConstraintConfig + { + return (new ConstraintConfig())->setAssertParentMethods(false); + } + + public function getExpectedPairs(): array + { + return []; + } +} diff --git a/tests/Unit/Constraint/MethodPair/ConstructorPair/data/parentchild/ExcludeParentGetterChildConstructor.php b/tests/Unit/Constraint/MethodPair/ConstructorPair/data/parentchild/ExcludeParentGetterChildConstructor.php new file mode 100644 index 0000000..af12fb4 --- /dev/null +++ b/tests/Unit/Constraint/MethodPair/ConstructorPair/data/parentchild/ExcludeParentGetterChildConstructor.php @@ -0,0 +1,24 @@ +value = $value; + } + + public function getConfig(): ConstraintConfig + { + return (new ConstraintConfig())->setAssertParentMethods(false); + } + + public function getExpectedPairs(): array + { + return []; + } +} diff --git a/tests/Unit/Constraint/MethodPair/ConstructorPair/data/parentchild/IncludeParentConstructorChildGetter.php b/tests/Unit/Constraint/MethodPair/ConstructorPair/data/parentchild/IncludeParentConstructorChildGetter.php new file mode 100644 index 0000000..b15f906 --- /dev/null +++ b/tests/Unit/Constraint/MethodPair/ConstructorPair/data/parentchild/IncludeParentConstructorChildGetter.php @@ -0,0 +1,24 @@ +value; + } + + public function getConfig(): ConstraintConfig + { + return (new ConstraintConfig())->setAssertParentMethods(true); + } + + public function getExpectedPairs(): array + { + return [['getValue', 'value']]; + } +} diff --git a/tests/Unit/Constraint/MethodPair/ConstructorPair/data/parentchild/IncludeParentGetterChildConstructor.php b/tests/Unit/Constraint/MethodPair/ConstructorPair/data/parentchild/IncludeParentGetterChildConstructor.php new file mode 100644 index 0000000..2ef1211 --- /dev/null +++ b/tests/Unit/Constraint/MethodPair/ConstructorPair/data/parentchild/IncludeParentGetterChildConstructor.php @@ -0,0 +1,24 @@ +value = $value; + } + + public function getConfig(): ConstraintConfig + { + return (new ConstraintConfig())->setAssertParentMethods(true); + } + + public function getExpectedPairs(): array + { + return [['getValue', 'value']]; + } +} diff --git a/tests/Unit/Constraint/MethodPair/ConstructorPair/data/ArrayAddSetGet.php b/tests/Unit/Constraint/MethodPair/ConstructorPair/data/success/ArrayAddSetGet.php similarity index 86% rename from tests/Unit/Constraint/MethodPair/ConstructorPair/data/ArrayAddSetGet.php rename to tests/Unit/Constraint/MethodPair/ConstructorPair/data/success/ArrayAddSetGet.php index 893c579..684547e 100644 --- a/tests/Unit/Constraint/MethodPair/ConstructorPair/data/ArrayAddSetGet.php +++ b/tests/Unit/Constraint/MethodPair/ConstructorPair/data/success/ArrayAddSetGet.php @@ -1,12 +1,12 @@ propertyA = $propertyA; + $this->propertyB = $propertyB; + } + + public function getPropertyA(): string + { + return $this->propertyA; + } + + public function getPropertyB(): string + { + return $this->propertyB; + } + + public function getConfig(): ConstraintConfig + { + return (new ConstraintConfig())->setExcludedMethods(['getPropertyB']); + } + + public function getExpectedPairs(): array + { + return [['getPropertyA', 'propertyA']]; + } +} diff --git a/tests/Unit/Constraint/MethodPair/ConstructorPair/data/MultiParam.php b/tests/Unit/Constraint/MethodPair/ConstructorPair/data/success/MultiParam.php similarity index 85% rename from tests/Unit/Constraint/MethodPair/ConstructorPair/data/MultiParam.php rename to tests/Unit/Constraint/MethodPair/ConstructorPair/data/success/MultiParam.php index 8e51835..a02f011 100644 --- a/tests/Unit/Constraint/MethodPair/ConstructorPair/data/MultiParam.php +++ b/tests/Unit/Constraint/MethodPair/ConstructorPair/data/success/MultiParam.php @@ -1,11 +1,11 @@ - */ - public function getExpectedPairs(): array; -} diff --git a/tests/Unit/Constraint/MethodPair/data/SimpleClassWithOneMethod.php b/tests/Unit/Constraint/MethodPair/data/SimpleClassWithOneMethod.php new file mode 100644 index 0000000..b8edb1e --- /dev/null +++ b/tests/Unit/Constraint/MethodPair/data/SimpleClassWithOneMethod.php @@ -0,0 +1,11 @@ +