Skip to content

Commit

Permalink
Utils: PhpClass - fixed compatibility with PHP 5.6
Browse files Browse the repository at this point in the history
  • Loading branch information
janpecha committed Jul 28, 2023
1 parent 79fdda0 commit d90496f
Show file tree
Hide file tree
Showing 4 changed files with 129 additions and 7 deletions.
4 changes: 2 additions & 2 deletions src/Utils/PhpClass.php
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ public function getParent()
* @param string $class
* @return bool
*/
public function extends($class)
public function extendsClass($class)
{
if ($this->extends === NULL) {
return FALSE;
Expand All @@ -98,7 +98,7 @@ public function extends($class)
* @param string $class
* @return bool
*/
public function implements($class)
public function implementsInterface($class)
{
$class = strtolower($class);

Expand Down
10 changes: 5 additions & 5 deletions src/Utils/PhpClasses.php
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,13 @@ public function hasClass($class)
*/
public function getClass($class)
{
$class = strtolower($class);
$key = strtolower($class);

if (!isset($this->classes[$class])) {
if (!isset($this->classes[$key])) {
throw new \Inlm\SchemaGenerator\MissingException("Missing class $class.");
}

return $this->classes[$class];
return $this->classes[$key];
}


Expand All @@ -67,11 +67,11 @@ public function getClass($class)
public function isSubclassOf(PhpClass $class, $superClass)
{
do {
if ($class->extends($superClass)) {
if ($class->extendsClass($superClass)) {
return TRUE;
}

if ($class->implements($superClass)) {
if ($class->implementsInterface($superClass)) {
return TRUE;
}

Expand Down
53 changes: 53 additions & 0 deletions tests/SchemaGenerator/Utils/PhpClass.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
<?php

use Inlm\SchemaGenerator\Utils\PhpClass;
use Tester\Assert;

require __DIR__ . '/../../bootstrap.php';


test(function () {
$phpClass = new PhpClass(
'MyClass',
FALSE,
NULL,
[],
NULL
);

Assert::same('MyClass', $phpClass->getName());
Assert::false($phpClass->isAbstract());
Assert::false($phpClass->hasParent());
Assert::null($phpClass->getParent());
Assert::false($phpClass->extendsClass('ParentClass'));
Assert::false($phpClass->implementsInterface('SuperInterface'));

Assert::exception(function () use ($phpClass) {
$phpClass->loadFile();

}, \Inlm\SchemaGenerator\InvalidStateException::class, 'PHP class has no file defined.');
});


test(function () {
$phpClass = new PhpClass(
'MyClass',
TRUE,
'ParentClass',
[
'SuperInterface',
'FooInterface',
],
NULL
);

Assert::same('MyClass', $phpClass->getName());
Assert::true($phpClass->isAbstract());
Assert::true($phpClass->hasParent());
Assert::same('ParentClass', $phpClass->getParent());
Assert::true($phpClass->extendsClass('ParentClass'));
Assert::false($phpClass->extendsClass('FooClass'));
Assert::true($phpClass->implementsInterface('SuperInterface'));
Assert::true($phpClass->implementsInterface('FooInterface'));
Assert::false($phpClass->implementsInterface('BarInterface'));
});
69 changes: 69 additions & 0 deletions tests/SchemaGenerator/Utils/PhpClasses.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
<?php

use Inlm\SchemaGenerator\Utils\PhpClass;
use Inlm\SchemaGenerator\Utils\PhpClasses;
use Tester\Assert;

require __DIR__ . '/../../bootstrap.php';


// non exists class
test(function () {
$phpClasses = new PhpClasses;
Assert::false($phpClasses->hasClass('MyClass'));

Assert::exception(function () use ($phpClasses) {
$phpClasses->getClass('MyClass');
}, \Inlm\SchemaGenerator\MissingException::class, 'Missing class MyClass.');
});


test(function () {
$phpClasses = new PhpClasses;
$myClass = new PhpClass(
'MyClass',
FALSE,
NULL,
[],
NULL
);
$phpClasses->addClass($myClass);
Assert::true($phpClasses->hasClass('MyClass'));
Assert::false($phpClasses->hasClass('FooClass'));

Assert::same($myClass, $phpClasses->getClass('MyClass'));

Assert::false($phpClasses->isSubclassOf($myClass, 'MyClass'));
Assert::false($phpClasses->isSubclassOf($myClass, 'ParentClass'));
Assert::false($phpClasses->isSubclassOf($myClass, 'SuperInterface'));
});


test(function () {
$phpClasses = new PhpClasses;

$myClass = new PhpClass(
'MyClass',
FALSE,
'ParentClass',
[
'SuperInterface',
],
NULL
);
$phpClasses->addClass($myClass);

$parentClass = new PhpClass(
'ParentClass',
FALSE,
NULL,
[],
NULL
);
$phpClasses->addClass($parentClass);

Assert::false($phpClasses->isSubclassOf($myClass, 'MyClass'));
Assert::true($phpClasses->isSubclassOf($myClass, 'ParentClass'));
Assert::true($phpClasses->isSubclassOf($myClass, 'SuperInterface'));
Assert::false($phpClasses->isSubclassOf($myClass, 'FooInterface'));
});

0 comments on commit d90496f

Please sign in to comment.