1515
1616use phpDocumentor \Reflection \Fqsen ;
1717use phpDocumentor \Reflection \FqsenResolver ;
18+ use phpDocumentor \Reflection \PseudoTypes \ConstExpression ;
19+ use phpDocumentor \Reflection \PseudoTypes \FloatValue ;
1820use phpDocumentor \Reflection \PseudoTypes \IntegerRange ;
21+ use phpDocumentor \Reflection \PseudoTypes \IntegerValue ;
1922use phpDocumentor \Reflection \PseudoTypes \List_ ;
23+ use phpDocumentor \Reflection \PseudoTypes \StringValue ;
24+ use phpDocumentor \Reflection \PseudoTypes \True_ ;
2025use phpDocumentor \Reflection \Type ;
2126use phpDocumentor \Reflection \TypeResolver ;
2227use phpDocumentor \Reflection \Types \Array_ ;
@@ -50,6 +55,8 @@ final class TypeFactoryTest extends TestCase
5055 * @dataProvider typeProvider
5156 * @dataProvider genericsProvider
5257 * @dataProvider callableProvider
58+ * @dataProvider constExpressions
59+ * @testdox create type from $type
5360 */
5461 public function testTypeBuilding (string $ type , Type $ expected ): void
5562 {
@@ -58,8 +65,9 @@ public function testTypeBuilding(string $type, Type $expected): void
5865 $ constParser = new ConstExprParser ();
5966 $ parser = new TypeParser ($ constParser );
6067 $ ast = $ parser ->parse (new TokenIterator ($ tokens ));
68+ $ fqsenResolver = new FqsenResolver ();
6169
62- $ factory = new TypeFactory (new TypeResolver (new FqsenResolver ()) );
70+ $ factory = new TypeFactory (new TypeResolver ($ fqsenResolver ), $ fqsenResolver );
6371 $ actual = $ factory ->createType ($ ast , new Context ('phpDocumentor ' ));
6472
6573 self ::assertEquals ($ expected , $ actual );
@@ -219,72 +227,29 @@ public function callableProvider(): array
219227 public function constExpressions (): array
220228 {
221229 return [
222- ['Foo::FOO_CONSTANT ' ],
223230 [
224231 '123 ' ,
225- // new ConstTypeNode(new ConstExprIntegerNode(' 123') ),
232+ new IntegerValue ( 123 ),
226233 ],
227234 [
228- '123.2 ' ,
229- //new ConstTypeNode(new ConstExprFloatNode('123.2')),
230- ],
231- [
232- '"bar" ' ,
233- //new ConstTypeNode(new ConstExprStringNode('bar')),
234- ],
235- [
236- 'Foo::FOO_* ' ,
237- //new ConstTypeNode(new ConstFetchNode('Foo', 'FOO_*')),
238- ],
239- [
240- 'Foo::FOO_*BAR ' ,
241- //new ConstTypeNode(new ConstFetchNode('Foo', 'FOO_*BAR')),
242- ],
243- [
244- 'Foo::*FOO* ' ,
245- //new ConstTypeNode(new ConstFetchNode('Foo', '*FOO*')),
235+ 'true ' ,
236+ new True_ (),
246237 ],
247238 [
248- 'Foo::A*B*C ' ,
249- //new ConstTypeNode(new ConstFetchNode('Foo', 'A*B*C')),
250- ],
251- [
252- 'self::*BAR ' ,
253- //new ConstTypeNode(new ConstFetchNode('self', '*BAR')),
254- ],
255- [
256- 'Foo::* ' ,
257- //new ConstTypeNode(new ConstFetchNode('Foo', '*')),
258- ],
259- [
260- 'Foo::** ' ,
261- //new ConstTypeNode(new ConstFetchNode('Foo', '*')), // fails later in PhpDocParser
262- //Lexer::TOKEN_WILDCARD,
263- ],
264- [
265- 'Foo::*a ' ,
266- //new ConstTypeNode(new ConstFetchNode('Foo', '*a')),
239+ '123.2 ' ,
240+ new FloatValue (123.2 ),
267241 ],
268242 [
269- '( "foo" | Foo::FOO_* ) ' ,
270- // new UnionTypeNode([
271- // new ConstTypeNode(new ConstExprStringNode('foo')),
272- // new ConstTypeNode(new ConstFetchNode('Foo', 'FOO_*')),
273- // ]),
243+ '"bar" ' ,
244+ new StringValue ('bar ' ),
274245 ],
275246 [
276- 'DateTimeImmutable::*|DateTime::* ' ,
277- // new UnionTypeNode([
278- // new ConstTypeNode(new ConstFetchNode('DateTimeImmutable', '*')),
279- // new ConstTypeNode(new ConstFetchNode('DateTime', '*')),
280- // ]),
247+ 'Foo::FOO_CONSTANT ' ,
248+ new ConstExpression (new Fqsen ('\\phpDocumentor \\Foo ' ), 'FOO_CONSTANT ' ),
281249 ],
282250 [
283- 'ParameterTier::*|null ' ,
284- // new UnionTypeNode([
285- // new ConstTypeNode(new ConstFetchNode('ParameterTier', '*')),
286- // new IdentifierTypeNode('null'),
287- // ]),
251+ 'Foo::FOO_* ' ,
252+ new ConstExpression (new Fqsen ('\\phpDocumentor \\Foo ' ), 'FOO_* ' ),
288253 ],
289254 ];
290255 }
0 commit comments