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;
|
|
}
|
|
}
|