117 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			117 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			PHP
		
	
	
|  | <?php declare(strict_types=1); | ||
|  | 
 | ||
|  | /** | ||
|  |  * @license Apache 2.0 | ||
|  |  */ | ||
|  | 
 | ||
|  | namespace OpenApi\Tests; | ||
|  | 
 | ||
|  | use OpenApi\Context; | ||
|  | use OpenApi\Generator; | ||
|  | 
 | ||
|  | class ContextTest extends OpenApiTestCase | ||
|  | { | ||
|  |     public function testDetect() | ||
|  |     { | ||
|  |         $context = Context::detect(); | ||
|  |         $line = __LINE__ - 1; | ||
|  |         $this->assertSame('ContextTest', $context->class); | ||
|  |         $this->assertSame('\OpenApi\Tests\ContextTest', $context->fullyQualifiedName($context->class)); | ||
|  |         $this->assertSame('testDetect', $context->method); | ||
|  |         $this->assertSame(__FILE__, $context->filename); | ||
|  |         $this->assertSame($line, $context->line); | ||
|  |         $this->assertSame('OpenApi\Tests', $context->namespace); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testFullyQualifiedName() | ||
|  |     { | ||
|  |         $this->assertOpenApiLogEntryContains('Required @OA\PathItem() not found'); | ||
|  |         $openapi = Generator::scan([__DIR__ . '/Fixtures/Customer.php']); | ||
|  |         $context = $openapi->components->schemas[0]->_context; | ||
|  |         // resolve with namespace
 | ||
|  |         $this->assertSame('\FullyQualified', $context->fullyQualifiedName('\FullyQualified')); | ||
|  |         $this->assertSame('\OpenApi\Tests\Fixtures\Unqualified', $context->fullyQualifiedName('Unqualified')); | ||
|  |         $this->assertSame('\OpenApi\Tests\Fixtures\Namespace\Qualified', $context->fullyQualifiedName('Namespace\Qualified')); | ||
|  |         // respect use statements
 | ||
|  |         $this->assertSame('\Exception', $context->fullyQualifiedName('Exception')); | ||
|  |         $this->assertSame('\OpenApi\Tests\Fixtures\Customer', $context->fullyQualifiedName('Customer')); | ||
|  |         $this->assertSame('\OpenApi\Logger', $context->fullyQualifiedName('Logger')); | ||
|  |         $this->assertSame('\OpenApi\Logger', $context->fullyQualifiedName('lOgGeR')); // php has case-insensitive class names :-(
 | ||
|  |         $this->assertSame('\OpenApi\Logger', $context->fullyQualifiedName('OpenApiLogger')); | ||
|  |         $this->assertSame('\OpenApi\Annotations\QualifiedAlias', $context->fullyQualifiedName('OA\QualifiedAlias')); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testPhpdocContent() | ||
|  |     { | ||
|  |         $singleLine = new Context(['comment' => <<<END | ||
|  |     /** | ||
|  |      * A single line. | ||
|  |      * | ||
|  |      * @OA\Get(path="api/test1", @OA\Response(response="200", description="a response")) | ||
|  |      */ | ||
|  | END | ||
|  |         ]); | ||
|  |         $this->assertEquals('A single line.', $singleLine->phpdocContent()); | ||
|  | 
 | ||
|  |         $multiline = new Context(['comment' => <<<END | ||
|  | /** | ||
|  |  * A description spread across | ||
|  |  * multiple lines. | ||
|  |  * | ||
|  |  * even blank lines | ||
|  |  * | ||
|  |  * @OA\Get(path="api/test1", @OA\Response(response="200", description="a response")) | ||
|  |  */ | ||
|  | END | ||
|  |         ]); | ||
|  |         $this->assertEquals("A description spread across\nmultiple lines.\n\neven blank lines", $multiline->phpdocContent()); | ||
|  | 
 | ||
|  |         $escapedLinebreak = new Context(['comment' => <<<END | ||
|  | /** | ||
|  |  * A single line spread across \ | ||
|  |  * multiple lines. | ||
|  |  * | ||
|  |  * @OA\Get(path="api/test1", @OA\Response(response="200", description="a response")) | ||
|  |  */ | ||
|  | END | ||
|  |         ]); | ||
|  |         $this->assertEquals('A single line spread across multiple lines.', $escapedLinebreak->phpdocContent()); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * https://phpdoc.org/docs/latest/guides/docblocks.html. | ||
|  |      */ | ||
|  |     public function testPhpdocSummaryAndDescription() | ||
|  |     { | ||
|  |         $single = new Context(['comment' => '/** This is a single line DocComment. */']); | ||
|  |         $this->assertEquals('This is a single line DocComment.', $single->phpdocContent()); | ||
|  |         $multi = new Context(['comment' => "/**\n * This is a multi-line DocComment.\n */"]); | ||
|  |         $this->assertEquals('This is a multi-line DocComment.', $multi->phpdocContent()); | ||
|  | 
 | ||
|  |         $emptyWhiteline = new Context(['comment' => <<<END | ||
|  |     /** | ||
|  |      * This is a summary | ||
|  |      * | ||
|  |      * This is a description | ||
|  |      */ | ||
|  | END | ||
|  |         ]); | ||
|  |         $this->assertEquals('This is a summary', $emptyWhiteline->phpdocSummary()); | ||
|  |         $periodNewline = new Context(['comment' => <<<END | ||
|  |      /** | ||
|  |      * This is a summary. | ||
|  |      * This is a description | ||
|  |      */ | ||
|  | END | ||
|  |         ]); | ||
|  |         $this->assertEquals('This is a summary.', $periodNewline->phpdocSummary()); | ||
|  |         $multilineSummary = new Context(['comment' => <<<END | ||
|  |      /** | ||
|  |      * This is a summary | ||
|  |      * but this is part of the summary | ||
|  |      */ | ||
|  | END | ||
|  |         ]); | ||
|  |     } | ||
|  | } |