1 | <?php |
||||
2 | declare(strict_types=1); |
||||
3 | namespace Thunder\Platenum\Tests; |
||||
4 | |||||
5 | use PHPUnit\Framework\TestCase; |
||||
6 | use Thunder\Platenum\Enum\AbstractAttributeEnum; |
||||
7 | use Thunder\Platenum\Enum\AbstractCallbackEnum; |
||||
8 | use Thunder\Platenum\Enum\AbstractConstantsEnum; |
||||
9 | use Thunder\Platenum\Enum\AbstractDocblockEnum; |
||||
10 | use Thunder\Platenum\Enum\AbstractStaticEnum; |
||||
11 | use Thunder\Platenum\Enum\AttributeEnumTrait; |
||||
12 | use Thunder\Platenum\Enum\CallbackEnumTrait; |
||||
13 | use Thunder\Platenum\Enum\ConstantsEnumTrait; |
||||
14 | use Thunder\Platenum\Enum\DocblockEnumTrait; |
||||
15 | use Thunder\Platenum\Enum\EnumTrait; |
||||
16 | use Thunder\Platenum\Enum\Member; |
||||
17 | use Thunder\Platenum\Enum\StaticEnumTrait; |
||||
18 | use Thunder\Platenum\Tests\Fake\FakeEnum; |
||||
19 | |||||
20 | /** |
||||
21 | * @author Tomasz Kowalczyk <[email protected]> |
||||
22 | */ |
||||
23 | abstract class AbstractTestCase extends TestCase |
||||
24 | { |
||||
25 | /** @return FakeEnum */ |
||||
26 | protected function makeRawEnum(array $members): string |
||||
27 | { |
||||
28 | $entries = []; |
||||
29 | foreach($members as $member => $value) { |
||||
30 | $entries[] = sprintf('%s => %s', '\''.$member.'\'', is_string($value) ? '\''.$value.'\'' : $value); |
||||
31 | } |
||||
32 | |||||
33 | $class = $this->computeUniqueClassName('RawEnum'); |
||||
34 | eval('final class '.$class.' implements \JsonSerializable { |
||||
0 ignored issues
–
show
introduced
by
![]() |
|||||
35 | use '.EnumTrait::class.'; |
||||
36 | private static function resolve(): array { return ['.implode(', ', $entries).']; } |
||||
37 | }'); |
||||
38 | |||||
39 | return $class; |
||||
0 ignored issues
–
show
|
|||||
40 | } |
||||
41 | |||||
42 | /** @return FakeEnum */ |
||||
43 | protected function makeDocblockTraitEnum(array $members): string |
||||
44 | { |
||||
45 | $entries = []; |
||||
46 | foreach($members as $member => $value) { |
||||
47 | $entries[] = sprintf(' * @method static self %s()', $member); |
||||
48 | } |
||||
49 | |||||
50 | $class = $this->computeUniqueClassName('DocblockTrait'); |
||||
51 | eval('/**'."\n".implode("\n", $entries)."\n".'*/ final class '.$class.' { use '.DocblockEnumTrait::class.'; }'); |
||||
0 ignored issues
–
show
|
|||||
52 | |||||
53 | return $class; |
||||
0 ignored issues
–
show
|
|||||
54 | } |
||||
55 | |||||
56 | /** @return FakeEnum */ |
||||
57 | protected function makeDocblockExtendsEnum(array $members): string |
||||
58 | { |
||||
59 | $entries = []; |
||||
60 | foreach($members as $member => $value) { |
||||
61 | $entries[] = sprintf(' * @method static self %s()', $member); |
||||
62 | } |
||||
63 | |||||
64 | $class = $this->computeUniqueClassName('DocblockExtends'); |
||||
65 | eval('/**'."\n".implode("\n", $entries)."\n".'*/ final class '.$class.' extends '.AbstractDocblockEnum::class.' {}'); |
||||
0 ignored issues
–
show
|
|||||
66 | |||||
67 | return $class; |
||||
0 ignored issues
–
show
|
|||||
68 | } |
||||
69 | |||||
70 | /** @return FakeEnum */ |
||||
71 | protected function makeConstantsTraitEnum(array $members): string |
||||
72 | { |
||||
73 | $entries = []; |
||||
74 | foreach($members as $member => $value) { |
||||
75 | $entries[] = sprintf('private const %s = %s;', $member, is_string($value) ? '\''.$value.'\'' : $value); |
||||
76 | } |
||||
77 | |||||
78 | $class = $this->computeUniqueClassName('ConstantsTrait'); |
||||
79 | eval('final class '.$class.' implements \JsonSerializable { '.implode("\n", $entries).' use '.ConstantsEnumTrait::class.'; }'); |
||||
0 ignored issues
–
show
|
|||||
80 | |||||
81 | return $class; |
||||
0 ignored issues
–
show
|
|||||
82 | } |
||||
83 | |||||
84 | /** @return FakeEnum */ |
||||
85 | protected function makeConstantsExtendsEnum(array $members): string |
||||
86 | { |
||||
87 | $entries = []; |
||||
88 | foreach($members as $member => $value) { |
||||
89 | $entries[] = sprintf('private const %s = %s;', $member, is_string($value) ? '\''.$value.'\'' : $value); |
||||
90 | } |
||||
91 | |||||
92 | $class = $this->computeUniqueClassName('ConstantsExtends'); |
||||
93 | eval('final class '.$class.' extends '.AbstractConstantsEnum::class.' { '.implode("\n", $entries).' }'); |
||||
0 ignored issues
–
show
|
|||||
94 | |||||
95 | return $class; |
||||
0 ignored issues
–
show
|
|||||
96 | } |
||||
97 | |||||
98 | /** @return FakeEnum */ |
||||
99 | protected function makeStaticTraitEnum(array $members): string |
||||
100 | { |
||||
101 | $entries = []; |
||||
102 | foreach($members as $member => $value) { |
||||
103 | $entries[] = sprintf('%s => %s', '\''.$member.'\'', is_string($value) ? '\''.$value.'\'' : $value); |
||||
104 | } |
||||
105 | |||||
106 | $class = $this->computeUniqueClassName('StaticTrait'); |
||||
107 | eval('final class '.$class.' implements \JsonSerializable { private static $mapping = ['.implode(', ', $entries).']; use '.StaticEnumTrait::class.'; }'); |
||||
0 ignored issues
–
show
|
|||||
108 | |||||
109 | return $class; |
||||
0 ignored issues
–
show
|
|||||
110 | } |
||||
111 | |||||
112 | /** @return FakeEnum */ |
||||
113 | protected function makeStaticExtendsEnum(array $members): string |
||||
114 | { |
||||
115 | $entries = []; |
||||
116 | foreach($members as $member => $value) { |
||||
117 | $entries[] = sprintf('%s => %s', '\''.$member.'\'', is_string($value) ? '\''.$value.'\'' : $value); |
||||
118 | } |
||||
119 | |||||
120 | $class = $this->computeUniqueClassName('StaticExtends'); |
||||
121 | eval('final class '.$class.' extends '.AbstractStaticEnum::class.' { protected static $mapping = ['.implode(', ', $entries).']; }'); |
||||
0 ignored issues
–
show
|
|||||
122 | |||||
123 | return $class; |
||||
0 ignored issues
–
show
|
|||||
124 | } |
||||
125 | |||||
126 | /** @return FakeEnum */ |
||||
127 | protected function makeCallbackTraitEnum(array $members): string |
||||
0 ignored issues
–
show
The parameter
$members is not used and could be removed.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
This check looks for parameters that have been defined for a function or method, but which are not used in the method body. ![]() |
|||||
128 | { |
||||
129 | $class = $this->computeUniqueClassName('CallbackTrait'); |
||||
130 | eval('final class '.$class.' implements \JsonSerializable { use '.CallbackEnumTrait::class.'; }'); |
||||
0 ignored issues
–
show
|
|||||
131 | |||||
132 | return $class; |
||||
0 ignored issues
–
show
|
|||||
133 | } |
||||
134 | |||||
135 | /** @return FakeEnum */ |
||||
136 | protected function makeCallbackExtendsEnum(array $members): string |
||||
0 ignored issues
–
show
The parameter
$members is not used and could be removed.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
This check looks for parameters that have been defined for a function or method, but which are not used in the method body. ![]() |
|||||
137 | { |
||||
138 | $class = $this->computeUniqueClassName('CallbackExtends'); |
||||
139 | eval('final class '.$class.' extends '.AbstractCallbackEnum::class.' { }'); |
||||
0 ignored issues
–
show
|
|||||
140 | |||||
141 | return $class; |
||||
0 ignored issues
–
show
|
|||||
142 | } |
||||
143 | |||||
144 | /** @return FakeEnum */ |
||||
145 | protected function makeAttributeTraitEnum(array $members): string |
||||
146 | { |
||||
147 | $attributes = []; |
||||
148 | foreach($members as $member => $value) { |
||||
149 | $attributes[] = '#['.Member::class.'(\''.$member.'\', '.$value.')]'; |
||||
150 | } |
||||
151 | |||||
152 | $class = $this->computeUniqueClassName('AttributeTrait'); |
||||
153 | eval(implode("\n", $attributes)."\n".'final class '.$class.' implements \JsonSerializable { use '.AttributeEnumTrait::class.'; }'); |
||||
0 ignored issues
–
show
|
|||||
154 | |||||
155 | return $class; |
||||
0 ignored issues
–
show
|
|||||
156 | } |
||||
157 | |||||
158 | /** @return FakeEnum */ |
||||
159 | protected function makeAttributeExtendsEnum(array $members): string |
||||
160 | { |
||||
161 | $attributes = []; |
||||
162 | foreach($members as $member => $value) { |
||||
163 | $attributes[] = '#['.Member::class.'(\''.$member.'\', '.$value.')]'; |
||||
164 | } |
||||
165 | |||||
166 | $class = $this->computeUniqueClassName('AttributeExtends'); |
||||
167 | eval(implode("\n", $attributes)."\n".'final class '.$class.' extends '.AbstractAttributeEnum::class.' {}'); |
||||
0 ignored issues
–
show
|
|||||
168 | |||||
169 | return $class; |
||||
0 ignored issues
–
show
|
|||||
170 | } |
||||
171 | |||||
172 | protected function computeUniqueClassName(string $prefix): string |
||||
173 | { |
||||
174 | while(true === class_exists($class = $prefix.random_int(1, 1000000))) { |
||||
175 | continue; |
||||
176 | } |
||||
177 | |||||
178 | return $class; |
||||
179 | } |
||||
180 | } |
||||
181 |