diff --git a/.php_cs.dist b/.php_cs.dist index abf03b1..9d7c530 100644 --- a/.php_cs.dist +++ b/.php_cs.dist @@ -1,39 +1,12 @@ setRiskyAllowed(true) - ->setRules([ - "@PSR1" => true, - "@PSR2" => true, - "braces" => [ - "allow_single_line_closure" => true, - "position_after_functions_and_oop_constructs" => "same", - ], - "array_syntax" => ["syntax" => "short"], - "cast_spaces" => true, - "combine_consecutive_unsets" => true, - "function_to_constant" => true, - "no_multiline_whitespace_before_semicolons" => true, - "no_unused_imports" => true, - "no_useless_else" => true, - "no_useless_return" => true, - "no_whitespace_before_comma_in_array" => true, - "no_whitespace_in_blank_line" => true, - "non_printable_character" => true, - "normalize_index_brace" => true, - "ordered_imports" => true, - "php_unit_construct" => true, - "php_unit_dedicate_assert" => true, - "php_unit_fqcn_annotation" => true, - "phpdoc_summary" => true, - "phpdoc_types" => true, - "psr4" => true, - "return_type_declaration" => ["space_before" => "none"], - "short_scalar_cast" => true, - "single_blank_line_before_namespace" => true, - ]) - ->setFinder( - PhpCsFixer\Finder::create() - ->in(__DIR__ . "/lib") - ->in(__DIR__ . "/test") - ); \ No newline at end of file +$config = new Amp\CodeStyle\Config(); +$config->getFinder() + ->in(__DIR__ . '/lib') + ->in(__DIR__ . '/test'); + +$cacheDir = getenv('TRAVIS') ? getenv('HOME') . '/.php-cs-fixer' : __DIR__; + +$config->setCacheFile($cacheDir . '/.php_cs.cache'); + +return $config; diff --git a/composer.json b/composer.json index 8fac57f..3c77c65 100644 --- a/composer.json +++ b/composer.json @@ -39,7 +39,7 @@ "require-dev": { "amphp/phpunit-util": "^1", "phpunit/phpunit": "^6", - "friendsofphp/php-cs-fixer": "^2.3" + "amphp/php-cs-fixer-config": "dev-master" }, "autoload": { "psr-4": { diff --git a/lib/BlockingDriver.php b/lib/BlockingDriver.php index 7adc9f7..265a7c8 100644 --- a/lib/BlockingDriver.php +++ b/lib/BlockingDriver.php @@ -6,11 +6,13 @@ use Amp\Failure; use Amp\Promise; use Amp\Success; -class BlockingDriver implements Driver { +class BlockingDriver implements Driver +{ /** * {@inheritdoc} */ - public function open(string $path, string $mode): Promise { + public function open(string $path, string $mode): Promise + { $mode = \str_replace(['b', 't', 'e'], '', $mode); switch ($mode) { @@ -42,7 +44,8 @@ class BlockingDriver implements Driver { /** * {@inheritdoc} */ - public function stat(string $path): Promise { + public function stat(string $path): Promise + { if ($stat = StatCache::get($path)) { return new Success($stat); } elseif ($stat = @\stat($path)) { @@ -58,7 +61,8 @@ class BlockingDriver implements Driver { /** * {@inheritdoc} */ - public function exists(string $path): Promise { + public function exists(string $path): Promise + { if ($exists = @\file_exists($path)) { \clearstatcache(true, $path); } @@ -75,7 +79,8 @@ class BlockingDriver implements Driver { * @param string $path An absolute file system path * @return \Amp\Promise */ - public function size(string $path): Promise { + public function size(string $path): Promise + { if (!@\file_exists($path)) { return new Failure(new FilesystemException( "Path does not exist" @@ -107,7 +112,8 @@ class BlockingDriver implements Driver { * @param string $path An absolute file system path * @return \Amp\Promise */ - public function isdir(string $path): Promise { + public function isdir(string $path): Promise + { if (!@\file_exists($path)) { return new Success(false); } @@ -127,7 +133,8 @@ class BlockingDriver implements Driver { * @param string $path An absolute file system path * @return \Amp\Promise */ - public function isfile(string $path): Promise { + public function isfile(string $path): Promise + { if (!@\file_exists($path)) { return new Success(false); } @@ -144,7 +151,8 @@ class BlockingDriver implements Driver { * @param string $path An absolute file system path * @return \Amp\Promise */ - public function mtime(string $path): Promise { + public function mtime(string $path): Promise + { if (!@\file_exists($path)) { return new Failure(new FilesystemException( "Path does not exist" @@ -163,7 +171,8 @@ class BlockingDriver implements Driver { * @param string $path An absolute file system path * @return \Amp\Promise */ - public function atime(string $path): Promise { + public function atime(string $path): Promise + { if (!@\file_exists($path)) { return new Failure(new FilesystemException( "Path does not exist" @@ -181,7 +190,8 @@ class BlockingDriver implements Driver { * @param string $path An absolute file system path * @return \Amp\Promise */ - public function ctime(string $path): Promise { + public function ctime(string $path): Promise + { if (!@\file_exists($path)) { return new Failure(new FilesystemException( "Path does not exist" @@ -197,7 +207,8 @@ class BlockingDriver implements Driver { /** * {@inheritdoc} */ - public function lstat(string $path): Promise { + public function lstat(string $path): Promise + { if ($stat = @\lstat($path)) { \clearstatcache(true, $path); } else { @@ -210,7 +221,8 @@ class BlockingDriver implements Driver { /** * {@inheritdoc} */ - public function symlink(string $target, string $link): Promise { + public function symlink(string $target, string $link): Promise + { if (!@\symlink($target, $link)) { return new Failure(new FilesystemException("Could not create symbolic link")); } @@ -221,7 +233,8 @@ class BlockingDriver implements Driver { /** * {@inheritdoc} */ - public function link(string $target, string $link): Promise { + public function link(string $target, string $link): Promise + { if (!@\link($target, $link)) { return new Failure(new FilesystemException("Could not create hard link")); } @@ -232,7 +245,8 @@ class BlockingDriver implements Driver { /** * {@inheritdoc} */ - public function readlink(string $path): Promise { + public function readlink(string $path): Promise + { if (!($result = @\readlink($path))) { return new Failure(new FilesystemException("Could not read symbolic link")); } @@ -243,7 +257,8 @@ class BlockingDriver implements Driver { /** * {@inheritdoc} */ - public function rename(string $from, string $to): Promise { + public function rename(string $from, string $to): Promise + { if (!@\rename($from, $to)) { return new Failure(new FilesystemException("Could not rename file")); } @@ -254,7 +269,8 @@ class BlockingDriver implements Driver { /** * {@inheritdoc} */ - public function unlink(string $path): Promise { + public function unlink(string $path): Promise + { StatCache::clear($path); return new Success((bool) @\unlink($path)); } @@ -262,14 +278,16 @@ class BlockingDriver implements Driver { /** * {@inheritdoc} */ - public function mkdir(string $path, int $mode = 0777, bool $recursive = false): Promise { + public function mkdir(string $path, int $mode = 0777, bool $recursive = false): Promise + { return new Success((bool) @\mkdir($path, $mode, $recursive)); } /** * {@inheritdoc} */ - public function rmdir(string $path): Promise { + public function rmdir(string $path): Promise + { StatCache::clear($path); return new Success((bool) @\rmdir($path)); } @@ -277,7 +295,8 @@ class BlockingDriver implements Driver { /** * {@inheritdoc} */ - public function scandir(string $path): Promise { + public function scandir(string $path): Promise + { if (!@\is_dir($path)) { return new Failure(new FilesystemException( "Not a directory" @@ -298,14 +317,16 @@ class BlockingDriver implements Driver { /** * {@inheritdoc} */ - public function chmod(string $path, int $mode): Promise { + public function chmod(string $path, int $mode): Promise + { return new Success((bool) @\chmod($path, $mode)); } /** * {@inheritdoc} */ - public function chown(string $path, int $uid, int $gid): Promise { + public function chown(string $path, int $uid, int $gid): Promise + { if ($uid !== -1 && !@\chown($path, $uid)) { return new Failure(new FilesystemException( \error_get_last()["message"] @@ -324,7 +345,8 @@ class BlockingDriver implements Driver { /** * {@inheritdoc} */ - public function touch(string $path, int $time = null, int $atime = null): Promise { + public function touch(string $path, int $time = null, int $atime = null): Promise + { $time = $time ?? \time(); $atime = $atime ?? $time; return new Success((bool) \touch($path, $time, $atime)); @@ -333,7 +355,8 @@ class BlockingDriver implements Driver { /** * {@inheritdoc} */ - public function get(string $path): Promise { + public function get(string $path): Promise + { $result = @\file_get_contents($path); return ($result === false) ? new Failure(new FilesystemException(\error_get_last()["message"])) @@ -343,7 +366,8 @@ class BlockingDriver implements Driver { /** * {@inheritdoc} */ - public function put(string $path, string $contents): Promise { + public function put(string $path, string $contents): Promise + { $result = @\file_put_contents($path, $contents); return ($result === false) ? new Failure(new FilesystemException(\error_get_last()["message"])) diff --git a/lib/BlockingHandle.php b/lib/BlockingHandle.php index 435877f..b8743a4 100644 --- a/lib/BlockingHandle.php +++ b/lib/BlockingHandle.php @@ -9,7 +9,8 @@ use Amp\Promise; use Amp\Success; use function Amp\call; -class BlockingHandle implements Handle { +class BlockingHandle implements Handle +{ private $fh; private $path; private $mode; @@ -19,13 +20,15 @@ class BlockingHandle implements Handle { * @param string $path * @param string $mode */ - public function __construct($fh, string $path, string $mode) { + public function __construct($fh, string $path, string $mode) + { $this->fh = $fh; $this->path = $path; $this->mode = $mode; } - public function __destruct() { + public function __destruct() + { if ($this->fh !== null) { \fclose($this->fh); } @@ -34,7 +37,8 @@ class BlockingHandle implements Handle { /** * {@inheritdoc} */ - public function read(int $length = self::DEFAULT_READ_LENGTH): Promise { + public function read(int $length = self::DEFAULT_READ_LENGTH): Promise + { if ($this->fh === null) { throw new ClosedException("The file has been closed"); } @@ -53,7 +57,8 @@ class BlockingHandle implements Handle { /** * {@inheritdoc} */ - public function write(string $data): Promise { + public function write(string $data): Promise + { if ($this->fh === null) { throw new ClosedException("The file has been closed"); } @@ -72,7 +77,8 @@ class BlockingHandle implements Handle { /** * {@inheritdoc} */ - public function end(string $data = ""): Promise { + public function end(string $data = ""): Promise + { return call(function () use ($data) { $promise = $this->write($data); @@ -86,7 +92,8 @@ class BlockingHandle implements Handle { /** * {@inheritdoc} */ - public function close(): Promise { + public function close(): Promise + { if ($this->fh === null) { return new Success; } @@ -106,7 +113,8 @@ class BlockingHandle implements Handle { /** * {@inheritdoc} */ - public function seek(int $position, int $whence = \SEEK_SET): Promise { + public function seek(int $position, int $whence = \SEEK_SET): Promise + { if ($this->fh === null) { throw new ClosedException("The file has been closed"); } @@ -129,7 +137,8 @@ class BlockingHandle implements Handle { /** * {@inheritdoc} */ - public function tell(): int { + public function tell(): int + { if ($this->fh === null) { throw new ClosedException("The file has been closed"); } @@ -140,7 +149,8 @@ class BlockingHandle implements Handle { /** * {@inheritdoc} */ - public function eof(): bool { + public function eof(): bool + { if ($this->fh === null) { throw new ClosedException("The file has been closed"); } @@ -151,14 +161,16 @@ class BlockingHandle implements Handle { /** * {@inheritdoc} */ - public function path(): string { + public function path(): string + { return $this->path; } /** * {@inheritdoc} */ - public function mode(): string { + public function mode(): string + { return $this->mode; } } diff --git a/lib/Driver.php b/lib/Driver.php index 0060aef..a7bfb7d 100644 --- a/lib/Driver.php +++ b/lib/Driver.php @@ -4,7 +4,8 @@ namespace Amp\File; use Amp\Promise; -interface Driver { +interface Driver +{ /** * Open a handle for the specified path. * diff --git a/lib/EioDriver.php b/lib/EioDriver.php index 5efc511..7d18475 100644 --- a/lib/EioDriver.php +++ b/lib/EioDriver.php @@ -6,18 +6,21 @@ use Amp\Deferred; use Amp\Promise; use Amp\Success; -class EioDriver implements Driver { +class EioDriver implements Driver +{ /** @var \Amp\File\Internal\EioPoll */ private $poll; - public function __construct() { + public function __construct() + { $this->poll = new Internal\EioPoll; } /** * {@inheritdoc} */ - public function open(string $path, string $mode): Promise { + public function open(string $path, string $mode): Promise + { $flags = \EIO_O_NONBLOCK | \EIO_O_FSYNC | $this->parseMode($mode); $chmod = ($flags & \EIO_O_CREAT) ? 0644 : 0; @@ -30,7 +33,8 @@ class EioDriver implements Driver { return $deferred->promise(); } - private function parseMode(string $mode): int { + private function parseMode(string $mode): int + { $mode = \str_replace(['b', 't', 'e'], '', $mode); switch ($mode) { @@ -50,7 +54,8 @@ class EioDriver implements Driver { } } - private function onOpenHandle($openArr, $result, $req) { + private function onOpenHandle($openArr, $result, $req) + { list($mode, $path, $deferred) = $openArr; if ($result === -1) { @@ -64,7 +69,8 @@ class EioDriver implements Driver { } } - private function onOpenFtruncate($openArr, $result, $req) { + private function onOpenFtruncate($openArr, $result, $req) + { list($fh, $mode, $path, $deferred) = $openArr; if ($result === -1) { @@ -75,7 +81,8 @@ class EioDriver implements Driver { } } - private function onOpenFstat($openArr, $result, $req) { + private function onOpenFstat($openArr, $result, $req) + { list($fh, $mode, $path, $deferred) = $openArr; if ($result === -1) { $deferred->fail(new FilesystemException(\eio_get_last_error($req))); @@ -89,7 +96,8 @@ class EioDriver implements Driver { /** * {@inheritdoc} */ - public function stat(string $path): Promise { + public function stat(string $path): Promise + { if ($stat = StatCache::get($path)) { return new Success($stat); } @@ -104,7 +112,8 @@ class EioDriver implements Driver { return $deferred->promise(); } - private function onStat($data, $result, $req) { + private function onStat($data, $result, $req) + { list($deferred, $path) = $data; if ($result === -1) { $deferred->resolve(null); @@ -117,7 +126,8 @@ class EioDriver implements Driver { /** * {@inheritdoc} */ - public function exists(string $path): Promise { + public function exists(string $path): Promise + { $deferred = new Deferred; $this->stat($path)->onResolve(function ($error, $result) use ($deferred) { @@ -130,7 +140,8 @@ class EioDriver implements Driver { /** * {@inheritdoc} */ - public function isdir(string $path): Promise { + public function isdir(string $path): Promise + { $deferred = new Deferred; $this->stat($path)->onResolve(function ($error, $result) use ($deferred) { @@ -147,7 +158,8 @@ class EioDriver implements Driver { /** * {@inheritdoc} */ - public function isfile(string $path): Promise { + public function isfile(string $path): Promise + { $deferred = new Deferred; $this->stat($path)->onResolve(function ($error, $result) use ($deferred) { @@ -164,7 +176,8 @@ class EioDriver implements Driver { /** * {@inheritdoc} */ - public function size(string $path): Promise { + public function size(string $path): Promise + { $deferred = new Deferred; $this->stat($path)->onResolve(function ($error, $result) use ($deferred) { @@ -187,7 +200,8 @@ class EioDriver implements Driver { /** * {@inheritdoc} */ - public function mtime(string $path): Promise { + public function mtime(string $path): Promise + { $deferred = new Deferred; $this->stat($path)->onResolve(function ($error, $result) use ($deferred) { @@ -206,7 +220,8 @@ class EioDriver implements Driver { /** * {@inheritdoc} */ - public function atime(string $path): Promise { + public function atime(string $path): Promise + { $deferred = new Deferred; $this->stat($path)->onResolve(function ($error, $result) use ($deferred) { @@ -225,7 +240,8 @@ class EioDriver implements Driver { /** * {@inheritdoc} */ - public function ctime(string $path): Promise { + public function ctime(string $path): Promise + { $deferred = new Deferred; $this->stat($path)->onResolve(function ($error, $result) use ($deferred) { @@ -244,7 +260,8 @@ class EioDriver implements Driver { /** * {@inheritdoc} */ - public function lstat(string $path): Promise { + public function lstat(string $path): Promise + { $deferred = new Deferred; $this->poll->listen($deferred->promise()); @@ -254,7 +271,8 @@ class EioDriver implements Driver { return $deferred->promise(); } - private function onLstat($deferred, $result, $req) { + private function onLstat($deferred, $result, $req) + { if ($result === -1) { $deferred->resolve(null); } else { @@ -265,7 +283,8 @@ class EioDriver implements Driver { /** * {@inheritdoc} */ - public function symlink(string $target, string $link): Promise { + public function symlink(string $target, string $link): Promise + { $deferred = new Deferred; $this->poll->listen($deferred->promise()); @@ -278,7 +297,8 @@ class EioDriver implements Driver { /** * {@inheritdoc} */ - public function link(string $target, string $link): Promise { + public function link(string $target, string $link): Promise + { $deferred = new Deferred; $this->poll->listen($deferred->promise()); @@ -291,7 +311,8 @@ class EioDriver implements Driver { /** * {@inheritdoc} */ - public function readlink(string $path): Promise { + public function readlink(string $path): Promise + { $deferred = new Deferred; $this->poll->listen($deferred->promise()); @@ -301,7 +322,8 @@ class EioDriver implements Driver { return $deferred->promise(); } - private function onReadlink($deferred, $result, $req) { + private function onReadlink($deferred, $result, $req) + { if ($result === -1) { $deferred->fail(new FilesystemException(\eio_get_last_error($req))); } else { @@ -309,7 +331,8 @@ class EioDriver implements Driver { } } - private function onGenericResult($deferred, $result, $req) { + private function onGenericResult($deferred, $result, $req) + { if ($result === -1) { $deferred->fail(new FilesystemException(\eio_get_last_error($req))); } else { @@ -320,7 +343,8 @@ class EioDriver implements Driver { /** * {@inheritdoc} */ - public function rename(string $from, string $to): Promise { + public function rename(string $from, string $to): Promise + { $deferred = new Deferred; $this->poll->listen($deferred->promise()); @@ -333,7 +357,8 @@ class EioDriver implements Driver { /** * {@inheritdoc} */ - public function unlink(string $path): Promise { + public function unlink(string $path): Promise + { $deferred = new Deferred; $this->poll->listen($deferred->promise()); @@ -344,7 +369,8 @@ class EioDriver implements Driver { return $deferred->promise(); } - private function onUnlink($data, $result, $req) { + private function onUnlink($data, $result, $req) + { list($deferred, $path) = $data; if ($result === -1) { @@ -358,21 +384,22 @@ class EioDriver implements Driver { /** * {@inheritdoc} */ - public function mkdir(string $path, int $mode = 0777, bool $recursive = false): Promise { + public function mkdir(string $path, int $mode = 0777, bool $recursive = false): Promise + { $deferred = new Deferred; $this->poll->listen($deferred->promise()); $priority = \EIO_PRI_DEFAULT; if ($recursive) { - $path = str_replace("/", DIRECTORY_SEPARATOR, $path); - $arrayPath = explode(DIRECTORY_SEPARATOR, $path); + $path = \str_replace("/", DIRECTORY_SEPARATOR, $path); + $arrayPath = \explode(DIRECTORY_SEPARATOR, $path); $tmpPath = ""; $callback = function () use ( &$callback, &$arrayPath, &$tmpPath, $mode, $priority, $deferred ) { - $tmpPath .= DIRECTORY_SEPARATOR . array_shift($arrayPath); + $tmpPath .= DIRECTORY_SEPARATOR . \array_shift($arrayPath); if (empty($arrayPath)) { \eio_mkdir($tmpPath, $mode, $priority, [$this, "onGenericResult"], $deferred); @@ -400,7 +427,8 @@ class EioDriver implements Driver { /** * {@inheritdoc} */ - public function rmdir(string $path): Promise { + public function rmdir(string $path): Promise + { $deferred = new Deferred; $this->poll->listen($deferred->promise()); @@ -411,7 +439,8 @@ class EioDriver implements Driver { return $deferred->promise(); } - private function onRmdir($data, $result, $req) { + private function onRmdir($data, $result, $req) + { list($deferred, $path) = $data; if ($result === -1) { @@ -425,7 +454,8 @@ class EioDriver implements Driver { /** * {@inheritdoc} */ - public function scandir(string $path): Promise { + public function scandir(string $path): Promise + { $deferred = new Deferred; $this->poll->listen($deferred->promise()); @@ -436,7 +466,8 @@ class EioDriver implements Driver { return $deferred->promise(); } - private function onScandir($deferred, $result, $req) { + private function onScandir($deferred, $result, $req) + { if ($result === -1) { $deferred->fail(new FilesystemException(\eio_get_last_error($req))); } else { @@ -447,7 +478,8 @@ class EioDriver implements Driver { /** * {@inheritdoc} */ - public function chmod(string $path, int $mode): Promise { + public function chmod(string $path, int $mode): Promise + { $deferred = new Deferred; $this->poll->listen($deferred->promise()); @@ -460,7 +492,8 @@ class EioDriver implements Driver { /** * {@inheritdoc} */ - public function chown(string $path, int $uid, int $gid): Promise { + public function chown(string $path, int $uid, int $gid): Promise + { $deferred = new Deferred; $this->poll->listen($deferred->promise()); @@ -473,7 +506,8 @@ class EioDriver implements Driver { /** * {@inheritdoc} */ - public function touch(string $path, int $time = null, int $atime = null): Promise { + public function touch(string $path, int $time = null, int $atime = null): Promise + { $time = $time ?? \time(); $atime = $atime ?? $time; @@ -489,7 +523,8 @@ class EioDriver implements Driver { /** * {@inheritdoc} */ - public function get(string $path): Promise { + public function get(string $path): Promise + { $flags = $flags = \EIO_O_RDONLY; $mode = 0; $priority = \EIO_PRI_DEFAULT; @@ -502,7 +537,8 @@ class EioDriver implements Driver { return $deferred->promise(); } - private function onGetOpen($deferred, $result, $req) { + private function onGetOpen($deferred, $result, $req) + { if ($result === -1) { $deferred->fail(new FilesystemException(\eio_get_last_error($req))); } else { @@ -511,7 +547,8 @@ class EioDriver implements Driver { } } - private function onGetFstat($fhAndPromisor, $result, $req) { + private function onGetFstat($fhAndPromisor, $result, $req) + { list($fh, $deferred) = $fhAndPromisor; if ($result === -1) { @@ -525,7 +562,8 @@ class EioDriver implements Driver { \eio_read($fh, $length, $offset, $priority, [$this, "onGetRead"], $fhAndPromisor); } - private function onGetRead($fhAndPromisor, $result, $req) { + private function onGetRead($fhAndPromisor, $result, $req) + { list($fh, $deferred) = $fhAndPromisor; \eio_close($fh); @@ -540,7 +578,8 @@ class EioDriver implements Driver { /** * {@inheritdoc} */ - public function put(string $path, string $contents): Promise { + public function put(string $path, string $contents): Promise + { $flags = \EIO_O_RDWR | \EIO_O_CREAT; $mode = \EIO_S_IRUSR | \EIO_S_IWUSR | \EIO_S_IXUSR; $priority = \EIO_PRI_DEFAULT; @@ -554,13 +593,14 @@ class EioDriver implements Driver { return $deferred->promise(); } - private function onPutOpen($data, $result, $req) { + private function onPutOpen($data, $result, $req) + { list($contents, $deferred) = $data; if ($result === -1) { $deferred->fail(new FilesystemException(\eio_get_last_error($req))); } else { - $length = strlen($contents); + $length = \strlen($contents); $offset = 0; $priority = \EIO_PRI_DEFAULT; $callback = [$this, "onPutWrite"]; @@ -569,7 +609,8 @@ class EioDriver implements Driver { } } - private function onPutWrite($fhAndPromisor, $result, $req) { + private function onPutWrite($fhAndPromisor, $result, $req) + { list($fh, $deferred) = $fhAndPromisor; \eio_close($fh); diff --git a/lib/EioHandle.php b/lib/EioHandle.php index 78e723d..144bfa8 100644 --- a/lib/EioHandle.php +++ b/lib/EioHandle.php @@ -9,7 +9,8 @@ use Amp\Promise; use Amp\Success; use function Amp\call; -class EioHandle implements Handle { +class EioHandle implements Handle +{ /** @var \Amp\File\Internal\EioPoll */ private $poll; @@ -40,7 +41,8 @@ class EioHandle implements Handle { /** @var \Amp\Promise|null */ private $closing; - public function __construct(Internal\EioPoll $poll, $fh, string $path, string $mode, int $size) { + public function __construct(Internal\EioPoll $poll, $fh, string $path, string $mode, int $size) + { $this->poll = $poll; $this->fh = $fh; $this->path = $path; @@ -54,7 +56,8 @@ class EioHandle implements Handle { /** * {@inheritdoc} */ - public function read(int $length = self::DEFAULT_READ_LENGTH): Promise { + public function read(int $length = self::DEFAULT_READ_LENGTH): Promise + { if ($this->isActive) { throw new PendingOperationError; } @@ -79,7 +82,8 @@ class EioHandle implements Handle { return $deferred->promise(); } - private function onRead(Deferred $deferred, $result, $req) { + private function onRead(Deferred $deferred, $result, $req) + { $this->isActive = false; if ($result === -1) { @@ -98,7 +102,8 @@ class EioHandle implements Handle { /** * {@inheritdoc} */ - public function write(string $data): Promise { + public function write(string $data): Promise + { if ($this->isActive && $this->queue->isEmpty()) { throw new PendingOperationError; } @@ -124,7 +129,8 @@ class EioHandle implements Handle { return $promise; } - private function push(string $data): Promise { + private function push(string $data): Promise + { $length = \strlen($data); $deferred = new Deferred; @@ -146,7 +152,8 @@ class EioHandle implements Handle { /** * {@inheritdoc} */ - public function end(string $data = ""): Promise { + public function end(string $data = ""): Promise + { return call(function () use ($data) { $promise = $this->write($data); $this->writable = false; @@ -158,7 +165,8 @@ class EioHandle implements Handle { }); } - private function onWrite(Deferred $deferred, $result, $req) { + private function onWrite(Deferred $deferred, $result, $req) + { if ($this->queue->isEmpty()) { $deferred->fail(new ClosedException('No pending write, the file may have been closed')); } @@ -188,7 +196,8 @@ class EioHandle implements Handle { /** * {@inheritdoc} */ - public function close(): Promise { + public function close(): Promise + { if ($this->closing) { return $this->closing; } @@ -201,7 +210,8 @@ class EioHandle implements Handle { return $deferred->promise(); } - private function onClose(Deferred $deferred, $result, $req) { + private function onClose(Deferred $deferred, $result, $req) + { // Ignore errors when closing file, as the handle will become invalid anyway. $deferred->resolve(); } @@ -209,7 +219,8 @@ class EioHandle implements Handle { /** * {@inheritdoc} */ - public function seek(int $offset, int $whence = \SEEK_SET): Promise { + public function seek(int $offset, int $whence = \SEEK_SET): Promise + { if ($this->isActive) { throw new PendingOperationError; } @@ -236,28 +247,32 @@ class EioHandle implements Handle { /** * {@inheritdoc} */ - public function tell(): int { + public function tell(): int + { return $this->position; } /** * {@inheritdoc} */ - public function eof(): bool { + public function eof(): bool + { return !$this->queue->isEmpty() ? false : ($this->size <= $this->position); } /** * {@inheritdoc} */ - public function path(): string { + public function path(): string + { return $this->path; } /** * {@inheritdoc} */ - public function mode(): string { + public function mode(): string + { return $this->mode; } } diff --git a/lib/FilesystemException.php b/lib/FilesystemException.php index 7b36a81..4310560 100644 --- a/lib/FilesystemException.php +++ b/lib/FilesystemException.php @@ -2,8 +2,10 @@ namespace Amp\File; -class FilesystemException extends \Exception { - public function __construct(string $message, \Throwable $previous = null) { +class FilesystemException extends \Exception +{ + public function __construct(string $message, \Throwable $previous = null) + { parent::__construct($message, 0, $previous); } } diff --git a/lib/Handle.php b/lib/Handle.php index 9f06a8a..68ba9ed 100644 --- a/lib/Handle.php +++ b/lib/Handle.php @@ -6,7 +6,8 @@ use Amp\ByteStream\InputStream; use Amp\ByteStream\OutputStream; use Amp\Promise; -interface Handle extends InputStream, OutputStream { +interface Handle extends InputStream, OutputStream +{ const DEFAULT_READ_LENGTH = 8192; /** diff --git a/lib/Internal/EioPoll.php b/lib/Internal/EioPoll.php index 274101f..29ca33c 100644 --- a/lib/Internal/EioPoll.php +++ b/lib/Internal/EioPoll.php @@ -6,7 +6,8 @@ use Amp\CallableMaker; use Amp\Loop; use Amp\Promise; -class EioPoll { +class EioPoll +{ use CallableMaker; /** @var resource */ @@ -21,7 +22,8 @@ class EioPoll { /** @var callable */ private $onDone; - public function __construct() { + public function __construct() + { $this->onDone = $this->callableFromInstanceMethod("done"); if (!self::$stream) { @@ -40,11 +42,13 @@ class EioPoll { Loop::setState(self::class, new class($this->watcher) { private $watcher; - public function __construct(string $watcher) { + public function __construct(string $watcher) + { $this->watcher = $watcher; } - public function __destruct() { + public function __destruct() + { Loop::cancel($this->watcher); // Ensure there are no active operations anymore. This is a safe-guard as some operations might not be @@ -55,7 +59,8 @@ class EioPoll { }); } - public function listen(Promise $promise) { + public function listen(Promise $promise) + { if ($this->requests++ === 0) { Loop::enable($this->watcher); } @@ -63,7 +68,8 @@ class EioPoll { $promise->onResolve($this->onDone); } - private function done() { + private function done() + { if (--$this->requests === 0) { Loop::disable($this->watcher); } diff --git a/lib/Internal/FileTask.php b/lib/Internal/FileTask.php index 0ff1278..477a3fc 100644 --- a/lib/Internal/FileTask.php +++ b/lib/Internal/FileTask.php @@ -14,7 +14,8 @@ use Amp\Parallel\Worker\Task; * * @internal */ -class FileTask implements Task { +class FileTask implements Task +{ const ENV_PREFIX = "amp/file#"; /** @var string */ @@ -33,7 +34,8 @@ class FileTask implements Task { * * @throws \Error */ - public function __construct(string $operation, array $args = [], int $id = null) { + public function __construct(string $operation, array $args = [], int $id = null) + { if (!\strlen($operation)) { throw new \Error('Operation must be a non-empty string'); } @@ -49,7 +51,8 @@ class FileTask implements Task { * @throws \Amp\File\FilesystemException * @throws \Error */ - public function run(Environment $environment) { + public function run(Environment $environment) + { if ('f' === $this->operation[0]) { if ("fopen" === $this->operation) { $path = $this->args[0]; @@ -152,7 +155,8 @@ class FileTask implements Task { * * @return string */ - private static function makeId(int $id): string { + private static function makeId(int $id): string + { return self::ENV_PREFIX . $id; } } diff --git a/lib/Internal/UvPoll.php b/lib/Internal/UvPoll.php index 7142631..f2636f0 100644 --- a/lib/Internal/UvPoll.php +++ b/lib/Internal/UvPoll.php @@ -6,7 +6,8 @@ use Amp\CallableMaker; use Amp\Loop; use Amp\Promise; -class UvPoll { +class UvPoll +{ use CallableMaker; /** @var string */ @@ -18,7 +19,8 @@ class UvPoll { /** @var callable */ private $onDone; - public function __construct() { + public function __construct() + { $this->onDone = $this->callableFromInstanceMethod("done"); $this->watcher = Loop::repeat(\PHP_INT_MAX / 2, function () { @@ -30,17 +32,20 @@ class UvPoll { Loop::setState(self::class, new class($this->watcher) { private $watcher; - public function __construct(string $watcher) { + public function __construct(string $watcher) + { $this->watcher = $watcher; } - public function __destruct() { + public function __destruct() + { Loop::cancel($this->watcher); } }); } - public function listen(Promise $promise) { + public function listen(Promise $promise) + { if ($this->requests++ === 0) { Loop::enable($this->watcher); } @@ -48,7 +53,8 @@ class UvPoll { $promise->onResolve($this->onDone); } - private function done() { + private function done() + { if (--$this->requests === 0) { Loop::disable($this->watcher); } diff --git a/lib/ParallelDriver.php b/lib/ParallelDriver.php index efb7015..05a00ae 100644 --- a/lib/ParallelDriver.php +++ b/lib/ParallelDriver.php @@ -11,7 +11,8 @@ use Amp\Promise; use Amp\Success; use function Amp\call; -class ParallelDriver implements Driver { +class ParallelDriver implements Driver +{ /** * @var \Amp\Parallel\Worker\Pool */ @@ -20,14 +21,16 @@ class ParallelDriver implements Driver { /** * @param \Amp\Parallel\Worker\Pool|null $pool */ - public function __construct(Pool $pool = null) { + public function __construct(Pool $pool = null) + { $this->pool = $pool ?: Worker\pool(); } /** * {@inheritdoc} */ - public function open(string $path, string $mode): Promise { + public function open(string $path, string $mode): Promise + { return call(function () use ($path, $mode) { $worker = $this->pool->getWorker(); try { @@ -41,7 +44,8 @@ class ParallelDriver implements Driver { }); } - private function runFileTask(Internal\FileTask $task): \Generator { + private function runFileTask(Internal\FileTask $task): \Generator + { try { return yield $this->pool->enqueue($task); } catch (TaskException $exception) { @@ -54,7 +58,8 @@ class ParallelDriver implements Driver { /** * {@inheritdoc} */ - public function unlink(string $path): Promise { + public function unlink(string $path): Promise + { return call(function () use ($path) { $result = yield from $this->runFileTask(new Internal\FileTask("unlink", [$path])); StatCache::clear($path); @@ -65,7 +70,8 @@ class ParallelDriver implements Driver { /** * {@inheritdoc} */ - public function stat(string $path): Promise { + public function stat(string $path): Promise + { if ($stat = StatCache::get($path)) { return new Success($stat); } @@ -82,14 +88,16 @@ class ParallelDriver implements Driver { /** * {@inheritdoc} */ - public function rename(string $from, string $to): Promise { + public function rename(string $from, string $to): Promise + { return new Coroutine($this->runFileTask(new Internal\FileTask("rename", [$from, $to]))); } /** * {@inheritdoc} */ - public function isfile(string $path): Promise { + public function isfile(string $path): Promise + { return call(function () use ($path) { $stat = yield $this->stat($path); if (empty($stat)) { @@ -105,7 +113,8 @@ class ParallelDriver implements Driver { /** * {@inheritdoc} */ - public function isdir(string $path): Promise { + public function isdir(string $path): Promise + { return call(function () use ($path) { $stat = yield $this->stat($path); if (empty($stat)) { @@ -121,42 +130,48 @@ class ParallelDriver implements Driver { /** * {@inheritdoc} */ - public function link(string $target, string $link): Promise { + public function link(string $target, string $link): Promise + { return new Coroutine($this->runFileTask(new Internal\FileTask("link", [$target, $link]))); } /** * {@inheritdoc} */ - public function symlink(string $target, string $link): Promise { + public function symlink(string $target, string $link): Promise + { return new Coroutine($this->runFileTask(new Internal\FileTask("symlink", [$target, $link]))); } /** * {@inheritdoc} */ - public function readlink(string $path): Promise { + public function readlink(string $path): Promise + { return new Coroutine($this->runFileTask(new Internal\FileTask("readlink", [$path]))); } /** * {@inheritdoc} */ - public function mkdir(string $path, int $mode = 0777, bool $recursive = false): Promise { + public function mkdir(string $path, int $mode = 0777, bool $recursive = false): Promise + { return new Coroutine($this->runFileTask(new Internal\FileTask("mkdir", [$path, $mode, $recursive]))); } /** * {@inheritdoc} */ - public function scandir(string $path): Promise { + public function scandir(string $path): Promise + { return new Coroutine($this->runFileTask(new Internal\FileTask("scandir", [$path]))); } /** * {@inheritdoc} */ - public function rmdir(string $path): Promise { + public function rmdir(string $path): Promise + { return call(function () use ($path) { $result = yield from $this->runFileTask(new Internal\FileTask("rmdir", [$path])); StatCache::clear($path); @@ -167,28 +182,32 @@ class ParallelDriver implements Driver { /** * {@inheritdoc} */ - public function chmod(string $path, int $mode): Promise { + public function chmod(string $path, int $mode): Promise + { return new Coroutine($this->runFileTask(new Internal\FileTask("chmod", [$path, $mode]))); } /** * {@inheritdoc} */ - public function chown(string $path, int $uid, int $gid): Promise { + public function chown(string $path, int $uid, int $gid): Promise + { return new Coroutine($this->runFileTask(new Internal\FileTask("chown", [$path, $uid, $gid]))); } /** * {@inheritdoc} */ - public function exists(string $path): Promise { + public function exists(string $path): Promise + { return new Coroutine($this->runFileTask(new Internal\FileTask("exists", [$path]))); } /** * {@inheritdoc} */ - public function size(string $path): Promise { + public function size(string $path): Promise + { return call(function () use ($path) { $stat = yield $this->stat($path); if (empty($stat)) { @@ -204,7 +223,8 @@ class ParallelDriver implements Driver { /** * {@inheritdoc} */ - public function mtime(string $path): Promise { + public function mtime(string $path): Promise + { return call(function () use ($path) { $stat = yield $this->stat($path); if (empty($stat)) { @@ -217,7 +237,8 @@ class ParallelDriver implements Driver { /** * {@inheritdoc} */ - public function atime(string $path): Promise { + public function atime(string $path): Promise + { return call(function () use ($path) { $stat = yield $this->stat($path); if (empty($stat)) { @@ -230,7 +251,8 @@ class ParallelDriver implements Driver { /** * {@inheritdoc} */ - public function ctime(string $path): Promise { + public function ctime(string $path): Promise + { return call(function () use ($path) { $stat = yield $this->stat($path); if (empty($stat)) { @@ -243,28 +265,32 @@ class ParallelDriver implements Driver { /** * {@inheritdoc} */ - public function lstat(string $path): Promise { + public function lstat(string $path): Promise + { return new Coroutine($this->runFileTask(new Internal\FileTask("lstat", [$path]))); } /** * {@inheritdoc} */ - public function touch(string $path, int $time = null, int $atime = null): Promise { + public function touch(string $path, int $time = null, int $atime = null): Promise + { return new Coroutine($this->runFileTask(new Internal\FileTask("touch", [$path, $time, $atime]))); } /** * {@inheritdoc} */ - public function get(string $path): Promise { + public function get(string $path): Promise + { return new Coroutine($this->runFileTask(new Internal\FileTask("get", [$path]))); } /** * {@inheritdoc} */ - public function put(string $path, string $contents): Promise { + public function put(string $path, string $contents): Promise + { return new Coroutine($this->runFileTask(new Internal\FileTask("put", [$path, $contents]))); } } diff --git a/lib/ParallelHandle.php b/lib/ParallelHandle.php index 728ee95..594f075 100644 --- a/lib/ParallelHandle.php +++ b/lib/ParallelHandle.php @@ -12,7 +12,8 @@ use Amp\Promise; use Amp\Success; use function Amp\call; -class ParallelHandle implements Handle { +class ParallelHandle implements Handle +{ /** @var \Amp\Parallel\Worker\Worker */ private $worker; @@ -50,7 +51,8 @@ class ParallelHandle implements Handle { * @param int $size * @param string $mode */ - public function __construct(Worker $worker, int $id, string $path, int $size, string $mode) { + public function __construct(Worker $worker, int $id, string $path, int $size, string $mode) + { $this->worker = $worker; $this->id = $id; $this->path = $path; @@ -59,7 +61,8 @@ class ParallelHandle implements Handle { $this->position = $this->mode[0] === 'a' ? $this->size : 0; } - public function __destruct() { + public function __destruct() + { if ($this->id !== null) { $this->close(); } @@ -68,14 +71,16 @@ class ParallelHandle implements Handle { /** * {@inheritdoc} */ - public function path(): string { + public function path(): string + { return $this->path; } /** * {@inheritdoc} */ - public function close(): Promise { + public function close(): Promise + { if ($this->closing) { return $this->closing; } @@ -95,11 +100,13 @@ class ParallelHandle implements Handle { /** * {@inheritdoc} */ - public function eof(): bool { + public function eof(): bool + { return $this->pendingWrites === 0 && $this->size <= $this->position; } - public function read(int $length = self::DEFAULT_READ_LENGTH): Promise { + public function read(int $length = self::DEFAULT_READ_LENGTH): Promise + { if ($this->id === null) { throw new ClosedException("The file has been closed"); } @@ -111,7 +118,8 @@ class ParallelHandle implements Handle { return new Coroutine($this->doRead($length)); } - private function doRead(int $length): \Generator { + private function doRead(int $length): \Generator + { $this->busy = true; try { @@ -130,7 +138,8 @@ class ParallelHandle implements Handle { /** * {@inheritdoc} */ - public function write(string $data): Promise { + public function write(string $data): Promise + { if ($this->id === null) { throw new ClosedException("The file has been closed"); } @@ -149,7 +158,8 @@ class ParallelHandle implements Handle { /** * {@inheritdoc} */ - public function end(string $data = ""): Promise { + public function end(string $data = ""): Promise + { return call(function () use ($data) { $promise = $this->write($data); $this->writable = false; @@ -161,7 +171,8 @@ class ParallelHandle implements Handle { }); } - private function doWrite(string $data): \Generator { + private function doWrite(string $data): \Generator + { ++$this->pendingWrites; $this->busy = true; @@ -184,7 +195,8 @@ class ParallelHandle implements Handle { /** * {@inheritdoc} */ - public function seek(int $offset, int $whence = SEEK_SET): Promise { + public function seek(int $offset, int $whence = SEEK_SET): Promise + { if ($this->id === null) { throw new ClosedException("The file has been closed"); } @@ -196,7 +208,8 @@ class ParallelHandle implements Handle { return new Coroutine($this->doSeek($offset, $whence)); } - private function doSeek(int $offset, int $whence) { + private function doSeek(int $offset, int $whence) + { switch ($whence) { case \SEEK_SET: case \SEEK_CUR: @@ -225,21 +238,24 @@ class ParallelHandle implements Handle { /** * {@inheritdoc} */ - public function tell(): int { + public function tell(): int + { return $this->position; } /** * {@inheritdoc} */ - public function size(): int { + public function size(): int + { return $this->size; } /** * {@inheritdoc} */ - public function mode(): string { + public function mode(): string + { return $this->mode; } } diff --git a/lib/PendingOperationError.php b/lib/PendingOperationError.php index 6a9bab5..7e21049 100644 --- a/lib/PendingOperationError.php +++ b/lib/PendingOperationError.php @@ -2,7 +2,8 @@ namespace Amp\File; -class PendingOperationError extends \Error { +class PendingOperationError extends \Error +{ public function __construct( string $message = "The previous file operation must complete before another can be started", int $code = 0, diff --git a/lib/StatCache.php b/lib/StatCache.php index 3c55b5a..5a7b455 100644 --- a/lib/StatCache.php +++ b/lib/StatCache.php @@ -4,13 +4,15 @@ namespace Amp\File; use Amp\Loop; -class StatCache { +class StatCache +{ private static $cache = []; private static $timeouts = []; private static $ttl = 3; private static $now = null; - private static function init() { + private static function init() + { self::$now = \time(); $watcher = Loop::repeat(1000, function () { @@ -33,22 +35,26 @@ class StatCache { private $watcher; private $driver; - public function __construct(string $watcher) { + public function __construct(string $watcher) + { $this->watcher = $watcher; $this->driver = Loop::get(); } - public function __destruct() { + public function __destruct() + { $this->driver->cancel($this->watcher); } }); } - public static function get(string $path) { + public static function get(string $path) + { return isset(self::$cache[$path]) ? self::$cache[$path] : null; } - public static function set(string $path, array $stat) { + public static function set(string $path, array $stat) + { if (self::$ttl <= 0) { return; } @@ -61,11 +67,13 @@ class StatCache { self::$timeouts[$path] = self::$now + self::$ttl; } - public static function ttl(int $seconds) { + public static function ttl(int $seconds) + { self::$ttl = $seconds; } - public static function clear(string $path = null) { + public static function clear(string $path = null) + { if (isset($path)) { unset( self::$cache[$path], diff --git a/lib/UvDriver.php b/lib/UvDriver.php index bdc5263..84dcefe 100644 --- a/lib/UvDriver.php +++ b/lib/UvDriver.php @@ -9,7 +9,8 @@ use Amp\Loop; use Amp\Promise; use Amp\Success; -class UvDriver implements Driver { +class UvDriver implements Driver +{ /** @var \Amp\Loop\Driver */ private $driver; @@ -22,7 +23,8 @@ class UvDriver implements Driver { /** * @param \Amp\Loop\UvDriver $driver */ - public function __construct(Loop\UvDriver $driver) { + public function __construct(Loop\UvDriver $driver) + { $this->driver = $driver; $this->loop = $driver->getHandle(); $this->poll = new UvPoll; @@ -31,7 +33,8 @@ class UvDriver implements Driver { /** * {@inheritdoc} */ - public function open(string $path, string $mode): Promise { + public function open(string $path, string $mode): Promise + { $flags = $this->parseMode($mode); $chmod = ($flags & \UV::O_CREAT) ? 0644 : 0; @@ -53,7 +56,8 @@ class UvDriver implements Driver { return $deferred->promise(); } - private function parseMode(string $mode): int { + private function parseMode(string $mode): int + { $mode = \str_replace(['b', 't', 'e'], '', $mode); switch ($mode) { @@ -73,7 +77,8 @@ class UvDriver implements Driver { } } - private function onOpenHandle($fh, array $openArr) { + private function onOpenHandle($fh, array $openArr) + { list($mode) = $openArr; if ($mode[0] === "w") { @@ -102,7 +107,8 @@ class UvDriver implements Driver { } } - private function finalizeHandle($fh, $size, array $openArr) { + private function finalizeHandle($fh, $size, array $openArr) + { list($mode, $path, $deferred) = $openArr; $handle = new UvHandle($this->driver, $this->poll, $fh, $path, $mode, $size); $deferred->resolve($handle); @@ -111,7 +117,8 @@ class UvDriver implements Driver { /** * {@inheritdoc} */ - public function stat(string $path): Promise { + public function stat(string $path): Promise + { if ($stat = StatCache::get($path)) { return new Success($stat); } @@ -143,7 +150,8 @@ class UvDriver implements Driver { /** * {@inheritdoc} */ - public function exists(string $path): Promise { + public function exists(string $path): Promise + { $deferred = new Deferred; $this->stat($path)->onResolve(function ($error, $result) use ($deferred) { @@ -156,7 +164,8 @@ class UvDriver implements Driver { /** * {@inheritdoc} */ - public function isdir(string $path): Promise { + public function isdir(string $path): Promise + { $deferred = new Deferred; $this->stat($path)->onResolve(function ($error, $result) use ($deferred) { @@ -173,7 +182,8 @@ class UvDriver implements Driver { /** * {@inheritdoc} */ - public function isfile(string $path): Promise { + public function isfile(string $path): Promise + { $deferred = new Deferred; $this->stat($path)->onResolve(function ($error, $result) use ($deferred) { @@ -190,7 +200,8 @@ class UvDriver implements Driver { /** * {@inheritdoc} */ - public function size(string $path): Promise { + public function size(string $path): Promise + { $deferred = new Deferred; $this->stat($path)->onResolve(function ($error, $result) use ($deferred) { @@ -213,7 +224,8 @@ class UvDriver implements Driver { /** * {@inheritdoc} */ - public function mtime(string $path): Promise { + public function mtime(string $path): Promise + { $deferred = new Deferred; $this->stat($path)->onResolve(function ($error, $result) use ($deferred) { @@ -232,7 +244,8 @@ class UvDriver implements Driver { /** * {@inheritdoc} */ - public function atime(string $path): Promise { + public function atime(string $path): Promise + { $deferred = new Deferred; $this->stat($path)->onResolve(function ($error, $result) use ($deferred) { @@ -251,7 +264,8 @@ class UvDriver implements Driver { /** * {@inheritdoc} */ - public function ctime(string $path): Promise { + public function ctime(string $path): Promise + { $deferred = new Deferred; $this->stat($path)->onResolve(function ($error, $result) use ($deferred) { @@ -270,7 +284,8 @@ class UvDriver implements Driver { /** * {@inheritdoc} */ - public function lstat(string $path): Promise { + public function lstat(string $path): Promise + { $deferred = new Deferred; $this->poll->listen($deferred->promise()); @@ -288,7 +303,8 @@ class UvDriver implements Driver { /** * {@inheritdoc} */ - public function symlink(string $target, string $link): Promise { + public function symlink(string $target, string $link): Promise + { $deferred = new Deferred; $this->poll->listen($deferred->promise()); @@ -302,7 +318,8 @@ class UvDriver implements Driver { /** * {@inheritdoc} */ - public function link(string $target, string $link): Promise { + public function link(string $target, string $link): Promise + { $deferred = new Deferred; $this->poll->listen($deferred->promise()); @@ -316,14 +333,15 @@ class UvDriver implements Driver { /** * {@inheritdoc} */ - public function readlink(string $path): Promise { + public function readlink(string $path): Promise + { $deferred = new Deferred; $this->poll->listen($deferred->promise()); \uv_fs_readlink($this->loop, $path, function ($fh, $target) use ($deferred) { if (!(bool) $fh) { $deferred->fail(new FilesystemException("Could not read symbolic link")); - + return; } @@ -336,7 +354,8 @@ class UvDriver implements Driver { /** * {@inheritdoc} */ - public function rename(string $from, string $to): Promise { + public function rename(string $from, string $to): Promise + { $deferred = new Deferred; $this->poll->listen($deferred->promise()); @@ -351,7 +370,8 @@ class UvDriver implements Driver { /** * {@inheritdoc} */ - public function unlink(string $path): Promise { + public function unlink(string $path): Promise + { $deferred = new Deferred; $this->poll->listen($deferred->promise()); @@ -366,19 +386,20 @@ class UvDriver implements Driver { /** * {@inheritdoc} */ - public function mkdir(string $path, int $mode = 0777, bool $recursive = false): Promise { + public function mkdir(string $path, int $mode = 0777, bool $recursive = false): Promise + { $deferred = new Deferred; $this->poll->listen($deferred->promise()); if ($recursive) { - $path = str_replace("/", DIRECTORY_SEPARATOR, $path); - $arrayPath = explode(DIRECTORY_SEPARATOR, $path); + $path = \str_replace("/", DIRECTORY_SEPARATOR, $path); + $arrayPath = \explode(DIRECTORY_SEPARATOR, $path); $tmpPath = ""; $callback = function () use ( &$callback, &$arrayPath, &$tmpPath, $mode, $deferred ) { - $tmpPath .= DIRECTORY_SEPARATOR . array_shift($arrayPath); + $tmpPath .= DIRECTORY_SEPARATOR . \array_shift($arrayPath); if (empty($arrayPath)) { \uv_fs_mkdir($this->loop, $tmpPath, $mode, function ($fh) use ($deferred) { @@ -410,7 +431,8 @@ class UvDriver implements Driver { /** * {@inheritdoc} */ - public function rmdir(string $path): Promise { + public function rmdir(string $path): Promise + { $deferred = new Deferred; $this->poll->listen($deferred->promise()); @@ -425,11 +447,12 @@ class UvDriver implements Driver { /** * {@inheritdoc} */ - public function scandir(string $path): Promise { + public function scandir(string $path): Promise + { $deferred = new Deferred; $this->poll->listen($deferred->promise()); - uv_fs_readdir($this->loop, $path, 0, function ($fh, $data) use ($deferred, $path) { + \uv_fs_readdir($this->loop, $path, 0, function ($fh, $data) use ($deferred, $path) { if (empty($fh)) { $deferred->fail(new FilesystemException("Failed reading contents from {$path}")); } else { @@ -443,7 +466,8 @@ class UvDriver implements Driver { /** * {@inheritdoc} */ - public function chmod(string $path, int $mode): Promise { + public function chmod(string $path, int $mode): Promise + { $deferred = new Deferred; $this->poll->listen($deferred->promise()); @@ -457,7 +481,8 @@ class UvDriver implements Driver { /** * {@inheritdoc} */ - public function chown(string $path, int $uid, int $gid): Promise { + public function chown(string $path, int $uid, int $gid): Promise + { // @TODO Return a failure in windows environments $deferred = new Deferred; $this->poll->listen($deferred->promise()); @@ -472,7 +497,8 @@ class UvDriver implements Driver { /** * {@inheritdoc} */ - public function touch(string $path, int $time = null, int $atime = null): Promise { + public function touch(string $path, int $time = null, int $atime = null): Promise + { $time = $time ?? \time(); $atime = $atime ?? $time; @@ -490,14 +516,16 @@ class UvDriver implements Driver { /** * {@inheritdoc} */ - public function get(string $path): Promise { + public function get(string $path): Promise + { $promise = new Coroutine($this->doGet($path)); $this->poll->listen($promise); return $promise; } - private function doGet($path): \Generator { + private function doGet($path): \Generator + { $promise = $this->doFsOpen($path, $flags = \UV::O_RDONLY, $mode = 0); if (!$fh = yield $promise) { throw new FilesystemException("Failed opening file handle: {$path}"); @@ -530,7 +558,8 @@ class UvDriver implements Driver { return yield $deferred->promise(); } - private function doFsOpen($path, $flags, $mode) { + private function doFsOpen($path, $flags, $mode) + { $deferred = new Deferred; \uv_fs_open($this->loop, $path, $flags, $mode, function ($fh) use ($deferred, $path) { @@ -540,7 +569,8 @@ class UvDriver implements Driver { return $deferred->promise(); } - private function doFsStat($fh) { + private function doFsStat($fh) + { $deferred = new Deferred; \uv_fs_fstat($this->loop, $fh, function ($fh, $stat) use ($deferred) { @@ -556,7 +586,8 @@ class UvDriver implements Driver { return $deferred->promise(); } - private function doFsRead($fh, $offset, $len) { + private function doFsRead($fh, $offset, $len) + { $deferred = new Deferred; \uv_fs_read($this->loop, $fh, $offset, $len, function ($fh, $nread, $buffer) use ($deferred) { @@ -569,14 +600,16 @@ class UvDriver implements Driver { /** * {@inheritdoc} */ - public function put(string $path, string $contents): Promise { + public function put(string $path, string $contents): Promise + { $promise = new Coroutine($this->doPut($path, $contents)); $this->poll->listen($promise); return $promise; } - private function doPut($path, $contents): \Generator { + private function doPut($path, $contents): \Generator + { $flags = \UV::O_WRONLY | \UV::O_CREAT; $mode = \UV::S_IRWXU | \UV::S_IRUSR; @@ -587,7 +620,7 @@ class UvDriver implements Driver { } $deferred = new Deferred; - $len = strlen($contents); + $len = \strlen($contents); \uv_fs_write($this->loop, $fh, $contents, $offset = 0, function ($fh, $result) use ($deferred, $len) { \uv_fs_close($this->loop, $fh, function () use ($deferred, $result, $len) { diff --git a/lib/UvHandle.php b/lib/UvHandle.php index 202c223..25fe11f 100644 --- a/lib/UvHandle.php +++ b/lib/UvHandle.php @@ -11,7 +11,8 @@ use Amp\Promise; use Amp\Success; use function Amp\call; -class UvHandle implements Handle { +class UvHandle implements Handle +{ /** @var UvPoll */ private $poll; @@ -53,7 +54,8 @@ class UvHandle implements Handle { * @param string $mode * @param int $size */ - public function __construct(Loop\UvDriver $driver, UvPoll $poll, $fh, string $path, string $mode, int $size) { + public function __construct(Loop\UvDriver $driver, UvPoll $poll, $fh, string $path, string $mode, int $size) + { $this->poll = $poll; $this->fh = $fh; $this->path = $path; @@ -65,7 +67,8 @@ class UvHandle implements Handle { $this->queue = new \SplQueue; } - public function read(int $length = self::DEFAULT_READ_LENGTH): Promise { + public function read(int $length = self::DEFAULT_READ_LENGTH): Promise + { if ($this->isActive) { throw new PendingOperationError; } @@ -86,7 +89,7 @@ class UvHandle implements Handle { $deferred->fail(new StreamException("Reading from the file failed: " . $error)); } } else { - $length = strlen($buffer); + $length = \strlen($buffer); $this->position = $this->position + $length; $deferred->resolve($length ? $buffer : null); } @@ -100,7 +103,8 @@ class UvHandle implements Handle { /** * {@inheritdoc} */ - public function write(string $data): Promise { + public function write(string $data): Promise + { if ($this->isActive && $this->queue->isEmpty()) { throw new PendingOperationError; } @@ -129,7 +133,8 @@ class UvHandle implements Handle { /** * {@inheritdoc} */ - public function end(string $data = ""): Promise { + public function end(string $data = ""): Promise + { return call(function () use ($data) { $promise = $this->write($data); $this->writable = false; @@ -141,7 +146,8 @@ class UvHandle implements Handle { }); } - private function push(string $data): Promise { + private function push(string $data): Promise + { $length = \strlen($data); $deferred = new Deferred; @@ -182,7 +188,8 @@ class UvHandle implements Handle { /** * {@inheritdoc} */ - public function seek(int $offset, int $whence = \SEEK_SET): Promise { + public function seek(int $offset, int $whence = \SEEK_SET): Promise + { if ($this->isActive) { throw new PendingOperationError; } @@ -210,35 +217,40 @@ class UvHandle implements Handle { /** * {@inheritdoc} */ - public function tell(): int { + public function tell(): int + { return $this->position; } /** * {@inheritdoc} */ - public function eof(): bool { + public function eof(): bool + { return !$this->queue->isEmpty() ? false : ($this->size <= $this->position); } /** * {@inheritdoc} */ - public function path(): string { + public function path(): string + { return $this->path; } /** * {@inheritdoc} */ - public function mode(): string { + public function mode(): string + { return $this->mode; } /** * {@inheritdoc} */ - public function close(): Promise { + public function close(): Promise + { if ($this->closing) { return $this->closing; } diff --git a/lib/functions.php b/lib/functions.php index 2fef7ce..7ea6254 100644 --- a/lib/functions.php +++ b/lib/functions.php @@ -13,7 +13,8 @@ const LOOP_STATE_IDENTIFIER = Driver::class; * @param \Amp\File\Driver $driver Use the specified object as the application-wide filesystem instance * @return \Amp\File\Driver */ -function filesystem(Driver $driver = null): Driver { +function filesystem(Driver $driver = null): Driver +{ if ($driver === null) { $driver = Loop::getState(LOOP_STATE_IDENTIFIER); if ($driver) { @@ -36,7 +37,8 @@ function filesystem(Driver $driver = null): Driver { * * @return \Amp\File\Driver */ -function driver(): Driver { +function driver(): Driver +{ $driver = Loop::get(); if ($driver instanceof Loop\UvDriver) { @@ -61,7 +63,8 @@ function driver(): Driver { * @param string $mode * @return \Amp\Promise<\Amp\File\Handle> */ -function open(string $path, string $mode): Promise { +function open(string $path, string $mode): Promise +{ return filesystem()->open($path, $mode); } @@ -74,7 +77,8 @@ function open(string $path, string $mode): Promise { * @param string $path An absolute file system path * @return \Amp\Promise */ -function stat(string $path): Promise { +function stat(string $path): Promise +{ return filesystem()->stat($path); } @@ -87,7 +91,8 @@ function stat(string $path): Promise { * @param string $path An absolute file system path * @return \Amp\Promise */ -function exists(string $path): Promise { +function exists(string $path): Promise +{ return filesystem()->exists($path); } @@ -101,7 +106,8 @@ function exists(string $path): Promise { * @fails \Amp\Files\FilesystemException If the path does not exist or is not a file * @return \Amp\Promise */ -function size(string $path): Promise { +function size(string $path): Promise +{ return filesystem()->size($path); } @@ -114,7 +120,8 @@ function size(string $path): Promise { * @param string $path An absolute file system path * @return \Amp\Promise */ -function isdir(string $path): Promise { +function isdir(string $path): Promise +{ return filesystem()->isdir($path); } @@ -127,7 +134,8 @@ function isdir(string $path): Promise { * @param string $path An absolute file system path * @return \Amp\Promise */ -function isfile(string $path): Promise { +function isfile(string $path): Promise +{ return filesystem()->isfile($path); } @@ -138,7 +146,8 @@ function isfile(string $path): Promise { * @fails \Amp\Files\FilesystemException If the path does not exist * @return \Amp\Promise */ -function mtime(string $path): Promise { +function mtime(string $path): Promise +{ return filesystem()->mtime($path); } @@ -149,7 +158,8 @@ function mtime(string $path): Promise { * @fails \Amp\Files\FilesystemException If the path does not exist * @return \Amp\Promise */ -function atime($path) { +function atime($path) +{ return filesystem()->atime($path); } @@ -160,7 +170,8 @@ function atime($path) { * @fails \Amp\Files\FilesystemException If the path does not exist * @return \Amp\Promise */ -function ctime(string $path): Promise { +function ctime(string $path): Promise +{ return filesystem()->ctime($path); } @@ -173,7 +184,8 @@ function ctime(string $path): Promise { * @param string $path An absolute file system path * @return \Amp\Promise */ -function lstat(string $path): Promise { +function lstat(string $path): Promise +{ return filesystem()->lstat($path); } @@ -185,7 +197,8 @@ function lstat(string $path): Promise { * @fails \Amp\Files\FilesystemException If the operation fails * @return \Amp\Promise */ -function symlink(string $original, string $link): Promise { +function symlink(string $original, string $link): Promise +{ return filesystem()->symlink($original, $link); } @@ -197,7 +210,8 @@ function symlink(string $original, string $link): Promise { * @fails \Amp\Files\FilesystemException If the operation fails * @return \Amp\Promise */ -function link(string $original, string $link): Promise { +function link(string $original, string $link): Promise +{ return filesystem()->symlink($original, $link); } @@ -208,7 +222,8 @@ function link(string $original, string $link): Promise { * @fails \Amp\Files\FilesystemException If the operation fails * @return \Amp\Promise */ -function readlink(string $path): Promise { +function readlink(string $path): Promise +{ return filesystem()->readlink($path); } @@ -220,7 +235,8 @@ function readlink(string $path): Promise { * @fails \Amp\Files\FilesystemException If the operation fails * @return \Amp\Promise */ -function rename(string $from, string $to): Promise { +function rename(string $from, string $to): Promise +{ return filesystem()->rename($from, $to); } @@ -230,7 +246,8 @@ function rename(string $from, string $to): Promise { * @param string $path * @return \Amp\Promise */ -function unlink(string $path): Promise { +function unlink(string $path): Promise +{ return filesystem()->unlink($path); } @@ -242,7 +259,8 @@ function unlink(string $path): Promise { * @param bool $recursive * @return \Amp\Promise */ -function mkdir(string $path, int $mode = 0777, bool $recursive = false): Promise { +function mkdir(string $path, int $mode = 0777, bool $recursive = false): Promise +{ return filesystem()->mkdir($path, $mode, $recursive); } @@ -252,7 +270,8 @@ function mkdir(string $path, int $mode = 0777, bool $recursive = false): Promise * @param string $path * @return \Amp\Promise */ -function rmdir(string $path): Promise { +function rmdir(string $path): Promise +{ return filesystem()->rmdir($path); } @@ -264,7 +283,8 @@ function rmdir(string $path): Promise { * @param string $path * @return \Amp\Promise */ -function scandir(string $path): Promise { +function scandir(string $path): Promise +{ return filesystem()->scandir($path); } @@ -275,7 +295,8 @@ function scandir(string $path): Promise { * @param int $mode * @return \Amp\Promise */ -function chmod(string $path, int $mode): Promise { +function chmod(string $path, int $mode): Promise +{ return filesystem()->chmod($path, $mode); } @@ -287,7 +308,8 @@ function chmod(string $path, int $mode): Promise { * @param int $gid -1 to ignore * @return \Amp\Promise */ -function chown(string $path, int $uid, int $gid = -1): Promise { +function chown(string $path, int $uid, int $gid = -1): Promise +{ return filesystem()->chown($path, $uid, $gid); } @@ -301,7 +323,8 @@ function chown(string $path, int $uid, int $gid = -1): Promise { * @param int $atime The access time. If $atime is not supplied, value passed to the $time parameter is used. * @return \Amp\Promise */ -function touch(string $path, int $time = null, int $atime = null): Promise { +function touch(string $path, int $time = null, int $atime = null): Promise +{ return filesystem()->touch($path, $time, $atime); } @@ -311,7 +334,8 @@ function touch(string $path, int $time = null, int $atime = null): Promise { * @param string $path The file path from which to buffer contents * @return \Amp\Promise */ -function get(string $path): Promise { +function get(string $path): Promise +{ return filesystem()->get($path); } @@ -322,6 +346,7 @@ function get(string $path): Promise { * @param string $contents The data to write to the specified $path * @return \Amp\Promise A promise resolving to the integer length written upon success */ -function put(string $path, string $contents): Promise { +function put(string $path, string $contents): Promise +{ return filesystem()->put($path, $contents); } diff --git a/test/AsyncHandleTest.php b/test/AsyncHandleTest.php index f07d6ff..b1bd4b7 100644 --- a/test/AsyncHandleTest.php +++ b/test/AsyncHandleTest.php @@ -4,11 +4,13 @@ namespace Amp\File\Test; use Amp\File; -abstract class AsyncHandleTest extends HandleTest { +abstract class AsyncHandleTest extends HandleTest +{ /** * @expectedException \Amp\File\PendingOperationError */ - public function testSimultaneousReads() { + public function testSimultaneousReads() + { $this->execute(function () { /** @var \Amp\File\Handle $handle */ $handle = yield File\open(__FILE__, "r"); @@ -26,7 +28,8 @@ abstract class AsyncHandleTest extends HandleTest { /** * @expectedException \Amp\File\PendingOperationError */ - public function testSeekWhileReading() { + public function testSeekWhileReading() + { $this->execute(function () { /** @var \Amp\File\Handle $handle */ $handle = yield File\open(__FILE__, "r"); @@ -44,7 +47,8 @@ abstract class AsyncHandleTest extends HandleTest { /** * @expectedException \Amp\File\PendingOperationError */ - public function testReadWhileWriting() { + public function testReadWhileWriting() + { $this->execute(function () { /** @var \Amp\File\Handle $handle */ $handle = yield File\open(__FILE__, "r"); @@ -63,7 +67,8 @@ abstract class AsyncHandleTest extends HandleTest { /** * @expectedException \Amp\File\PendingOperationError */ - public function testWriteWhileReading() { + public function testWriteWhileReading() + { $this->execute(function () { /** @var \Amp\File\Handle $handle */ $handle = yield File\open(__FILE__, "r"); diff --git a/test/BlockingDriverTest.php b/test/BlockingDriverTest.php index c4f5fba..cbca741 100644 --- a/test/BlockingDriverTest.php +++ b/test/BlockingDriverTest.php @@ -6,8 +6,10 @@ use Amp\File; use Amp\Loop; use function Amp\asyncCall; -class BlockingDriverTest extends DriverTest { - protected function execute(callable $cb) { +class BlockingDriverTest extends DriverTest +{ + protected function execute(callable $cb) + { Loop::run(function () use ($cb) { File\filesystem(new File\BlockingDriver); asyncCall($cb); diff --git a/test/BlockingHandleTest.php b/test/BlockingHandleTest.php index 097f6b0..7f98740 100644 --- a/test/BlockingHandleTest.php +++ b/test/BlockingHandleTest.php @@ -6,8 +6,10 @@ use Amp\File; use Amp\Loop; use function Amp\asyncCall; -class BlockingHandleTest extends HandleTest { - protected function execute(callable $cb) { +class BlockingHandleTest extends HandleTest +{ + protected function execute(callable $cb) + { Loop::run(function () use ($cb) { File\filesystem(new File\BlockingDriver); asyncCall($cb); diff --git a/test/DriverTest.php b/test/DriverTest.php index 9f07760..00ad4d0 100644 --- a/test/DriverTest.php +++ b/test/DriverTest.php @@ -5,19 +5,23 @@ namespace Amp\File\Test; use Amp\File as file; use Amp\PHPUnit\TestCase; -abstract class DriverTest extends TestCase { - protected function setUp() { +abstract class DriverTest extends TestCase +{ + protected function setUp() + { Fixture::init(); File\StatCache::clear(); } - protected function tearDown() { + protected function tearDown() + { Fixture::clear(); } abstract protected function execute(callable $cb); - public function testScandir() { + public function testScandir() + { $this->execute(function () { $fixtureDir = Fixture::path(); $actual = yield File\scandir($fixtureDir); @@ -29,7 +33,8 @@ abstract class DriverTest extends TestCase { /** * @expectedException \Amp\File\FilesystemException */ - public function testScandirThrowsIfPathNotADirectory() { + public function testScandirThrowsIfPathNotADirectory() + { $this->execute(function () { (yield File\scandir(__FILE__)); }); @@ -38,14 +43,16 @@ abstract class DriverTest extends TestCase { /** * @expectedException \Amp\File\FilesystemException */ - public function testScandirThrowsIfPathDoesntExist() { + public function testScandirThrowsIfPathDoesntExist() + { $this->execute(function () { $path = Fixture::path() . "/nonexistent"; (yield File\scandir($path)); }); } - public function testSymlink() { + public function testSymlink() + { $this->execute(function () { $fixtureDir = Fixture::path(); @@ -57,7 +64,8 @@ abstract class DriverTest extends TestCase { }); } - public function testReadlink() { + public function testReadlink() + { $this->execute(function () { $fixtureDir = Fixture::path(); @@ -69,10 +77,11 @@ abstract class DriverTest extends TestCase { }); } - public function readlinkPathProvider() { + public function readlinkPathProvider() + { return [ 'nonExistingPath' => [function () { - return Fixture::path() . '/' . uniqid(); + return Fixture::path() . '/' . \uniqid(); }], 'notLink' => [function () { return Fixture::path(); @@ -86,7 +95,8 @@ abstract class DriverTest extends TestCase { * * @param \Closure $linkResolver */ - public function testReadlinkError(\Closure $linkResolver) { + public function testReadlinkError(\Closure $linkResolver) + { $this->execute(function () use ($linkResolver) { $link = $linkResolver(); @@ -94,7 +104,8 @@ abstract class DriverTest extends TestCase { }); } - public function testLstat() { + public function testLstat() + { $this->execute(function () { $fixtureDir = Fixture::path(); @@ -106,7 +117,8 @@ abstract class DriverTest extends TestCase { }); } - public function testFileStat() { + public function testFileStat() + { $this->execute(function () { $fixtureDir = Fixture::path(); $stat = (yield File\stat("{$fixtureDir}/small.txt")); @@ -115,7 +127,8 @@ abstract class DriverTest extends TestCase { }); } - public function testDirStat() { + public function testDirStat() + { $this->execute(function () { $fixtureDir = Fixture::path(); $stat = (yield File\stat("{$fixtureDir}/dir")); @@ -124,7 +137,8 @@ abstract class DriverTest extends TestCase { }); } - public function testNonexistentPathStatResolvesToNull() { + public function testNonexistentPathStatResolvesToNull() + { $this->execute(function () { $fixtureDir = Fixture::path(); $stat = (yield File\stat("{$fixtureDir}/nonexistent")); @@ -132,7 +146,8 @@ abstract class DriverTest extends TestCase { }); } - public function testExists() { + public function testExists() + { $this->execute(function () { $fixtureDir = Fixture::path(); $this->assertFalse(yield File\exists("{$fixtureDir}/nonexistent")); @@ -140,14 +155,16 @@ abstract class DriverTest extends TestCase { }); } - public function testGet() { + public function testGet() + { $this->execute(function () { $fixtureDir = Fixture::path(); $this->assertSame("small", yield File\get("{$fixtureDir}/small.txt")); }); } - public function testSize() { + public function testSize() + { $this->execute(function () { $fixtureDir = Fixture::path(); $path = "{$fixtureDir}/small.txt"; @@ -161,7 +178,8 @@ abstract class DriverTest extends TestCase { /** * @expectedException \Amp\File\FilesystemException */ - public function testSizeFailsOnNonexistentPath() { + public function testSizeFailsOnNonexistentPath() + { $this->execute(function () { $fixtureDir = Fixture::path(); $path = "{$fixtureDir}/nonexistent"; @@ -172,7 +190,8 @@ abstract class DriverTest extends TestCase { /** * @expectedException \Amp\File\FilesystemException */ - public function testSizeFailsOnDirectoryPath() { + public function testSizeFailsOnDirectoryPath() + { $this->execute(function () { $fixtureDir = Fixture::path(); $path = "{$fixtureDir}/dir"; @@ -182,7 +201,8 @@ abstract class DriverTest extends TestCase { }); } - public function testIsdirResolvesTrueOnDirectoryPath() { + public function testIsdirResolvesTrueOnDirectoryPath() + { $this->execute(function () { $fixtureDir = Fixture::path(); $path = "{$fixtureDir}/dir"; @@ -190,7 +210,8 @@ abstract class DriverTest extends TestCase { }); } - public function testIsdirResolvesFalseOnFilePath() { + public function testIsdirResolvesFalseOnFilePath() + { $this->execute(function () { $fixtureDir = Fixture::path(); $path = "{$fixtureDir}/small.txt"; @@ -198,7 +219,8 @@ abstract class DriverTest extends TestCase { }); } - public function testIsdirResolvesFalseOnNonexistentPath() { + public function testIsdirResolvesFalseOnNonexistentPath() + { $this->execute(function () { $fixtureDir = Fixture::path(); $path = "{$fixtureDir}/nonexistent"; @@ -206,7 +228,8 @@ abstract class DriverTest extends TestCase { }); } - public function testIsfileResolvesTrueOnFilePath() { + public function testIsfileResolvesTrueOnFilePath() + { $this->execute(function () { $fixtureDir = Fixture::path(); $path = "{$fixtureDir}/small.txt"; @@ -214,7 +237,8 @@ abstract class DriverTest extends TestCase { }); } - public function testIsfileResolvesFalseOnDirectoryPath() { + public function testIsfileResolvesFalseOnDirectoryPath() + { $this->execute(function () { $fixtureDir = Fixture::path(); $path = "{$fixtureDir}/dir"; @@ -222,7 +246,8 @@ abstract class DriverTest extends TestCase { }); } - public function testIsfileResolvesFalseOnNonexistentPath() { + public function testIsfileResolvesFalseOnNonexistentPath() + { $this->execute(function () { $fixtureDir = Fixture::path(); $path = "{$fixtureDir}/nonexistent"; @@ -230,7 +255,8 @@ abstract class DriverTest extends TestCase { }); } - public function testRename() { + public function testRename() + { $this->execute(function () { $fixtureDir = Fixture::path(); @@ -247,7 +273,8 @@ abstract class DriverTest extends TestCase { }); } - public function testUnlink() { + public function testUnlink() + { $this->execute(function () { $fixtureDir = Fixture::path(); $toUnlink = "{$fixtureDir}/unlink"; @@ -257,7 +284,8 @@ abstract class DriverTest extends TestCase { }); } - public function testMkdirRmdir() { + public function testMkdirRmdir() + { $this->execute(function () { $fixtureDir = Fixture::path(); @@ -280,7 +308,8 @@ abstract class DriverTest extends TestCase { }); } - public function testMtime() { + public function testMtime() + { $this->execute(function () { $fixtureDir = Fixture::path(); $path = "{$fixtureDir}/small.txt"; @@ -294,7 +323,8 @@ abstract class DriverTest extends TestCase { /** * @expectedException \Amp\File\FilesystemException */ - public function testMtimeFailsOnNonexistentPath() { + public function testMtimeFailsOnNonexistentPath() + { $this->execute(function () { $fixtureDir = Fixture::path(); $path = "{$fixtureDir}/nonexistent"; @@ -302,7 +332,8 @@ abstract class DriverTest extends TestCase { }); } - public function testAtime() { + public function testAtime() + { $this->execute(function () { $fixtureDir = Fixture::path(); $path = "{$fixtureDir}/small.txt"; @@ -316,7 +347,8 @@ abstract class DriverTest extends TestCase { /** * @expectedException \Amp\File\FilesystemException */ - public function testAtimeFailsOnNonexistentPath() { + public function testAtimeFailsOnNonexistentPath() + { $this->execute(function () { $fixtureDir = Fixture::path(); $path = "{$fixtureDir}/nonexistent"; @@ -324,7 +356,8 @@ abstract class DriverTest extends TestCase { }); } - public function testCtime() { + public function testCtime() + { $this->execute(function () { $fixtureDir = Fixture::path(); $path = "{$fixtureDir}/small.txt"; @@ -338,7 +371,8 @@ abstract class DriverTest extends TestCase { /** * @expectedException \Amp\File\FilesystemException */ - public function testCtimeFailsOnNonexistentPath() { + public function testCtimeFailsOnNonexistentPath() + { $this->execute(function () { $fixtureDir = Fixture::path(); $path = "{$fixtureDir}/nonexistent"; @@ -349,7 +383,8 @@ abstract class DriverTest extends TestCase { /** * @group slow */ - public function testTouch() { + public function testTouch() + { $this->execute(function () { $fixtureDir = Fixture::path(); @@ -367,7 +402,8 @@ abstract class DriverTest extends TestCase { }); } - private function assertStatSame(array $expected, array $actual) { + private function assertStatSame(array $expected, array $actual) + { $filter = function (array $stat) { $filtered = \array_filter( $stat, @@ -377,7 +413,7 @@ abstract class DriverTest extends TestCase { ARRAY_FILTER_USE_KEY ); - ksort($filtered); + \ksort($filtered); return $filtered; }; @@ -389,7 +425,8 @@ abstract class DriverTest extends TestCase { * @param array $stat * @return string */ - private function getPermissionsFromStat(array $stat): string { + private function getPermissionsFromStat(array $stat): string + { return \substr(\decoct($stat["mode"]), 1); } } diff --git a/test/EioDriverTest.php b/test/EioDriverTest.php index d31c160..c6fbeae 100644 --- a/test/EioDriverTest.php +++ b/test/EioDriverTest.php @@ -6,8 +6,10 @@ use Amp\File; use Amp\Loop; use function Amp\asyncCall; -class EioDriverTest extends DriverTest { - protected function execute(callable $cb) { +class EioDriverTest extends DriverTest +{ + protected function execute(callable $cb) + { if (!\extension_loaded("eio")) { $this->markTestSkipped( "eio extension not loaded" diff --git a/test/EioHandleTest.php b/test/EioHandleTest.php index 5c345ae..caa9c1b 100644 --- a/test/EioHandleTest.php +++ b/test/EioHandleTest.php @@ -6,8 +6,10 @@ use Amp\File; use Amp\Loop; use function Amp\asyncCall; -class EioHandleTest extends AsyncHandleTest { - protected function execute(callable $cb) { +class EioHandleTest extends AsyncHandleTest +{ + protected function execute(callable $cb) + { if (!\extension_loaded("eio")) { $this->markTestSkipped( "eio extension not loaded" diff --git a/test/Fixture.php b/test/Fixture.php index 1890e11..98859f5 100644 --- a/test/Fixture.php +++ b/test/Fixture.php @@ -2,18 +2,21 @@ namespace Amp\File\Test; -final class Fixture { +final class Fixture +{ private static $fixtureId; - public static function path() { + public static function path() + { if (empty(self::$fixtureId)) { self::$fixtureId = \uniqid(); } - return \sys_get_temp_dir() . "/amphp_file_fixture/" . strtr(__CLASS__, "\\", ".") . self::$fixtureId; + return \sys_get_temp_dir() . "/amphp_file_fixture/" . \strtr(__CLASS__, "\\", ".") . self::$fixtureId; } - public static function init() { + public static function init() + { $fixtureDir = self::path(); self::clear(); if (!\mkdir($fixtureDir, $mode = 0777, $recursive = true)) { @@ -33,7 +36,8 @@ final class Fixture { } } - public static function clear() { + public static function clear() + { $fixtureDir = self::path(); if (!\file_exists($fixtureDir)) { return; diff --git a/test/HandleTest.php b/test/HandleTest.php index ddcaaf0..8edd1fb 100644 --- a/test/HandleTest.php +++ b/test/HandleTest.php @@ -6,19 +6,23 @@ use Amp\ByteStream\ClosedException; use Amp\File; use Amp\PHPUnit\TestCase; -abstract class HandleTest extends TestCase { - protected function setUp() { +abstract class HandleTest extends TestCase +{ + protected function setUp() + { Fixture::init(); File\StatCache::clear(); } - protected function tearDown() { + protected function tearDown() + { Fixture::clear(); } abstract protected function execute(callable $cb); - public function testWrite() { + public function testWrite() + { $this->execute(function () { $path = Fixture::path() . "/write"; /** @var \Amp\File\Handle $handle */ @@ -37,7 +41,8 @@ abstract class HandleTest extends TestCase { }); } - public function testWriteAfterClose() { + public function testWriteAfterClose() + { $this->execute(function () { $path = Fixture::path() . "/write"; /** @var \Amp\File\Handle $handle */ @@ -49,7 +54,8 @@ abstract class HandleTest extends TestCase { }); } - public function testDoubleClose() { + public function testDoubleClose() + { $this->execute(function () { $path = Fixture::path() . "/write"; /** @var \Amp\File\Handle $handle */ @@ -59,7 +65,8 @@ abstract class HandleTest extends TestCase { }); } - public function testWriteAfterEnd() { + public function testWriteAfterEnd() + { $this->execute(function () { $path = Fixture::path() . "/write"; /** @var \Amp\File\Handle $handle */ @@ -72,7 +79,8 @@ abstract class HandleTest extends TestCase { }); } - public function testReadingToEof() { + public function testReadingToEof() + { $this->execute(function () { /** @var \Amp\File\Handle $handle */ $handle = yield File\open(__FILE__, "r"); @@ -96,7 +104,8 @@ abstract class HandleTest extends TestCase { }); } - public function testSequentialReads() { + public function testSequentialReads() + { $this->execute(function () { /** @var \Amp\File\Handle $handle */ $handle = yield File\open(__FILE__, "r"); @@ -112,7 +121,8 @@ abstract class HandleTest extends TestCase { }); } - public function testReadingFromOffset() { + public function testReadingFromOffset() + { $this->execute(function () { /** @var \Amp\File\Handle $handle */ $handle = yield File\open(__FILE__, "r"); @@ -131,7 +141,8 @@ abstract class HandleTest extends TestCase { /** * @expectedException \Error */ - public function testSeekThrowsOnInvalidWhence() { + public function testSeekThrowsOnInvalidWhence() + { $this->execute(function () { try { /** @var \Amp\File\Handle $handle */ @@ -143,7 +154,8 @@ abstract class HandleTest extends TestCase { }); } - public function testSeekSetCur() { + public function testSeekSetCur() + { $this->execute(function () { /** @var \Amp\File\Handle $handle */ $handle = yield File\open(__FILE__, "r"); @@ -156,7 +168,8 @@ abstract class HandleTest extends TestCase { }); } - public function testSeekSetEnd() { + public function testSeekSetEnd() + { $this->execute(function () { $size = yield File\size(__FILE__); /** @var \Amp\File\Handle $handle */ @@ -168,7 +181,8 @@ abstract class HandleTest extends TestCase { }); } - public function testPath() { + public function testPath() + { $this->execute(function () { /** @var \Amp\File\Handle $handle */ $handle = yield File\open(__FILE__, "r"); @@ -177,7 +191,8 @@ abstract class HandleTest extends TestCase { }); } - public function testMode() { + public function testMode() + { $this->execute(function () { /** @var \Amp\File\Handle $handle */ $handle = yield File\open(__FILE__, "r"); @@ -186,7 +201,8 @@ abstract class HandleTest extends TestCase { }); } - public function testClose() { + public function testClose() + { $this->execute(function () { /** @var \Amp\File\Handle $handle */ $handle = yield File\open(__FILE__, "r"); diff --git a/test/ParallelDriverTest.php b/test/ParallelDriverTest.php index 9457f5d..e19c803 100644 --- a/test/ParallelDriverTest.php +++ b/test/ParallelDriverTest.php @@ -7,8 +7,10 @@ use Amp\Loop; use Amp\Parallel\Worker\DefaultPool; use function Amp\call; -class ParallelDriverTest extends DriverTest { - protected function execute(callable $cb) { +class ParallelDriverTest extends DriverTest +{ + protected function execute(callable $cb) + { Loop::run(function () use ($cb) { $pool = new DefaultPool; diff --git a/test/ParallelHandleTest.php b/test/ParallelHandleTest.php index 471fa43..05f97b4 100644 --- a/test/ParallelHandleTest.php +++ b/test/ParallelHandleTest.php @@ -7,8 +7,10 @@ use Amp\Loop; use Amp\Parallel\Worker\DefaultPool; use function Amp\call; -class ParallelHandleTest extends AsyncHandleTest { - protected function execute(callable $cb) { +class ParallelHandleTest extends AsyncHandleTest +{ + protected function execute(callable $cb) + { Loop::run(function () use ($cb) { $pool = new DefaultPool; diff --git a/test/UvDriverTest.php b/test/UvDriverTest.php index 47bf566..89621c1 100644 --- a/test/UvDriverTest.php +++ b/test/UvDriverTest.php @@ -6,8 +6,10 @@ use Amp\File; use Amp\Loop; use function Amp\asyncCall; -class UvDriverTest extends DriverTest { - protected function execute(callable $cb) { +class UvDriverTest extends DriverTest +{ + protected function execute(callable $cb) + { if (!\extension_loaded("uv")) { $this->markTestSkipped( "php-uv extension not loaded" @@ -28,7 +30,8 @@ class UvDriverTest extends DriverTest { * * @param \Closure $linkResolver */ - public function testReadlinkError(\Closure $linkResolver) { + public function testReadlinkError(\Closure $linkResolver) + { $this->markTestSkipped('UvDriver Test Skipped: Causes Crash'); } } diff --git a/test/UvHandleTest.php b/test/UvHandleTest.php index bedb3ae..edf4c2c 100644 --- a/test/UvHandleTest.php +++ b/test/UvHandleTest.php @@ -6,8 +6,10 @@ use Amp\File; use Amp\Loop; use function Amp\asyncCall; -class UvHandleTest extends AsyncHandleTest { - protected function execute(callable $cb) { +class UvHandleTest extends AsyncHandleTest +{ + protected function execute(callable $cb) + { if (!\extension_loaded("uv")) { $this->markTestSkipped( "php-uv extension not loaded"