From 4b38b6aa1620fafc49d8fc6dfa303fc4e7306175 Mon Sep 17 00:00:00 2001 From: Philipp Date: Thu, 1 Apr 2021 21:19:45 +0200 Subject: [PATCH 1/5] Adapt tests for PhpUnit 7.5 --- tests/legacy/ApiTest.php | 50 ++++++++----------- tests/src/Core/Cache/ArrayCacheTest.php | 1 + tests/src/Core/InstallerTest.php | 3 +- tests/src/Core/Lock/ArrayCacheLockTest.php | 3 +- tests/src/Core/Lock/SemaphoreLockTest.php | 3 +- .../TwoFactor/Factory/TrustedBrowserTest.php | 3 +- .../TwoFactor/Model/TrustedBrowserTest.php | 3 +- tests/src/Util/Logger/ProfilerLoggerTest.php | 2 + tests/src/Util/Logger/SyslogLoggerTest.php | 1 + tests/src/Util/Logger/VoidLoggerTest.php | 2 + 10 files changed, 36 insertions(+), 35 deletions(-) diff --git a/tests/legacy/ApiTest.php b/tests/legacy/ApiTest.php index 265f502f0..89bddf31d 100644 --- a/tests/legacy/ApiTest.php +++ b/tests/legacy/ApiTest.php @@ -22,6 +22,8 @@ require_once __DIR__ . '/../../include/api.php'; * * Functions that use header() need to be tested in a separate process. * @see https://phpunit.de/manual/5.7/en/appendixes.annotations.html#appendixes.annotations.runTestsInSeparateProcesses + * + * @backupGlobals enabled */ class ApiTest extends FixtureTest { @@ -108,10 +110,6 @@ class ApiTest extends FixtureTest 'authenticated' => true, 'uid' => $this->selfUser['id'] ]; - - $_POST = []; - $_GET = []; - $_SERVER = []; } /** @@ -140,7 +138,7 @@ class ApiTest extends FixtureTest * * @return void */ - private function assertOtherUser(array $user) + private function assertOtherUser(array $user = []) { self::assertEquals($this->otherUser['id'], $user['id']); self::assertEquals($this->otherUser['id'], $user['id_str']); @@ -157,10 +155,10 @@ class ApiTest extends FixtureTest * * @return void */ - private function assertStatus(array $status) + private function assertStatus(array $status = []) { - self::assertInternalType('string', $status['text']); - self::assertInternalType('int', $status['id']); + self::assertInternalType('string', $status['text'] ?? ''); + self::assertInternalType('int', $status['id'] ?? ''); // We could probably do more checks here. } @@ -171,7 +169,7 @@ class ApiTest extends FixtureTest * * @return void */ - private function assertList(array $list) + private function assertList(array $list = []) { self::assertInternalType('string', $list['name']); self::assertInternalType('int', $list['id']); @@ -188,7 +186,7 @@ class ApiTest extends FixtureTest * * @return void */ - private function assertXml($result, $root_element) + private function assertXml($result = '', $root_element = '') { self::assertStringStartsWith('', $result); self::assertContains('<' . $root_element, $result); @@ -304,6 +302,7 @@ class ApiTest extends FixtureTest * * @return void * @runInSeparateProcess + * @preserveGlobalState disabled * @expectedException Friendica\Network\HTTPException\UnauthorizedException */ public function testApiLoginWithoutLogin() @@ -316,6 +315,7 @@ class ApiTest extends FixtureTest * * @return void * @runInSeparateProcess + * @preserveGlobalState disabled * @expectedException Friendica\Network\HTTPException\UnauthorizedException */ public function testApiLoginWithBadLogin() @@ -349,6 +349,7 @@ class ApiTest extends FixtureTest * * @return void * @runInSeparateProcess + * @doesNotPerformAssertions */ public function testApiLoginWithCorrectLogin() { @@ -1312,8 +1313,8 @@ class ApiTest extends FixtureTest /** * Test the api_media_upload() function. - * - * @return void + * @runInSeparateProcess + * @preserveGlobalState disabled * @expectedException Friendica\Network\HTTPException\BadRequestException */ public function testApiMediaUpload() @@ -1504,7 +1505,7 @@ class ApiTest extends FixtureTest $result = api_search('json'); foreach ($result['status'] as $status) { self::assertStatus($status); - self::assertContains('reply', $status['text'], null, true); + self::assertContains('reply', $status['text'], '', true); } } @@ -1520,7 +1521,7 @@ class ApiTest extends FixtureTest $result = api_search('json'); foreach ($result['status'] as $status) { self::assertStatus($status); - self::assertContains('reply', $status['text'], null, true); + self::assertContains('reply', $status['text'], '', true); } } @@ -1536,14 +1537,13 @@ class ApiTest extends FixtureTest $result = api_search('json'); foreach ($result['status'] as $status) { self::assertStatus($status); - self::assertContains('reply', $status['text'], null, true); + self::assertContains('reply', $status['text'], '', true); } } /** * Test the api_search() function with an q parameter contains hashtag. - * - * @return void + * @doesNotPerformAssertions */ public function testApiSearchWithHashtag() { @@ -1551,14 +1551,13 @@ class ApiTest extends FixtureTest $result = api_search('json'); foreach ($result['status'] as $status) { self::assertStatus($status); - self::assertContains('#friendica', $status['text'], null, true); + self::assertContains('#friendica', $status['text'], '', true); } } /** * Test the api_search() function with an exclude_replies parameter. - * - * @return void + * @doesNotPerformAssertions */ public function testApiSearchWithExcludeReplies() { @@ -2474,8 +2473,7 @@ class ApiTest extends FixtureTest /** * Test the api_format_items() function. - * - * @return void + * @doesNotPerformAssertions */ public function testApiFormatItems() { @@ -2500,8 +2498,7 @@ class ApiTest extends FixtureTest /** * Test the api_format_items() function with an XML result. - * - * @return void + * @doesNotPerformAssertions */ public function testApiFormatItemsWithXml() { @@ -2617,8 +2614,7 @@ class ApiTest extends FixtureTest /** * Test the api_lists_statuses() function with a list ID. - * - * @return void + * @doesNotPerformAssertions */ public function testApiListsStatusesWithListId() { @@ -3271,8 +3267,6 @@ class ApiTest extends FixtureTest /** * Test the api_fr_photo_create_update() function. - * - * @return void * @expectedException Friendica\Network\HTTPException\BadRequestException */ public function testApiFrPhotoCreateUpdate() diff --git a/tests/src/Core/Cache/ArrayCacheTest.php b/tests/src/Core/Cache/ArrayCacheTest.php index 6ce6d4c1f..2d8d0ff83 100644 --- a/tests/src/Core/Cache/ArrayCacheTest.php +++ b/tests/src/Core/Cache/ArrayCacheTest.php @@ -40,6 +40,7 @@ class ArrayCacheTest extends MemoryCacheTest public function testTTL() { // Array Cache doesn't support TTL + self::markTestSkipped("Array Cache doesn't support TTL"); return true; } } diff --git a/tests/src/Core/InstallerTest.php b/tests/src/Core/InstallerTest.php index 365502e46..b3f91e7d3 100644 --- a/tests/src/Core/InstallerTest.php +++ b/tests/src/Core/InstallerTest.php @@ -463,10 +463,11 @@ class InstallerTest extends MockedTest /** * Test the setup of the config cache for installation + * @doesNotPerformAssertions */ public function testSetUpCache() { - $this->l10nMock->shouldReceive('t')->andReturnUsing(function ($args) { return $args; }); + $this->l10nMock->shouldReceive('t')->andReturnUsing(function ($args) { return $args; })->times(5); $install = new Installer(); $configCache = Mockery::mock(Cache::class); diff --git a/tests/src/Core/Lock/ArrayCacheLockTest.php b/tests/src/Core/Lock/ArrayCacheLockTest.php index 727b9724a..6ddedfa43 100644 --- a/tests/src/Core/Lock/ArrayCacheLockTest.php +++ b/tests/src/Core/Lock/ArrayCacheLockTest.php @@ -33,7 +33,6 @@ class ArrayCacheLockTest extends LockTest public function testLockTTL() { - // ArrayCache doesn't support TTL - return true; + self::markTestSkipped("ArrayCache doesn't support TTL"); } } diff --git a/tests/src/Core/Lock/SemaphoreLockTest.php b/tests/src/Core/Lock/SemaphoreLockTest.php index dc7b9ee41..71273fdc2 100644 --- a/tests/src/Core/Lock/SemaphoreLockTest.php +++ b/tests/src/Core/Lock/SemaphoreLockTest.php @@ -61,8 +61,7 @@ class SemaphoreLockTest extends LockTest public function testLockTTL() { - // Semaphore doesn't work with TTL - return true; + self::markTestSkipped("Semaphore doesn't work with TTL"); } /** diff --git a/tests/src/Security/TwoFactor/Factory/TrustedBrowserTest.php b/tests/src/Security/TwoFactor/Factory/TrustedBrowserTest.php index 5b2b6111c..0a093db5a 100644 --- a/tests/src/Security/TwoFactor/Factory/TrustedBrowserTest.php +++ b/tests/src/Security/TwoFactor/Factory/TrustedBrowserTest.php @@ -3,11 +3,12 @@ namespace Friendica\Test\src\Security\TwoFactor\Factory; use Friendica\Security\TwoFactor\Factory\TrustedBrowser; +use Friendica\Test\MockedTest; use Friendica\Util\DateTimeFormat; use Friendica\Util\Logger\VoidLogger; use Friendica\Util\Strings; -class TrustedBrowserTest extends \PHPUnit_Framework_TestCase +class TrustedBrowserTest extends MockedTest { public function testCreateFromTableRowSuccess() { diff --git a/tests/src/Security/TwoFactor/Model/TrustedBrowserTest.php b/tests/src/Security/TwoFactor/Model/TrustedBrowserTest.php index d89527374..eae7f580f 100644 --- a/tests/src/Security/TwoFactor/Model/TrustedBrowserTest.php +++ b/tests/src/Security/TwoFactor/Model/TrustedBrowserTest.php @@ -3,10 +3,11 @@ namespace Friendica\Test\src\Security\TwoFactor\Model; use Friendica\Security\TwoFactor\Model\TrustedBrowser; +use Friendica\Test\MockedTest; use Friendica\Util\DateTimeFormat; use Friendica\Util\Strings; -class TrustedBrowserTest extends \PHPUnit_Framework_TestCase +class TrustedBrowserTest extends MockedTest { public function test__construct() { diff --git a/tests/src/Util/Logger/ProfilerLoggerTest.php b/tests/src/Util/Logger/ProfilerLoggerTest.php index 81a94a466..9dd82b427 100644 --- a/tests/src/Util/Logger/ProfilerLoggerTest.php +++ b/tests/src/Util/Logger/ProfilerLoggerTest.php @@ -52,6 +52,7 @@ class ProfilerLoggerTest extends MockedTest /** * Test if the profiler is profiling data * @dataProvider dataTests + * @doesNotPerformAssertions */ public function testProfiling($function, $message, array $context) { @@ -64,6 +65,7 @@ class ProfilerLoggerTest extends MockedTest /** * Test the log() function + * @doesNotPerformAssertions */ public function testProfilingLog() { diff --git a/tests/src/Util/Logger/SyslogLoggerTest.php b/tests/src/Util/Logger/SyslogLoggerTest.php index 67c726e25..61c0d874a 100644 --- a/tests/src/Util/Logger/SyslogLoggerTest.php +++ b/tests/src/Util/Logger/SyslogLoggerTest.php @@ -95,6 +95,7 @@ class SyslogLoggerTest extends AbstractLoggerTest /** * Test the close() method + * @doesNotPerformAssertions */ public function testClose() { diff --git a/tests/src/Util/Logger/VoidLoggerTest.php b/tests/src/Util/Logger/VoidLoggerTest.php index bea2bc404..75b2d1a8b 100644 --- a/tests/src/Util/Logger/VoidLoggerTest.php +++ b/tests/src/Util/Logger/VoidLoggerTest.php @@ -32,6 +32,7 @@ class VoidLoggerTest extends MockedTest /** * Test if the profiler is profiling data * @dataProvider dataTests + * @doesNotPerformAssertions */ public function testNormal($function, $message, array $context) { @@ -41,6 +42,7 @@ class VoidLoggerTest extends MockedTest /** * Test the log() function + * @doesNotPerformAssertions */ public function testProfilingLog() { From 8cab5edea94ad6b76a163bb208ccdd60fbcbdedc Mon Sep 17 00:00:00 2001 From: Philipp Date: Thu, 1 Apr 2021 22:16:16 +0200 Subject: [PATCH 2/5] Enable PHP 8.0 Auto-Test --- .github/workflows/php.yml | 9 +++++++-- tests/bootstrap.php | 6 ++++++ tests/legacy/ApiTest.php | 38 +++++++++++++++++++------------------- tests/phpunit-local.xml | 26 -------------------------- tests/phpunit.xml | 27 ++++++++++++++------------- 5 files changed, 46 insertions(+), 60 deletions(-) delete mode 100644 tests/phpunit-local.xml diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml index 91a8b6074..edf31c1a0 100644 --- a/.github/workflows/php.yml +++ b/.github/workflows/php.yml @@ -28,7 +28,7 @@ jobs: strategy: fail-fast: false matrix: - php-versions: ['7.2', '7.3', '7.4'] + php-versions: ['7.2', '7.3', '7.4', '8.0'] steps: - name: Checkout uses: actions/checkout@v2 @@ -62,6 +62,11 @@ jobs: - name: Install dependencies run: composer install --prefer-dist + - name: Install PHPUnit 8 + run: curl -O -L https://phar.phpunit.de/phpunit-8.phar + && chmod +x phpunit-8.phar + && mv phpunit-8.phar /usr/local/bin/phpunit + - name: Copy default Friendica config run: cp config/local-sample.config.php config/local.config.php @@ -83,7 +88,7 @@ jobs: run: vendor/bin/parallel-lint --exclude vendor/ --exclude view/asset/ . - name: Test with phpunit - run: vendor/bin/phpunit --configuration tests/phpunit.xml --coverage-clover clover.xml + run: /usr/local/bin/phpunit --configuration tests/phpunit.xml --coverage-clover clover.xml env: MYSQL_HOST: 127.0.0.1 MYSQL_PORT: ${{ job.services.mariadb.ports[3306] }} diff --git a/tests/bootstrap.php b/tests/bootstrap.php index 7201b6e63..34467b760 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -24,6 +24,12 @@ use Dice\Dice; use Friendica\DI; use PHPUnit\Framework\TestCase; +if (!file_exists(__DIR__ . '/../vendor/autoload.php')) { + die('Vendor path not found. Please execute "bin/composer.phar --no-dev install" on the command line in the web root.'); +} + +require __DIR__ . '/../vendor/autoload.php'; + // Backward compatibility if (!class_exists(TestCase::class)) { class_alias(PHPUnit_Framework_TestCase::class, TestCase::class); diff --git a/tests/legacy/ApiTest.php b/tests/legacy/ApiTest.php index 89bddf31d..bced7eb19 100644 --- a/tests/legacy/ApiTest.php +++ b/tests/legacy/ApiTest.php @@ -300,9 +300,9 @@ class ApiTest extends FixtureTest /** * Test the api_login() function without any login. * - * @return void * @runInSeparateProcess * @preserveGlobalState disabled + * @preserveGlobalState disabled * @expectedException Friendica\Network\HTTPException\UnauthorizedException */ public function testApiLoginWithoutLogin() @@ -313,9 +313,9 @@ class ApiTest extends FixtureTest /** * Test the api_login() function with a bad login. * - * @return void * @runInSeparateProcess * @preserveGlobalState disabled + * @preserveGlobalState disabled * @expectedException Friendica\Network\HTTPException\UnauthorizedException */ public function testApiLoginWithBadLogin() @@ -347,8 +347,8 @@ class ApiTest extends FixtureTest /** * Test the api_login() function with a correct login. * - * @return void * @runInSeparateProcess + * @preserveGlobalState disabled * @doesNotPerformAssertions */ public function testApiLoginWithCorrectLogin() @@ -361,8 +361,8 @@ class ApiTest extends FixtureTest /** * Test the api_login() function with a remote user. * - * @return void * @runInSeparateProcess + * @preserveGlobalState disabled * @expectedException Friendica\Network\HTTPException\UnauthorizedException */ public function testApiLoginWithRemoteUser() @@ -405,8 +405,8 @@ class ApiTest extends FixtureTest /** * Test the api_call() function. * - * @return void * @runInSeparateProcess + * @preserveGlobalState disabled */ public function testApiCall() { @@ -432,8 +432,8 @@ class ApiTest extends FixtureTest /** * Test the api_call() function with the profiled enabled. * - * @return void * @runInSeparateProcess + * @preserveGlobalState disabled */ public function testApiCallWithProfiler() { @@ -469,8 +469,8 @@ class ApiTest extends FixtureTest /** * Test the api_call() function without any result. * - * @return void * @runInSeparateProcess + * @preserveGlobalState disabled */ public function testApiCallWithNoResult() { @@ -495,8 +495,8 @@ class ApiTest extends FixtureTest /** * Test the api_call() function with an unimplemented API. * - * @return void * @runInSeparateProcess + * @preserveGlobalState disabled */ public function testApiCallWithUninplementedApi() { @@ -509,8 +509,8 @@ class ApiTest extends FixtureTest /** * Test the api_call() function with a JSON result. * - * @return void * @runInSeparateProcess + * @preserveGlobalState disabled */ public function testApiCallWithJson() { @@ -535,8 +535,8 @@ class ApiTest extends FixtureTest /** * Test the api_call() function with an XML result. * - * @return void * @runInSeparateProcess + * @preserveGlobalState disabled */ public function testApiCallWithXml() { @@ -561,8 +561,8 @@ class ApiTest extends FixtureTest /** * Test the api_call() function with an RSS result. * - * @return void * @runInSeparateProcess + * @preserveGlobalState disabled */ public function testApiCallWithRss() { @@ -588,8 +588,8 @@ class ApiTest extends FixtureTest /** * Test the api_call() function with an Atom result. * - * @return void * @runInSeparateProcess + * @preserveGlobalState disabled */ public function testApiCallWithAtom() { @@ -615,8 +615,8 @@ class ApiTest extends FixtureTest /** * Test the api_call() function with an unallowed method. * - * @return void * @runInSeparateProcess + * @preserveGlobalState disabled */ public function testApiCallWithWrongMethod() { @@ -636,8 +636,8 @@ class ApiTest extends FixtureTest /** * Test the api_call() function with an unauthorized user. * - * @return void * @runInSeparateProcess + * @preserveGlobalState disabled */ public function testApiCallWithWrongAuth() { @@ -661,8 +661,8 @@ class ApiTest extends FixtureTest /** * Test the api_error() function with a JSON result. * - * @return void * @runInSeparateProcess + * @preserveGlobalState disabled */ public function testApiErrorWithJson() { @@ -675,8 +675,8 @@ class ApiTest extends FixtureTest /** * Test the api_error() function with an XML result. * - * @return void * @runInSeparateProcess + * @preserveGlobalState disabled */ public function testApiErrorWithXml() { @@ -696,8 +696,8 @@ class ApiTest extends FixtureTest /** * Test the api_error() function with an RSS result. * - * @return void * @runInSeparateProcess + * @preserveGlobalState disabled */ public function testApiErrorWithRss() { @@ -717,8 +717,8 @@ class ApiTest extends FixtureTest /** * Test the api_error() function with an Atom result. * - * @return void * @runInSeparateProcess + * @preserveGlobalState disabled */ public function testApiErrorWithAtom() { @@ -860,8 +860,8 @@ class ApiTest extends FixtureTest /** * Test the api_get_user() function with an user that is not allowed to use the API. * - * @return void * @runInSeparateProcess + * @preserveGlobalState disabled */ public function testApiGetUserWithoutApiUser() { diff --git a/tests/phpunit-local.xml b/tests/phpunit-local.xml deleted file mode 100644 index 7bf174aba..000000000 --- a/tests/phpunit-local.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - functional/ - include/ - src/ - ./ - - - - - .. - - config/ - doc/ - images/ - library/ - spec/ - tests/ - view/ - - - - diff --git a/tests/phpunit.xml b/tests/phpunit.xml index 8285a936d..c4197d3e4 100644 --- a/tests/phpunit.xml +++ b/tests/phpunit.xml @@ -1,29 +1,30 @@ + bootstrap="bootstrap.php" + verbose="true" + backupGlobals="false" + timeoutForSmallTests="900" + timeoutForMediumTests="900" + timeoutForLargeTests="900"> functional/ include/ src/ - ./ .. - ../config - ../doc - ../images - ../library - ../spec - ../tests - ../view + config/ + doc/ + images/ + library/ + spec/ + tests/ + view/ + vendor/ - - - From 02e6dff6a0624d0753eaab7b92d8a8417ed1eb6c Mon Sep 17 00:00:00 2001 From: Philipp Date: Thu, 1 Apr 2021 23:04:30 +0200 Subject: [PATCH 3/5] Fix tests - Fix InstallerTest case - Fix native function mocking - Add returntype for Unit-Tests - Fixing ExtendedPDO test troubles - Fix wrong class inheritance path for DatabaseTestTrait.php - Fix SyslogLogger Server Exception for PHP8 - Add user/contact to database.fixture.php - Avoid invalid rollbacks for test setup in PHP8 --- tests/DatabaseTest.php | 14 +++++++ tests/DatabaseTestTrait.php | 16 ++++---- tests/FixtureTest.php | 2 +- tests/MockedTest.php | 2 +- tests/Util/Database/ExtendedPDO.php | 9 +++-- tests/datasets/storage/database.fixture.php | 38 +++++++++++++++++++ tests/functional/DependencyCheckTest.php | 2 +- tests/legacy/ApiTest.php | 2 +- tests/src/App/ModeTest.php | 2 +- tests/src/App/RouterTest.php | 2 +- .../AutomaticInstallationConsoleTest.php | 2 +- tests/src/Console/ConfigConsoleTest.php | 2 +- tests/src/Console/ConsoleTest.php | 2 +- tests/src/Console/LockConsoleTest.php | 2 +- tests/src/Console/ServerBlockConsoleTest.php | 2 +- tests/src/Content/SmiliesTest.php | 2 +- tests/src/Content/Text/BBCodeTest.php | 2 +- tests/src/Content/Text/HTMLTest.php | 2 +- tests/src/Content/Text/MarkdownTest.php | 2 +- tests/src/Core/Cache/APCuCacheTest.php | 4 +- tests/src/Core/Cache/ArrayCacheTest.php | 2 +- tests/src/Core/Cache/CacheTest.php | 2 +- tests/src/Core/Cache/DatabaseCacheTest.php | 9 ++++- tests/src/Core/Cache/MemcacheCacheTest.php | 2 +- tests/src/Core/Cache/MemcachedCacheTest.php | 2 +- tests/src/Core/Cache/MemoryCacheTest.php | 2 +- tests/src/Core/Cache/RedisCacheTest.php | 2 +- tests/src/Core/Config/ConfigTest.php | 2 +- tests/src/Core/InstallerTest.php | 13 ++++++- tests/src/Core/Lock/APCuCacheLockTest.php | 2 +- .../src/Core/Lock/DatabaseLockDriverTest.php | 11 +++++- tests/src/Core/Lock/LockTest.php | 4 +- tests/src/Core/Lock/SemaphoreLockTest.php | 2 +- tests/src/Core/PConfig/PConfigTest.php | 2 +- tests/src/Core/StorageManagerTest.php | 4 +- tests/src/Database/DBATest.php | 2 +- tests/src/Database/DBStructureTest.php | 2 +- tests/src/Model/ProcessTest.php | 5 ++- .../src/Model/Storage/DatabaseStorageTest.php | 11 +++++- .../Model/Storage/FilesystemStorageTest.php | 2 +- tests/src/Model/User/CookieTest.php | 4 +- tests/src/Model/UserTest.php | 2 +- tests/src/Network/CurlResultTest.php | 2 +- .../src/Util/Config/ConfigFileLoaderTest.php | 2 +- tests/src/Util/CryptoTest.php | 9 +++++ tests/src/Util/EMailerTest.php | 4 +- tests/src/Util/Emailer/MailBuilderTest.php | 2 +- .../Util/Emailer/SystemMailBuilderTest.php | 2 +- tests/src/Util/Logger/AbstractLoggerTest.php | 2 +- tests/src/Util/Logger/ProfilerLoggerTest.php | 2 +- tests/src/Util/Logger/StreamLoggerTest.php | 2 +- tests/src/Util/Logger/SyslogLoggerTest.php | 11 ++++-- tests/src/Util/ProfilerTest.php | 2 +- 53 files changed, 171 insertions(+), 69 deletions(-) diff --git a/tests/DatabaseTest.php b/tests/DatabaseTest.php index b69adc4a1..cc13c4bc8 100644 --- a/tests/DatabaseTest.php +++ b/tests/DatabaseTest.php @@ -27,4 +27,18 @@ namespace Friendica\Test; abstract class DatabaseTest extends MockedTest { use DatabaseTestTrait; + + protected function setUp(): void + { + $this->setUpDb(); + + parent::setUp(); + } + + protected function tearDown(): void + { + $this->tearDownDb(); + + parent::tearDown(); + } } diff --git a/tests/DatabaseTestTrait.php b/tests/DatabaseTestTrait.php index f667e05de..7d255c693 100644 --- a/tests/DatabaseTestTrait.php +++ b/tests/DatabaseTestTrait.php @@ -29,23 +29,23 @@ use Friendica\Test\Util\Database\StaticDatabase; */ trait DatabaseTestTrait { - protected function setUp() + protected function setUpDb() { StaticDatabase::statConnect($_SERVER); // Rollbacks every DB usage (in case the test couldn't call tearDown) StaticDatabase::statRollback(); // Start the first, outer transaction StaticDatabase::getGlobConnection()->beginTransaction(); - - parent::setUp(); } - protected function tearDown() + protected function tearDownDb() { - // Rollbacks every DB usage so we don't commit anything into the DB - StaticDatabase::statRollback(); - - parent::tearDown(); + try { + // Rollbacks every DB usage so we don't commit anything into the DB + StaticDatabase::statRollback(); + } catch (\PDOException $exception) { + print_r("Found already rolled back transaction"); + } } /** diff --git a/tests/FixtureTest.php b/tests/FixtureTest.php index 74abfdddb..f30b50878 100644 --- a/tests/FixtureTest.php +++ b/tests/FixtureTest.php @@ -26,7 +26,7 @@ abstract class FixtureTest extends DatabaseTest /** * Create variables used by tests. */ - protected function setUp() + protected function setUp() : void { parent::setUp(); diff --git a/tests/MockedTest.php b/tests/MockedTest.php index 81e43d669..fdbfe219d 100644 --- a/tests/MockedTest.php +++ b/tests/MockedTest.php @@ -28,7 +28,7 @@ use PHPUnit\Framework\TestCase; */ abstract class MockedTest extends TestCase { - protected function tearDown() + protected function tearDown() : void { \Mockery::close(); diff --git a/tests/Util/Database/ExtendedPDO.php b/tests/Util/Database/ExtendedPDO.php index 606d91d0e..6a59d2aee 100644 --- a/tests/Util/Database/ExtendedPDO.php +++ b/tests/Util/Database/ExtendedPDO.php @@ -67,8 +67,9 @@ class ExtendedPDO extends PDO */ public function beginTransaction() { - if($this->_transactionDepth == 0 || !$this->hasSavepoint()) { + if($this->_transactionDepth <= 0 || !$this->hasSavepoint()) { parent::beginTransaction(); + $this->_transactionDepth = $this->_transactionDepth < 0 ? 0 : $this->_transactionDepth; } else { $this->exec("SAVEPOINT LEVEL{$this->_transactionDepth}"); } @@ -85,8 +86,9 @@ class ExtendedPDO extends PDO { $this->_transactionDepth--; - if($this->_transactionDepth == 0 || !$this->hasSavepoint()) { + if($this->_transactionDepth <= 0 || !$this->hasSavepoint()) { parent::commit(); + $this->_transactionDepth = $this->_transactionDepth < 0 ? 0 : $this->_transactionDepth; } else { $this->exec("RELEASE SAVEPOINT LEVEL{$this->_transactionDepth}"); } @@ -100,8 +102,7 @@ class ExtendedPDO extends PDO */ public function rollBack() { - - if ($this->_transactionDepth == 0) { + if ($this->_transactionDepth <= 0) { throw new PDOException('Rollback error : There is no transaction started'); } diff --git a/tests/datasets/storage/database.fixture.php b/tests/datasets/storage/database.fixture.php index 8e2e92ecc..6a73d4ed2 100644 --- a/tests/datasets/storage/database.fixture.php +++ b/tests/datasets/storage/database.fixture.php @@ -19,11 +19,43 @@ * */ +use Friendica\Core\Protocol; +use Friendica\Model\Contact; + return [ + 'user' => [ + [ + 'uid' => 42, + 'username' => 'Test user', + 'nickname' => 'selfcontact', + 'verified' => 1, + 'password' => '$2y$10$DLRNTRmJgKe1cSrFJ5Jb0edCqvXlA9sh/RHdSnfxjbR.04yZRm4Qm', + 'theme' => 'frio', + ], + ], + 'contact' => [ + [ + 'id' => 42, + 'uid' => 42, + 'name' => 'Self contact', + 'nick' => 'selfcontact', + 'self' => 1, + 'nurl' => 'http://localhost/profile/selfcontact', + 'url' => 'http://localhost/profile/selfcontact', + 'about' => 'User used in tests', + 'pending' => 0, + 'blocked' => 0, + 'rel' => Contact::FOLLOWER, + 'network' => Protocol::DFRN, + 'location' => 'DFRN', + ], + ], 'photo' => [ // move from data-attribute to storage backend [ 'id' => 1, + 'uid' => 42, + 'contact-id' => 42, 'backend-class' => null, 'backend-ref' => 'f0c0d0i2', 'data' => 'without class', @@ -31,6 +63,8 @@ return [ // move from storage-backend to maybe filesystem backend, skip at database backend [ 'id' => 2, + 'uid' => 42, + 'contact-id' => 42, 'backend-class' => 'Database', 'backend-ref' => 1, 'data' => '', @@ -38,6 +72,8 @@ return [ // move data if invalid storage [ 'id' => 3, + 'uid' => 42, + 'contact-id' => 42, 'backend-class' => 'invalid!', 'backend-ref' => 'unimported', 'data' => 'invalid data moved', @@ -45,6 +81,8 @@ return [ // @todo Check failing test because of this (never loaded) fixture // [ // 'id' => 4, +// 'uid' => 42, +// 'contact-id' => 42, // 'backend-class' => 'invalid!', // 'backend-ref' => 'unimported', // 'data' => '', diff --git a/tests/functional/DependencyCheckTest.php b/tests/functional/DependencyCheckTest.php index b6367ab91..a7b45cceb 100644 --- a/tests/functional/DependencyCheckTest.php +++ b/tests/functional/DependencyCheckTest.php @@ -45,7 +45,7 @@ class DependencyCheckTest extends TestCase */ private $dice; - protected function setUp() + protected function setUp() : void { parent::setUp(); diff --git a/tests/legacy/ApiTest.php b/tests/legacy/ApiTest.php index bced7eb19..67daca802 100644 --- a/tests/legacy/ApiTest.php +++ b/tests/legacy/ApiTest.php @@ -50,7 +50,7 @@ class ApiTest extends FixtureTest /** * Create variables used by tests. */ - protected function setUp() + protected function setUp() : void { global $API, $called_api; $API = []; diff --git a/tests/src/App/ModeTest.php b/tests/src/App/ModeTest.php index b2a19726d..28393c6c2 100644 --- a/tests/src/App/ModeTest.php +++ b/tests/src/App/ModeTest.php @@ -53,7 +53,7 @@ class ModeTest extends MockedTest */ private $configCacheMock; - protected function setUp() + protected function setUp() : void { parent::setUp(); diff --git a/tests/src/App/RouterTest.php b/tests/src/App/RouterTest.php index 8bd7c467f..a5824c455 100644 --- a/tests/src/App/RouterTest.php +++ b/tests/src/App/RouterTest.php @@ -40,7 +40,7 @@ class RouterTest extends TestCase */ private $cache; - protected function setUp() + protected function setUp() : void { parent::setUp(); diff --git a/tests/src/Console/AutomaticInstallationConsoleTest.php b/tests/src/Console/AutomaticInstallationConsoleTest.php index d0d03a1b2..fcb3289b8 100644 --- a/tests/src/Console/AutomaticInstallationConsoleTest.php +++ b/tests/src/Console/AutomaticInstallationConsoleTest.php @@ -76,7 +76,7 @@ class AutomaticInstallationConsoleTest extends ConsoleTest */ private $dice; - public function setUp() + public function setUp() : void { static::markTestSkipped('Needs class \'Installer\' as constructing argument for console tests'); diff --git a/tests/src/Console/ConfigConsoleTest.php b/tests/src/Console/ConfigConsoleTest.php index 59aa07470..5c670aedf 100644 --- a/tests/src/Console/ConfigConsoleTest.php +++ b/tests/src/Console/ConfigConsoleTest.php @@ -38,7 +38,7 @@ class ConfigConsoleTest extends ConsoleTest /** @var IConfig|LegacyMockInterface|MockInterface */ private $configMock; - protected function setUp() + protected function setUp() : void { parent::setUp(); diff --git a/tests/src/Console/ConsoleTest.php b/tests/src/Console/ConsoleTest.php index 74fc0530b..a4315452d 100644 --- a/tests/src/Console/ConsoleTest.php +++ b/tests/src/Console/ConsoleTest.php @@ -32,7 +32,7 @@ abstract class ConsoleTest extends MockedTest */ protected $consoleArgv = [ 'consoleTest.php' ]; - protected function setUp() + protected function setUp() : void { parent::setUp(); diff --git a/tests/src/Console/LockConsoleTest.php b/tests/src/Console/LockConsoleTest.php index aa7f62835..1f33be100 100644 --- a/tests/src/Console/LockConsoleTest.php +++ b/tests/src/Console/LockConsoleTest.php @@ -40,7 +40,7 @@ class LockConsoleTest extends ConsoleTest */ private $lockMock; - protected function setUp() + protected function setUp() : void { parent::setUp(); diff --git a/tests/src/Console/ServerBlockConsoleTest.php b/tests/src/Console/ServerBlockConsoleTest.php index 9899bf015..e19ebf9cb 100644 --- a/tests/src/Console/ServerBlockConsoleTest.php +++ b/tests/src/Console/ServerBlockConsoleTest.php @@ -42,7 +42,7 @@ class ServerBlockConsoleTest extends ConsoleTest */ private $configMock; - protected function setUp() + protected function setUp() : void { parent::setUp(); diff --git a/tests/src/Content/SmiliesTest.php b/tests/src/Content/SmiliesTest.php index a3633cea5..8d4624298 100644 --- a/tests/src/Content/SmiliesTest.php +++ b/tests/src/Content/SmiliesTest.php @@ -19,7 +19,7 @@ class SmiliesTest extends MockedTest use VFSTrait; use AppMockTrait; - protected function setUp() + protected function setUp(): void { parent::setUp(); $this->setUpVfsDir(); diff --git a/tests/src/Content/Text/BBCodeTest.php b/tests/src/Content/Text/BBCodeTest.php index 0bf281d6f..46f153edc 100644 --- a/tests/src/Content/Text/BBCodeTest.php +++ b/tests/src/Content/Text/BBCodeTest.php @@ -35,7 +35,7 @@ class BBCodeTest extends MockedTest use VFSTrait; use AppMockTrait; - protected function setUp() + protected function setUp(): void { parent::setUp(); $this->setUpVfsDir(); diff --git a/tests/src/Content/Text/HTMLTest.php b/tests/src/Content/Text/HTMLTest.php index 20106d54a..bf5e676a9 100644 --- a/tests/src/Content/Text/HTMLTest.php +++ b/tests/src/Content/Text/HTMLTest.php @@ -33,7 +33,7 @@ class HTMLTest extends MockedTest use VFSTrait; use AppMockTrait; - protected function setUp() + protected function setUp(): void { parent::setUp(); $this->setUpVfsDir(); diff --git a/tests/src/Content/Text/MarkdownTest.php b/tests/src/Content/Text/MarkdownTest.php index 2b23b8da4..5fae494d6 100644 --- a/tests/src/Content/Text/MarkdownTest.php +++ b/tests/src/Content/Text/MarkdownTest.php @@ -32,7 +32,7 @@ class MarkdownTest extends MockedTest use VFSTrait; use AppMockTrait; - protected function setUp() + protected function setUp(): void { parent::setUp(); $this->setUpVfsDir(); diff --git a/tests/src/Core/Cache/APCuCacheTest.php b/tests/src/Core/Cache/APCuCacheTest.php index 4e7815ba1..d8fe59da0 100644 --- a/tests/src/Core/Cache/APCuCacheTest.php +++ b/tests/src/Core/Cache/APCuCacheTest.php @@ -28,7 +28,7 @@ use Friendica\Core\Cache\APCuCache; */ class APCuCacheTest extends MemoryCacheTest { - protected function setUp() + protected function setUp(): void { if (!APCuCache::isAvailable()) { static::markTestSkipped('APCu is not available'); @@ -43,7 +43,7 @@ class APCuCacheTest extends MemoryCacheTest return $this->cache; } - protected function tearDown() + protected function tearDown(): void { $this->cache->clear(false); parent::tearDown(); diff --git a/tests/src/Core/Cache/ArrayCacheTest.php b/tests/src/Core/Cache/ArrayCacheTest.php index 2d8d0ff83..ada1fac65 100644 --- a/tests/src/Core/Cache/ArrayCacheTest.php +++ b/tests/src/Core/Cache/ArrayCacheTest.php @@ -31,7 +31,7 @@ class ArrayCacheTest extends MemoryCacheTest return $this->cache; } - protected function tearDown() + protected function tearDown(): void { $this->cache->clear(false); parent::tearDown(); diff --git a/tests/src/Core/Cache/CacheTest.php b/tests/src/Core/Cache/CacheTest.php index f491e00e3..5e5d1c17d 100644 --- a/tests/src/Core/Cache/CacheTest.php +++ b/tests/src/Core/Cache/CacheTest.php @@ -81,7 +81,7 @@ abstract class CacheTest extends MockedTest abstract protected function getInstance(); - protected function setUp() + protected function setUp(): void { parent::setUp(); diff --git a/tests/src/Core/Cache/DatabaseCacheTest.php b/tests/src/Core/Cache/DatabaseCacheTest.php index cd96b064f..458f3faa2 100644 --- a/tests/src/Core/Cache/DatabaseCacheTest.php +++ b/tests/src/Core/Cache/DatabaseCacheTest.php @@ -36,10 +36,12 @@ class DatabaseCacheTest extends CacheTest use DatabaseTestTrait; use VFSTrait; - protected function setUp() + protected function setUp(): void { $this->setUpVfsDir(); + $this->setUpDb(); + parent::setUp(); } @@ -60,9 +62,12 @@ class DatabaseCacheTest extends CacheTest return $this->cache; } - protected function tearDown() + protected function tearDown(): void { $this->cache->clear(false); + + $this->tearDownDb(); + parent::tearDown(); } } diff --git a/tests/src/Core/Cache/MemcacheCacheTest.php b/tests/src/Core/Cache/MemcacheCacheTest.php index 22b95ad2e..738ff8100 100644 --- a/tests/src/Core/Cache/MemcacheCacheTest.php +++ b/tests/src/Core/Cache/MemcacheCacheTest.php @@ -56,7 +56,7 @@ class MemcacheCacheTest extends MemoryCacheTest return $this->cache; } - protected function tearDown() + protected function tearDown(): void { $this->cache->clear(false); parent::tearDown(); diff --git a/tests/src/Core/Cache/MemcachedCacheTest.php b/tests/src/Core/Cache/MemcachedCacheTest.php index 64aaf58fb..88de1ad41 100644 --- a/tests/src/Core/Cache/MemcachedCacheTest.php +++ b/tests/src/Core/Cache/MemcachedCacheTest.php @@ -55,7 +55,7 @@ class MemcachedCacheTest extends MemoryCacheTest return $this->cache; } - protected function tearDown() + protected function tearDown(): void { $this->cache->clear(false); parent::tearDown(); diff --git a/tests/src/Core/Cache/MemoryCacheTest.php b/tests/src/Core/Cache/MemoryCacheTest.php index b2a88e49d..eca25fa69 100644 --- a/tests/src/Core/Cache/MemoryCacheTest.php +++ b/tests/src/Core/Cache/MemoryCacheTest.php @@ -31,7 +31,7 @@ abstract class MemoryCacheTest extends CacheTest */ protected $instance; - protected function setUp() + protected function setUp(): void { parent::setUp(); diff --git a/tests/src/Core/Cache/RedisCacheTest.php b/tests/src/Core/Cache/RedisCacheTest.php index 5436d58a5..146dca6d9 100644 --- a/tests/src/Core/Cache/RedisCacheTest.php +++ b/tests/src/Core/Cache/RedisCacheTest.php @@ -65,7 +65,7 @@ class RedisCacheTest extends MemoryCacheTest return $this->cache; } - protected function tearDown() + protected function tearDown(): void { $this->cache->clear(false); parent::tearDown(); diff --git a/tests/src/Core/Config/ConfigTest.php b/tests/src/Core/Config/ConfigTest.php index 8d140e1c7..734f6bff7 100644 --- a/tests/src/Core/Config/ConfigTest.php +++ b/tests/src/Core/Config/ConfigTest.php @@ -55,7 +55,7 @@ abstract class ConfigTest extends MockedTest } - protected function setUp() + protected function setUp(): void { parent::setUp(); diff --git a/tests/src/Core/InstallerTest.php b/tests/src/Core/InstallerTest.php index b3f91e7d3..7404e216e 100644 --- a/tests/src/Core/InstallerTest.php +++ b/tests/src/Core/InstallerTest.php @@ -45,7 +45,7 @@ class InstallerTest extends MockedTest */ private $dice; - protected function setUp() + protected function setUp(): void { parent::setUp(); @@ -64,6 +64,15 @@ class InstallerTest extends MockedTest DI::init($this->dice); } + public static function tearDownAfterClass(): void + { + // Reset mocking + global $phpMock; + $phpMock = []; + + parent::tearDownAfterClass(); + } + private function mockL10nT(string $text, $times = null) { $this->l10nMock->shouldReceive('t')->with($text)->andReturn($text)->times($times); @@ -467,7 +476,7 @@ class InstallerTest extends MockedTest */ public function testSetUpCache() { - $this->l10nMock->shouldReceive('t')->andReturnUsing(function ($args) { return $args; })->times(5); + $this->l10nMock->shouldReceive('t')->andReturnUsing(function ($args) { return $args; }); $install = new Installer(); $configCache = Mockery::mock(Cache::class); diff --git a/tests/src/Core/Lock/APCuCacheLockTest.php b/tests/src/Core/Lock/APCuCacheLockTest.php index bbcbfe54a..9f893ab32 100644 --- a/tests/src/Core/Lock/APCuCacheLockTest.php +++ b/tests/src/Core/Lock/APCuCacheLockTest.php @@ -29,7 +29,7 @@ use Friendica\Core\Lock\CacheLock; */ class APCuCacheLockTest extends LockTest { - protected function setUp() + protected function setUp(): void { if (!APCuCache::isAvailable()) { static::markTestSkipped('APCu is not available'); diff --git a/tests/src/Core/Lock/DatabaseLockDriverTest.php b/tests/src/Core/Lock/DatabaseLockDriverTest.php index fa120e03a..bc4a9a63b 100644 --- a/tests/src/Core/Lock/DatabaseLockDriverTest.php +++ b/tests/src/Core/Lock/DatabaseLockDriverTest.php @@ -38,10 +38,12 @@ class DatabaseLockDriverTest extends LockTest protected $pid = 123; - protected function setUp() + protected function setUp(): void { $this->setUpVfsDir(); + $this->setUpDb(); + parent::setUp(); } @@ -60,4 +62,11 @@ class DatabaseLockDriverTest extends LockTest return new DatabaseLock($dba, $this->pid); } + + protected function tearDown(): void + { + $this->tearDownDb(); + + parent::tearDown(); + } } diff --git a/tests/src/Core/Lock/LockTest.php b/tests/src/Core/Lock/LockTest.php index 3b7496915..8fc4926b0 100644 --- a/tests/src/Core/Lock/LockTest.php +++ b/tests/src/Core/Lock/LockTest.php @@ -38,7 +38,7 @@ abstract class LockTest extends MockedTest abstract protected function getInstance(); - protected function setUp() + protected function setUp(): void { parent::setUp(); @@ -46,7 +46,7 @@ abstract class LockTest extends MockedTest $this->instance->releaseAll(true); } - protected function tearDown() + protected function tearDown(): void { $this->instance->releaseAll(true); parent::tearDown(); diff --git a/tests/src/Core/Lock/SemaphoreLockTest.php b/tests/src/Core/Lock/SemaphoreLockTest.php index 71273fdc2..ca5d0af7d 100644 --- a/tests/src/Core/Lock/SemaphoreLockTest.php +++ b/tests/src/Core/Lock/SemaphoreLockTest.php @@ -32,7 +32,7 @@ use Mockery\MockInterface; class SemaphoreLockTest extends LockTest { - protected function setUp() + protected function setUp(): void { /** @var MockInterface|Dice $dice */ $dice = Mockery::mock(Dice::class)->makePartial(); diff --git a/tests/src/Core/PConfig/PConfigTest.php b/tests/src/Core/PConfig/PConfigTest.php index 9b796e2fe..f35aa10d9 100644 --- a/tests/src/Core/PConfig/PConfigTest.php +++ b/tests/src/Core/PConfig/PConfigTest.php @@ -57,7 +57,7 @@ abstract class PConfigTest extends MockedTest } - protected function setUp() + protected function setUp(): void { parent::setUp(); diff --git a/tests/src/Core/StorageManagerTest.php b/tests/src/Core/StorageManagerTest.php index 965eb0555..d2078c7e2 100644 --- a/tests/src/Core/StorageManagerTest.php +++ b/tests/src/Core/StorageManagerTest.php @@ -57,7 +57,7 @@ class StorageManagerTest extends DatabaseTest use VFSTrait; - protected function setUp() + protected function setUp(): void { parent::setUp(); @@ -296,7 +296,7 @@ class StorageManagerTest extends DatabaseTest public function testMoveStorage($name, $assert, $assertName, $userBackend) { if (!$userBackend) { - return; + self::markTestSkipped("No user backend"); } $this->loadFixture(__DIR__ . '/../../datasets/storage/database.fixture.php', $this->dba); diff --git a/tests/src/Database/DBATest.php b/tests/src/Database/DBATest.php index c013dcda8..b5dbf2f2c 100644 --- a/tests/src/Database/DBATest.php +++ b/tests/src/Database/DBATest.php @@ -10,7 +10,7 @@ use Friendica\Test\Util\Database\StaticDatabase; class DBATest extends DatabaseTest { - protected function setUp() + protected function setUp(): void { parent::setUp(); diff --git a/tests/src/Database/DBStructureTest.php b/tests/src/Database/DBStructureTest.php index 03aa34b8c..87535b5a3 100644 --- a/tests/src/Database/DBStructureTest.php +++ b/tests/src/Database/DBStructureTest.php @@ -30,7 +30,7 @@ use Friendica\Test\Util\Database\StaticDatabase; class DBStructureTest extends DatabaseTest { - protected function setUp() + protected function setUp(): void { parent::setUp(); diff --git a/tests/src/Model/ProcessTest.php b/tests/src/Model/ProcessTest.php index fb02f62ff..b6e610238 100644 --- a/tests/src/Model/ProcessTest.php +++ b/tests/src/Model/ProcessTest.php @@ -18,7 +18,7 @@ class ProcessTest extends DatabaseTest /** @var StaticDatabase */ private $dba; - protected function setUp() + protected function setUp(): void { parent::setUp(); @@ -71,6 +71,9 @@ class ProcessTest extends DatabaseTest self::assertEquals([['command' => 'test']], $this->dba->selectToArray('process', ['command'], ['pid' => 1])); } + /** + * @doesNotPerformAssertions + */ public function testWrongDelete() { $process = new Process($this->dba); diff --git a/tests/src/Model/Storage/DatabaseStorageTest.php b/tests/src/Model/Storage/DatabaseStorageTest.php index 1952678e8..45793b47a 100644 --- a/tests/src/Model/Storage/DatabaseStorageTest.php +++ b/tests/src/Model/Storage/DatabaseStorageTest.php @@ -38,10 +38,12 @@ class DatabaseStorageTest extends StorageTest use DatabaseTestTrait; use VFSTrait; - protected function setUp() + protected function setUp(): void { $this->setUpVfsDir(); + $this->setUpDb(); + parent::setUp(); } @@ -68,4 +70,11 @@ class DatabaseStorageTest extends StorageTest { self::assertEmpty($storage->getOptions()); } + + protected function tearDown(): void + { + $this->tearDownDb(); + + parent::tearDown(); + } } diff --git a/tests/src/Model/Storage/FilesystemStorageTest.php b/tests/src/Model/Storage/FilesystemStorageTest.php index 844197da5..6d50e06c4 100644 --- a/tests/src/Model/Storage/FilesystemStorageTest.php +++ b/tests/src/Model/Storage/FilesystemStorageTest.php @@ -39,7 +39,7 @@ class FilesystemStorageTest extends StorageTest /** @var MockInterface|IConfig */ protected $config; - protected function setUp() + protected function setUp(): void { $this->setUpVfsDir(); diff --git a/tests/src/Model/User/CookieTest.php b/tests/src/Model/User/CookieTest.php index 2be1962d4..c9656b84f 100644 --- a/tests/src/Model/User/CookieTest.php +++ b/tests/src/Model/User/CookieTest.php @@ -35,7 +35,7 @@ class CookieTest extends MockedTest /** @var MockInterface|BaseURL */ private $baseUrl; - protected function setUp() + protected function setUp(): void { StaticCookie::clearStatic(); @@ -45,7 +45,7 @@ class CookieTest extends MockedTest $this->baseUrl = \Mockery::mock(BaseURL::class); } - protected function tearDown() + protected function tearDown(): void { StaticCookie::clearStatic(); diff --git a/tests/src/Model/UserTest.php b/tests/src/Model/UserTest.php index d754adde7..8f8b2c3d7 100644 --- a/tests/src/Model/UserTest.php +++ b/tests/src/Model/UserTest.php @@ -37,7 +37,7 @@ class UserTest extends MockedTest private $child; private $manage; - protected function setUp() + protected function setUp(): void { parent::setUp(); diff --git a/tests/src/Network/CurlResultTest.php b/tests/src/Network/CurlResultTest.php index 47bec3e68..090479642 100644 --- a/tests/src/Network/CurlResultTest.php +++ b/tests/src/Network/CurlResultTest.php @@ -31,7 +31,7 @@ use Psr\Log\NullLogger; class CurlResultTest extends TestCase { - protected function setUp() + protected function setUp(): void { parent::setUp(); diff --git a/tests/src/Util/Config/ConfigFileLoaderTest.php b/tests/src/Util/Config/ConfigFileLoaderTest.php index d19745049..781e1415f 100644 --- a/tests/src/Util/Config/ConfigFileLoaderTest.php +++ b/tests/src/Util/Config/ConfigFileLoaderTest.php @@ -31,7 +31,7 @@ class ConfigFileLoaderTest extends MockedTest { use VFSTrait; - protected function setUp() + protected function setUp(): void { parent::setUp(); diff --git a/tests/src/Util/CryptoTest.php b/tests/src/Util/CryptoTest.php index c9263ffcc..16770ff64 100644 --- a/tests/src/Util/CryptoTest.php +++ b/tests/src/Util/CryptoTest.php @@ -29,6 +29,15 @@ use PHPUnit\Framework\TestCase; class CryptoTest extends TestCase { + public static function tearDownAfterClass(): void + { + // Reset mocking + global $phpMock; + $phpMock = []; + + parent::tearDownAfterClass(); + } + /** * Replaces random_int results with given mocks * diff --git a/tests/src/Util/EMailerTest.php b/tests/src/Util/EMailerTest.php index 523d3de12..3b1c3cc1f 100644 --- a/tests/src/Util/EMailerTest.php +++ b/tests/src/Util/EMailerTest.php @@ -35,7 +35,7 @@ class EMailerTest extends MockedTest /** @var BaseURL|MockInterface */ private $baseUrl; - protected function setUp() + protected function setUp(): void { parent::setUp(); @@ -53,7 +53,7 @@ class EMailerTest extends MockedTest $this->baseUrl->shouldReceive('get')->andReturn('http://friendica.local'); } - protected function tearDown() + protected function tearDown(): void { EmailerSpy::$MAIL_DATA = []; diff --git a/tests/src/Util/Emailer/MailBuilderTest.php b/tests/src/Util/Emailer/MailBuilderTest.php index e26092889..933203d15 100644 --- a/tests/src/Util/Emailer/MailBuilderTest.php +++ b/tests/src/Util/Emailer/MailBuilderTest.php @@ -51,7 +51,7 @@ class MailBuilderTest extends MockedTest /** @var string */ private $defaultHeaders; - protected function setUp() + protected function setUp(): void { parent::setUp(); diff --git a/tests/src/Util/Emailer/SystemMailBuilderTest.php b/tests/src/Util/Emailer/SystemMailBuilderTest.php index 4ee81a7c9..87b51030f 100644 --- a/tests/src/Util/Emailer/SystemMailBuilderTest.php +++ b/tests/src/Util/Emailer/SystemMailBuilderTest.php @@ -41,7 +41,7 @@ class SystemMailBuilderTest extends MockedTest /** @var BaseURL */ private $baseUrl; - protected function setUp() + protected function setUp(): void { parent::setUp(); diff --git a/tests/src/Util/Logger/AbstractLoggerTest.php b/tests/src/Util/Logger/AbstractLoggerTest.php index 5c87d1cf4..44e210b9c 100644 --- a/tests/src/Util/Logger/AbstractLoggerTest.php +++ b/tests/src/Util/Logger/AbstractLoggerTest.php @@ -58,7 +58,7 @@ abstract class AbstractLoggerTest extends MockedTest */ abstract protected function getInstance($level = LogLevel::DEBUG); - protected function setUp() + protected function setUp(): void { parent::setUp(); diff --git a/tests/src/Util/Logger/ProfilerLoggerTest.php b/tests/src/Util/Logger/ProfilerLoggerTest.php index 9dd82b427..7719292b0 100644 --- a/tests/src/Util/Logger/ProfilerLoggerTest.php +++ b/tests/src/Util/Logger/ProfilerLoggerTest.php @@ -41,7 +41,7 @@ class ProfilerLoggerTest extends MockedTest */ private $profiler; - protected function setUp() + protected function setUp(): void { parent::setUp(); diff --git a/tests/src/Util/Logger/StreamLoggerTest.php b/tests/src/Util/Logger/StreamLoggerTest.php index d0cf87e97..7a3315e7e 100644 --- a/tests/src/Util/Logger/StreamLoggerTest.php +++ b/tests/src/Util/Logger/StreamLoggerTest.php @@ -42,7 +42,7 @@ class StreamLoggerTest extends AbstractLoggerTest */ private $fileSystem; - protected function setUp() + protected function setUp(): void { parent::setUp(); diff --git a/tests/src/Util/Logger/SyslogLoggerTest.php b/tests/src/Util/Logger/SyslogLoggerTest.php index 61c0d874a..9408495e7 100644 --- a/tests/src/Util/Logger/SyslogLoggerTest.php +++ b/tests/src/Util/Logger/SyslogLoggerTest.php @@ -31,7 +31,7 @@ class SyslogLoggerTest extends AbstractLoggerTest */ private $logger; - protected function setUp() + protected function setUp(): void { parent::setUp(); @@ -86,8 +86,13 @@ class SyslogLoggerTest extends AbstractLoggerTest */ public function testServerException() { - $this->expectException(\UnexpectedValueException::class); - $this->expectExceptionMessageRegExp("/Can\'t open syslog for ident \".*\" and facility \".*\": .* /"); + if (PHP_MAJOR_VERSION < 8) { + $this->expectException(\UnexpectedValueException::class); + $this->expectExceptionMessageRegExp("/Can\'t open syslog for ident \".*\" and facility \".*\": .* /"); + } else { + $this->expectException(\TypeError::class); + $this->expectExceptionMessage("openlog(): Argument #3 (\$facility) must be of type int, string given"); + } $logger = new SyslogLoggerWrapper('test', $this->introspection, LogLevel::DEBUG, null, 'a string'); $logger->emergency('not working'); diff --git a/tests/src/Util/ProfilerTest.php b/tests/src/Util/ProfilerTest.php index b0176f0fd..da0546d1b 100644 --- a/tests/src/Util/ProfilerTest.php +++ b/tests/src/Util/ProfilerTest.php @@ -35,7 +35,7 @@ class ProfilerTest extends MockedTest */ private $logger; - protected function setUp() + protected function setUp(): void { parent::setUp(); From f6093fb869874fee9dd325b027b4927bbb0b0701 Mon Sep 17 00:00:00 2001 From: Philipp Date: Mon, 5 Apr 2021 11:38:07 +0200 Subject: [PATCH 4/5] Remove 7.2 PHP Unit-Test support --- .github/workflows/php.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml index edf31c1a0..02d39c706 100644 --- a/.github/workflows/php.yml +++ b/.github/workflows/php.yml @@ -28,7 +28,7 @@ jobs: strategy: fail-fast: false matrix: - php-versions: ['7.2', '7.3', '7.4', '8.0'] + php-versions: ['7.3', '7.4', '8.0'] steps: - name: Checkout uses: actions/checkout@v2 From 7b7322a90ac9c68cd0ed9b4bac3f258f3d394ed4 Mon Sep 17 00:00:00 2001 From: Philipp Date: Mon, 5 Apr 2021 12:33:56 +0200 Subject: [PATCH 5/5] Remove PHPUnit dependency & create shell-script with description for it --- .github/workflows/php.yml | 8 +- .gitignore | 3 + bin/dev/setup-phpunit.sh | 13 + composer.json | 9 +- composer.lock | 1449 +------------------------------------ tests/README.md | 13 + 6 files changed, 36 insertions(+), 1459 deletions(-) create mode 100755 bin/dev/setup-phpunit.sh create mode 100644 tests/README.md diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml index 02d39c706..0a6341a90 100644 --- a/.github/workflows/php.yml +++ b/.github/workflows/php.yml @@ -62,10 +62,8 @@ jobs: - name: Install dependencies run: composer install --prefer-dist - - name: Install PHPUnit 8 - run: curl -O -L https://phar.phpunit.de/phpunit-8.phar - && chmod +x phpunit-8.phar - && mv phpunit-8.phar /usr/local/bin/phpunit + - name: Setup PHPUnit 8 + run: bin/dev/setup-phpunit.sh - name: Copy default Friendica config run: cp config/local-sample.config.php config/local.config.php @@ -88,7 +86,7 @@ jobs: run: vendor/bin/parallel-lint --exclude vendor/ --exclude view/asset/ . - name: Test with phpunit - run: /usr/local/bin/phpunit --configuration tests/phpunit.xml --coverage-clover clover.xml + run: $(git rev-parse --show-toplevel)/bin/phpunit --configuration tests/phpunit.xml --coverage-clover clover.xml env: MYSQL_HOST: 127.0.0.1 MYSQL_PORT: ${{ job.services.mariadb.ports[3306] }} diff --git a/.gitignore b/.gitignore index 3250fb076..f3fef04c6 100644 --- a/.gitignore +++ b/.gitignore @@ -79,3 +79,6 @@ venv/ #Ignore log folder /log + +#Ignore temporary installed phpunit +/bin/phpunit diff --git a/bin/dev/setup-phpunit.sh b/bin/dev/setup-phpunit.sh new file mode 100755 index 000000000..b3884d3b7 --- /dev/null +++ b/bin/dev/setup-phpunit.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +PHPUNIT="$(git rev-parse --show-toplevel)/bin/phpunit" + +if ! [ -x "$PHPUNIT" ]; then + echo "Install PHPUnit 8" + cd /tmp/ + curl -s -O -L https://phar.phpunit.de/phpunit-8.phar + chmod +x phpunit-8.phar + mv phpunit-8.phar $PHPUNIT +fi + +echo "Using $PHPUNIT $($PHPUNIT --version)" diff --git a/composer.json b/composer.json index ae4ebf159..5d6c71ee3 100644 --- a/composer.json +++ b/composer.json @@ -124,12 +124,9 @@ ] }, "require-dev": { - "phpdocumentor/reflection-docblock": "^3.0.2", - "phpunit/php-token-stream": "^1.4.2", - "mikey179/vfsstream": "^1.6", - "mockery/mockery": "^1.2", - "johnkary/phpunit-speedtrap": "1.1", - "php-parallel-lint/php-parallel-lint": "^1.2" + "php-parallel-lint/php-parallel-lint": "^1.2", + "mockery/mockery": "^1.3", + "mikey179/vfsstream": "^1.6" }, "scripts": { "test": "phpunit" diff --git a/composer.lock b/composer.lock index a51cfcd9c..f7c709688 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "c66de8307eed717b4e23fcf386aa17ef", + "content-hash": "355e17099c031793ea039e702acbb0d7", "packages": [ { "name": "asika/simple-console", @@ -3821,60 +3821,6 @@ } ], "packages-dev": [ - { - "name": "doctrine/instantiator", - "version": "1.0.5", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", - "shasum": "" - }, - "require": { - "php": ">=5.3,<8.0-DEV" - }, - "require-dev": { - "athletic/athletic": "~0.1.8", - "ext-pdo": "*", - "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://github.com/doctrine/instantiator", - "keywords": [ - "constructor", - "instantiate" - ], - "time": "2015-06-14T21:17:01+00:00" - }, { "name": "hamcrest/hamcrest-php", "version": "v2.0.1", @@ -3922,54 +3868,6 @@ ], "time": "2020-07-09T08:09:16+00:00" }, - { - "name": "johnkary/phpunit-speedtrap", - "version": "v1.1.0", - "source": { - "type": "git", - "url": "https://github.com/johnkary/phpunit-speedtrap.git", - "reference": "f7cfe17c5a7076ed0ccca5450fe3bb981ec56361" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/johnkary/phpunit-speedtrap/zipball/f7cfe17c5a7076ed0ccca5450fe3bb981ec56361", - "reference": "f7cfe17c5a7076ed0ccca5450fe3bb981ec56361", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "phpunit/phpunit": ">=4.7,<6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "autoload": { - "psr-0": { - "JohnKary": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "John Kary", - "email": "john@johnkary.net" - } - ], - "description": "Find slow tests in your PHPUnit test suite", - "homepage": "https://github.com/johnkary/phpunit-speedtrap", - "keywords": [ - "phpunit", - "profile", - "slow" - ], - "time": "2017-03-25T17:14:26+00:00" - }, { "name": "mikey179/vfsstream", "version": "v1.6.8", @@ -4081,51 +3979,6 @@ ], "time": "2021-02-24T09:51:00+00:00" }, - { - "name": "myclabs/deep-copy", - "version": "1.7.0", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", - "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0" - }, - "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^4.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, - "files": [ - "src/DeepCopy/deep_copy.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "time": "2017-10-19T19:58:43+00:00" - }, { "name": "php-parallel-lint/php-parallel-lint", "version": "v1.2.0", @@ -4178,1306 +4031,6 @@ "description": "This tool check syntax of PHP files about 20x faster than serial check.", "homepage": "https://github.com/php-parallel-lint/PHP-Parallel-Lint", "time": "2020-04-04T12:18:32+00:00" - }, - { - "name": "phpdocumentor/reflection-common", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", - "shasum": "" - }, - "require": { - "php": ">=5.5" - }, - "require-dev": { - "phpunit/phpunit": "^4.6" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "time": "2017-09-11T18:02:19+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "3.3.2", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bf329f6c1aadea3299f08ee804682b7c45b326a2", - "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0", - "phpdocumentor/reflection-common": "^1.0.0", - "phpdocumentor/type-resolver": "^0.4.0", - "webmozart/assert": "^1.0" - }, - "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^4.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2017-11-10T14:09:06+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "0.4.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", - "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", - "shasum": "" - }, - "require": { - "php": "^5.5 || ^7.0", - "phpdocumentor/reflection-common": "^1.0" - }, - "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^5.2||^4.8.24" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "time": "2017-07-14T14:27:02+00:00" - }, - { - "name": "phpspec/prophecy", - "version": "v1.10.3", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "451c3cd1418cf640de218914901e51b064abb093" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093", - "reference": "451c3cd1418cf640de218914901e51b064abb093", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.0.2", - "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", - "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0", - "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0" - }, - "require-dev": { - "phpspec/phpspec": "^2.5 || ^3.2", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10.x-dev" - } - }, - "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "time": "2020-03-05T15:02:03+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "4.0.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ef7b2f56815df854e66ceaee8ebe9393ae36a40d", - "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-xmlwriter": "*", - "php": "^5.6 || ^7.0", - "phpunit/php-file-iterator": "^1.3", - "phpunit/php-text-template": "^1.2", - "phpunit/php-token-stream": "^1.4.2 || ^2.0", - "sebastian/code-unit-reverse-lookup": "^1.0", - "sebastian/environment": "^1.3.2 || ^2.0", - "sebastian/version": "^1.0 || ^2.0" - }, - "require-dev": { - "ext-xdebug": "^2.1.4", - "phpunit/phpunit": "^5.7" - }, - "suggest": { - "ext-xdebug": "^2.5.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "time": "2017-04-02T07:44:40+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "1.4.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", - "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "time": "2017-11-27T13:52:08+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "time": "2015-06-21T13:50:34+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "1.0.9", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "time": "2017-02-26T11:10:40+00:00" - }, - { - "name": "phpunit/php-token-stream", - "version": "1.4.12", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/1ce90ba27c42e4e44e6d8458241466380b51fa16", - "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", - "keywords": [ - "tokenizer" - ], - "abandoned": true, - "time": "2017-12-04T08:55:13+00:00" - }, - { - "name": "phpunit/phpunit", - "version": "5.7.27", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c", - "reference": "b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "myclabs/deep-copy": "~1.3", - "php": "^5.6 || ^7.0", - "phpspec/prophecy": "^1.6.2", - "phpunit/php-code-coverage": "^4.0.4", - "phpunit/php-file-iterator": "~1.4", - "phpunit/php-text-template": "~1.2", - "phpunit/php-timer": "^1.0.6", - "phpunit/phpunit-mock-objects": "^3.2", - "sebastian/comparator": "^1.2.4", - "sebastian/diff": "^1.4.3", - "sebastian/environment": "^1.3.4 || ^2.0", - "sebastian/exporter": "~2.0", - "sebastian/global-state": "^1.1", - "sebastian/object-enumerator": "~2.0", - "sebastian/resource-operations": "~1.0", - "sebastian/version": "^1.0.6|^2.0.1", - "symfony/yaml": "~2.1|~3.0|~4.0" - }, - "conflict": { - "phpdocumentor/reflection-docblock": "3.0.2" - }, - "require-dev": { - "ext-pdo": "*" - }, - "suggest": { - "ext-xdebug": "*", - "phpunit/php-invoker": "~1.1" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.7.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "time": "2018-02-01T05:50:59+00:00" - }, - { - "name": "phpunit/phpunit-mock-objects", - "version": "3.4.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "a23b761686d50a560cc56233b9ecf49597cc9118" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/a23b761686d50a560cc56233b9ecf49597cc9118", - "reference": "a23b761686d50a560cc56233b9ecf49597cc9118", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.0.2", - "php": "^5.6 || ^7.0", - "phpunit/php-text-template": "^1.2", - "sebastian/exporter": "^1.2 || ^2.0" - }, - "conflict": { - "phpunit/phpunit": "<5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.4" - }, - "suggest": { - "ext-soap": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Mock Object library for PHPUnit", - "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", - "keywords": [ - "mock", - "xunit" - ], - "abandoned": true, - "time": "2017-06-30T09:13:00+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/1de8cd5c010cb153fcd68b8d0f64606f523f7619", - "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "phpunit/phpunit": "^8.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-30T08:15:22+00:00" - }, - { - "name": "sebastian/comparator", - "version": "1.2.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", - "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "sebastian/diff": "~1.2", - "sebastian/exporter": "~1.2 || ~2.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "http://www.github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "time": "2017-01-29T09:50:25+00:00" - }, - { - "name": "sebastian/diff", - "version": "1.4.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", - "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff" - ], - "time": "2017-05-22T07:24:03+00:00" - }, - { - "name": "sebastian/environment", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5795ffe5dc5b02460c3e34222fee8cbe245d8fac", - "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "time": "2016-11-26T07:53:53+00:00" - }, - { - "name": "sebastian/exporter", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", - "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "sebastian/recursion-context": "~2.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "time": "2016-11-19T08:54:04+00:00" - }, - { - "name": "sebastian/global-state", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", - "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.2" - }, - "suggest": { - "ext-uopz": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "time": "2015-10-12T03:26:01+00:00" - }, - { - "name": "sebastian/object-enumerator", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1311872ac850040a79c3c058bea3e22d0f09cbb7", - "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "sebastian/recursion-context": "~2.0" - }, - "require-dev": { - "phpunit/phpunit": "~5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "time": "2017-02-18T15:18:39+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/2c3ba150cbec723aa057506e73a8d33bdb286c9a", - "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2016-11-19T07:33:16+00:00" - }, - { - "name": "sebastian/resource-operations", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", - "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", - "shasum": "" - }, - "require": { - "php": ">=5.6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "time": "2015-07-28T20:34:47+00:00" - }, - { - "name": "sebastian/version", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "time": "2016-10-03T07:35:21+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.19.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "aed596913b70fae57be53d86faa2e9ef85a2297b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/aed596913b70fae57be53d86faa2e9ef85a2297b", - "reference": "aed596913b70fae57be53d86faa2e9ef85a2297b", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.19-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-23T09:01:57+00:00" - }, - { - "name": "symfony/yaml", - "version": "v3.3.6", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "ddc23324e6cfe066f3dd34a37ff494fa80b617ed" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/ddc23324e6cfe066f3dd34a37ff494fa80b617ed", - "reference": "ddc23324e6cfe066f3dd34a37ff494fa80b617ed", - "shasum": "" - }, - "require": { - "php": ">=5.5.9" - }, - "require-dev": { - "symfony/console": "~2.8|~3.0" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.3-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Yaml Component", - "homepage": "https://symfony.com", - "time": "2017-07-23T12:43:26+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.9.1", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0 || ^8.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<3.9.1" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^7.5.13" - }, - "type": "library", - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "time": "2020-07-08T17:02:28+00:00" } ], "aliases": [], diff --git a/tests/README.md b/tests/README.md new file mode 100644 index 000000000..2d515ce45 --- /dev/null +++ b/tests/README.md @@ -0,0 +1,13 @@ +# Using the Friendica tests + +## Install PHPUnit + +Please use [setup-phpunit.sh](https://github.com/friendica/friendica/bin/dev/setup-phpunit.sh) to install the necessary PHPUnit version. +It will temporarily install the `phpunit` phar file into the `bin/` subdirectory + + +Currently, Friendica uses PHPUnit 8. + +## Supported PHP versions of these tests + +The Unit-Tests of Friendica requires at least PHP 7.2.