@@ -305,5 +305,67 @@ public function testMethodParameterTag(): void {
305305        $ this  ->assertSame ('Tag ' , $ types [0 ]->getName (), 'name ' );
306306        $ this  ->assertSame (false , $ types [0 ]->getNullable (), 'nullable ' );
307307    }
308+     public  function  testMethodReturnUnion (): void  {
309+         // /** @params string|int $param1 */ 
310+         $ parser  = (new  ParserFactory )->create (ParserFactory::PREFER_PHP7 );
311+         $ filename  = sprintf ('%s/php8/product/Product.php ' , $ this  ->fixtureDir );
312+         try  {
313+             $ ast  = $ parser ->parse (file_get_contents ($ filename ));
314+         } catch  (Error   $ error ) {
315+             throw  new  \Exception ("Parse error:  {$ error ->getMessage ()} file:  {$ filename }\n" );
316+         }
317+         $ method  = $ ast [0 ]->stmts [2 ]->stmts [14 ];
318+         //  var_dump($method);die(); 
319+         $ expression  = PhpTypeExpression::buildByMethodReturn ($ method , ['hoge ' , 'fuga ' , 'product ' ], []);
320+         $ types  = $ expression ->getTypes ();
321+ 
322+         $ this  ->assertSame ('method5 ' , $ method ->name ->name , 'method name ' );
323+         $ this  ->assertSame ([], $ types [0 ]->getNamespace (), 'namespace ' );
324+         $ this  ->assertSame ('int ' , $ types [0 ]->getName (), 'name ' );
325+         $ this  ->assertSame (false , $ types [0 ]->getNullable (), 'nullable ' );
326+         $ this  ->assertSame ('string ' , $ types [1 ]->getName (), 'name ' );
327+         $ this  ->assertSame (false , $ types [1 ]->getNullable (), 'nullable ' );
328+     }
329+     public  function  testMethodReturnUnionDoc (): void  {
330+         // /** @params string|int $param1 */ 
331+         $ parser  = (new  ParserFactory )->create (ParserFactory::PREFER_PHP7 );
332+         $ filename  = sprintf ('%s/php8/product/Product.php ' , $ this  ->fixtureDir );
333+         try  {
334+             $ ast  = $ parser ->parse (file_get_contents ($ filename ));
335+         } catch  (Error   $ error ) {
336+             throw  new  \Exception ("Parse error:  {$ error ->getMessage ()} file:  {$ filename }\n" );
337+         }
338+         $ method  = $ ast [0 ]->stmts [2 ]->stmts [15 ];
339+         //  var_dump($method);die(); 
340+         $ expression  = PhpTypeExpression::buildByMethodReturn ($ method , ['hoge ' , 'fuga ' , 'product ' ], []);
341+         $ types  = $ expression ->getTypes ();
342+ 
343+         $ this  ->assertSame ('method6 ' , $ method ->name ->name , 'method name ' );
344+         $ this  ->assertSame ([], $ types [0 ]->getNamespace (), 'namespace ' );
345+         $ this  ->assertSame ('int ' , $ types [0 ]->getName (), 'name ' );
346+         $ this  ->assertSame (false , $ types [0 ]->getNullable (), 'nullable ' );
347+         $ this  ->assertSame ('string ' , $ types [1 ]->getName (), 'name ' );
348+         $ this  ->assertSame (false , $ types [1 ]->getNullable (), 'nullable ' );
349+     }
350+     public  function  testMethodReturnObjectArray (): void  {
351+         // /** @params string|int $param1 */ 
352+         $ parser  = (new  ParserFactory )->create (ParserFactory::PREFER_PHP7 );
353+         $ filename  = sprintf ('%s/php8/product/Product.php ' , $ this  ->fixtureDir );
354+         try  {
355+             $ ast  = $ parser ->parse (file_get_contents ($ filename ));
356+         } catch  (Error   $ error ) {
357+             throw  new  \Exception ("Parse error:  {$ error ->getMessage ()} file:  {$ filename }\n" );
358+         }
359+         $ method  = $ ast [0 ]->stmts [2 ]->stmts [16 ];
360+         $ uses  = [new  PhpType (['hoge ' , 'fuga ' , 'product ' , 'tag ' ], '' , 'Tag ' )];
361+         //  var_dump($method);die(); 
362+         $ expression  = PhpTypeExpression::buildByMethodReturn ($ method , ['hoge ' , 'fuga ' , 'product ' ], $ uses );
363+         $ types  = $ expression ->getTypes ();
364+ 
365+         $ this  ->assertSame ('method7 ' , $ method ->name ->name , 'method name ' );
366+         $ this  ->assertSame (['hoge ' , 'fuga ' , 'product ' , 'tag ' ], $ types [0 ]->getNamespace (), 'namespace ' );
367+         $ this  ->assertSame ('Tag[] ' , $ types [0 ]->getName (), 'name ' );
368+         $ this  ->assertSame (false , $ types [0 ]->getNullable (), 'nullable ' );
369+     }
308370
309371}
0 commit comments