Skip to content

Commit

Permalink
Helpers::guessClassFile() fixed
Browse files Browse the repository at this point in the history
  • Loading branch information
dg committed Apr 8, 2020
1 parent 0eca0bb commit 8563857
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 4 deletions.
8 changes: 4 additions & 4 deletions src/Tracy/Helpers.php
Expand Up @@ -239,17 +239,17 @@ public static function improveError(string $message, array $context = []): strin
/** @internal */
public static function guessClassFile(string $class): ?string
{
$segments = explode(DIRECTORY_SEPARATOR, $class);
$segments = explode('\\', $class);
$res = null;
$max = 0;
foreach (get_declared_classes() as $class) {
$parts = explode(DIRECTORY_SEPARATOR, $class);
$parts = explode('\\', $class);
foreach ($parts as $i => $part) {
if ($part !== $segments[$i] ?? null) {
if ($part !== ($segments[$i] ?? null)) {
break;
}
}
if ($i > $max && ($file = (new \ReflectionClass($class))->getFileName())) {
if ($i > $max && $i < count($segments) && ($file = (new \ReflectionClass($class))->getFileName())) {
$max = $i;
$res = array_merge(array_slice(explode(DIRECTORY_SEPARATOR, $file), 0, $i - count($parts)), array_slice($segments, $i));
$res = implode(DIRECTORY_SEPARATOR, $res) . '.php';
Expand Down
26 changes: 26 additions & 0 deletions tests/Tracy/Helpers.guessClassFile().phpt
@@ -0,0 +1,26 @@
<?php

/**
* Test: Tracy\Helpers::guessClassFile()
*/

declare(strict_types=1);

use Tester\Assert;
use Tracy\Helpers;


require __DIR__ . '/../bootstrap.php';
require __DIR__ . '/fixtures/guess-class.php';

$ds = DIRECTORY_SEPARATOR;

Assert::same(null, Helpers::guessClassFile('A'));
Assert::same(null, Helpers::guessClassFile('A\B'));
Assert::same(__DIR__ . "{$ds}fixtures{$ds}C.php", Helpers::guessClassFile('A\B\C'));
Assert::same(__DIR__ . "{$ds}fixtures{$ds}C{$ds}D.php", Helpers::guessClassFile('A\B\C\D'));

Assert::same(null, Helpers::guessClassFile('X'));
Assert::same(null, Helpers::guessClassFile(''));
Assert::same(null, Helpers::guessClassFile('stdClass'));
Assert::same(null, Helpers::guessClassFile('stdClass\X'));
9 changes: 9 additions & 0 deletions tests/Tracy/fixtures/guess-class.php
@@ -0,0 +1,9 @@
<?php

declare(strict_types=1);

namespace A\B;

class C
{
}

0 comments on commit 8563857

Please sign in to comment.