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