diff --git a/composer.json b/composer.json index a33d35b86..f79962ed3 100644 --- a/composer.json +++ b/composer.json @@ -26,7 +26,7 @@ "ext-fileinfo": "*", "ext-ftp": "*", "microsoft/azure-storage-blob": "^1.1", - "phpunit/phpunit": "^9.5.11", + "phpunit/phpunit": "^9.5.11|^10.0", "phpstan/phpstan": "^0.12.26", "phpseclib/phpseclib": "^3.0.14", "aws/aws-sdk-php": "^3.220.0", @@ -40,7 +40,7 @@ "conflict": { "async-aws/core": "<1.19.0", "async-aws/s3": "<1.14.0", - "symfony/http-client": "<6.3.1", + "symfony/http-client": "<5.2", "guzzlehttp/ringphp": "<1.1.1", "guzzlehttp/guzzle": "<7.0", "aws/aws-sdk-php": "3.209.31 || 3.210.0", diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 1b0996a2a..65347bfa2 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -8,17 +8,14 @@ - - - src/ - - src/ - - - legacy + + + src + + diff --git a/src/AdapterTestUtilities/FilesystemAdapterTestCase.php b/src/AdapterTestUtilities/FilesystemAdapterTestCase.php index 1cf6ab417..4047d4ae7 100644 --- a/src/AdapterTestUtilities/FilesystemAdapterTestCase.php +++ b/src/AdapterTestUtilities/FilesystemAdapterTestCase.php @@ -179,7 +179,7 @@ public function writing_and_reading_files_with_special_path(string $path): void }); } - public function filenameProvider(): Generator + public static function filenameProvider(): Generator { yield "a path with square brackets in filename 1" => ["some/file[name].txt"]; yield "a path with square brackets in filename 2" => ["some/file[0].txt"]; diff --git a/src/AsyncAwsS3/AsyncAwsS3AdapterTest.php b/src/AsyncAwsS3/AsyncAwsS3AdapterTest.php index 3290db2c0..d7e980e1d 100644 --- a/src/AsyncAwsS3/AsyncAwsS3AdapterTest.php +++ b/src/AsyncAwsS3/AsyncAwsS3AdapterTest.php @@ -232,7 +232,7 @@ public function failing_to_retrieve_metadata(Exception $exception, string $gette $adapter->{$getterName}('filename.txt'); } - public function dpFailingMetadataGetters(): iterable + public static function dpFailingMetadataGetters(): iterable { yield "mimeType" => [UnableToRetrieveMetadata::mimeType('filename.txt'), 'mimeType']; yield "lastModified" => [UnableToRetrieveMetadata::lastModified('filename.txt'), 'lastModified']; diff --git a/src/AwsS3V3/AwsS3V3AdapterTest.php b/src/AwsS3V3/AwsS3V3AdapterTest.php index 23ef4e342..ae8db3ce2 100644 --- a/src/AwsS3V3/AwsS3V3AdapterTest.php +++ b/src/AwsS3V3/AwsS3V3AdapterTest.php @@ -241,7 +241,7 @@ public function failing_to_retrieve_metadata(Exception $exception, string $gette $adapter->{$getterName}('filename.txt'); } - public function dpFailingMetadataGetters(): iterable + public static function dpFailingMetadataGetters(): iterable { yield "mimeType" => [UnableToRetrieveMetadata::mimeType('filename.txt'), 'mimeType']; yield "lastModified" => [UnableToRetrieveMetadata::lastModified('filename.txt'), 'lastModified']; @@ -282,7 +282,7 @@ public function streaming_reads_are_not_seekable_and_non_streaming_are(bool $str $this->assertEquals($seekable, $metadata['seekable']); } - public function casesWhereHttpStreamingInfluencesSeekability(): Generator + public static function casesWhereHttpStreamingInfluencesSeekability(): Generator { yield "not streaming reads have seekable stream" => [false, true]; yield "streaming reads have non-seekable stream" => [true, false]; diff --git a/src/FileAttributesTest.php b/src/FileAttributesTest.php index e2b3b9efe..5744f257a 100644 --- a/src/FileAttributesTest.php +++ b/src/FileAttributesTest.php @@ -94,7 +94,7 @@ public function json_transformations(FileAttributes $attributes): void $this->assertEquals($attributes, $newAttributes); } - public function data_provider_for_json_transformation(): Generator + public static function data_provider_for_json_transformation(): Generator { yield [new FileAttributes('path.txt', 1234, Visibility::PRIVATE, $now = time(), 'plain/text', ['key' => 'value'])]; yield [new FileAttributes('another.txt')]; diff --git a/src/FilesystemTest.php b/src/FilesystemTest.php index 580b8a377..e7ae891ed 100644 --- a/src/FilesystemTest.php +++ b/src/FilesystemTest.php @@ -71,7 +71,7 @@ public function trying_to_write_with_an_invalid_stream_arguments($input): void $this->filesystem->writeStream('path.txt', $input); } - public function invalidStreamInput(): Generator + public static function invalidStreamInput(): Generator { $handle = tmpfile(); fclose($handle); @@ -308,7 +308,7 @@ public function protecting_against_path_traversals(callable $scenario): void $scenario($this->filesystem); } - public function scenariosCausingPathTraversal(): Generator + public static function scenariosCausingPathTraversal(): Generator { yield [function (FilesystemOperator $filesystem) { $filesystem->delete('../path.txt'); diff --git a/src/Ftp/FtpAdapter.php b/src/Ftp/FtpAdapter.php index bdabfc781..0127df357 100644 --- a/src/Ftp/FtpAdapter.php +++ b/src/Ftp/FtpAdapter.php @@ -260,7 +260,7 @@ public function setVisibility(string $path, string $visibility): void $mode = $this->visibilityConverter->forFile($visibility); if ( ! @ftp_chmod($this->connection(), $mode, $location)) { - $message = error_get_last()['message']; + $message = error_get_last()['message'] ?? ''; throw UnableToSetVisibility::atLocation($path, $message); } } diff --git a/src/Ftp/FtpAdapterTestCase.php b/src/Ftp/FtpAdapterTestCase.php index e0a14c2f9..2675a40f6 100644 --- a/src/Ftp/FtpAdapterTestCase.php +++ b/src/Ftp/FtpAdapterTestCase.php @@ -118,7 +118,7 @@ public function failing_to_write_a_file(callable $scenario): void }); } - public function scenariosCausingWriteFailure(): Generator + public static function scenariosCausingWriteFailure(): Generator { yield "Not being able to create the parent directory" => [function () { mock_function('ftp_mkdir', false); @@ -153,7 +153,7 @@ public function scenarios_causing_directory_deletion_to_fail(callable $scenario) }); } - public function scenariosCausingDirectoryDeleteFailure(): Generator + public static function scenariosCausingDirectoryDeleteFailure(): Generator { yield "ftp_delete failure" => [function () { mock_function('ftp_delete', false); @@ -195,7 +195,7 @@ public function failing_to_move_because_creating_the_directory_fails(): void }); } - public function scenariosCausingCopyFailure(): Generator + public static function scenariosCausingCopyFailure(): Generator { yield "failing to read" => [function () { mock_function('ftp_fget', false); diff --git a/src/Local/LocalFilesystemAdapterTest.php b/src/Local/LocalFilesystemAdapterTest.php index 0b7cac2ef..8cb26ac92 100644 --- a/src/Local/LocalFilesystemAdapterTest.php +++ b/src/Local/LocalFilesystemAdapterTest.php @@ -724,16 +724,6 @@ protected static function createFilesystemAdapter(): FilesystemAdapter return new LocalFilesystemAdapter(static::ROOT); } - public static function assertFileDoesNotExist(string $filename, string $message = ''): void - { - if (is_callable('parent::assertFileDoesNotExist')) { - // PHPUnit 9+ - parent::assertFileDoesNotExist($filename, $message); - } else { - self::assertFileNotExists($filename, $message); - } - } - /** * @test */ @@ -747,14 +737,4 @@ public function get_checksum_with_specified_algo(): void $this->assertSame('0d5f5c7f', $checksum); } - - public static function assertDirectoryDoesNotExist(string $directory, string $message = ''): void - { - if (is_callable('parent::assertDirectoryDoesNotExist')) { - // PHPUnit 9+ - parent::assertDirectoryDoesNotExist($directory, $message); - } else { - self::assertDirectoryNotExists($directory, $message); - } - } } diff --git a/src/MountManagerTest.php b/src/MountManagerTest.php index fdc73cea9..cde9ebd0c 100644 --- a/src/MountManagerTest.php +++ b/src/MountManagerTest.php @@ -124,7 +124,7 @@ public function failing_a_one_param_method(string $method, FilesystemOperationFa $this->mountManager->{$method}('first://location.txt'); } - public function dpMetadataRetrieverMethods(): iterable + public static function dpMetadataRetrieverMethods(): iterable { yield 'mimeType' => ['mimeType', UnableToRetrieveMetadata::mimeType('location.txt')]; yield 'fileSize' => ['fileSize', UnableToRetrieveMetadata::fileSize('location.txt')]; diff --git a/src/PathPrefixerTest.php b/src/PathPrefixerTest.php index 8ca8401aa..f1bc1b68e 100644 --- a/src/PathPrefixerTest.php +++ b/src/PathPrefixerTest.php @@ -39,7 +39,7 @@ public function an_absolute_root_path_is_supported(string $rootPath, string $sep $this->assertEquals($expectedPath, $prefixedPath); } - public function dpRootPaths(): iterable + public static function dpRootPaths(): iterable { yield "unix-style root path" => ['/', '/', 'path.txt', '/path.txt']; yield "windows-style root path" => ['\\', '\\', 'path.txt', '\\path.txt']; diff --git a/src/ReadOnly/ReadOnlyFilesystemAdapterTest.php b/src/ReadOnly/ReadOnlyFilesystemAdapterTest.php index 8546f61d4..192a1f06a 100644 --- a/src/ReadOnly/ReadOnlyFilesystemAdapterTest.php +++ b/src/ReadOnly/ReadOnlyFilesystemAdapterTest.php @@ -38,7 +38,7 @@ public function can_perform_read_operations(): void $this->assertInstanceOf(FileAttributes::class, $adapter->mimeType('foo/bar.txt')); $this->assertInstanceOf(FileAttributes::class, $adapter->lastModified('foo/bar.txt')); $this->assertInstanceOf(FileAttributes::class, $adapter->fileSize('foo/bar.txt')); - $this->assertCount(1, $adapter->listContents('foo', true)); + $this->assertCount(1, iterator_to_array($adapter->listContents('foo', true))); } /** diff --git a/src/WhitespacePathNormalizerTest.php b/src/WhitespacePathNormalizerTest.php index a0288f795..04e9d77c3 100644 --- a/src/WhitespacePathNormalizerTest.php +++ b/src/WhitespacePathNormalizerTest.php @@ -33,7 +33,7 @@ public function path_normalizing(string $input, string $expected): void /** * @return array> */ - public function pathProvider(): array + public static function pathProvider(): array { return [ ['.', ''], @@ -78,7 +78,7 @@ public function rejecting_funky_whitespace(string $path): void $this->normalizer->normalizePath($path); } - public function dpFunkyWhitespacePaths(): iterable + public static function dpFunkyWhitespacePaths(): iterable { return [["some\0/path.txt"], ["s\x09i.php"]]; } @@ -86,7 +86,7 @@ public function dpFunkyWhitespacePaths(): iterable /** * @return array> */ - public function invalidPathProvider(): array + public static function invalidPathProvider(): array { return [ ['something/../../../hehe'], diff --git a/src/ZipArchive/NoRootPrefixZipArchiveAdapterTest.php b/src/ZipArchive/NoRootPrefixZipArchiveAdapterTest.php index 60acd008b..38fb66b9d 100644 --- a/src/ZipArchive/NoRootPrefixZipArchiveAdapterTest.php +++ b/src/ZipArchive/NoRootPrefixZipArchiveAdapterTest.php @@ -7,7 +7,7 @@ /** * @group zip */ -final class NoRootPrefixZipArchiveAdapterTest extends ZipArchiveAdapterTest +final class NoRootPrefixZipArchiveAdapterTest extends ZipArchiveAdapterTestCase { protected static function getRoot(): string { diff --git a/src/ZipArchive/PrefixedRootZipArchiveAdapterTest.php b/src/ZipArchive/PrefixedRootZipArchiveAdapterTest.php index ec738cc2b..9a9def76f 100644 --- a/src/ZipArchive/PrefixedRootZipArchiveAdapterTest.php +++ b/src/ZipArchive/PrefixedRootZipArchiveAdapterTest.php @@ -7,7 +7,7 @@ /** * @group zip */ -final class PrefixedRootZipArchiveAdapterTest extends ZipArchiveAdapterTest +final class PrefixedRootZipArchiveAdapterTest extends ZipArchiveAdapterTestCase { protected static function getRoot(): string { diff --git a/src/ZipArchive/ZipArchiveAdapterTest.php b/src/ZipArchive/ZipArchiveAdapterTestCase.php similarity index 96% rename from src/ZipArchive/ZipArchiveAdapterTest.php rename to src/ZipArchive/ZipArchiveAdapterTestCase.php index 0663fc2e0..3d9c46a82 100644 --- a/src/ZipArchive/ZipArchiveAdapterTest.php +++ b/src/ZipArchive/ZipArchiveAdapterTestCase.php @@ -22,7 +22,7 @@ /** * @group zip */ -abstract class ZipArchiveAdapterTest extends FilesystemAdapterTestCase +abstract class ZipArchiveAdapterTestCase extends FilesystemAdapterTestCase { private const ARCHIVE = __DIR__ . '/test.zip'; @@ -97,7 +97,7 @@ public function scenarios_that_cause_writing_a_file_to_fail(callable $scenario): }); } - public function scenariosThatCauseWritesToFail(): Generator + public static function scenariosThatCauseWritesToFail(): Generator { yield "writing a file fails when writing" => [function () { static::$archiveProvider->stubbedZipArchive()->failNextWrite(); @@ -172,8 +172,8 @@ public function list_root_directory(): void $this->givenWeHaveAnExistingFile('one/b.txt'); $this->givenWeHaveAnExistingFile('two/a.txt'); - $this->assertCount(6, $this->adapter()->listContents('', true)); - $this->assertCount(3, $this->adapter()->listContents('', false)); + $this->assertCount(6, iterator_to_array($this->adapter()->listContents('', true))); + $this->assertCount(3, iterator_to_array($this->adapter()->listContents('', false))); } /**