Skip to content

Commit

Permalink
Merge pull request #8 from hirokinoue/dataprovider-as-generator
Browse files Browse the repository at this point in the history
dataProviderをGeneratorで書き直す
  • Loading branch information
hirokinoue committed Feb 27, 2024
2 parents 10cda81 + 42d09ec commit 10a9fcd
Show file tree
Hide file tree
Showing 5 changed files with 151 additions and 180 deletions.
70 changes: 32 additions & 38 deletions tests/ClassManipulator/ClassLikeWrapperTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,29 +34,26 @@ public function testクラスの名前が取得できること(ClassLike $classL

/**
* @noinspection NonAsciiCharacters
* @return array<string, array<int, Class_|string>>
*/
public function dataクラスの名前が取得できること(): array
public function dataクラスの名前が取得できること(): \Generator
{
$class1 = new Class_(new Identifier('Bar'));
$class1->namespacedName = new FullyQualified('Foo\Bar');
$class2 = new Class_(null);
$class2->namespacedName = null;
$class3 = new Class_(new Identifier('Bar'));
$class3->namespacedName = null;
return [
'完全修飾名が取得できること' => [
$class1,
'\Foo\Bar',
],
'名前が空であること' => [
$class2,
'',
],
'完全修飾名ではない名前が取得できること' => [
$class3,
'Bar',
],
yield '完全修飾名が取得できること' => [
$class1,
'\Foo\Bar',
];
yield '名前が空であること' => [
$class2,
'',
];
yield '完全修飾名ではない名前が取得できること' => [
$class3,
'Bar',
];
}

Expand All @@ -78,31 +75,28 @@ public function test宣言する要素が取得できること(ClassLike $classL

/**
* @noinspection NonAsciiCharacters
* @return array<string, array<int, ClassLike|string>>
*/
public function data宣言する要素が取得できること(): array
public function data宣言する要素が取得できること(): \Generator
{
return [
'具象クラス' => [
new Class_(''),
'class',
],
'抽象クラス' => [
new Class_('', ['flags' => Modifiers::ABSTRACT]),
'abstract',
],
'インタフェース' => [
new Interface_(''),
'interface',
],
'トレイト' => [
new Trait_(''),
'trait',
],
'enum' => [
new Enum_(''),
'enum',
],
yield '具象クラス' => [
new Class_(''),
'class',
];
yield '抽象クラス' => [
new Class_('', ['flags' => Modifiers::ABSTRACT]),
'abstract',
];
yield 'インタフェース' => [
new Interface_(''),
'interface',
];
yield 'トレイト' => [
new Trait_(''),
'trait',
];
yield 'enum' => [
new Enum_(''),
'enum',
];
}

Expand Down
66 changes: 30 additions & 36 deletions tests/ClassManipulator/ClassLoaderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,37 +33,34 @@ public function test対象に応じてロードできること(

/**
* @noinspection NonAsciiCharacters
* @return array<string, array<int, string|FullyQualified>>
*/
public function data対象に応じてロードできること(): array
public function data対象に応じてロードできること(): \Generator
{
$userDefinedClassCode = <<<CODE
<?php
namespace Hirokinoue\DependencyVisualizer\Tests\data;
class UserDefinedClass{}
CODE;
return [
'ユーザー定義クラスはクラス名とコードが取得できる' => [
new FullyQualified('Hirokinoue\DependencyVisualizer\Tests\data\UserDefinedClass'),
'\Hirokinoue\DependencyVisualizer\Tests\data\UserDefinedClass',
$userDefinedClassCode,
],
'内部クラスはクラス名のみ取得できる' => [
new FullyQualified('Exception'),
'\Exception',
'',
],
'定数はクラス名もコードも取得できない' => [
new FullyQualified('FOO'),
'',
'',
],
'キーワードはクラス名もコードも取得できない' => [
new FullyQualified('true'),
'',
'',
],
yield 'ユーザー定義クラスはクラス名とコードが取得できる' => [
new FullyQualified('Hirokinoue\DependencyVisualizer\Tests\data\UserDefinedClass'),
'\Hirokinoue\DependencyVisualizer\Tests\data\UserDefinedClass',
$userDefinedClassCode,
];
yield '内部クラスはクラス名のみ取得できる' => [
new FullyQualified('Exception'),
'\Exception',
'',
];
yield '定数はクラス名もコードも取得できない' => [
new FullyQualified('FOO'),
'',
'',
];
yield 'キーワードはクラス名もコードも取得できない' => [
new FullyQualified('true'),
'',
'',
];
}

Expand All @@ -90,9 +87,8 @@ public function testロードしたことのあるクラスを再びロードし

/**
* @noinspection NonAsciiCharacters
* @return array<string, array<int, FullyQualified|string|bool>>
*/
public function dataロードしたことのあるクラスを再びロードしないこと(): array
public function dataロードしたことのあるクラスを再びロードしないこと(): \Generator
{
$userDefinedClass = 'Hirokinoue\DependencyVisualizer\Tests\data\UserDefinedClass';
$userDefinedClassCode = <<<CODE
Expand All @@ -101,17 +97,15 @@ public function dataロードしたことのあるクラスを再びロードし
class UserDefinedClass{}
CODE;
return [
'初回はロードする' => [
new FullyQualified($userDefinedClass),
'\\' . $userDefinedClass,
$userDefinedClassCode,
],
'2回目以降はロードしない' => [
new FullyQualified($userDefinedClass),
'\\' . $userDefinedClass,
'',
],
yield '初回はロードする' => [
new FullyQualified($userDefinedClass),
'\\' . $userDefinedClass,
$userDefinedClassCode,
];
yield '2回目以降はロードしない' => [
new FullyQualified($userDefinedClass),
'\\' . $userDefinedClass,
'',
];
}

Expand Down
35 changes: 16 additions & 19 deletions tests/DependencyVisualizerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,8 @@ public function test分析結果をテキスト形式で出力できること(st

/**
* @noinspection NonAsciiCharacters
* @return array<string, array<int, string>>
*/
public function data分析結果をテキスト形式で出力できること(): array
public function data分析結果をテキスト形式で出力できること(): \Generator
{
$rootIsClass = <<<RESULT
\Hirokinoue\DependencyVisualizer\Tests\data\Foo
Expand Down Expand Up @@ -64,23 +63,21 @@ public function data分析結果をテキスト形式で出力できること():
\Hirokinoue\DependencyVisualizer\Tests\data\RedundantDependency\C
RESULT;
return [
'始点がクラスの時ルートがクラス名' => [
__DIR__ . '/data/Foo.php',
$rootIsClass,
],
'始点がクラスではない時ルートがroot' => [
__DIR__ . '/data/foo.php',
$rootIsNotClass,
],
'循環依存があっても無限ループせず解析が完了する' => [
__DIR__ . '/data/InfiniteLoop/A.php',
$infiniteLoop,
],
'同じクラスを複数回使用する場合1つだけ図示する' => [
__DIR__ . '/data/RedundantDependency/A.php',
$performanceEnhancement,
],
yield '始点がクラスの時ルートがクラス名' => [
__DIR__ . '/data/Foo.php',
$rootIsClass,
];
yield '始点がクラスではない時ルートがroot' => [
__DIR__ . '/data/foo.php',
$rootIsNotClass,
];
yield '循環依存があっても無限ループせず解析が完了する' => [
__DIR__ . '/data/InfiniteLoop/A.php',
$infiniteLoop,
];
yield '同じクラスを複数回使用する場合1つだけ図示する' => [
__DIR__ . '/data/RedundantDependency/A.php',
$performanceEnhancement,
];
}
}
Loading

0 comments on commit 10a9fcd

Please sign in to comment.