81 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			81 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
|  | <?php declare(strict_types=1); | ||
|  | 
 | ||
|  | /** | ||
|  |  * @license Apache 2.0 | ||
|  |  */ | ||
|  | 
 | ||
|  | namespace OpenApi\Tests; | ||
|  | 
 | ||
|  | use OpenApi\Analyser; | ||
|  | use OpenApi\StaticAnalyser; | ||
|  | 
 | ||
|  | class ConstantsTest extends OpenApiTestCase | ||
|  | { | ||
|  |     const URL = 'http://example.com'; | ||
|  | 
 | ||
|  |     private static $counter = 0; | ||
|  | 
 | ||
|  |     public function testConstant() | ||
|  |     { | ||
|  |         self::$counter++; | ||
|  |         $const = 'OPENAPI_TEST_' . self::$counter; | ||
|  |         $this->assertFalse(defined($const)); | ||
|  |         $this->assertOpenApiLogEntryContains("[Semantical Error] Couldn't find constant " . $const); | ||
|  |         $this->parseComment('@OA\Contact(email=' . $const . ')'); | ||
|  | 
 | ||
|  |         define($const, 'me@domain.org'); | ||
|  |         $annotations = $this->parseComment('@OA\Contact(email=' . $const . ')'); | ||
|  |         $this->assertSame('me@domain.org', $annotations[0]->email); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testFQCNConstant() | ||
|  |     { | ||
|  |         $annotations = $this->parseComment('@OA\Contact(url=OpenApi\Tests\ConstantsTest::URL)'); | ||
|  |         $this->assertSame('http://example.com', $annotations[0]->url); | ||
|  | 
 | ||
|  |         $annotations = $this->parseComment('@OA\Contact(url=\OpenApi\Tests\ConstantsTest::URL)'); | ||
|  |         $this->assertSame('http://example.com', $annotations[0]->url); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testInvalidClass() | ||
|  |     { | ||
|  |         $this->assertOpenApiLogEntryContains("[Semantical Error] Couldn't find constant ConstantsTest::URL"); | ||
|  |         $this->parseComment('@OA\Contact(url=ConstantsTest::URL)'); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testAutoloadConstant() | ||
|  |     { | ||
|  |         if (class_exists('AnotherNamespace\Annotations\Constants', false)) { | ||
|  |             $this->markTestSkipped(); | ||
|  |         } | ||
|  |         $annotations = $this->parseComment('@OA\Contact(name=AnotherNamespace\Annotations\Constants::INVALID_TIMEZONE_LOCATION)'); | ||
|  |         $this->assertSame('invalidTimezoneLocation', $annotations[0]->name); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testDynamicImports() | ||
|  |     { | ||
|  |         $backup = Analyser::$whitelist; | ||
|  |         Analyser::$whitelist = false; | ||
|  |         $analyser = new StaticAnalyser(); | ||
|  |         $analysis = $analyser->fromFile(__DIR__ . '/Fixtures/Customer.php'); | ||
|  |         // @todo Only tests that $whitelist=false doesn't trigger errors,
 | ||
|  |         // No constants are used, because by default only class constants in the whitelisted namespace are allowed and no class in OpenApi\Annotation namespace has a constant.
 | ||
|  | 
 | ||
|  |         // Scanning without whitelisting causes issues, to check uncomment next.
 | ||
|  |         // $analyser->fromFile(__DIR__ . '/Fixtures/ThirdPartyAnnotations.php');
 | ||
|  |         Analyser::$whitelist = $backup; | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testDefaultImports() | ||
|  |     { | ||
|  |         $backup = Analyser::$defaultImports; | ||
|  |         Analyser::$defaultImports = [ | ||
|  |             'contact' => 'OpenApi\Annotations\Contact', // use OpenApi\Annotations\Contact;
 | ||
|  |             'ctest' => 'OpenApi\Tests\ConstantsTesT', // use OpenApi\Tests\ConstantsTesT as CTest;
 | ||
|  |         ]; | ||
|  |         $annotations = $this->parseComment('@Contact(url=CTest::URL)'); | ||
|  |         $this->assertSame('http://example.com', $annotations[0]->url); | ||
|  |         Analyser::$defaultImports = $backup; | ||
|  |     } | ||
|  | } |