1
0
mirror of https://github.com/danog/file.git synced 2024-11-26 11:54:54 +01:00

Fixes invalid stat result in UvDriver

This commit is contained in:
Andrew Mackrodt 2018-07-18 06:00:53 +01:00 committed by Aaron Piotrowski
parent 836e0ebb03
commit 3e5da2b245
2 changed files with 28 additions and 0 deletions

View File

@ -123,6 +123,14 @@ class UvDriver implements Driver {
if (empty($fh)) {
$stat = null;
} else {
// link is not a valid stat type but returned by the uv extension
// change link to nlink
if (isset($stat['link'])) {
$stat['nlink'] = $stat['link'];
unset($stat['link']);
}
StatCache::set($path, $stat);
}

View File

@ -74,6 +74,7 @@ abstract class DriverTest extends TestCase {
$fixtureDir = Fixture::path();
$stat = (yield File\stat("{$fixtureDir}/small.txt"));
$this->assertInternalType("array", $stat);
$this->assertStatSame(\stat("{$fixtureDir}/small.txt"), $stat);
});
}
@ -82,6 +83,7 @@ abstract class DriverTest extends TestCase {
$fixtureDir = Fixture::path();
$stat = (yield File\stat("{$fixtureDir}/dir"));
$this->assertInternalType("array", $stat);
$this->assertStatSame(\stat("{$fixtureDir}/dir"), $stat);
});
}
@ -328,6 +330,24 @@ abstract class DriverTest extends TestCase {
});
}
private function assertStatSame(array $expected, array $actual) {
$filter = function (array $stat) {
$filtered = \array_filter(
$stat,
function (string $key): bool {
return !\is_numeric($key);
},
ARRAY_FILTER_USE_KEY
);
ksort($filtered);
return $filtered;
};
$this->assertSame($filter($expected), $filter($actual));
}
/**
* @param array $stat
* @return string