fix(trait): preserve import context for property defaults (#69)
parent
26bfbdda4e
commit
3b66b488a3
6 changed files with 142 additions and 1 deletions
@ -0,0 +1,22 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace TraitPropertyImports; |
||||||
|
|
||||||
|
use TraitPropertyImports\Support\OtherLevel as ImportedLevel; |
||||||
|
|
||||||
|
trait NestedLevels |
||||||
|
{ |
||||||
|
use HasLevels; |
||||||
|
} |
||||||
|
|
||||||
|
class DirectConsumer |
||||||
|
{ |
||||||
|
use HasLevels; |
||||||
|
|
||||||
|
public array $ownLevels = ['debug' => ImportedLevel::Debug]; |
||||||
|
} |
||||||
|
|
||||||
|
class NestedConsumer |
||||||
|
{ |
||||||
|
use NestedLevels; |
||||||
|
} |
||||||
@ -0,0 +1,13 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace TraitPropertyImports\Support; |
||||||
|
|
||||||
|
enum Level: int |
||||||
|
{ |
||||||
|
case Debug = 100; |
||||||
|
} |
||||||
|
|
||||||
|
enum OtherLevel: int |
||||||
|
{ |
||||||
|
case Debug = 200; |
||||||
|
} |
||||||
@ -0,0 +1,10 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace TraitPropertyImports; |
||||||
|
|
||||||
|
use TraitPropertyImports\Support\Level as ImportedLevel; |
||||||
|
|
||||||
|
trait HasLevels |
||||||
|
{ |
||||||
|
public array $levels = ['debug' => ImportedLevel::Debug]; |
||||||
|
} |
||||||
@ -0,0 +1,25 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
use TypePhp\CompilerTest; |
||||||
|
|
||||||
|
class TraitPropertyImportContextTest extends BaseTest |
||||||
|
{ |
||||||
|
public function testPropertyDefaultsKeepTheirDeclaringFileImports(): void |
||||||
|
{ |
||||||
|
global $translator; |
||||||
|
|
||||||
|
$compiler = CompilerTest::create(TYPEPHP_ROOT_PATH); |
||||||
|
$translator = $compiler; |
||||||
|
$directory = TYPEPHP_ROOT_PATH . '/phpunit/code/trait-property-import-context/'; |
||||||
|
$files = [$directory . 'levels.php', $directory . 'trait.php', $directory . 'consumer.php']; |
||||||
|
$compiler->addFiles($files); |
||||||
|
foreach ($files as $file) { |
||||||
|
$compiler->prepareFile($file); |
||||||
|
} |
||||||
|
foreach ($files as $file) { |
||||||
|
$compiler->convertFile($file); |
||||||
|
} |
||||||
|
|
||||||
|
$this->addToAssertionCount(1); |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,61 @@ |
|||||||
|
--TEST-- |
||||||
|
Trait property defaults retain the original imports through nested composition |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
namespace TraitPropertyDefaults\Support { |
||||||
|
enum Level: int { |
||||||
|
case Debug = 100; |
||||||
|
} |
||||||
|
|
||||||
|
enum OtherLevel: int { |
||||||
|
case Debug = 200; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
namespace TraitPropertyDefaults\Template { |
||||||
|
use TraitPropertyDefaults\Support\Level; |
||||||
|
|
||||||
|
trait HasLevels { |
||||||
|
public array $levels = ['debug' => Level::Debug]; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
namespace TraitPropertyDefaults\Wrapper { |
||||||
|
use TraitPropertyDefaults\Support\OtherLevel as Level; |
||||||
|
use TraitPropertyDefaults\Template\HasLevels; |
||||||
|
|
||||||
|
trait NestedLevels { |
||||||
|
use HasLevels; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
namespace TraitPropertyDefaults\Consumer { |
||||||
|
use TraitPropertyDefaults\Support\OtherLevel as Level; |
||||||
|
use TraitPropertyDefaults\Template\HasLevels; |
||||||
|
use TraitPropertyDefaults\Wrapper\NestedLevels; |
||||||
|
|
||||||
|
class DirectConsumer { |
||||||
|
use HasLevels; |
||||||
|
|
||||||
|
public array $ownLevels = ['debug' => Level::Debug]; |
||||||
|
} |
||||||
|
|
||||||
|
class NestedConsumer { |
||||||
|
use NestedLevels; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
namespace { |
||||||
|
function main(): void { |
||||||
|
$direct = new TraitPropertyDefaults\Consumer\DirectConsumer(); |
||||||
|
$nested = new TraitPropertyDefaults\Consumer\NestedConsumer(); |
||||||
|
var_dump($direct->levels['debug']->value); |
||||||
|
var_dump($nested->levels['debug']->value); |
||||||
|
var_dump($direct->ownLevels['debug']->value); |
||||||
|
} |
||||||
|
} |
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
int(100) |
||||||
|
int(100) |
||||||
|
int(200) |
||||||
Loading…
Reference in new issue