| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- <?php declare(strict_types=1);
- /**
- * @license Apache 2.0
- */
- namespace OpenApiTests;
- use OpenApi\Context;
- class ContextTest extends OpenApiTestCase
- {
- public function testDetect()
- {
- $context = Context::detect();
- $line = __LINE__ - 1;
- $this->assertSame('ContextTest', $context->class);
- $this->assertSame('\OpenApiTests\ContextTest', $context->fullyQualifiedName($context->class));
- $this->assertSame('testDetect', $context->method);
- $this->assertSame(__FILE__, $context->filename);
- $this->assertSame($line, $context->line);
- $this->assertSame('OpenApiTests', $context->namespace);
- // $this->assertCount(1, $context->uses); // Context::detect() doesn't pick up USE statements (yet)
- }
- public function testFullyQualifiedName()
- {
- $this->assertOpenApiLogEntryStartsWith('Required @OA\PathItem() not found');
- $openapi = \OpenApi\scan(__DIR__.'/Fixtures/Customer.php');
- $context = $openapi->components->schemas[0]->_context;
- // resolve with namespace
- $this->assertSame('\FullyQualified', $context->fullyQualifiedName('\FullyQualified'));
- $this->assertSame('\OpenApiFixures\Unqualified', $context->fullyQualifiedName('Unqualified'));
- $this->assertSame('\OpenApiFixures\Namespace\Qualified', $context->fullyQualifiedName('Namespace\Qualified'));
- // respect use statements
- $this->assertSame('\Exception', $context->fullyQualifiedName('Exception'));
- $this->assertSame('\OpenApiFixures\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
- ]);
- }
- }
|