mirror of
https://github.com/danog/psalm.git
synced 2024-12-12 09:19:40 +01:00
3cd9658d29
Fixes vimeo/psalm#10731
196 lines
5.9 KiB
PHP
196 lines
5.9 KiB
PHP
<?php
|
|
|
|
namespace Psalm\Tests;
|
|
|
|
use Psalm\Config;
|
|
use Psalm\Tests\Traits\InvalidCodeAnalysisTestTrait;
|
|
use Psalm\Tests\Traits\ValidCodeAnalysisTestTrait;
|
|
|
|
class OverrideTest extends TestCase
|
|
{
|
|
use ValidCodeAnalysisTestTrait;
|
|
use InvalidCodeAnalysisTestTrait;
|
|
|
|
protected function makeConfig(): Config
|
|
{
|
|
$config = parent::makeConfig();
|
|
$config->ensure_override_attribute = true;
|
|
return $config;
|
|
}
|
|
|
|
public function providerValidCodeParse(): iterable
|
|
{
|
|
return [
|
|
'constructor' => [
|
|
'code' => '<?php
|
|
/**
|
|
* @psalm-consistent-constructor
|
|
*/
|
|
class C {
|
|
public function __construct() {}
|
|
}
|
|
|
|
class C2 extends C {
|
|
public function __construct() {}
|
|
}
|
|
',
|
|
'assertions' => [],
|
|
'ignored_issues' => [],
|
|
'php_version' => '8.3',
|
|
],
|
|
'overrideClass' => [
|
|
'code' => '<?php
|
|
class C {
|
|
public function f(): void {}
|
|
}
|
|
|
|
class C2 extends C {
|
|
#[Override]
|
|
public function f(): void {}
|
|
}
|
|
',
|
|
'assertions' => [],
|
|
'ignored_issues' => [],
|
|
'php_version' => '8.3',
|
|
],
|
|
'overrideInterface' => [
|
|
'code' => '<?php
|
|
interface I {
|
|
public function f(): void;
|
|
}
|
|
|
|
interface I2 extends I {
|
|
#[Override]
|
|
public function f(): void;
|
|
}
|
|
',
|
|
'assertions' => [],
|
|
'ignored_issues' => [],
|
|
'php_version' => '8.3',
|
|
],
|
|
'canBeUsedOnPureMethods' => [
|
|
'code' => <<<'PHP'
|
|
<?php
|
|
class A {
|
|
/** @psalm-pure */
|
|
public function f(): void {}
|
|
}
|
|
class B extends A {
|
|
/** @psalm-pure */
|
|
#[Override]
|
|
public function f(): void {}
|
|
}
|
|
PHP,
|
|
'assertions' => [],
|
|
'ignored_issues' => [],
|
|
'php_version' => '8.3',
|
|
],
|
|
];
|
|
}
|
|
|
|
public function providerInvalidCodeParse(): iterable
|
|
{
|
|
return [
|
|
'noParent' => [
|
|
'code' => '<?php
|
|
class C {
|
|
#[Override]
|
|
public function f(): void {}
|
|
}
|
|
',
|
|
'error_message' => 'InvalidOverride',
|
|
'error_levels' => [],
|
|
'php_version' => '8.3',
|
|
],
|
|
'classMissingAttribute' => [
|
|
'code' => '<?php
|
|
class C {
|
|
public function f(): void {}
|
|
}
|
|
|
|
class C2 extends C {
|
|
public function f(): void {}
|
|
}
|
|
',
|
|
'error_message' => 'MissingOverrideAttribute',
|
|
'error_levels' => [],
|
|
'php_version' => '8.3',
|
|
],
|
|
'classUsingTrait' => [
|
|
'code' => '<?php
|
|
trait T {
|
|
abstract public function f(): void;
|
|
}
|
|
|
|
class C {
|
|
use T;
|
|
|
|
public function f(): void {}
|
|
}
|
|
',
|
|
'error_message' => 'MissingOverrideAttribute',
|
|
'error_levels' => [],
|
|
'php_version' => '8.3',
|
|
],
|
|
'constructor' => [
|
|
'code' => '<?php
|
|
/**
|
|
* @psalm-consistent-constructor
|
|
*/
|
|
class C {
|
|
public function __construct() {}
|
|
}
|
|
|
|
class C2 extends C {
|
|
#[Override]
|
|
public function __construct() {}
|
|
}
|
|
',
|
|
'error_message' => 'InvalidOverride',
|
|
'error_levels' => [],
|
|
'php_version' => '8.3',
|
|
],
|
|
'interfaceMissingAttribute' => [
|
|
'code' => '<?php
|
|
interface I {
|
|
public function f(): void;
|
|
}
|
|
|
|
interface I2 extends I {
|
|
public function f(): void;
|
|
}
|
|
',
|
|
'error_message' => 'MissingOverrideAttribute',
|
|
'error_levels' => [],
|
|
'php_version' => '8.3',
|
|
],
|
|
'privateMethod' => [
|
|
'code' => '<?php
|
|
class C {
|
|
private function f(): void {}
|
|
}
|
|
|
|
class C2 extends C {
|
|
#[Override]
|
|
private function f(): void {}
|
|
}
|
|
',
|
|
'error_message' => 'InvalidOverride',
|
|
'error_levels' => [],
|
|
'php_version' => '8.3',
|
|
],
|
|
'interfaceWithNoParent' => [
|
|
'code' => '<?php
|
|
interface I {
|
|
#[Override]
|
|
public function f(): void;
|
|
}
|
|
',
|
|
'error_message' => 'InvalidOverride',
|
|
'error_levels' => [],
|
|
'php_version' => '8.3',
|
|
],
|
|
];
|
|
}
|
|
}
|