aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--.htaccess4
-rw-r--r--.travis.yml8
-rw-r--r--application/api/ApiMiddleware.php10
-rw-r--r--application/config/ConfigJson.php2
-rw-r--r--composer.json5
-rw-r--r--composer.lock805
-rw-r--r--docker-compose.yml2
-rw-r--r--tests/ApplicationUtilsTest.php8
-rw-r--r--tests/FileUtilsTest.php2
-rw-r--r--tests/HistoryTest.php3
-rw-r--r--tests/LanguagesTest.php2
-rw-r--r--tests/PluginManagerTest.php7
-rw-r--r--tests/TestCase.php77
-rw-r--r--tests/ThumbnailerTest.php1
-rw-r--r--tests/TimeZoneTest.php2
-rw-r--r--tests/UtilsTest.php2
-rw-r--r--tests/api/ApiMiddlewareTest.php61
-rw-r--r--tests/api/ApiUtilsTest.php2
-rw-r--r--tests/api/controllers/history/HistoryTest.php2
-rw-r--r--tests/api/controllers/info/InfoTest.php2
-rw-r--r--tests/api/controllers/links/DeleteLinkTest.php2
-rw-r--r--tests/api/controllers/links/GetLinkIdTest.php2
-rw-r--r--tests/api/controllers/links/GetLinksTest.php2
-rw-r--r--tests/api/controllers/links/PostLinkTest.php2
-rw-r--r--tests/api/controllers/links/PutLinkTest.php2
-rw-r--r--tests/api/controllers/tags/DeleteTagTest.php2
-rw-r--r--tests/api/controllers/tags/GetTagNameTest.php2
-rw-r--r--tests/api/controllers/tags/GetTagsTest.php2
-rw-r--r--tests/api/controllers/tags/PutTagTest.php2
-rw-r--r--tests/bookmark/BookmarkArrayTest.php5
-rw-r--r--tests/bookmark/BookmarkFileServiceTest.php7
-rw-r--r--tests/bookmark/BookmarkFilterTest.php6
-rw-r--r--tests/bookmark/BookmarkInitializerTest.php2
-rw-r--r--tests/bookmark/BookmarkTest.php12
-rw-r--r--tests/bookmark/LinkUtilsTest.php22
-rw-r--r--tests/bootstrap.php1
-rw-r--r--tests/config/ConfigJsonTest.php15
-rw-r--r--tests/config/ConfigManagerTest.php2
-rw-r--r--tests/config/ConfigPhpTest.php2
-rw-r--r--tests/config/ConfigPluginTest.php2
-rw-r--r--tests/container/ContainerBuilderTest.php2
-rw-r--r--tests/feed/CachedPageTest.php2
-rw-r--r--tests/feed/FeedBuilderTest.php18
-rw-r--r--tests/formatter/BookmarkDefaultFormatterTest.php2
-rw-r--r--tests/formatter/BookmarkMarkdownFormatterTest.php2
-rw-r--r--tests/formatter/BookmarkRawFormatterTest.php2
-rw-r--r--tests/formatter/FormatterFactoryTest.php2
-rw-r--r--tests/front/ShaarliAdminMiddlewareTest.php2
-rw-r--r--tests/front/ShaarliMiddlewareTest.php2
-rw-r--r--tests/front/controller/admin/ConfigureControllerTest.php2
-rw-r--r--tests/front/controller/admin/ExportControllerTest.php2
-rw-r--r--tests/front/controller/admin/ImportControllerTest.php2
-rw-r--r--tests/front/controller/admin/LogoutControllerTest.php3
-rw-r--r--tests/front/controller/admin/ManageShaareControllerTest/AddShaareTest.php2
-rw-r--r--tests/front/controller/admin/ManageShaareControllerTest/ChangeVisibilityBookmarkTest.php2
-rw-r--r--tests/front/controller/admin/ManageShaareControllerTest/DeleteBookmarkTest.php2
-rw-r--r--tests/front/controller/admin/ManageShaareControllerTest/DisplayCreateFormTest.php12
-rw-r--r--tests/front/controller/admin/ManageShaareControllerTest/DisplayEditFormTest.php2
-rw-r--r--tests/front/controller/admin/ManageShaareControllerTest/PinBookmarkTest.php2
-rw-r--r--tests/front/controller/admin/ManageShaareControllerTest/SaveBookmarkTest.php40
-rw-r--r--tests/front/controller/admin/ManageTagControllerTest.php2
-rw-r--r--tests/front/controller/admin/PasswordControllerTest.php2
-rw-r--r--tests/front/controller/admin/PluginsControllerTest.php2
-rw-r--r--tests/front/controller/admin/SessionFilterControllerTest.php2
-rw-r--r--tests/front/controller/admin/ShaarliAdminControllerTest.php2
-rw-r--r--tests/front/controller/admin/ThumbnailsControllerTest.php2
-rw-r--r--tests/front/controller/admin/TokenControllerTest.php2
-rw-r--r--tests/front/controller/admin/ToolsControllerTest.php2
-rw-r--r--tests/front/controller/visitor/BookmarkListControllerTest.php2
-rw-r--r--tests/front/controller/visitor/DailyControllerTest.php48
-rw-r--r--tests/front/controller/visitor/ErrorControllerTest.php2
-rw-r--r--tests/front/controller/visitor/ErrorNotFoundControllerTest.php2
-rw-r--r--tests/front/controller/visitor/FeedControllerTest.php38
-rw-r--r--tests/front/controller/visitor/FrontControllerMockHelper.php3
-rw-r--r--tests/front/controller/visitor/InstallControllerTest.php2
-rw-r--r--tests/front/controller/visitor/LoginControllerTest.php2
-rw-r--r--tests/front/controller/visitor/OpenSearchControllerTest.php2
-rw-r--r--tests/front/controller/visitor/PictureWallControllerTest.php18
-rw-r--r--tests/front/controller/visitor/PublicSessionFilterControllerTest.php2
-rw-r--r--tests/front/controller/visitor/ShaarliVisitorControllerTest.php2
-rw-r--r--tests/front/controller/visitor/TagCloudControllerTest.php74
-rw-r--r--tests/front/controller/visitor/TagControllerTest.php2
-rw-r--r--tests/http/HttpUtils/ClientIpIdTest.php2
-rw-r--r--tests/http/HttpUtils/GetHttpUrlTest.php2
-rw-r--r--tests/http/HttpUtils/GetIpAdressFromProxyTest.php2
-rw-r--r--tests/http/HttpUtils/IndexUrlTest.php2
-rw-r--r--tests/http/HttpUtils/IndexUrlTestWithConstant.php2
-rw-r--r--tests/http/HttpUtils/IsHttpsTest.php2
-rw-r--r--tests/http/HttpUtils/PageUrlTest.php2
-rw-r--r--tests/http/HttpUtils/ServerUrlTest.php2
-rw-r--r--tests/http/UrlTest.php2
-rw-r--r--tests/http/UrlUtils/CleanupUrlTest.php2
-rw-r--r--tests/http/UrlUtils/GetUrlSchemeTest.php2
-rw-r--r--tests/http/UrlUtils/UnparseUrlTest.php2
-rw-r--r--tests/http/UrlUtils/WhitelistProtocolsTest.php2
-rw-r--r--tests/languages/fr/LanguagesFrTest.php2
-rw-r--r--tests/legacy/LegacyControllerTest.php2
-rw-r--r--tests/legacy/LegacyLinkDBTest.php15
-rw-r--r--tests/legacy/LegacyLinkFilterTest.php6
-rw-r--r--tests/legacy/LegacyUpdaterTest.php10
-rw-r--r--tests/netscape/BookmarkExportTest.php4
-rw-r--r--tests/netscape/BookmarkImportTest.php2
-rw-r--r--tests/plugins/PluginAddlinkTest.php2
-rw-r--r--tests/plugins/PluginArchiveorgTest.php2
-rw-r--r--tests/plugins/PluginDefaultColorsTest.php2
-rw-r--r--tests/plugins/PluginIssoTest.php8
-rw-r--r--tests/plugins/PluginPlayvideosTest.php2
-rw-r--r--tests/plugins/PluginPubsubhubbubTest.php2
-rw-r--r--tests/plugins/PluginQrcodeTest.php2
-rw-r--r--tests/plugins/PluginWallabagTest.php2
-rw-r--r--tests/plugins/WallabagInstanceTest.php2
-rw-r--r--tests/render/PageCacheManagerTest.php2
-rw-r--r--tests/render/ThemeUtilsTest.php2
-rw-r--r--tests/security/BanManagerTest.php2
-rw-r--r--tests/security/LoginManagerTest.php2
-rw-r--r--tests/security/SessionManagerTest.php2
-rw-r--r--tests/updater/DummyUpdater.php8
-rw-r--r--tests/updater/UpdaterTest.php8
118 files changed, 750 insertions, 788 deletions
diff --git a/.htaccess b/.htaccess
index af2dc5a7..25fcfb03 100644
--- a/.htaccess
+++ b/.htaccess
@@ -10,8 +10,12 @@ RewriteRule ^(.git|doxygen|vendor) - [F]
10# fixes JWT token not correctly forwarded on some Apache/FastCGI setups 10# fixes JWT token not correctly forwarded on some Apache/FastCGI setups
11RewriteCond %{HTTP:Authorization} ^(.*) 11RewriteCond %{HTTP:Authorization} ^(.*)
12RewriteRule .* - [e=HTTP_AUTHORIZATION:%1] 12RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
13# Alternative (if the 2 lines above don't work)
14# SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0
13 15
14# REST API 16# REST API
17# Ionos Hosting needs RewriteBase /
18# RewriteBase /
15RewriteCond %{REQUEST_FILENAME} !-f 19RewriteCond %{REQUEST_FILENAME} !-f
16RewriteCond %{REQUEST_FILENAME} !-d 20RewriteCond %{REQUEST_FILENAME} !-d
17RewriteRule ^ index.php [QSA,L] 21RewriteRule ^ index.php [QSA,L]
diff --git a/.travis.yml b/.travis.yml
index af04a022..d7460947 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -4,6 +4,14 @@ matrix:
4 include: 4 include:
5 # jobs for each supported php version 5 # jobs for each supported php version
6 - language: php 6 - language: php
7 php: nightly # PHP 8.0
8 install:
9 - composer self-update --2
10 - composer update --ignore-platform-req=php
11 - composer remove --dev --ignore-platform-req=php phpunit/phpunit
12 - composer require --dev --ignore-platform-req=php phpunit/php-text-template ^2.0
13 - composer require --dev --ignore-platform-req=php phpunit/phpunit ^9.0
14 - language: php
7 php: 7.4 15 php: 7.4
8 - language: php 16 - language: php
9 php: 7.3 17 php: 7.3
diff --git a/application/api/ApiMiddleware.php b/application/api/ApiMiddleware.php
index 09ce6445..f5b53b01 100644
--- a/application/api/ApiMiddleware.php
+++ b/application/api/ApiMiddleware.php
@@ -107,7 +107,9 @@ class ApiMiddleware
107 */ 107 */
108 protected function checkToken($request) 108 protected function checkToken($request)
109 { 109 {
110 if (! $request->hasHeader('Authorization')) { 110 if (!$request->hasHeader('Authorization')
111 && !isset($this->container->environment['REDIRECT_HTTP_AUTHORIZATION'])
112 ) {
111 throw new ApiAuthorizationException('JWT token not provided'); 113 throw new ApiAuthorizationException('JWT token not provided');
112 } 114 }
113 115
@@ -115,7 +117,11 @@ class ApiMiddleware
115 throw new ApiAuthorizationException('Token secret must be set in Shaarli\'s administration'); 117 throw new ApiAuthorizationException('Token secret must be set in Shaarli\'s administration');
116 } 118 }
117 119
118 $authorization = $request->getHeaderLine('Authorization'); 120 if (isset($this->container->environment['REDIRECT_HTTP_AUTHORIZATION'])) {
121 $authorization = $this->container->environment['REDIRECT_HTTP_AUTHORIZATION'];
122 } else {
123 $authorization = $request->getHeaderLine('Authorization');
124 }
119 125
120 if (! preg_match('/^Bearer (.*)/i', $authorization, $matches)) { 126 if (! preg_match('/^Bearer (.*)/i', $authorization, $matches)) {
121 throw new ApiAuthorizationException('Invalid JWT header'); 127 throw new ApiAuthorizationException('Invalid JWT header');
diff --git a/application/config/ConfigJson.php b/application/config/ConfigJson.php
index 4509357c..c0c0dab9 100644
--- a/application/config/ConfigJson.php
+++ b/application/config/ConfigJson.php
@@ -46,7 +46,7 @@ class ConfigJson implements ConfigIO
46 // JSON_PRETTY_PRINT is available from PHP 5.4. 46 // JSON_PRETTY_PRINT is available from PHP 5.4.
47 $print = defined('JSON_PRETTY_PRINT') ? JSON_PRETTY_PRINT : 0; 47 $print = defined('JSON_PRETTY_PRINT') ? JSON_PRETTY_PRINT : 0;
48 $data = self::getPhpHeaders() . json_encode($conf, $print) . self::getPhpSuffix(); 48 $data = self::getPhpHeaders() . json_encode($conf, $print) . self::getPhpSuffix();
49 if (!file_put_contents($filepath, $data)) { 49 if (empty($filepath) || !file_put_contents($filepath, $data)) {
50 throw new \Shaarli\Exceptions\IOException( 50 throw new \Shaarli\Exceptions\IOException(
51 $filepath, 51 $filepath,
52 t('Shaarli could not create the config file. '. 52 t('Shaarli could not create the config file. '.
diff --git a/composer.json b/composer.json
index de7b1732..cd9fcf5b 100644
--- a/composer.json
+++ b/composer.json
@@ -27,9 +27,8 @@
27 }, 27 },
28 "require-dev": { 28 "require-dev": {
29 "roave/security-advisories": "dev-master", 29 "roave/security-advisories": "dev-master",
30 "phpunit/phpcov": "*", 30 "squizlabs/php_codesniffer": "3.*",
31 "phpunit/phpunit": "^7.5 || ^8.0", 31 "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
32 "squizlabs/php_codesniffer": "3.*"
33 }, 32 },
34 "suggest": { 33 "suggest": {
35 "ext-curl": "Allows fetching web pages and thumbnails in a more robust way", 34 "ext-curl": "Allows fetching web pages and thumbnails in a more robust way",
diff --git a/composer.lock b/composer.lock
index ae7a9269..2c8b0ea7 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,29 +4,31 @@
4 "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", 4 "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
5 "This file is @generated automatically" 5 "This file is @generated automatically"
6 ], 6 ],
7 "content-hash": "37e420b4b6e9fa74b27e127dd422d9a6", 7 "content-hash": "98520a05a7185503ee13d05ffaa535f6",
8 "packages": [ 8 "packages": [
9 { 9 {
10 "name": "arthurhoaro/web-thumbnailer", 10 "name": "arthurhoaro/web-thumbnailer",
11 "version": "v2.0.1", 11 "version": "v2.0.3",
12 "source": { 12 "source": {
13 "type": "git", 13 "type": "git",
14 "url": "https://github.com/ArthurHoaro/web-thumbnailer.git", 14 "url": "https://github.com/ArthurHoaro/web-thumbnailer.git",
15 "reference": "4aa27a1b54b9823341fedd7ca2dcfb11a6b3186a" 15 "reference": "39bfd4f3136d9e6096496b9720e877326cfe4775"
16 }, 16 },
17 "dist": { 17 "dist": {
18 "type": "zip", 18 "type": "zip",
19 "url": "https://api.github.com/repos/ArthurHoaro/web-thumbnailer/zipball/4aa27a1b54b9823341fedd7ca2dcfb11a6b3186a", 19 "url": "https://api.github.com/repos/ArthurHoaro/web-thumbnailer/zipball/39bfd4f3136d9e6096496b9720e877326cfe4775",
20 "reference": "4aa27a1b54b9823341fedd7ca2dcfb11a6b3186a", 20 "reference": "39bfd4f3136d9e6096496b9720e877326cfe4775",
21 "shasum": "" 21 "shasum": ""
22 }, 22 },
23 "require": { 23 "require": {
24 "php": ">=7.1", 24 "php": ">=7.1",
25 "phpunit/php-text-template": "^1.2" 25 "phpunit/php-text-template": "^1.2 || ^2.0"
26 }, 26 },
27 "require-dev": { 27 "require-dev": {
28 "gskema/phpcs-type-sniff": "^0.13.1",
28 "php-coveralls/php-coveralls": "^2.0", 29 "php-coveralls/php-coveralls": "^2.0",
29 "phpunit/phpunit": "^7.0 || ^8.0", 30 "phpstan/phpstan": "^0.12.9",
31 "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0",
30 "squizlabs/php_codesniffer": "^3.0" 32 "squizlabs/php_codesniffer": "^3.0"
31 }, 33 },
32 "type": "library", 34 "type": "library",
@@ -49,7 +51,11 @@
49 } 51 }
50 ], 52 ],
51 "description": "PHP library which will retrieve a thumbnail for any given URL", 53 "description": "PHP library which will retrieve a thumbnail for any given URL",
52 "time": "2020-01-17T19:42:49+00:00" 54 "support": {
55 "issues": "https://github.com/ArthurHoaro/web-thumbnailer/issues",
56 "source": "https://github.com/ArthurHoaro/web-thumbnailer/tree/v2.0.3"
57 },
58 "time": "2020-09-29T15:51:03+00:00"
53 }, 59 },
54 { 60 {
55 "name": "erusev/parsedown", 61 "name": "erusev/parsedown",
@@ -95,6 +101,10 @@
95 "markdown", 101 "markdown",
96 "parser" 102 "parser"
97 ], 103 ],
104 "support": {
105 "issues": "https://github.com/erusev/parsedown/issues",
106 "source": "https://github.com/erusev/parsedown/tree/1.7.x"
107 },
98 "time": "2019-12-30T22:54:17+00:00" 108 "time": "2019-12-30T22:54:17+00:00"
99 }, 109 },
100 { 110 {
@@ -157,6 +167,11 @@
157 "po", 167 "po",
158 "translation" 168 "translation"
159 ], 169 ],
170 "support": {
171 "email": "oom@oscarotero.com",
172 "issues": "https://github.com/oscarotero/Gettext/issues",
173 "source": "https://github.com/php-gettext/Gettext/tree/v4.8.2"
174 },
160 "time": "2019-12-02T10:21:14+00:00" 175 "time": "2019-12-02T10:21:14+00:00"
161 }, 176 },
162 { 177 {
@@ -218,6 +233,10 @@
218 "translations", 233 "translations",
219 "unicode" 234 "unicode"
220 ], 235 ],
236 "support": {
237 "issues": "https://github.com/php-gettext/Languages/issues",
238 "source": "https://github.com/php-gettext/Languages/tree/2.6.0"
239 },
221 "time": "2019-11-13T10:30:21+00:00" 240 "time": "2019-11-13T10:30:21+00:00"
222 }, 241 },
223 { 242 {
@@ -268,6 +287,10 @@
268 "keywords": [ 287 "keywords": [
269 "logging" 288 "logging"
270 ], 289 ],
290 "support": {
291 "issues": "https://github.com/katzgrau/KLogger/issues",
292 "source": "https://github.com/katzgrau/KLogger/tree/master"
293 },
271 "time": "2016-11-07T19:29:14+00:00" 294 "time": "2016-11-07T19:29:14+00:00"
272 }, 295 },
273 { 296 {
@@ -314,6 +337,10 @@
314 "router", 337 "router",
315 "routing" 338 "routing"
316 ], 339 ],
340 "support": {
341 "issues": "https://github.com/nikic/FastRoute/issues",
342 "source": "https://github.com/nikic/FastRoute/tree/master"
343 },
317 "time": "2018-02-13T20:26:39+00:00" 344 "time": "2018-02-13T20:26:39+00:00"
318 }, 345 },
319 { 346 {
@@ -355,6 +382,10 @@
355 "keywords": [ 382 "keywords": [
356 "template" 383 "template"
357 ], 384 ],
385 "support": {
386 "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
387 "source": "https://github.com/sebastianbergmann/php-text-template/tree/1.2.1"
388 },
358 "time": "2015-06-21T13:50:34+00:00" 389 "time": "2015-06-21T13:50:34+00:00"
359 }, 390 },
360 { 391 {
@@ -405,6 +436,10 @@
405 "container", 436 "container",
406 "dependency injection" 437 "dependency injection"
407 ], 438 ],
439 "support": {
440 "issues": "https://github.com/silexphp/Pimple/issues",
441 "source": "https://github.com/silexphp/Pimple/tree/master"
442 },
408 "time": "2018-01-21T07:42:36+00:00" 443 "time": "2018-01-21T07:42:36+00:00"
409 }, 444 },
410 { 445 {
@@ -454,6 +489,10 @@
454 "container-interop", 489 "container-interop",
455 "psr" 490 "psr"
456 ], 491 ],
492 "support": {
493 "issues": "https://github.com/php-fig/container/issues",
494 "source": "https://github.com/php-fig/container/tree/master"
495 },
457 "time": "2017-02-14T16:28:37+00:00" 496 "time": "2017-02-14T16:28:37+00:00"
458 }, 497 },
459 { 498 {
@@ -504,6 +543,9 @@
504 "request", 543 "request",
505 "response" 544 "response"
506 ], 545 ],
546 "support": {
547 "source": "https://github.com/php-fig/http-message/tree/master"
548 },
507 "time": "2016-08-06T14:39:51+00:00" 549 "time": "2016-08-06T14:39:51+00:00"
508 }, 550 },
509 { 551 {
@@ -551,6 +593,9 @@
551 "psr", 593 "psr",
552 "psr-3" 594 "psr-3"
553 ], 595 ],
596 "support": {
597 "source": "https://github.com/php-fig/log/tree/1.1.3"
598 },
554 "time": "2020-03-23T09:12:05+00:00" 599 "time": "2020-03-23T09:12:05+00:00"
555 }, 600 },
556 { 601 {
@@ -571,6 +616,7 @@
571 "ext-curl": "*", 616 "ext-curl": "*",
572 "php": "~5.4 || ~7.0" 617 "php": "~5.4 || ~7.0"
573 }, 618 },
619 "default-branch": true,
574 "type": "library", 620 "type": "library",
575 "autoload": { 621 "autoload": {
576 "psr-4": { 622 "psr-4": {
@@ -596,20 +642,24 @@
596 "pubsubhubbub", 642 "pubsubhubbub",
597 "websub" 643 "websub"
598 ], 644 ],
645 "support": {
646 "issues": "https://github.com/pubsubhubbub/php-publisher/issues",
647 "source": "https://github.com/pubsubhubbub/php-publisher/tree/master"
648 },
599 "time": "2018-10-09T05:20:28+00:00" 649 "time": "2018-10-09T05:20:28+00:00"
600 }, 650 },
601 { 651 {
602 "name": "shaarli/netscape-bookmark-parser", 652 "name": "shaarli/netscape-bookmark-parser",
603 "version": "v2.1.0", 653 "version": "v2.2.0",
604 "source": { 654 "source": {
605 "type": "git", 655 "type": "git",
606 "url": "https://github.com/shaarli/netscape-bookmark-parser.git", 656 "url": "https://github.com/shaarli/netscape-bookmark-parser.git",
607 "reference": "819008ee42c4dd7e45d988176a4a22d6ed689577" 657 "reference": "432a010af2bb1832d6fbc4763e6b0100b980a1df"
608 }, 658 },
609 "dist": { 659 "dist": {
610 "type": "zip", 660 "type": "zip",
611 "url": "https://api.github.com/repos/shaarli/netscape-bookmark-parser/zipball/819008ee42c4dd7e45d988176a4a22d6ed689577", 661 "url": "https://api.github.com/repos/shaarli/netscape-bookmark-parser/zipball/432a010af2bb1832d6fbc4763e6b0100b980a1df",
612 "reference": "819008ee42c4dd7e45d988176a4a22d6ed689577", 662 "reference": "432a010af2bb1832d6fbc4763e6b0100b980a1df",
613 "shasum": "" 663 "shasum": ""
614 }, 664 },
615 "require": { 665 "require": {
@@ -649,9 +699,13 @@
649 "bookmark", 699 "bookmark",
650 "link", 700 "link",
651 "netscape", 701 "netscape",
652 "parser" 702 "parse"
653 ], 703 ],
654 "time": "2018-10-06T14:43:38+00:00" 704 "support": {
705 "issues": "https://github.com/shaarli/netscape-bookmark-parser/issues",
706 "source": "https://github.com/shaarli/netscape-bookmark-parser/tree/v2.2.0"
707 },
708 "time": "2020-06-06T15:53:53+00:00"
655 }, 709 },
656 { 710 {
657 "name": "slim/slim", 711 "name": "slim/slim",
@@ -724,26 +778,30 @@
724 "micro", 778 "micro",
725 "router" 779 "router"
726 ], 780 ],
781 "support": {
782 "issues": "https://github.com/slimphp/Slim/issues",
783 "source": "https://github.com/slimphp/Slim/tree/3.x"
784 },
727 "time": "2019-11-28T17:40:33+00:00" 785 "time": "2019-11-28T17:40:33+00:00"
728 } 786 }
729 ], 787 ],
730 "packages-dev": [ 788 "packages-dev": [
731 { 789 {
732 "name": "doctrine/instantiator", 790 "name": "doctrine/instantiator",
733 "version": "1.3.0", 791 "version": "1.3.1",
734 "source": { 792 "source": {
735 "type": "git", 793 "type": "git",
736 "url": "https://github.com/doctrine/instantiator.git", 794 "url": "https://github.com/doctrine/instantiator.git",
737 "reference": "ae466f726242e637cebdd526a7d991b9433bacf1" 795 "reference": "f350df0268e904597e3bd9c4685c53e0e333feea"
738 }, 796 },
739 "dist": { 797 "dist": {
740 "type": "zip", 798 "type": "zip",
741 "url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1", 799 "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea",
742 "reference": "ae466f726242e637cebdd526a7d991b9433bacf1", 800 "reference": "f350df0268e904597e3bd9c4685c53e0e333feea",
743 "shasum": "" 801 "shasum": ""
744 }, 802 },
745 "require": { 803 "require": {
746 "php": "^7.1" 804 "php": "^7.1 || ^8.0"
747 }, 805 },
748 "require-dev": { 806 "require-dev": {
749 "doctrine/coding-standard": "^6.0", 807 "doctrine/coding-standard": "^6.0",
@@ -782,24 +840,42 @@
782 "constructor", 840 "constructor",
783 "instantiate" 841 "instantiate"
784 ], 842 ],
785 "time": "2019-10-21T16:45:58+00:00" 843 "support": {
844 "issues": "https://github.com/doctrine/instantiator/issues",
845 "source": "https://github.com/doctrine/instantiator/tree/1.3.x"
846 },
847 "funding": [
848 {
849 "url": "https://www.doctrine-project.org/sponsorship.html",
850 "type": "custom"
851 },
852 {
853 "url": "https://www.patreon.com/phpdoctrine",
854 "type": "patreon"
855 },
856 {
857 "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
858 "type": "tidelift"
859 }
860 ],
861 "time": "2020-05-29T17:27:14+00:00"
786 }, 862 },
787 { 863 {
788 "name": "myclabs/deep-copy", 864 "name": "myclabs/deep-copy",
789 "version": "1.9.5", 865 "version": "1.10.1",
790 "source": { 866 "source": {
791 "type": "git", 867 "type": "git",
792 "url": "https://github.com/myclabs/DeepCopy.git", 868 "url": "https://github.com/myclabs/DeepCopy.git",
793 "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef" 869 "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5"
794 }, 870 },
795 "dist": { 871 "dist": {
796 "type": "zip", 872 "type": "zip",
797 "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/b2c28789e80a97badd14145fda39b545d83ca3ef", 873 "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/969b211f9a51aa1f6c01d1d2aef56d3bd91598e5",
798 "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef", 874 "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5",
799 "shasum": "" 875 "shasum": ""
800 }, 876 },
801 "require": { 877 "require": {
802 "php": "^7.1" 878 "php": "^7.1 || ^8.0"
803 }, 879 },
804 "replace": { 880 "replace": {
805 "myclabs/deep-copy": "self.version" 881 "myclabs/deep-copy": "self.version"
@@ -830,7 +906,17 @@
830 "object", 906 "object",
831 "object graph" 907 "object graph"
832 ], 908 ],
833 "time": "2020-01-17T21:11:47+00:00" 909 "support": {
910 "issues": "https://github.com/myclabs/DeepCopy/issues",
911 "source": "https://github.com/myclabs/DeepCopy/tree/1.x"
912 },
913 "funding": [
914 {
915 "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
916 "type": "tidelift"
917 }
918 ],
919 "time": "2020-06-29T13:22:24+00:00"
834 }, 920 },
835 { 921 {
836 "name": "phar-io/manifest", 922 "name": "phar-io/manifest",
@@ -885,6 +971,10 @@
885 } 971 }
886 ], 972 ],
887 "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", 973 "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
974 "support": {
975 "issues": "https://github.com/phar-io/manifest/issues",
976 "source": "https://github.com/phar-io/manifest/tree/master"
977 },
888 "time": "2018-07-08T19:23:20+00:00" 978 "time": "2018-07-08T19:23:20+00:00"
889 }, 979 },
890 { 980 {
@@ -932,6 +1022,10 @@
932 } 1022 }
933 ], 1023 ],
934 "description": "Library for handling version information and constraints", 1024 "description": "Library for handling version information and constraints",
1025 "support": {
1026 "issues": "https://github.com/phar-io/version/issues",
1027 "source": "https://github.com/phar-io/version/tree/master"
1028 },
935 "time": "2018-07-08T19:19:57+00:00" 1029 "time": "2018-07-08T19:19:57+00:00"
936 }, 1030 },
937 { 1031 {
@@ -981,6 +1075,10 @@
981 "reflection", 1075 "reflection",
982 "static analysis" 1076 "static analysis"
983 ], 1077 ],
1078 "support": {
1079 "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues",
1080 "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/master"
1081 },
984 "time": "2020-04-27T09:25:28+00:00" 1082 "time": "2020-04-27T09:25:28+00:00"
985 }, 1083 },
986 { 1084 {
@@ -1033,6 +1131,10 @@
1033 } 1131 }
1034 ], 1132 ],
1035 "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", 1133 "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
1134 "support": {
1135 "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
1136 "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/release/4.x"
1137 },
1036 "time": "2019-12-28T18:55:12+00:00" 1138 "time": "2019-12-28T18:55:12+00:00"
1037 }, 1139 },
1038 { 1140 {
@@ -1080,6 +1182,10 @@
1080 } 1182 }
1081 ], 1183 ],
1082 "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", 1184 "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
1185 "support": {
1186 "issues": "https://github.com/phpDocumentor/TypeResolver/issues",
1187 "source": "https://github.com/phpDocumentor/TypeResolver/tree/0.7.2"
1188 },
1083 "time": "2019-08-22T18:11:29+00:00" 1189 "time": "2019-08-22T18:11:29+00:00"
1084 }, 1190 },
1085 { 1191 {
@@ -1143,6 +1249,10 @@
1143 "spy", 1249 "spy",
1144 "stub" 1250 "stub"
1145 ], 1251 ],
1252 "support": {
1253 "issues": "https://github.com/phpspec/prophecy/issues",
1254 "source": "https://github.com/phpspec/prophecy/tree/v1.10.3"
1255 },
1146 "time": "2020-03-05T15:02:03+00:00" 1256 "time": "2020-03-05T15:02:03+00:00"
1147 }, 1257 },
1148 { 1258 {
@@ -1206,6 +1316,10 @@
1206 "testing", 1316 "testing",
1207 "xunit" 1317 "xunit"
1208 ], 1318 ],
1319 "support": {
1320 "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
1321 "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/master"
1322 },
1209 "time": "2018-10-31T16:06:48+00:00" 1323 "time": "2018-10-31T16:06:48+00:00"
1210 }, 1324 },
1211 { 1325 {
@@ -1256,6 +1370,10 @@
1256 "filesystem", 1370 "filesystem",
1257 "iterator" 1371 "iterator"
1258 ], 1372 ],
1373 "support": {
1374 "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
1375 "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/2.0.2"
1376 },
1259 "time": "2018-09-13T20:33:42+00:00" 1377 "time": "2018-09-13T20:33:42+00:00"
1260 }, 1378 },
1261 { 1379 {
@@ -1305,6 +1423,10 @@
1305 "keywords": [ 1423 "keywords": [
1306 "timer" 1424 "timer"
1307 ], 1425 ],
1426 "support": {
1427 "issues": "https://github.com/sebastianbergmann/php-timer/issues",
1428 "source": "https://github.com/sebastianbergmann/php-timer/tree/master"
1429 },
1308 "time": "2019-06-07T04:22:29+00:00" 1430 "time": "2019-06-07T04:22:29+00:00"
1309 }, 1431 },
1310 { 1432 {
@@ -1354,59 +1476,12 @@
1354 "keywords": [ 1476 "keywords": [
1355 "tokenizer" 1477 "tokenizer"
1356 ], 1478 ],
1357 "time": "2019-09-17T06:23:10+00:00" 1479 "support": {
1358 }, 1480 "issues": "https://github.com/sebastianbergmann/php-token-stream/issues",
1359 { 1481 "source": "https://github.com/sebastianbergmann/php-token-stream/tree/3.1.1"
1360 "name": "phpunit/phpcov",
1361 "version": "5.0.0",
1362 "source": {
1363 "type": "git",
1364 "url": "https://github.com/sebastianbergmann/phpcov.git",
1365 "reference": "72fb974e6fe9b39d7e0b0d44061d2ba4c49ee0b8"
1366 }, 1482 },
1367 "dist": { 1483 "abandoned": true,
1368 "type": "zip", 1484 "time": "2019-09-17T06:23:10+00:00"
1369 "url": "https://api.github.com/repos/sebastianbergmann/phpcov/zipball/72fb974e6fe9b39d7e0b0d44061d2ba4c49ee0b8",
1370 "reference": "72fb974e6fe9b39d7e0b0d44061d2ba4c49ee0b8",
1371 "shasum": ""
1372 },
1373 "require": {
1374 "php": "^7.1",
1375 "phpunit/php-code-coverage": "^6.0",
1376 "phpunit/phpunit": "^7.0",
1377 "sebastian/diff": "^3.0",
1378 "sebastian/finder-facade": "^1.1",
1379 "sebastian/version": "^2.0",
1380 "symfony/console": "^3.0 || ^4.0"
1381 },
1382 "bin": [
1383 "phpcov"
1384 ],
1385 "type": "library",
1386 "extra": {
1387 "branch-alias": {
1388 "dev-master": "5.0-dev"
1389 }
1390 },
1391 "autoload": {
1392 "classmap": [
1393 "src/"
1394 ]
1395 },
1396 "notification-url": "https://packagist.org/downloads/",
1397 "license": [
1398 "BSD-3-Clause"
1399 ],
1400 "authors": [
1401 {
1402 "name": "Sebastian Bergmann",
1403 "email": "sebastian@phpunit.de",
1404 "role": "lead"
1405 }
1406 ],
1407 "description": "CLI frontend for php-code-coverage",
1408 "homepage": "https://github.com/sebastianbergmann/phpcov",
1409 "time": "2018-02-04T10:18:50+00:00"
1410 }, 1485 },
1411 { 1486 {
1412 "name": "phpunit/phpunit", 1487 "name": "phpunit/phpunit",
@@ -1490,6 +1565,10 @@
1490 "testing", 1565 "testing",
1491 "xunit" 1566 "xunit"
1492 ], 1567 ],
1568 "support": {
1569 "issues": "https://github.com/sebastianbergmann/phpunit/issues",
1570 "source": "https://github.com/sebastianbergmann/phpunit/tree/7.5.20"
1571 },
1493 "time": "2020-01-08T08:45:45+00:00" 1572 "time": "2020-01-08T08:45:45+00:00"
1494 }, 1573 },
1495 { 1574 {
@@ -1498,12 +1577,12 @@
1498 "source": { 1577 "source": {
1499 "type": "git", 1578 "type": "git",
1500 "url": "https://github.com/Roave/SecurityAdvisories.git", 1579 "url": "https://github.com/Roave/SecurityAdvisories.git",
1501 "reference": "5a342e2dc0408d026b97ee3176b5b406e54e3766" 1580 "reference": "0749ceaf15c136d085b722a5bb88141398a54142"
1502 }, 1581 },
1503 "dist": { 1582 "dist": {
1504 "type": "zip", 1583 "type": "zip",
1505 "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/5a342e2dc0408d026b97ee3176b5b406e54e3766", 1584 "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/0749ceaf15c136d085b722a5bb88141398a54142",
1506 "reference": "5a342e2dc0408d026b97ee3176b5b406e54e3766", 1585 "reference": "0749ceaf15c136d085b722a5bb88141398a54142",
1507 "shasum": "" 1586 "shasum": ""
1508 }, 1587 },
1509 "conflict": { 1588 "conflict": {
@@ -1512,12 +1591,15 @@
1512 "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", 1591 "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1",
1513 "amphp/artax": "<1.0.6|>=2,<2.0.6", 1592 "amphp/artax": "<1.0.6|>=2,<2.0.6",
1514 "amphp/http": "<1.0.1", 1593 "amphp/http": "<1.0.1",
1594 "amphp/http-client": ">=4,<4.4",
1515 "api-platform/core": ">=2.2,<2.2.10|>=2.3,<2.3.6", 1595 "api-platform/core": ">=2.2,<2.2.10|>=2.3,<2.3.6",
1516 "asymmetricrypt/asymmetricrypt": ">=0,<9.9.99", 1596 "asymmetricrypt/asymmetricrypt": ">=0,<9.9.99",
1517 "aws/aws-sdk-php": ">=3,<3.2.1", 1597 "aws/aws-sdk-php": ">=3,<3.2.1",
1518 "bagisto/bagisto": "<0.1.5", 1598 "bagisto/bagisto": "<0.1.5",
1519 "barrelstrength/sprout-base-email": "<3.9", 1599 "barrelstrength/sprout-base-email": "<1.2.7",
1520 "bolt/bolt": "<3.6.10", 1600 "barrelstrength/sprout-forms": "<3.9",
1601 "baserproject/basercms": ">=4,<=4.3.6",
1602 "bolt/bolt": "<3.7.1",
1521 "brightlocal/phpwhois": "<=4.2.5", 1603 "brightlocal/phpwhois": "<=4.2.5",
1522 "buddypress/buddypress": "<5.1.2", 1604 "buddypress/buddypress": "<5.1.2",
1523 "bugsnag/bugsnag-laravel": ">=2,<2.0.2", 1605 "bugsnag/bugsnag-laravel": ">=2,<2.0.2",
@@ -1530,10 +1612,11 @@
1530 "composer/composer": "<=1-alpha.11", 1612 "composer/composer": "<=1-alpha.11",
1531 "contao-components/mediaelement": ">=2.14.2,<2.21.1", 1613 "contao-components/mediaelement": ">=2.14.2,<2.21.1",
1532 "contao/core": ">=2,<3.5.39", 1614 "contao/core": ">=2,<3.5.39",
1533 "contao/core-bundle": ">=4,<4.4.46|>=4.5,<4.8.6", 1615 "contao/core-bundle": ">=4,<4.4.52|>=4.5,<4.9.6|= 4.10.0",
1534 "contao/listing-bundle": ">=4,<4.4.8", 1616 "contao/listing-bundle": ">=4,<4.4.8",
1535 "datadog/dd-trace": ">=0.30,<0.30.2", 1617 "datadog/dd-trace": ">=0.30,<0.30.2",
1536 "david-garcia/phpwhois": "<=4.3.1", 1618 "david-garcia/phpwhois": "<=4.3.1",
1619 "derhansen/sf_event_mgt": "<4.3.1|>=5,<5.1.1",
1537 "doctrine/annotations": ">=1,<1.2.7", 1620 "doctrine/annotations": ">=1,<1.2.7",
1538 "doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2", 1621 "doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2",
1539 "doctrine/common": ">=2,<2.4.3|>=2.5,<2.5.1", 1622 "doctrine/common": ">=2,<2.4.3|>=2.5,<2.5.1",
@@ -1543,10 +1626,10 @@
1543 "doctrine/mongodb-odm": ">=1,<1.0.2", 1626 "doctrine/mongodb-odm": ">=1,<1.0.2",
1544 "doctrine/mongodb-odm-bundle": ">=2,<3.0.1", 1627 "doctrine/mongodb-odm-bundle": ">=2,<3.0.1",
1545 "doctrine/orm": ">=2,<2.4.8|>=2.5,<2.5.1", 1628 "doctrine/orm": ">=2,<2.4.8|>=2.5,<2.5.1",
1546 "dolibarr/dolibarr": "<=10.0.6", 1629 "dolibarr/dolibarr": "<11.0.4",
1547 "dompdf/dompdf": ">=0.6,<0.6.2", 1630 "dompdf/dompdf": ">=0.6,<0.6.2",
1548 "drupal/core": ">=7,<7.69|>=8,<8.7.12|>=8.8,<8.8.4", 1631 "drupal/core": ">=7,<7.73|>=8,<8.8.10|>=8.9,<8.9.6|>=9,<9.0.6",
1549 "drupal/drupal": ">=7,<7.69|>=8,<8.7.12|>=8.8,<8.8.4", 1632 "drupal/drupal": ">=7,<7.73|>=8,<8.8.10|>=8.9,<8.9.6|>=9,<9.0.6",
1550 "endroid/qr-code-bundle": "<3.4.2", 1633 "endroid/qr-code-bundle": "<3.4.2",
1551 "enshrined/svg-sanitize": "<0.13.1", 1634 "enshrined/svg-sanitize": "<0.13.1",
1552 "erusev/parsedown": "<1.7.2", 1635 "erusev/parsedown": "<1.7.2",
@@ -1555,10 +1638,12 @@
1555 "ezsystems/ezfind-ls": ">=5.3,<5.3.6.1|>=5.4,<5.4.11.1|>=2017.12,<2017.12.0.1", 1638 "ezsystems/ezfind-ls": ">=5.3,<5.3.6.1|>=5.4,<5.4.11.1|>=2017.12,<2017.12.0.1",
1556 "ezsystems/ezplatform": ">=1.7,<1.7.9.1|>=1.13,<1.13.5.1|>=2.5,<2.5.4", 1639 "ezsystems/ezplatform": ">=1.7,<1.7.9.1|>=1.13,<1.13.5.1|>=2.5,<2.5.4",
1557 "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6", 1640 "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6",
1558 "ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2", 1641 "ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2.1|>=5,<5.0.1|>=5.1,<5.1.1",
1642 "ezsystems/ezplatform-kernel": ">=1,<1.0.2.1",
1559 "ezsystems/ezplatform-user": ">=1,<1.0.1", 1643 "ezsystems/ezplatform-user": ">=1,<1.0.1",
1560 "ezsystems/ezpublish-kernel": ">=5.3,<5.3.12.1|>=5.4,<5.4.14.1|>=6,<6.7.9.1|>=6.8,<6.13.6.2|>=7,<7.2.4.1|>=7.3,<7.3.2.1|>=7.5,<7.5.6.2", 1644 "ezsystems/ezpublish-kernel": ">=5.3,<5.3.12.1|>=5.4,<5.4.14.2|>=6,<6.7.9.1|>=6.8,<6.13.6.3|>=7,<7.2.4.1|>=7.3,<7.3.2.1|>=7.5,<7.5.7.1",
1561 "ezsystems/ezpublish-legacy": ">=5.3,<5.3.12.6|>=5.4,<5.4.14.1|>=2011,<2017.12.7.2|>=2018.6,<2018.6.1.4|>=2018.9,<2018.9.1.3|>=2019.3,<2019.3.4.2", 1645 "ezsystems/ezpublish-legacy": ">=5.3,<5.3.12.6|>=5.4,<5.4.14.1|>=2011,<2017.12.7.2|>=2018.6,<2018.6.1.4|>=2018.9,<2018.9.1.3|>=2019.3,<2019.3.4.2",
1646 "ezsystems/platform-ui-assets-bundle": ">=4.2,<4.2.3",
1562 "ezsystems/repository-forms": ">=2.3,<2.3.2.1", 1647 "ezsystems/repository-forms": ">=2.3,<2.3.2.1",
1563 "ezyang/htmlpurifier": "<4.1.1", 1648 "ezyang/htmlpurifier": "<4.1.1",
1564 "firebase/php-jwt": "<2", 1649 "firebase/php-jwt": "<2",
@@ -1567,14 +1652,16 @@
1567 "friendsofsymfony/oauth2-php": "<1.3", 1652 "friendsofsymfony/oauth2-php": "<1.3",
1568 "friendsofsymfony/rest-bundle": ">=1.2,<1.2.2", 1653 "friendsofsymfony/rest-bundle": ">=1.2,<1.2.2",
1569 "friendsofsymfony/user-bundle": ">=1.2,<1.3.5", 1654 "friendsofsymfony/user-bundle": ">=1.2,<1.3.5",
1655 "friendsoftypo3/mediace": ">=7.6.2,<7.6.5",
1570 "fuel/core": "<1.8.1", 1656 "fuel/core": "<1.8.1",
1571 "getgrav/grav": "<1.7-beta.8", 1657 "getgrav/grav": "<1.7-beta.8",
1658 "gos/web-socket-bundle": "<1.10.4|>=2,<2.6.1|>=3,<3.3",
1572 "gree/jose": "<=2.2", 1659 "gree/jose": "<=2.2",
1573 "gregwar/rst": "<1.0.3", 1660 "gregwar/rst": "<1.0.3",
1574 "guzzlehttp/guzzle": ">=4-rc.2,<4.2.4|>=5,<5.3.1|>=6,<6.2.1", 1661 "guzzlehttp/guzzle": ">=4-rc.2,<4.2.4|>=5,<5.3.1|>=6,<6.2.1",
1575 "illuminate/auth": ">=4,<4.0.99|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.10", 1662 "illuminate/auth": ">=4,<4.0.99|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.10",
1576 "illuminate/cookie": ">=4,<=4.0.11|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.42|>=5.6,<5.6.30", 1663 "illuminate/cookie": ">=4,<=4.0.11|>=4.1,<=4.1.99999|>=4.2,<=4.2.99999|>=5,<=5.0.99999|>=5.1,<=5.1.99999|>=5.2,<=5.2.99999|>=5.3,<=5.3.99999|>=5.4,<=5.4.99999|>=5.5,<=5.5.49|>=5.6,<=5.6.99999|>=5.7,<=5.7.99999|>=5.8,<=5.8.99999|>=6,<6.18.31|>=7,<7.22.4",
1577 "illuminate/database": ">=4,<4.0.99|>=4.1,<4.1.29", 1664 "illuminate/database": ">=4,<4.0.99|>=4.1,<4.1.29|>=5.5,<=5.5.44|>=6,<6.18.34|>=7,<7.23.2",
1578 "illuminate/encryption": ">=4,<=4.0.11|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.40|>=5.6,<5.6.15", 1665 "illuminate/encryption": ">=4,<=4.0.11|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.40|>=5.6,<5.6.15",
1579 "illuminate/view": ">=7,<7.1.2", 1666 "illuminate/view": ">=7,<7.1.2",
1580 "ivankristianto/phpwhois": "<=4.3", 1667 "ivankristianto/phpwhois": "<=4.3",
@@ -1582,22 +1669,32 @@
1582 "joomla/session": "<1.3.1", 1669 "joomla/session": "<1.3.1",
1583 "jsmitty12/phpwhois": "<5.1", 1670 "jsmitty12/phpwhois": "<5.1",
1584 "kazist/phpwhois": "<=4.2.6", 1671 "kazist/phpwhois": "<=4.2.6",
1672 "kitodo/presentation": "<3.1.2",
1585 "kreait/firebase-php": ">=3.2,<3.8.1", 1673 "kreait/firebase-php": ">=3.2,<3.8.1",
1586 "la-haute-societe/tcpdf": "<6.2.22", 1674 "la-haute-societe/tcpdf": "<6.2.22",
1587 "laravel/framework": ">=4,<4.0.99|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.42|>=5.6,<5.6.30|>=7,<7.1.2", 1675 "laravel/framework": ">=4,<4.0.99|>=4.1,<=4.1.99999|>=4.2,<=4.2.99999|>=5,<=5.0.99999|>=5.1,<=5.1.99999|>=5.2,<=5.2.99999|>=5.3,<=5.3.99999|>=5.4,<=5.4.99999|>=5.5,<=5.5.49|>=5.6,<=5.6.99999|>=5.7,<=5.7.99999|>=5.8,<=5.8.99999|>=6,<6.18.34|>=7,<7.23.2",
1588 "laravel/socialite": ">=1,<1.0.99|>=2,<2.0.10", 1676 "laravel/socialite": ">=1,<1.0.99|>=2,<2.0.10",
1589 "league/commonmark": "<0.18.3", 1677 "league/commonmark": "<0.18.3",
1590 "librenms/librenms": "<1.53", 1678 "librenms/librenms": "<1.53",
1679 "livewire/livewire": ">2.2.4,<2.2.6",
1591 "magento/community-edition": ">=2,<2.2.10|>=2.3,<2.3.3", 1680 "magento/community-edition": ">=2,<2.2.10|>=2.3,<2.3.3",
1592 "magento/magento1ce": "<1.9.4.3", 1681 "magento/magento1ce": "<1.9.4.3",
1593 "magento/magento1ee": ">=1,<1.14.4.3", 1682 "magento/magento1ee": ">=1,<1.14.4.3",
1594 "magento/product-community-edition": ">=2,<2.2.10|>=2.3,<2.3.2-p.2", 1683 "magento/product-community-edition": ">=2,<2.2.10|>=2.3,<2.3.2-p.2",
1684 "marcwillmann/turn": "<0.3.3",
1685 "mittwald/typo3_forum": "<1.2.1",
1595 "monolog/monolog": ">=1.8,<1.12", 1686 "monolog/monolog": ">=1.8,<1.12",
1596 "namshi/jose": "<2.2", 1687 "namshi/jose": "<2.2",
1688 "nystudio107/craft-seomatic": "<3.3",
1597 "nzo/url-encryptor-bundle": ">=4,<4.3.2|>=5,<5.0.1", 1689 "nzo/url-encryptor-bundle": ">=4,<4.3.2|>=5,<5.0.1",
1690 "october/backend": ">=1.0.319,<1.0.467",
1691 "october/cms": ">=1.0.319,<1.0.466",
1692 "october/october": ">=1.0.319,<1.0.466",
1693 "october/rain": ">=1.0.319,<1.0.468",
1598 "onelogin/php-saml": "<2.10.4", 1694 "onelogin/php-saml": "<2.10.4",
1599 "oneup/uploader-bundle": "<1.9.3|>=2,<2.1.5", 1695 "oneup/uploader-bundle": "<1.9.3|>=2,<2.1.5",
1600 "openid/php-openid": "<2.3", 1696 "openid/php-openid": "<2.3",
1697 "openmage/magento-lts": "<19.4.6|>=20,<20.0.2",
1601 "oro/crm": ">=1.7,<1.7.4", 1698 "oro/crm": ">=1.7,<1.7.4",
1602 "oro/platform": ">=1.7,<1.7.4", 1699 "oro/platform": ">=1.7,<1.7.4",
1603 "padraic/humbug_get_contents": "<1.1.2", 1700 "padraic/humbug_get_contents": "<1.1.2",
@@ -1605,8 +1702,10 @@
1605 "paragonie/random_compat": "<2", 1702 "paragonie/random_compat": "<2",
1606 "paypal/merchant-sdk-php": "<3.12", 1703 "paypal/merchant-sdk-php": "<3.12",
1607 "pear/archive_tar": "<1.4.4", 1704 "pear/archive_tar": "<1.4.4",
1705 "personnummer/personnummer": "<3.0.2",
1608 "phpfastcache/phpfastcache": ">=5,<5.0.13", 1706 "phpfastcache/phpfastcache": ">=5,<5.0.13",
1609 "phpmailer/phpmailer": ">=5,<5.2.27|>=6,<6.0.6", 1707 "phpmailer/phpmailer": "<6.1.6",
1708 "phpmussel/phpmussel": ">=1,<1.6",
1610 "phpmyadmin/phpmyadmin": "<4.9.2", 1709 "phpmyadmin/phpmyadmin": "<4.9.2",
1611 "phpoffice/phpexcel": "<1.8.2", 1710 "phpoffice/phpexcel": "<1.8.2",
1612 "phpoffice/phpspreadsheet": "<1.8", 1711 "phpoffice/phpspreadsheet": "<1.8",
@@ -1615,25 +1714,30 @@
1615 "phpxmlrpc/extras": "<0.6.1", 1714 "phpxmlrpc/extras": "<0.6.1",
1616 "pimcore/pimcore": "<6.3", 1715 "pimcore/pimcore": "<6.3",
1617 "prestashop/autoupgrade": ">=4,<4.10.1", 1716 "prestashop/autoupgrade": ">=4,<4.10.1",
1717 "prestashop/contactform": ">1.0.1,<4.3",
1618 "prestashop/gamification": "<2.3.2", 1718 "prestashop/gamification": "<2.3.2",
1619 "prestashop/ps_facetedsearch": "<3.4.1", 1719 "prestashop/ps_facetedsearch": "<3.4.1",
1620 "privatebin/privatebin": "<1.2.2|>=1.3,<1.3.2", 1720 "privatebin/privatebin": "<1.2.2|>=1.3,<1.3.2",
1621 "propel/propel": ">=2-alpha.1,<=2-alpha.7", 1721 "propel/propel": ">=2-alpha.1,<=2-alpha.7",
1622 "propel/propel1": ">=1,<=1.7.1", 1722 "propel/propel1": ">=1,<=1.7.1",
1623 "pusher/pusher-php-server": "<2.2.1", 1723 "pusher/pusher-php-server": "<2.2.1",
1724 "rainlab/debugbar-plugin": "<3.1",
1624 "robrichards/xmlseclibs": "<3.0.4", 1725 "robrichards/xmlseclibs": "<3.0.4",
1726 "sabberworm/php-css-parser": ">=1,<1.0.1|>=2,<2.0.1|>=3,<3.0.1|>=4,<4.0.1|>=5,<5.0.9|>=5.1,<5.1.3|>=5.2,<5.2.1|>=6,<6.0.2|>=7,<7.0.4|>=8,<8.0.1|>=8.1,<8.1.1|>=8.2,<8.2.1|>=8.3,<8.3.1",
1625 "sabre/dav": ">=1.6,<1.6.99|>=1.7,<1.7.11|>=1.8,<1.8.9", 1727 "sabre/dav": ">=1.6,<1.6.99|>=1.7,<1.7.11|>=1.8,<1.8.9",
1626 "scheb/two-factor-bundle": ">=0,<3.26|>=4,<4.11", 1728 "scheb/two-factor-bundle": ">=0,<3.26|>=4,<4.11",
1627 "sensiolabs/connect": "<4.2.3", 1729 "sensiolabs/connect": "<4.2.3",
1628 "serluck/phpwhois": "<=4.2.6", 1730 "serluck/phpwhois": "<=4.2.6",
1731 "shopware/core": "<=6.3.1",
1732 "shopware/platform": "<=6.3.1",
1629 "shopware/shopware": "<5.3.7", 1733 "shopware/shopware": "<5.3.7",
1630 "silverstripe/admin": ">=1.0.3,<1.0.4|>=1.1,<1.1.1", 1734 "silverstripe/admin": ">=1.0.3,<1.0.4|>=1.1,<1.1.1",
1631 "silverstripe/assets": ">=1,<1.4.7|>=1.5,<1.5.2", 1735 "silverstripe/assets": ">=1,<1.4.7|>=1.5,<1.5.2",
1632 "silverstripe/cms": "<4.3.6|>=4.4,<4.4.4", 1736 "silverstripe/cms": "<4.3.6|>=4.4,<4.4.4",
1633 "silverstripe/comments": ">=1.3,<1.9.99|>=2,<2.9.99|>=3,<3.1.1", 1737 "silverstripe/comments": ">=1.3,<1.9.99|>=2,<2.9.99|>=3,<3.1.1",
1634 "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3", 1738 "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3",
1635 "silverstripe/framework": "<4.4.5|>=4.5,<4.5.2", 1739 "silverstripe/framework": "<4.4.7|>=4.5,<4.5.4",
1636 "silverstripe/graphql": ">=2,<2.0.5|>=3,<3.1.2", 1740 "silverstripe/graphql": ">=2,<2.0.5|>=3,<3.1.2|>=3.2,<3.2.4",
1637 "silverstripe/registry": ">=2.1,<2.1.2|>=2.2,<2.2.1", 1741 "silverstripe/registry": ">=2.1,<2.1.2|>=2.2,<2.2.1",
1638 "silverstripe/restfulserver": ">=1,<1.0.9|>=2,<2.0.4", 1742 "silverstripe/restfulserver": ">=1,<1.0.9|>=2,<2.0.4",
1639 "silverstripe/subsites": ">=2,<2.1.1", 1743 "silverstripe/subsites": ">=2,<2.1.1",
@@ -1652,11 +1756,12 @@
1652 "ssddanbrown/bookstack": "<0.29.2", 1756 "ssddanbrown/bookstack": "<0.29.2",
1653 "stormpath/sdk": ">=0,<9.9.99", 1757 "stormpath/sdk": ">=0,<9.9.99",
1654 "studio-42/elfinder": "<2.1.49", 1758 "studio-42/elfinder": "<2.1.49",
1759 "sulu/sulu": "<1.6.34|>=2,<2.0.10|>=2.1,<2.1.1",
1655 "swiftmailer/swiftmailer": ">=4,<5.4.5", 1760 "swiftmailer/swiftmailer": ">=4,<5.4.5",
1656 "sylius/admin-bundle": ">=1,<1.0.17|>=1.1,<1.1.9|>=1.2,<1.2.2", 1761 "sylius/admin-bundle": ">=1,<1.0.17|>=1.1,<1.1.9|>=1.2,<1.2.2",
1657 "sylius/grid": ">=1,<1.1.19|>=1.2,<1.2.18|>=1.3,<1.3.13|>=1.4,<1.4.5|>=1.5,<1.5.1", 1762 "sylius/grid": ">=1,<1.1.19|>=1.2,<1.2.18|>=1.3,<1.3.13|>=1.4,<1.4.5|>=1.5,<1.5.1",
1658 "sylius/grid-bundle": ">=1,<1.1.19|>=1.2,<1.2.18|>=1.3,<1.3.13|>=1.4,<1.4.5|>=1.5,<1.5.1", 1763 "sylius/grid-bundle": ">=1,<1.1.19|>=1.2,<1.2.18|>=1.3,<1.3.13|>=1.4,<1.4.5|>=1.5,<1.5.1",
1659 "sylius/resource-bundle": "<1.3.13|>=1.4,<1.4.6|>=1.5,<1.5.1|>=1.6,<1.6.3", 1764 "sylius/resource-bundle": "<1.3.14|>=1.4,<1.4.7|>=1.5,<1.5.2|>=1.6,<1.6.4",
1660 "sylius/sylius": "<1.3.16|>=1.4,<1.4.12|>=1.5,<1.5.9|>=1.6,<1.6.5", 1765 "sylius/sylius": "<1.3.16|>=1.4,<1.4.12|>=1.5,<1.5.9|>=1.6,<1.6.5",
1661 "symbiote/silverstripe-multivaluefield": ">=3,<3.0.99", 1766 "symbiote/silverstripe-multivaluefield": ">=3,<3.0.99",
1662 "symbiote/silverstripe-versionedfiles": "<=2.0.3", 1767 "symbiote/silverstripe-versionedfiles": "<=2.0.3",
@@ -1666,7 +1771,7 @@
1666 "symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.20|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1", 1771 "symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.20|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1",
1667 "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", 1772 "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7",
1668 "symfony/http-foundation": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7", 1773 "symfony/http-foundation": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7",
1669 "symfony/http-kernel": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8", 1774 "symfony/http-kernel": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.4.13|>=5,<5.1.5",
1670 "symfony/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13", 1775 "symfony/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13",
1671 "symfony/mime": ">=4.3,<4.3.8", 1776 "symfony/mime": ">=4.3,<4.3.8",
1672 "symfony/phpunit-bridge": ">=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", 1777 "symfony/phpunit-bridge": ">=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7",
@@ -1681,12 +1786,13 @@
1681 "symfony/security-guard": ">=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", 1786 "symfony/security-guard": ">=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11",
1682 "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7", 1787 "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7",
1683 "symfony/serializer": ">=2,<2.0.11", 1788 "symfony/serializer": ">=2,<2.0.11",
1684 "symfony/symfony": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7", 1789 "symfony/symfony": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.4.13|>=5,<5.1.5",
1685 "symfony/translation": ">=2,<2.0.17", 1790 "symfony/translation": ">=2,<2.0.17",
1686 "symfony/validator": ">=2,<2.0.24|>=2.1,<2.1.12|>=2.2,<2.2.5|>=2.3,<2.3.3", 1791 "symfony/validator": ">=2,<2.0.24|>=2.1,<2.1.12|>=2.2,<2.2.5|>=2.3,<2.3.3",
1687 "symfony/var-exporter": ">=4.2,<4.2.12|>=4.3,<4.3.8", 1792 "symfony/var-exporter": ">=4.2,<4.2.12|>=4.3,<4.3.8",
1688 "symfony/web-profiler-bundle": ">=2,<2.3.19|>=2.4,<2.4.9|>=2.5,<2.5.4", 1793 "symfony/web-profiler-bundle": ">=2,<2.3.19|>=2.4,<2.4.9|>=2.5,<2.5.4",
1689 "symfony/yaml": ">=2,<2.0.22|>=2.1,<2.1.7", 1794 "symfony/yaml": ">=2,<2.0.22|>=2.1,<2.1.7",
1795 "t3g/svg-sanitizer": "<1.0.3",
1690 "tecnickcom/tcpdf": "<6.2.22", 1796 "tecnickcom/tcpdf": "<6.2.22",
1691 "thelia/backoffice-default-template": ">=2.1,<2.1.2", 1797 "thelia/backoffice-default-template": ">=2.1,<2.1.2",
1692 "thelia/thelia": ">=2.1-beta.1,<2.1.3", 1798 "thelia/thelia": ">=2.1-beta.1,<2.1.3",
@@ -1694,8 +1800,8 @@
1694 "titon/framework": ">=0,<9.9.99", 1800 "titon/framework": ">=0,<9.9.99",
1695 "truckersmp/phpwhois": "<=4.3.1", 1801 "truckersmp/phpwhois": "<=4.3.1",
1696 "twig/twig": "<1.38|>=2,<2.7", 1802 "twig/twig": "<1.38|>=2,<2.7",
1697 "typo3/cms": ">=6.2,<6.2.30|>=7,<7.6.32|>=8,<8.7.30|>=9,<9.5.17|>=10,<10.4.2", 1803 "typo3/cms": ">=6.2,<6.2.30|>=7,<7.6.32|>=8,<8.7.30|>=9,<9.5.20|>=10,<10.4.6",
1698 "typo3/cms-core": ">=8,<8.7.30|>=9,<9.5.17|>=10,<10.4.2", 1804 "typo3/cms-core": ">=8,<8.7.30|>=9,<9.5.20|>=10,<10.4.6",
1699 "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.10|>=3.1,<3.1.7|>=3.2,<3.2.7|>=3.3,<3.3.5", 1805 "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.10|>=3.1,<3.1.7|>=3.2,<3.2.7|>=3.3,<3.3.5",
1700 "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4", 1806 "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4",
1701 "typo3/phar-stream-wrapper": ">=1,<2.1.1|>=3,<3.1.1", 1807 "typo3/phar-stream-wrapper": ">=1,<2.1.1|>=3,<3.1.1",
@@ -1706,7 +1812,7 @@
1706 "willdurand/js-translation-bundle": "<2.1.1", 1812 "willdurand/js-translation-bundle": "<2.1.1",
1707 "yii2mod/yii2-cms": "<1.9.2", 1813 "yii2mod/yii2-cms": "<1.9.2",
1708 "yiisoft/yii": ">=1.1.14,<1.1.15", 1814 "yiisoft/yii": ">=1.1.14,<1.1.15",
1709 "yiisoft/yii2": "<2.0.15", 1815 "yiisoft/yii2": "<2.0.38",
1710 "yiisoft/yii2-bootstrap": "<2.0.4", 1816 "yiisoft/yii2-bootstrap": "<2.0.4",
1711 "yiisoft/yii2-dev": "<2.0.15", 1817 "yiisoft/yii2-dev": "<2.0.15",
1712 "yiisoft/yii2-elasticsearch": "<2.0.5", 1818 "yiisoft/yii2-elasticsearch": "<2.0.5",
@@ -1758,7 +1864,21 @@
1758 } 1864 }
1759 ], 1865 ],
1760 "description": "Prevents installation of composer packages with known security vulnerabilities: no API, simply require it", 1866 "description": "Prevents installation of composer packages with known security vulnerabilities: no API, simply require it",
1761 "time": "2020-05-12T11:18:47+00:00" 1867 "support": {
1868 "issues": "https://github.com/Roave/SecurityAdvisories/issues",
1869 "source": "https://github.com/Roave/SecurityAdvisories/tree/latest"
1870 },
1871 "funding": [
1872 {
1873 "url": "https://github.com/Ocramius",
1874 "type": "github"
1875 },
1876 {
1877 "url": "https://tidelift.com/funding/github/packagist/roave/security-advisories",
1878 "type": "tidelift"
1879 }
1880 ],
1881 "time": "2020-09-24T17:02:11+00:00"
1762 }, 1882 },
1763 { 1883 {
1764 "name": "sebastian/code-unit-reverse-lookup", 1884 "name": "sebastian/code-unit-reverse-lookup",
@@ -1803,6 +1923,10 @@
1803 ], 1923 ],
1804 "description": "Looks up which function or method a line of code belongs to", 1924 "description": "Looks up which function or method a line of code belongs to",
1805 "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 1925 "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
1926 "support": {
1927 "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
1928 "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/master"
1929 },
1806 "time": "2017-03-04T06:30:41+00:00" 1930 "time": "2017-03-04T06:30:41+00:00"
1807 }, 1931 },
1808 { 1932 {
@@ -1867,6 +1991,10 @@
1867 "compare", 1991 "compare",
1868 "equality" 1992 "equality"
1869 ], 1993 ],
1994 "support": {
1995 "issues": "https://github.com/sebastianbergmann/comparator/issues",
1996 "source": "https://github.com/sebastianbergmann/comparator/tree/master"
1997 },
1870 "time": "2018-07-12T15:12:46+00:00" 1998 "time": "2018-07-12T15:12:46+00:00"
1871 }, 1999 },
1872 { 2000 {
@@ -1923,6 +2051,10 @@
1923 "unidiff", 2051 "unidiff",
1924 "unified diff" 2052 "unified diff"
1925 ], 2053 ],
2054 "support": {
2055 "issues": "https://github.com/sebastianbergmann/diff/issues",
2056 "source": "https://github.com/sebastianbergmann/diff/tree/master"
2057 },
1926 "time": "2019-02-04T06:01:07+00:00" 2058 "time": "2019-02-04T06:01:07+00:00"
1927 }, 2059 },
1928 { 2060 {
@@ -1976,6 +2108,10 @@
1976 "environment", 2108 "environment",
1977 "hhvm" 2109 "hhvm"
1978 ], 2110 ],
2111 "support": {
2112 "issues": "https://github.com/sebastianbergmann/environment/issues",
2113 "source": "https://github.com/sebastianbergmann/environment/tree/4.2.3"
2114 },
1979 "time": "2019-11-20T08:46:58+00:00" 2115 "time": "2019-11-20T08:46:58+00:00"
1980 }, 2116 },
1981 { 2117 {
@@ -2043,50 +2179,11 @@
2043 "export", 2179 "export",
2044 "exporter" 2180 "exporter"
2045 ], 2181 ],
2046 "time": "2019-09-14T09:02:43+00:00" 2182 "support": {
2047 }, 2183 "issues": "https://github.com/sebastianbergmann/exporter/issues",
2048 { 2184 "source": "https://github.com/sebastianbergmann/exporter/tree/master"
2049 "name": "sebastian/finder-facade",
2050 "version": "1.2.3",
2051 "source": {
2052 "type": "git",
2053 "url": "https://github.com/sebastianbergmann/finder-facade.git",
2054 "reference": "167c45d131f7fc3d159f56f191a0a22228765e16"
2055 },
2056 "dist": {
2057 "type": "zip",
2058 "url": "https://api.github.com/repos/sebastianbergmann/finder-facade/zipball/167c45d131f7fc3d159f56f191a0a22228765e16",
2059 "reference": "167c45d131f7fc3d159f56f191a0a22228765e16",
2060 "shasum": ""
2061 },
2062 "require": {
2063 "php": "^7.1",
2064 "symfony/finder": "^2.3|^3.0|^4.0|^5.0",
2065 "theseer/fdomdocument": "^1.6"
2066 },
2067 "type": "library",
2068 "extra": {
2069 "branch-alias": []
2070 },
2071 "autoload": {
2072 "classmap": [
2073 "src/"
2074 ]
2075 }, 2185 },
2076 "notification-url": "https://packagist.org/downloads/", 2186 "time": "2019-09-14T09:02:43+00:00"
2077 "license": [
2078 "BSD-3-Clause"
2079 ],
2080 "authors": [
2081 {
2082 "name": "Sebastian Bergmann",
2083 "email": "sebastian@phpunit.de",
2084 "role": "lead"
2085 }
2086 ],
2087 "description": "FinderFacade is a convenience wrapper for Symfony's Finder component.",
2088 "homepage": "https://github.com/sebastianbergmann/finder-facade",
2089 "time": "2020-01-16T08:08:45+00:00"
2090 }, 2187 },
2091 { 2188 {
2092 "name": "sebastian/global-state", 2189 "name": "sebastian/global-state",
@@ -2137,6 +2234,10 @@
2137 "keywords": [ 2234 "keywords": [
2138 "global state" 2235 "global state"
2139 ], 2236 ],
2237 "support": {
2238 "issues": "https://github.com/sebastianbergmann/global-state/issues",
2239 "source": "https://github.com/sebastianbergmann/global-state/tree/2.0.0"
2240 },
2140 "time": "2017-04-27T15:39:26+00:00" 2241 "time": "2017-04-27T15:39:26+00:00"
2141 }, 2242 },
2142 { 2243 {
@@ -2184,6 +2285,10 @@
2184 ], 2285 ],
2185 "description": "Traverses array structures and object graphs to enumerate all referenced objects", 2286 "description": "Traverses array structures and object graphs to enumerate all referenced objects",
2186 "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 2287 "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
2288 "support": {
2289 "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
2290 "source": "https://github.com/sebastianbergmann/object-enumerator/tree/master"
2291 },
2187 "time": "2017-08-03T12:35:26+00:00" 2292 "time": "2017-08-03T12:35:26+00:00"
2188 }, 2293 },
2189 { 2294 {
@@ -2229,6 +2334,10 @@
2229 ], 2334 ],
2230 "description": "Allows reflection of object attributes, including inherited and non-public ones", 2335 "description": "Allows reflection of object attributes, including inherited and non-public ones",
2231 "homepage": "https://github.com/sebastianbergmann/object-reflector/", 2336 "homepage": "https://github.com/sebastianbergmann/object-reflector/",
2337 "support": {
2338 "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
2339 "source": "https://github.com/sebastianbergmann/object-reflector/tree/master"
2340 },
2232 "time": "2017-03-29T09:07:27+00:00" 2341 "time": "2017-03-29T09:07:27+00:00"
2233 }, 2342 },
2234 { 2343 {
@@ -2282,6 +2391,10 @@
2282 ], 2391 ],
2283 "description": "Provides functionality to recursively process PHP variables", 2392 "description": "Provides functionality to recursively process PHP variables",
2284 "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 2393 "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
2394 "support": {
2395 "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
2396 "source": "https://github.com/sebastianbergmann/recursion-context/tree/master"
2397 },
2285 "time": "2017-03-03T06:23:57+00:00" 2398 "time": "2017-03-03T06:23:57+00:00"
2286 }, 2399 },
2287 { 2400 {
@@ -2324,6 +2437,10 @@
2324 ], 2437 ],
2325 "description": "Provides a list of PHP built-in functions that operate on resources", 2438 "description": "Provides a list of PHP built-in functions that operate on resources",
2326 "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 2439 "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
2440 "support": {
2441 "issues": "https://github.com/sebastianbergmann/resource-operations/issues",
2442 "source": "https://github.com/sebastianbergmann/resource-operations/tree/master"
2443 },
2327 "time": "2018-10-04T04:07:39+00:00" 2444 "time": "2018-10-04T04:07:39+00:00"
2328 }, 2445 },
2329 { 2446 {
@@ -2367,20 +2484,24 @@
2367 ], 2484 ],
2368 "description": "Library that helps with managing the version number of Git-hosted PHP projects", 2485 "description": "Library that helps with managing the version number of Git-hosted PHP projects",
2369 "homepage": "https://github.com/sebastianbergmann/version", 2486 "homepage": "https://github.com/sebastianbergmann/version",
2487 "support": {
2488 "issues": "https://github.com/sebastianbergmann/version/issues",
2489 "source": "https://github.com/sebastianbergmann/version/tree/master"
2490 },
2370 "time": "2016-10-03T07:35:21+00:00" 2491 "time": "2016-10-03T07:35:21+00:00"
2371 }, 2492 },
2372 { 2493 {
2373 "name": "squizlabs/php_codesniffer", 2494 "name": "squizlabs/php_codesniffer",
2374 "version": "3.5.5", 2495 "version": "3.5.6",
2375 "source": { 2496 "source": {
2376 "type": "git", 2497 "type": "git",
2377 "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", 2498 "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
2378 "reference": "73e2e7f57d958e7228fce50dc0c61f58f017f9f6" 2499 "reference": "e97627871a7eab2f70e59166072a6b767d5834e0"
2379 }, 2500 },
2380 "dist": { 2501 "dist": {
2381 "type": "zip", 2502 "type": "zip",
2382 "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/73e2e7f57d958e7228fce50dc0c61f58f017f9f6", 2503 "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/e97627871a7eab2f70e59166072a6b767d5834e0",
2383 "reference": "73e2e7f57d958e7228fce50dc0c61f58f017f9f6", 2504 "reference": "e97627871a7eab2f70e59166072a6b767d5834e0",
2384 "shasum": "" 2505 "shasum": ""
2385 }, 2506 },
2386 "require": { 2507 "require": {
@@ -2418,145 +2539,25 @@
2418 "phpcs", 2539 "phpcs",
2419 "standards" 2540 "standards"
2420 ], 2541 ],
2421 "time": "2020-04-17T01:09:41+00:00" 2542 "support": {
2422 }, 2543 "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues",
2423 { 2544 "source": "https://github.com/squizlabs/PHP_CodeSniffer",
2424 "name": "symfony/console", 2545 "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki"
2425 "version": "v4.4.8",
2426 "source": {
2427 "type": "git",
2428 "url": "https://github.com/symfony/console.git",
2429 "reference": "10bb3ee3c97308869d53b3e3d03f6ac23ff985f7"
2430 },
2431 "dist": {
2432 "type": "zip",
2433 "url": "https://api.github.com/repos/symfony/console/zipball/10bb3ee3c97308869d53b3e3d03f6ac23ff985f7",
2434 "reference": "10bb3ee3c97308869d53b3e3d03f6ac23ff985f7",
2435 "shasum": ""
2436 },
2437 "require": {
2438 "php": "^7.1.3",
2439 "symfony/polyfill-mbstring": "~1.0",
2440 "symfony/polyfill-php73": "^1.8",
2441 "symfony/service-contracts": "^1.1|^2"
2442 },
2443 "conflict": {
2444 "symfony/dependency-injection": "<3.4",
2445 "symfony/event-dispatcher": "<4.3|>=5",
2446 "symfony/lock": "<4.4",
2447 "symfony/process": "<3.3"
2448 },
2449 "provide": {
2450 "psr/log-implementation": "1.0"
2451 },
2452 "require-dev": {
2453 "psr/log": "~1.0",
2454 "symfony/config": "^3.4|^4.0|^5.0",
2455 "symfony/dependency-injection": "^3.4|^4.0|^5.0",
2456 "symfony/event-dispatcher": "^4.3",
2457 "symfony/lock": "^4.4|^5.0",
2458 "symfony/process": "^3.4|^4.0|^5.0",
2459 "symfony/var-dumper": "^4.3|^5.0"
2460 },
2461 "suggest": {
2462 "psr/log": "For using the console logger",
2463 "symfony/event-dispatcher": "",
2464 "symfony/lock": "",
2465 "symfony/process": ""
2466 },
2467 "type": "library",
2468 "extra": {
2469 "branch-alias": {
2470 "dev-master": "4.4-dev"
2471 }
2472 },
2473 "autoload": {
2474 "psr-4": {
2475 "Symfony\\Component\\Console\\": ""
2476 },
2477 "exclude-from-classmap": [
2478 "/Tests/"
2479 ]
2480 },
2481 "notification-url": "https://packagist.org/downloads/",
2482 "license": [
2483 "MIT"
2484 ],
2485 "authors": [
2486 {
2487 "name": "Fabien Potencier",
2488 "email": "fabien@symfony.com"
2489 },
2490 {
2491 "name": "Symfony Community",
2492 "homepage": "https://symfony.com/contributors"
2493 }
2494 ],
2495 "description": "Symfony Console Component",
2496 "homepage": "https://symfony.com",
2497 "time": "2020-03-30T11:41:10+00:00"
2498 },
2499 {
2500 "name": "symfony/finder",
2501 "version": "v4.4.8",
2502 "source": {
2503 "type": "git",
2504 "url": "https://github.com/symfony/finder.git",
2505 "reference": "5729f943f9854c5781984ed4907bbb817735776b"
2506 },
2507 "dist": {
2508 "type": "zip",
2509 "url": "https://api.github.com/repos/symfony/finder/zipball/5729f943f9854c5781984ed4907bbb817735776b",
2510 "reference": "5729f943f9854c5781984ed4907bbb817735776b",
2511 "shasum": ""
2512 },
2513 "require": {
2514 "php": "^7.1.3"
2515 },
2516 "type": "library",
2517 "extra": {
2518 "branch-alias": {
2519 "dev-master": "4.4-dev"
2520 }
2521 }, 2546 },
2522 "autoload": { 2547 "time": "2020-08-10T04:50:15+00:00"
2523 "psr-4": {
2524 "Symfony\\Component\\Finder\\": ""
2525 },
2526 "exclude-from-classmap": [
2527 "/Tests/"
2528 ]
2529 },
2530 "notification-url": "https://packagist.org/downloads/",
2531 "license": [
2532 "MIT"
2533 ],
2534 "authors": [
2535 {
2536 "name": "Fabien Potencier",
2537 "email": "fabien@symfony.com"
2538 },
2539 {
2540 "name": "Symfony Community",
2541 "homepage": "https://symfony.com/contributors"
2542 }
2543 ],
2544 "description": "Symfony Finder Component",
2545 "homepage": "https://symfony.com",
2546 "time": "2020-03-27T16:54:36+00:00"
2547 }, 2548 },
2548 { 2549 {
2549 "name": "symfony/polyfill-ctype", 2550 "name": "symfony/polyfill-ctype",
2550 "version": "v1.17.0", 2551 "version": "v1.18.1",
2551 "source": { 2552 "source": {
2552 "type": "git", 2553 "type": "git",
2553 "url": "https://github.com/symfony/polyfill-ctype.git", 2554 "url": "https://github.com/symfony/polyfill-ctype.git",
2554 "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9" 2555 "reference": "1c302646f6efc070cd46856e600e5e0684d6b454"
2555 }, 2556 },
2556 "dist": { 2557 "dist": {
2557 "type": "zip", 2558 "type": "zip",
2558 "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e94c8b1bbe2bc77507a1056cdb06451c75b427f9", 2559 "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454",
2559 "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9", 2560 "reference": "1c302646f6efc070cd46856e600e5e0684d6b454",
2560 "shasum": "" 2561 "shasum": ""
2561 }, 2562 },
2562 "require": { 2563 "require": {
@@ -2568,7 +2569,11 @@
2568 "type": "library", 2569 "type": "library",
2569 "extra": { 2570 "extra": {
2570 "branch-alias": { 2571 "branch-alias": {
2571 "dev-master": "1.17-dev" 2572 "dev-master": "1.18-dev"
2573 },
2574 "thanks": {
2575 "name": "symfony/polyfill",
2576 "url": "https://github.com/symfony/polyfill"
2572 } 2577 }
2573 }, 2578 },
2574 "autoload": { 2579 "autoload": {
@@ -2601,222 +2606,24 @@
2601 "polyfill", 2606 "polyfill",
2602 "portable" 2607 "portable"
2603 ], 2608 ],
2604 "time": "2020-05-12T16:14:59+00:00" 2609 "support": {
2605 }, 2610 "source": "https://github.com/symfony/polyfill-ctype/tree/v1.18.0"
2606 {
2607 "name": "symfony/polyfill-mbstring",
2608 "version": "v1.17.0",
2609 "source": {
2610 "type": "git",
2611 "url": "https://github.com/symfony/polyfill-mbstring.git",
2612 "reference": "fa79b11539418b02fc5e1897267673ba2c19419c"
2613 },
2614 "dist": {
2615 "type": "zip",
2616 "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fa79b11539418b02fc5e1897267673ba2c19419c",
2617 "reference": "fa79b11539418b02fc5e1897267673ba2c19419c",
2618 "shasum": ""
2619 },
2620 "require": {
2621 "php": ">=5.3.3"
2622 },
2623 "suggest": {
2624 "ext-mbstring": "For best performance"
2625 },
2626 "type": "library",
2627 "extra": {
2628 "branch-alias": {
2629 "dev-master": "1.17-dev"
2630 }
2631 }, 2611 },
2632 "autoload": { 2612 "funding": [
2633 "psr-4": {
2634 "Symfony\\Polyfill\\Mbstring\\": ""
2635 },
2636 "files": [
2637 "bootstrap.php"
2638 ]
2639 },
2640 "notification-url": "https://packagist.org/downloads/",
2641 "license": [
2642 "MIT"
2643 ],
2644 "authors": [
2645 { 2613 {
2646 "name": "Nicolas Grekas", 2614 "url": "https://symfony.com/sponsor",
2647 "email": "p@tchwork.com" 2615 "type": "custom"
2648 }, 2616 },
2649 { 2617 {
2650 "name": "Symfony Community", 2618 "url": "https://github.com/fabpot",
2651 "homepage": "https://symfony.com/contributors" 2619 "type": "github"
2652 }
2653 ],
2654 "description": "Symfony polyfill for the Mbstring extension",
2655 "homepage": "https://symfony.com",
2656 "keywords": [
2657 "compatibility",
2658 "mbstring",
2659 "polyfill",
2660 "portable",
2661 "shim"
2662 ],
2663 "time": "2020-05-12T16:47:27+00:00"
2664 },
2665 {
2666 "name": "symfony/polyfill-php73",
2667 "version": "v1.17.0",
2668 "source": {
2669 "type": "git",
2670 "url": "https://github.com/symfony/polyfill-php73.git",
2671 "reference": "a760d8964ff79ab9bf057613a5808284ec852ccc"
2672 },
2673 "dist": {
2674 "type": "zip",
2675 "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/a760d8964ff79ab9bf057613a5808284ec852ccc",
2676 "reference": "a760d8964ff79ab9bf057613a5808284ec852ccc",
2677 "shasum": ""
2678 },
2679 "require": {
2680 "php": ">=5.3.3"
2681 },
2682 "type": "library",
2683 "extra": {
2684 "branch-alias": {
2685 "dev-master": "1.17-dev"
2686 }
2687 },
2688 "autoload": {
2689 "psr-4": {
2690 "Symfony\\Polyfill\\Php73\\": ""
2691 }, 2620 },
2692 "files": [
2693 "bootstrap.php"
2694 ],
2695 "classmap": [
2696 "Resources/stubs"
2697 ]
2698 },
2699 "notification-url": "https://packagist.org/downloads/",
2700 "license": [
2701 "MIT"
2702 ],
2703 "authors": [
2704 {
2705 "name": "Nicolas Grekas",
2706 "email": "p@tchwork.com"
2707 },
2708 {
2709 "name": "Symfony Community",
2710 "homepage": "https://symfony.com/contributors"
2711 }
2712 ],
2713 "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
2714 "homepage": "https://symfony.com",
2715 "keywords": [
2716 "compatibility",
2717 "polyfill",
2718 "portable",
2719 "shim"
2720 ],
2721 "time": "2020-05-12T16:47:27+00:00"
2722 },
2723 {
2724 "name": "symfony/service-contracts",
2725 "version": "v1.1.8",
2726 "source": {
2727 "type": "git",
2728 "url": "https://github.com/symfony/service-contracts.git",
2729 "reference": "ffc7f5692092df31515df2a5ecf3b7302b3ddacf"
2730 },
2731 "dist": {
2732 "type": "zip",
2733 "url": "https://api.github.com/repos/symfony/service-contracts/zipball/ffc7f5692092df31515df2a5ecf3b7302b3ddacf",
2734 "reference": "ffc7f5692092df31515df2a5ecf3b7302b3ddacf",
2735 "shasum": ""
2736 },
2737 "require": {
2738 "php": "^7.1.3",
2739 "psr/container": "^1.0"
2740 },
2741 "suggest": {
2742 "symfony/service-implementation": ""
2743 },
2744 "type": "library",
2745 "extra": {
2746 "branch-alias": {
2747 "dev-master": "1.1-dev"
2748 }
2749 },
2750 "autoload": {
2751 "psr-4": {
2752 "Symfony\\Contracts\\Service\\": ""
2753 }
2754 },
2755 "notification-url": "https://packagist.org/downloads/",
2756 "license": [
2757 "MIT"
2758 ],
2759 "authors": [
2760 {
2761 "name": "Nicolas Grekas",
2762 "email": "p@tchwork.com"
2763 },
2764 {
2765 "name": "Symfony Community",
2766 "homepage": "https://symfony.com/contributors"
2767 }
2768 ],
2769 "description": "Generic abstractions related to writing services",
2770 "homepage": "https://symfony.com",
2771 "keywords": [
2772 "abstractions",
2773 "contracts",
2774 "decoupling",
2775 "interfaces",
2776 "interoperability",
2777 "standards"
2778 ],
2779 "time": "2019-10-14T12:27:06+00:00"
2780 },
2781 {
2782 "name": "theseer/fdomdocument",
2783 "version": "1.6.6",
2784 "source": {
2785 "type": "git",
2786 "url": "https://github.com/theseer/fDOMDocument.git",
2787 "reference": "6e8203e40a32a9c770bcb62fe37e68b948da6dca"
2788 },
2789 "dist": {
2790 "type": "zip",
2791 "url": "https://api.github.com/repos/theseer/fDOMDocument/zipball/6e8203e40a32a9c770bcb62fe37e68b948da6dca",
2792 "reference": "6e8203e40a32a9c770bcb62fe37e68b948da6dca",
2793 "shasum": ""
2794 },
2795 "require": {
2796 "ext-dom": "*",
2797 "lib-libxml": "*",
2798 "php": ">=5.3.3"
2799 },
2800 "type": "library",
2801 "autoload": {
2802 "classmap": [
2803 "src/"
2804 ]
2805 },
2806 "notification-url": "https://packagist.org/downloads/",
2807 "license": [
2808 "BSD-3-Clause"
2809 ],
2810 "authors": [
2811 { 2621 {
2812 "name": "Arne Blankerts", 2622 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
2813 "email": "arne@blankerts.de", 2623 "type": "tidelift"
2814 "role": "lead"
2815 } 2624 }
2816 ], 2625 ],
2817 "description": "The classes contained within this repository extend the standard DOM to use exceptions at all occasions of errors instead of PHP warnings or notices. They also add various custom methods and shortcuts for convenience and to simplify the usage of DOM.", 2626 "time": "2020-07-14T12:35:20+00:00"
2818 "homepage": "https://github.com/theseer/fDOMDocument",
2819 "time": "2017-06-30T11:53:12+00:00"
2820 }, 2627 },
2821 { 2628 {
2822 "name": "theseer/tokenizer", 2629 "name": "theseer/tokenizer",
@@ -2856,27 +2663,32 @@
2856 } 2663 }
2857 ], 2664 ],
2858 "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", 2665 "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
2666 "support": {
2667 "issues": "https://github.com/theseer/tokenizer/issues",
2668 "source": "https://github.com/theseer/tokenizer/tree/master"
2669 },
2859 "time": "2019-06-13T22:48:21+00:00" 2670 "time": "2019-06-13T22:48:21+00:00"
2860 }, 2671 },
2861 { 2672 {
2862 "name": "webmozart/assert", 2673 "name": "webmozart/assert",
2863 "version": "1.8.0", 2674 "version": "1.9.1",
2864 "source": { 2675 "source": {
2865 "type": "git", 2676 "type": "git",
2866 "url": "https://github.com/webmozart/assert.git", 2677 "url": "https://github.com/webmozart/assert.git",
2867 "reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6" 2678 "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389"
2868 }, 2679 },
2869 "dist": { 2680 "dist": {
2870 "type": "zip", 2681 "type": "zip",
2871 "url": "https://api.github.com/repos/webmozart/assert/zipball/ab2cb0b3b559010b75981b1bdce728da3ee90ad6", 2682 "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
2872 "reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6", 2683 "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389",
2873 "shasum": "" 2684 "shasum": ""
2874 }, 2685 },
2875 "require": { 2686 "require": {
2876 "php": "^5.3.3 || ^7.0", 2687 "php": "^5.3.3 || ^7.0 || ^8.0",
2877 "symfony/polyfill-ctype": "^1.8" 2688 "symfony/polyfill-ctype": "^1.8"
2878 }, 2689 },
2879 "conflict": { 2690 "conflict": {
2691 "phpstan/phpstan": "<0.12.20",
2880 "vimeo/psalm": "<3.9.1" 2692 "vimeo/psalm": "<3.9.1"
2881 }, 2693 },
2882 "require-dev": { 2694 "require-dev": {
@@ -2904,7 +2716,11 @@
2904 "check", 2716 "check",
2905 "validate" 2717 "validate"
2906 ], 2718 ],
2907 "time": "2020-04-18T12:12:48+00:00" 2719 "support": {
2720 "issues": "https://github.com/webmozart/assert/issues",
2721 "source": "https://github.com/webmozart/assert/tree/master"
2722 },
2723 "time": "2020-07-08T17:02:28+00:00"
2908 } 2724 }
2909 ], 2725 ],
2910 "aliases": [], 2726 "aliases": [],
@@ -2923,5 +2739,6 @@
2923 "platform-dev": [], 2739 "platform-dev": [],
2924 "platform-overrides": { 2740 "platform-overrides": {
2925 "php": "7.1.29" 2741 "php": "7.1.29"
2926 } 2742 },
2743 "plugin-api-version": "2.0.0"
2927} 2744}
diff --git a/docker-compose.yml b/docker-compose.yml
index e8ea4271..a3de4b1c 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -33,7 +33,7 @@ services:
33 traefik.frontend.rule: "Host:${SHAARLI_VIRTUAL_HOST}" 33 traefik.frontend.rule: "Host:${SHAARLI_VIRTUAL_HOST}"
34 34
35 traefik: 35 traefik:
36 image: traefik 36 image: traefik:1.7-alpine
37 command: 37 command:
38 - "--defaultentrypoints=http,https" 38 - "--defaultentrypoints=http,https"
39 - "--entrypoints=Name:http Address::80 Redirect.EntryPoint:https" 39 - "--entrypoints=Name:http Address::80 Redirect.EntryPoint:https"
diff --git a/tests/ApplicationUtilsTest.php b/tests/ApplicationUtilsTest.php
index 421d2dd9..a232b351 100644
--- a/tests/ApplicationUtilsTest.php
+++ b/tests/ApplicationUtilsTest.php
@@ -8,7 +8,7 @@ require_once 'tests/utils/FakeApplicationUtils.php';
8/** 8/**
9 * Unitary tests for Shaarli utilities 9 * Unitary tests for Shaarli utilities
10 */ 10 */
11class ApplicationUtilsTest extends \PHPUnit\Framework\TestCase 11class ApplicationUtilsTest extends \Shaarli\TestCase
12{ 12{
13 protected static $testUpdateFile = 'sandbox/update.txt'; 13 protected static $testUpdateFile = 'sandbox/update.txt';
14 protected static $testVersion = '0.5.0'; 14 protected static $testVersion = '0.5.0';
@@ -144,10 +144,10 @@ class ApplicationUtilsTest extends \PHPUnit\Framework\TestCase
144 144
145 /** 145 /**
146 * Test update checks - invalid Git branch 146 * Test update checks - invalid Git branch
147 * @expectedException Exception
148 */ 147 */
149 public function testCheckUpdateInvalidGitBranch() 148 public function testCheckUpdateInvalidGitBranch()
150 { 149 {
150 $this->expectException(\Exception::class);
151 $this->expectExceptionMessageRegExp('/Invalid branch selected for updates/'); 151 $this->expectExceptionMessageRegExp('/Invalid branch selected for updates/');
152 152
153 ApplicationUtils::checkUpdate('', 'null', 0, true, true, 'unstable'); 153 ApplicationUtils::checkUpdate('', 'null', 0, true, true, 'unstable');
@@ -261,10 +261,10 @@ class ApplicationUtilsTest extends \PHPUnit\Framework\TestCase
261 261
262 /** 262 /**
263 * Check a unsupported PHP version 263 * Check a unsupported PHP version
264 * @expectedException Exception
265 */ 264 */
266 public function testCheckSupportedPHPVersion51() 265 public function testCheckSupportedPHPVersion51()
267 { 266 {
267 $this->expectException(\Exception::class);
268 $this->expectExceptionMessageRegExp('/Your PHP version is obsolete/'); 268 $this->expectExceptionMessageRegExp('/Your PHP version is obsolete/');
269 269
270 $this->assertTrue(ApplicationUtils::checkPHPVersion('5.3', '5.1.0')); 270 $this->assertTrue(ApplicationUtils::checkPHPVersion('5.3', '5.1.0'));
@@ -272,10 +272,10 @@ class ApplicationUtilsTest extends \PHPUnit\Framework\TestCase
272 272
273 /** 273 /**
274 * Check another unsupported PHP version 274 * Check another unsupported PHP version
275 * @expectedException Exception
276 */ 275 */
277 public function testCheckSupportedPHPVersion52() 276 public function testCheckSupportedPHPVersion52()
278 { 277 {
278 $this->expectException(\Exception::class);
279 $this->expectExceptionMessageRegExp('/Your PHP version is obsolete/'); 279 $this->expectExceptionMessageRegExp('/Your PHP version is obsolete/');
280 280
281 $this->assertTrue(ApplicationUtils::checkPHPVersion('5.3', '5.2')); 281 $this->assertTrue(ApplicationUtils::checkPHPVersion('5.3', '5.2'));
diff --git a/tests/FileUtilsTest.php b/tests/FileUtilsTest.php
index 6e8f44f2..9163bdf1 100644
--- a/tests/FileUtilsTest.php
+++ b/tests/FileUtilsTest.php
@@ -9,7 +9,7 @@ use Exception;
9 * 9 *
10 * Test file utility class. 10 * Test file utility class.
11 */ 11 */
12class FileUtilsTest extends \PHPUnit\Framework\TestCase 12class FileUtilsTest extends \Shaarli\TestCase
13{ 13{
14 /** 14 /**
15 * @var string Test file path. 15 * @var string Test file path.
diff --git a/tests/HistoryTest.php b/tests/HistoryTest.php
index fb633e79..6dc0e5b7 100644
--- a/tests/HistoryTest.php
+++ b/tests/HistoryTest.php
@@ -3,10 +3,9 @@
3namespace Shaarli; 3namespace Shaarli;
4 4
5use DateTime; 5use DateTime;
6use Exception;
7use Shaarli\Bookmark\Bookmark; 6use Shaarli\Bookmark\Bookmark;
8 7
9class HistoryTest extends \PHPUnit\Framework\TestCase 8class HistoryTest extends \Shaarli\TestCase
10{ 9{
11 /** 10 /**
12 * @var string History file path 11 * @var string History file path
diff --git a/tests/LanguagesTest.php b/tests/LanguagesTest.php
index 914179c8..ce24c160 100644
--- a/tests/LanguagesTest.php
+++ b/tests/LanguagesTest.php
@@ -7,7 +7,7 @@ use Shaarli\Config\ConfigManager;
7/** 7/**
8 * Class LanguagesTest. 8 * Class LanguagesTest.
9 */ 9 */
10class LanguagesTest extends \PHPUnit\Framework\TestCase 10class LanguagesTest extends \Shaarli\TestCase
11{ 11{
12 /** 12 /**
13 * @var string Config file path (without extension). 13 * @var string Config file path (without extension).
diff --git a/tests/PluginManagerTest.php b/tests/PluginManagerTest.php
index 3018999c..efef5e87 100644
--- a/tests/PluginManagerTest.php
+++ b/tests/PluginManagerTest.php
@@ -1,4 +1,5 @@
1<?php 1<?php
2
2namespace Shaarli\Plugin; 3namespace Shaarli\Plugin;
3 4
4use Shaarli\Config\ConfigManager; 5use Shaarli\Config\ConfigManager;
@@ -6,7 +7,7 @@ use Shaarli\Config\ConfigManager;
6/** 7/**
7 * Unit tests for Plugins 8 * Unit tests for Plugins
8 */ 9 */
9class PluginManagerTest extends \PHPUnit\Framework\TestCase 10class PluginManagerTest extends \Shaarli\TestCase
10{ 11{
11 /** 12 /**
12 * Path to tests plugin. 13 * Path to tests plugin.
@@ -81,8 +82,8 @@ class PluginManagerTest extends \PHPUnit\Framework\TestCase
81 $data = []; 82 $data = [];
82 $this->pluginManager->executeHooks('error', $data); 83 $this->pluginManager->executeHooks('error', $data);
83 84
84 $this->assertSame( 85 $this->assertRegExp(
85 'test [plugin incompatibility]: Class \'Unknown\' not found', 86 '/test \[plugin incompatibility\]: Class [\'"]Unknown[\'"] not found/',
86 $this->pluginManager->getErrors()[0] 87 $this->pluginManager->getErrors()[0]
87 ); 88 );
88 } 89 }
diff --git a/tests/TestCase.php b/tests/TestCase.php
new file mode 100644
index 00000000..781e7aa3
--- /dev/null
+++ b/tests/TestCase.php
@@ -0,0 +1,77 @@
1<?php
2
3declare(strict_types=1);
4
5namespace Shaarli;
6
7/**
8 * Helper class extending \PHPUnit\Framework\TestCase.
9 * Used to make Shaarli UT run on multiple versions of PHPUnit.
10 */
11class TestCase extends \PHPUnit\Framework\TestCase
12{
13 /**
14 * expectExceptionMessageRegExp has been removed and replaced by expectExceptionMessageMatches in PHPUnit 9.
15 */
16 public function expectExceptionMessageRegExp(string $regularExpression): void
17 {
18 if (method_exists($this, 'expectExceptionMessageMatches')) {
19 $this->expectExceptionMessageMatches($regularExpression);
20 } else {
21 parent::expectExceptionMessageRegExp($regularExpression);
22 }
23 }
24
25 /**
26 * assertContains is now used for iterable, strings should use assertStringContainsString
27 */
28 public function assertContainsPolyfill($expected, $actual, string $message = ''): void
29 {
30 if (is_string($actual) && method_exists($this, 'assertStringContainsString')) {
31 static::assertStringContainsString($expected, $actual, $message);
32 } else {
33 static::assertContains($expected, $actual, $message);
34 }
35 }
36
37 /**
38 * assertNotContains is now used for iterable, strings should use assertStringNotContainsString
39 */
40 public function assertNotContainsPolyfill($expected, $actual, string $message = ''): void
41 {
42 if (is_string($actual) && method_exists($this, 'assertStringNotContainsString')) {
43 static::assertStringNotContainsString($expected, $actual, $message);
44 } else {
45 static::assertNotContains($expected, $actual, $message);
46 }
47 }
48
49 /**
50 * assertFileNotExists has been renamed in assertFileDoesNotExist
51 */
52 public static function assertFileNotExists(string $filename, string $message = ''): void
53 {
54 if (method_exists(TestCase::class, 'assertFileDoesNotExist')) {
55 static::assertFileDoesNotExist($filename, $message);
56 } else {
57 parent::assertFileNotExists($filename, $message);
58 }
59 }
60
61 /**
62 * assertRegExp has been renamed in assertMatchesRegularExpression
63 */
64 public static function assertRegExp(string $pattern, string $string, string $message = ''): void
65 {
66 if (method_exists(TestCase::class, 'assertMatchesRegularExpression')) {
67 static::assertMatchesRegularExpression($pattern, $string, $message);
68 } else {
69 parent::assertRegExp($pattern, $string, $message);
70 }
71 }
72
73 public function isInTestsContext(): bool
74 {
75 return true;
76 }
77}
diff --git a/tests/ThumbnailerTest.php b/tests/ThumbnailerTest.php
index 5b6d6a4d..70519aca 100644
--- a/tests/ThumbnailerTest.php
+++ b/tests/ThumbnailerTest.php
@@ -2,7 +2,6 @@
2 2
3namespace Shaarli; 3namespace Shaarli;
4 4
5use PHPUnit\Framework\TestCase;
6use Shaarli\Config\ConfigManager; 5use Shaarli\Config\ConfigManager;
7use WebThumbnailer\Application\ConfigManager as WTConfigManager; 6use WebThumbnailer\Application\ConfigManager as WTConfigManager;
8 7
diff --git a/tests/TimeZoneTest.php b/tests/TimeZoneTest.php
index d3d9aeeb..77862855 100644
--- a/tests/TimeZoneTest.php
+++ b/tests/TimeZoneTest.php
@@ -8,7 +8,7 @@ require_once 'application/TimeZone.php';
8/** 8/**
9 * Unitary tests for timezone utilities 9 * Unitary tests for timezone utilities
10 */ 10 */
11class TimeZoneTest extends PHPUnit\Framework\TestCase 11class TimeZoneTest extends \Shaarli\TestCase
12{ 12{
13 /** 13 /**
14 * @var array of timezones 14 * @var array of timezones
diff --git a/tests/UtilsTest.php b/tests/UtilsTest.php
index 93b77539..6e787d7f 100644
--- a/tests/UtilsTest.php
+++ b/tests/UtilsTest.php
@@ -10,7 +10,7 @@ require_once 'application/Languages.php';
10/** 10/**
11 * Unitary tests for Shaarli utilities 11 * Unitary tests for Shaarli utilities
12 */ 12 */
13class UtilsTest extends PHPUnit\Framework\TestCase 13class UtilsTest extends \Shaarli\TestCase
14{ 14{
15 // Log file 15 // Log file
16 protected static $testLogFile = 'tests.log'; 16 protected static $testLogFile = 'tests.log';
diff --git a/tests/api/ApiMiddlewareTest.php b/tests/api/ApiMiddlewareTest.php
index b157e4a7..86700840 100644
--- a/tests/api/ApiMiddlewareTest.php
+++ b/tests/api/ApiMiddlewareTest.php
@@ -18,7 +18,7 @@ use Slim\Http\Response;
18 * 18 *
19 * @package Api 19 * @package Api
20 */ 20 */
21class ApiMiddlewareTest extends \PHPUnit\Framework\TestCase 21class ApiMiddlewareTest extends \Shaarli\TestCase
22{ 22{
23 /** 23 /**
24 * @var string datastore to test write operations 24 * @var string datastore to test write operations
@@ -26,7 +26,7 @@ class ApiMiddlewareTest extends \PHPUnit\Framework\TestCase
26 protected static $testDatastore = 'sandbox/datastore.php'; 26 protected static $testDatastore = 'sandbox/datastore.php';
27 27
28 /** 28 /**
29 * @var \ConfigManager instance 29 * @var ConfigManager instance
30 */ 30 */
31 protected $conf; 31 protected $conf;
32 32
@@ -67,6 +67,53 @@ class ApiMiddlewareTest extends \PHPUnit\Framework\TestCase
67 } 67 }
68 68
69 /** 69 /**
70 * Invoke the middleware with a valid token
71 */
72 public function testInvokeMiddlewareWithValidToken(): void
73 {
74 $next = function (Request $request, Response $response): Response {
75 return $response;
76 };
77 $mw = new ApiMiddleware($this->container);
78 $env = Environment::mock([
79 'REQUEST_METHOD' => 'GET',
80 'REQUEST_URI' => '/echo',
81 'HTTP_AUTHORIZATION'=> 'Bearer ' . ApiUtilsTest::generateValidJwtToken('NapoleonWasALizard'),
82 ]);
83 $request = Request::createFromEnvironment($env);
84 $response = new Response();
85 /** @var Response $response */
86 $response = $mw($request, $response, $next);
87
88 $this->assertEquals(200, $response->getStatusCode());
89 }
90
91 /**
92 * Invoke the middleware with a valid token
93 * Using specific Apache CGI redirected authorization.
94 */
95 public function testInvokeMiddlewareWithValidTokenFromRedirectedHeader(): void
96 {
97 $next = function (Request $request, Response $response): Response {
98 return $response;
99 };
100
101 $token = 'Bearer ' . ApiUtilsTest::generateValidJwtToken('NapoleonWasALizard');
102 $this->container->environment['REDIRECT_HTTP_AUTHORIZATION'] = $token;
103 $mw = new ApiMiddleware($this->container);
104 $env = Environment::mock([
105 'REQUEST_METHOD' => 'GET',
106 'REQUEST_URI' => '/echo',
107 ]);
108 $request = Request::createFromEnvironment($env);
109 $response = new Response();
110 /** @var Response $response */
111 $response = $mw($request, $response, $next);
112
113 $this->assertEquals(200, $response->getStatusCode());
114 }
115
116 /**
70 * Invoke the middleware with the API disabled: 117 * Invoke the middleware with the API disabled:
71 * should return a 401 error Unauthorized. 118 * should return a 401 error Unauthorized.
72 */ 119 */
@@ -109,7 +156,7 @@ class ApiMiddlewareTest extends \PHPUnit\Framework\TestCase
109 $this->assertEquals(401, $response->getStatusCode()); 156 $this->assertEquals(401, $response->getStatusCode());
110 $body = json_decode((string) $response->getBody()); 157 $body = json_decode((string) $response->getBody());
111 $this->assertEquals('Not authorized: API is disabled', $body->message); 158 $this->assertEquals('Not authorized: API is disabled', $body->message);
112 $this->assertContains('ApiAuthorizationException', $body->stacktrace); 159 $this->assertContainsPolyfill('ApiAuthorizationException', $body->stacktrace);
113 } 160 }
114 161
115 /** 162 /**
@@ -132,7 +179,7 @@ class ApiMiddlewareTest extends \PHPUnit\Framework\TestCase
132 $this->assertEquals(401, $response->getStatusCode()); 179 $this->assertEquals(401, $response->getStatusCode());
133 $body = json_decode((string) $response->getBody()); 180 $body = json_decode((string) $response->getBody());
134 $this->assertEquals('Not authorized: JWT token not provided', $body->message); 181 $this->assertEquals('Not authorized: JWT token not provided', $body->message);
135 $this->assertContains('ApiAuthorizationException', $body->stacktrace); 182 $this->assertContainsPolyfill('ApiAuthorizationException', $body->stacktrace);
136 } 183 }
137 184
138 /** 185 /**
@@ -157,7 +204,7 @@ class ApiMiddlewareTest extends \PHPUnit\Framework\TestCase
157 $this->assertEquals(401, $response->getStatusCode()); 204 $this->assertEquals(401, $response->getStatusCode());
158 $body = json_decode((string) $response->getBody()); 205 $body = json_decode((string) $response->getBody());
159 $this->assertEquals('Not authorized: Token secret must be set in Shaarli\'s administration', $body->message); 206 $this->assertEquals('Not authorized: Token secret must be set in Shaarli\'s administration', $body->message);
160 $this->assertContains('ApiAuthorizationException', $body->stacktrace); 207 $this->assertContainsPolyfill('ApiAuthorizationException', $body->stacktrace);
161 } 208 }
162 209
163 /** 210 /**
@@ -180,7 +227,7 @@ class ApiMiddlewareTest extends \PHPUnit\Framework\TestCase
180 $this->assertEquals(401, $response->getStatusCode()); 227 $this->assertEquals(401, $response->getStatusCode());
181 $body = json_decode((string) $response->getBody()); 228 $body = json_decode((string) $response->getBody());
182 $this->assertEquals('Not authorized: Invalid JWT header', $body->message); 229 $this->assertEquals('Not authorized: Invalid JWT header', $body->message);
183 $this->assertContains('ApiAuthorizationException', $body->stacktrace); 230 $this->assertContainsPolyfill('ApiAuthorizationException', $body->stacktrace);
184 } 231 }
185 232
186 /** 233 /**
@@ -206,6 +253,6 @@ class ApiMiddlewareTest extends \PHPUnit\Framework\TestCase
206 $this->assertEquals(401, $response->getStatusCode()); 253 $this->assertEquals(401, $response->getStatusCode());
207 $body = json_decode((string) $response->getBody()); 254 $body = json_decode((string) $response->getBody());
208 $this->assertEquals('Not authorized: Malformed JWT token', $body->message); 255 $this->assertEquals('Not authorized: Malformed JWT token', $body->message);
209 $this->assertContains('ApiAuthorizationException', $body->stacktrace); 256 $this->assertContainsPolyfill('ApiAuthorizationException', $body->stacktrace);
210 } 257 }
211} 258}
diff --git a/tests/api/ApiUtilsTest.php b/tests/api/ApiUtilsTest.php
index 96787014..7a143859 100644
--- a/tests/api/ApiUtilsTest.php
+++ b/tests/api/ApiUtilsTest.php
@@ -8,7 +8,7 @@ use Shaarli\Http\Base64Url;
8/** 8/**
9 * Class ApiUtilsTest 9 * Class ApiUtilsTest
10 */ 10 */
11class ApiUtilsTest extends \PHPUnit\Framework\TestCase 11class ApiUtilsTest extends \Shaarli\TestCase
12{ 12{
13 /** 13 /**
14 * Force the timezone for ISO datetimes. 14 * Force the timezone for ISO datetimes.
diff --git a/tests/api/controllers/history/HistoryTest.php b/tests/api/controllers/history/HistoryTest.php
index 40f26b12..84f8716e 100644
--- a/tests/api/controllers/history/HistoryTest.php
+++ b/tests/api/controllers/history/HistoryTest.php
@@ -11,7 +11,7 @@ use Slim\Http\Response;
11 11
12require_once 'tests/utils/ReferenceHistory.php'; 12require_once 'tests/utils/ReferenceHistory.php';
13 13
14class HistoryTest extends \PHPUnit\Framework\TestCase 14class HistoryTest extends \Shaarli\TestCase
15{ 15{
16 /** 16 /**
17 * @var string datastore to test write operations 17 * @var string datastore to test write operations
diff --git a/tests/api/controllers/info/InfoTest.php b/tests/api/controllers/info/InfoTest.php
index cc50d2e3..1598e1e8 100644
--- a/tests/api/controllers/info/InfoTest.php
+++ b/tests/api/controllers/info/InfoTest.php
@@ -1,10 +1,10 @@
1<?php 1<?php
2namespace Shaarli\Api\Controllers; 2namespace Shaarli\Api\Controllers;
3 3
4use PHPUnit\Framework\TestCase;
5use Shaarli\Bookmark\BookmarkFileService; 4use Shaarli\Bookmark\BookmarkFileService;
6use Shaarli\Config\ConfigManager; 5use Shaarli\Config\ConfigManager;
7use Shaarli\History; 6use Shaarli\History;
7use Shaarli\TestCase;
8use Slim\Container; 8use Slim\Container;
9use Slim\Http\Environment; 9use Slim\Http\Environment;
10use Slim\Http\Request; 10use Slim\Http\Request;
diff --git a/tests/api/controllers/links/DeleteLinkTest.php b/tests/api/controllers/links/DeleteLinkTest.php
index bd8403cf..cf9464f0 100644
--- a/tests/api/controllers/links/DeleteLinkTest.php
+++ b/tests/api/controllers/links/DeleteLinkTest.php
@@ -11,7 +11,7 @@ use Slim\Http\Environment;
11use Slim\Http\Request; 11use Slim\Http\Request;
12use Slim\Http\Response; 12use Slim\Http\Response;
13 13
14class DeleteLinkTest extends \PHPUnit\Framework\TestCase 14class DeleteLinkTest extends \Shaarli\TestCase
15{ 15{
16 /** 16 /**
17 * @var string datastore to test write operations 17 * @var string datastore to test write operations
diff --git a/tests/api/controllers/links/GetLinkIdTest.php b/tests/api/controllers/links/GetLinkIdTest.php
index 3a3aaa7b..99dc606f 100644
--- a/tests/api/controllers/links/GetLinkIdTest.php
+++ b/tests/api/controllers/links/GetLinkIdTest.php
@@ -20,7 +20,7 @@ use Slim\Http\Response;
20 * 20 *
21 * @package Shaarli\Api\Controllers 21 * @package Shaarli\Api\Controllers
22 */ 22 */
23class GetLinkIdTest extends \PHPUnit\Framework\TestCase 23class GetLinkIdTest extends \Shaarli\TestCase
24{ 24{
25 /** 25 /**
26 * @var string datastore to test write operations 26 * @var string datastore to test write operations
diff --git a/tests/api/controllers/links/GetLinksTest.php b/tests/api/controllers/links/GetLinksTest.php
index 01c40c2f..ca1bfc63 100644
--- a/tests/api/controllers/links/GetLinksTest.php
+++ b/tests/api/controllers/links/GetLinksTest.php
@@ -20,7 +20,7 @@ use Slim\Http\Response;
20 * 20 *
21 * @package Shaarli\Api\Controllers 21 * @package Shaarli\Api\Controllers
22 */ 22 */
23class GetLinksTest extends \PHPUnit\Framework\TestCase 23class GetLinksTest extends \Shaarli\TestCase
24{ 24{
25 /** 25 /**
26 * @var string datastore to test write operations 26 * @var string datastore to test write operations
diff --git a/tests/api/controllers/links/PostLinkTest.php b/tests/api/controllers/links/PostLinkTest.php
index b1c9008b..fe3de66f 100644
--- a/tests/api/controllers/links/PostLinkTest.php
+++ b/tests/api/controllers/links/PostLinkTest.php
@@ -2,11 +2,11 @@
2 2
3namespace Shaarli\Api\Controllers; 3namespace Shaarli\Api\Controllers;
4 4
5use PHPUnit\Framework\TestCase;
6use Shaarli\Bookmark\Bookmark; 5use Shaarli\Bookmark\Bookmark;
7use Shaarli\Bookmark\BookmarkFileService; 6use Shaarli\Bookmark\BookmarkFileService;
8use Shaarli\Config\ConfigManager; 7use Shaarli\Config\ConfigManager;
9use Shaarli\History; 8use Shaarli\History;
9use Shaarli\TestCase;
10use Slim\Container; 10use Slim\Container;
11use Slim\Http\Environment; 11use Slim\Http\Environment;
12use Slim\Http\Request; 12use Slim\Http\Request;
diff --git a/tests/api/controllers/links/PutLinkTest.php b/tests/api/controllers/links/PutLinkTest.php
index 3d62a1b1..a2e87c59 100644
--- a/tests/api/controllers/links/PutLinkTest.php
+++ b/tests/api/controllers/links/PutLinkTest.php
@@ -12,7 +12,7 @@ use Slim\Http\Environment;
12use Slim\Http\Request; 12use Slim\Http\Request;
13use Slim\Http\Response; 13use Slim\Http\Response;
14 14
15class PutLinkTest extends \PHPUnit\Framework\TestCase 15class PutLinkTest extends \Shaarli\TestCase
16{ 16{
17 /** 17 /**
18 * @var string datastore to test write operations 18 * @var string datastore to test write operations
diff --git a/tests/api/controllers/tags/DeleteTagTest.php b/tests/api/controllers/tags/DeleteTagTest.php
index 0d991b85..1326eb47 100644
--- a/tests/api/controllers/tags/DeleteTagTest.php
+++ b/tests/api/controllers/tags/DeleteTagTest.php
@@ -12,7 +12,7 @@ use Slim\Http\Environment;
12use Slim\Http\Request; 12use Slim\Http\Request;
13use Slim\Http\Response; 13use Slim\Http\Response;
14 14
15class DeleteTagTest extends \PHPUnit\Framework\TestCase 15class DeleteTagTest extends \Shaarli\TestCase
16{ 16{
17 /** 17 /**
18 * @var string datastore to test write operations 18 * @var string datastore to test write operations
diff --git a/tests/api/controllers/tags/GetTagNameTest.php b/tests/api/controllers/tags/GetTagNameTest.php
index a2fb89ab..9c05954b 100644
--- a/tests/api/controllers/tags/GetTagNameTest.php
+++ b/tests/api/controllers/tags/GetTagNameTest.php
@@ -18,7 +18,7 @@ use Slim\Http\Response;
18 * 18 *
19 * @package Shaarli\Api\Controllers 19 * @package Shaarli\Api\Controllers
20 */ 20 */
21class GetTagNameTest extends \PHPUnit\Framework\TestCase 21class GetTagNameTest extends \Shaarli\TestCase
22{ 22{
23 /** 23 /**
24 * @var string datastore to test write operations 24 * @var string datastore to test write operations
diff --git a/tests/api/controllers/tags/GetTagsTest.php b/tests/api/controllers/tags/GetTagsTest.php
index ab666f20..3459fdfa 100644
--- a/tests/api/controllers/tags/GetTagsTest.php
+++ b/tests/api/controllers/tags/GetTagsTest.php
@@ -17,7 +17,7 @@ use Slim\Http\Response;
17 * 17 *
18 * @package Shaarli\Api\Controllers 18 * @package Shaarli\Api\Controllers
19 */ 19 */
20class GetTagsTest extends \PHPUnit\Framework\TestCase 20class GetTagsTest extends \Shaarli\TestCase
21{ 21{
22 /** 22 /**
23 * @var string datastore to test write operations 23 * @var string datastore to test write operations
diff --git a/tests/api/controllers/tags/PutTagTest.php b/tests/api/controllers/tags/PutTagTest.php
index 0845dce1..74edde78 100644
--- a/tests/api/controllers/tags/PutTagTest.php
+++ b/tests/api/controllers/tags/PutTagTest.php
@@ -12,7 +12,7 @@ use Slim\Http\Environment;
12use Slim\Http\Request; 12use Slim\Http\Request;
13use Slim\Http\Response; 13use Slim\Http\Response;
14 14
15class PutTagTest extends \PHPUnit\Framework\TestCase 15class PutTagTest extends \Shaarli\TestCase
16{ 16{
17 /** 17 /**
18 * @var string datastore to test write operations 18 * @var string datastore to test write operations
diff --git a/tests/bookmark/BookmarkArrayTest.php b/tests/bookmark/BookmarkArrayTest.php
index bad3af8d..ebed9bfc 100644
--- a/tests/bookmark/BookmarkArrayTest.php
+++ b/tests/bookmark/BookmarkArrayTest.php
@@ -2,10 +2,7 @@
2 2
3namespace Shaarli\Bookmark; 3namespace Shaarli\Bookmark;
4 4
5use PHPUnit\Framework\TestCase; 5use Shaarli\TestCase;
6use Shaarli\Bookmark\Exception\InvalidBookmarkException;
7use Shaarli\Config\ConfigManager;
8use Shaarli\History;
9 6
10/** 7/**
11 * Class BookmarkArrayTest 8 * Class BookmarkArrayTest
diff --git a/tests/bookmark/BookmarkFileServiceTest.php b/tests/bookmark/BookmarkFileServiceTest.php
index 9cff0fb3..c399822b 100644
--- a/tests/bookmark/BookmarkFileServiceTest.php
+++ b/tests/bookmark/BookmarkFileServiceTest.php
@@ -6,7 +6,6 @@
6namespace Shaarli\Bookmark; 6namespace Shaarli\Bookmark;
7 7
8use DateTime; 8use DateTime;
9use PHPUnit\Framework\TestCase;
10use ReferenceLinkDB; 9use ReferenceLinkDB;
11use ReflectionClass; 10use ReflectionClass;
12use Shaarli; 11use Shaarli;
@@ -14,6 +13,7 @@ use Shaarli\Bookmark\Exception\BookmarkNotFoundException;
14use Shaarli\Config\ConfigManager; 13use Shaarli\Config\ConfigManager;
15use Shaarli\Formatter\BookmarkMarkdownFormatter; 14use Shaarli\Formatter\BookmarkMarkdownFormatter;
16use Shaarli\History; 15use Shaarli\History;
16use Shaarli\TestCase;
17 17
18/** 18/**
19 * Unitary tests for LegacyLinkDBTest 19 * Unitary tests for LegacyLinkDBTest
@@ -637,11 +637,10 @@ class BookmarkFileServiceTest extends TestCase
637 */ 637 */
638 /** 638 /**
639 * Attempt to instantiate a LinkDB whereas the datastore is not writable 639 * Attempt to instantiate a LinkDB whereas the datastore is not writable
640 *
641 * @expectedException Shaarli\Bookmark\Exception\NotWritableDataStoreException
642 */ 640 */
643 public function testConstructDatastoreNotWriteable() 641 public function testConstructDatastoreNotWriteable()
644 { 642 {
643 $this->expectException(\Shaarli\Bookmark\Exception\NotWritableDataStoreException::class);
645 $this->expectExceptionMessageRegExp('#Couldn\'t load data from the data store file "null".*#'); 644 $this->expectExceptionMessageRegExp('#Couldn\'t load data from the data store file "null".*#');
646 645
647 $conf = new ConfigManager('tests/utils/config/configJson'); 646 $conf = new ConfigManager('tests/utils/config/configJson');
@@ -748,7 +747,7 @@ class BookmarkFileServiceTest extends TestCase
748 $link = $this->publicLinkDB->findByUrl('http://mediagoblin.org/'); 747 $link = $this->publicLinkDB->findByUrl('http://mediagoblin.org/');
749 748
750 $this->assertNotEquals(false, $link); 749 $this->assertNotEquals(false, $link);
751 $this->assertContains( 750 $this->assertContainsPolyfill(
752 'A free software media publishing platform', 751 'A free software media publishing platform',
753 $link->getDescription() 752 $link->getDescription()
754 ); 753 );
diff --git a/tests/bookmark/BookmarkFilterTest.php b/tests/bookmark/BookmarkFilterTest.php
index 752631a5..48c7f824 100644
--- a/tests/bookmark/BookmarkFilterTest.php
+++ b/tests/bookmark/BookmarkFilterTest.php
@@ -3,10 +3,10 @@
3namespace Shaarli\Bookmark; 3namespace Shaarli\Bookmark;
4 4
5use Exception; 5use Exception;
6use PHPUnit\Framework\TestCase;
7use ReferenceLinkDB; 6use ReferenceLinkDB;
8use Shaarli\Config\ConfigManager; 7use Shaarli\Config\ConfigManager;
9use Shaarli\History; 8use Shaarli\History;
9use Shaarli\TestCase;
10 10
11/** 11/**
12 * Class BookmarkFilterTest. 12 * Class BookmarkFilterTest.
@@ -212,10 +212,10 @@ class BookmarkFilterTest extends TestCase
212 212
213 /** 213 /**
214 * Use an invalid date format 214 * Use an invalid date format
215 * @expectedException Exception
216 */ 215 */
217 public function testFilterInvalidDayWithChars() 216 public function testFilterInvalidDayWithChars()
218 { 217 {
218 $this->expectException(\Exception::class);
219 $this->expectExceptionMessageRegExp('/Invalid date format/'); 219 $this->expectExceptionMessageRegExp('/Invalid date format/');
220 220
221 self::$linkFilter->filter(BookmarkFilter::$FILTER_DAY, 'Rainy day, dream away'); 221 self::$linkFilter->filter(BookmarkFilter::$FILTER_DAY, 'Rainy day, dream away');
@@ -223,10 +223,10 @@ class BookmarkFilterTest extends TestCase
223 223
224 /** 224 /**
225 * Use an invalid date format 225 * Use an invalid date format
226 * @expectedException Exception
227 */ 226 */
228 public function testFilterInvalidDayDigits() 227 public function testFilterInvalidDayDigits()
229 { 228 {
229 $this->expectException(\Exception::class);
230 $this->expectExceptionMessageRegExp('/Invalid date format/'); 230 $this->expectExceptionMessageRegExp('/Invalid date format/');
231 231
232 self::$linkFilter->filter(BookmarkFilter::$FILTER_DAY, '20'); 232 self::$linkFilter->filter(BookmarkFilter::$FILTER_DAY, '20');
diff --git a/tests/bookmark/BookmarkInitializerTest.php b/tests/bookmark/BookmarkInitializerTest.php
index 454269bb..25704004 100644
--- a/tests/bookmark/BookmarkInitializerTest.php
+++ b/tests/bookmark/BookmarkInitializerTest.php
@@ -2,9 +2,9 @@
2 2
3namespace Shaarli\Bookmark; 3namespace Shaarli\Bookmark;
4 4
5use PHPUnit\Framework\TestCase;
6use Shaarli\Config\ConfigManager; 5use Shaarli\Config\ConfigManager;
7use Shaarli\History; 6use Shaarli\History;
7use Shaarli\TestCase;
8 8
9/** 9/**
10 * Class BookmarkInitializerTest 10 * Class BookmarkInitializerTest
diff --git a/tests/bookmark/BookmarkTest.php b/tests/bookmark/BookmarkTest.php
index 4b6a3c07..afec2440 100644
--- a/tests/bookmark/BookmarkTest.php
+++ b/tests/bookmark/BookmarkTest.php
@@ -2,8 +2,8 @@
2 2
3namespace Shaarli\Bookmark; 3namespace Shaarli\Bookmark;
4 4
5use PHPUnit\Framework\TestCase;
6use Shaarli\Bookmark\Exception\InvalidBookmarkException; 5use Shaarli\Bookmark\Exception\InvalidBookmarkException;
6use Shaarli\TestCase;
7 7
8/** 8/**
9 * Class BookmarkTest 9 * Class BookmarkTest
@@ -150,7 +150,7 @@ class BookmarkTest extends TestCase
150 $exception = $e; 150 $exception = $e;
151 } 151 }
152 $this->assertNotNull($exception); 152 $this->assertNotNull($exception);
153 $this->assertContains('- ID: '. PHP_EOL, $exception->getMessage()); 153 $this->assertContainsPolyfill('- ID: '. PHP_EOL, $exception->getMessage());
154 } 154 }
155 155
156 /** 156 /**
@@ -169,7 +169,7 @@ class BookmarkTest extends TestCase
169 $exception = $e; 169 $exception = $e;
170 } 170 }
171 $this->assertNotNull($exception); 171 $this->assertNotNull($exception);
172 $this->assertContains('- ID: str'. PHP_EOL, $exception->getMessage()); 172 $this->assertContainsPolyfill('- ID: str'. PHP_EOL, $exception->getMessage());
173 } 173 }
174 174
175 /** 175 /**
@@ -188,7 +188,7 @@ class BookmarkTest extends TestCase
188 $exception = $e; 188 $exception = $e;
189 } 189 }
190 $this->assertNotNull($exception); 190 $this->assertNotNull($exception);
191 $this->assertContains('- ShortUrl: '. PHP_EOL, $exception->getMessage()); 191 $this->assertContainsPolyfill('- ShortUrl: '. PHP_EOL, $exception->getMessage());
192 } 192 }
193 193
194 /** 194 /**
@@ -207,7 +207,7 @@ class BookmarkTest extends TestCase
207 $exception = $e; 207 $exception = $e;
208 } 208 }
209 $this->assertNotNull($exception); 209 $this->assertNotNull($exception);
210 $this->assertContains('- Created: '. PHP_EOL, $exception->getMessage()); 210 $this->assertContainsPolyfill('- Created: '. PHP_EOL, $exception->getMessage());
211 } 211 }
212 212
213 /** 213 /**
@@ -226,7 +226,7 @@ class BookmarkTest extends TestCase
226 $exception = $e; 226 $exception = $e;
227 } 227 }
228 $this->assertNotNull($exception); 228 $this->assertNotNull($exception);
229 $this->assertContains('- Created: Not a DateTime object'. PHP_EOL, $exception->getMessage()); 229 $this->assertContainsPolyfill('- Created: Not a DateTime object'. PHP_EOL, $exception->getMessage());
230 } 230 }
231 231
232 /** 232 /**
diff --git a/tests/bookmark/LinkUtilsTest.php b/tests/bookmark/LinkUtilsTest.php
index 0d07897b..ef00b92f 100644
--- a/tests/bookmark/LinkUtilsTest.php
+++ b/tests/bookmark/LinkUtilsTest.php
@@ -2,7 +2,7 @@
2 2
3namespace Shaarli\Bookmark; 3namespace Shaarli\Bookmark;
4 4
5use PHPUnit\Framework\TestCase; 5use Shaarli\TestCase;
6 6
7require_once 'tests/utils/CurlUtils.php'; 7require_once 'tests/utils/CurlUtils.php';
8 8
@@ -450,13 +450,13 @@ class LinkUtilsTest extends TestCase
450 カタカナ #カタカナ」カタカナ\n'; 450 カタカナ #カタカナ」カタカナ\n';
451 $autolinkedDescription = hashtag_autolink($rawDescription, $index); 451 $autolinkedDescription = hashtag_autolink($rawDescription, $index);
452 452
453 $this->assertContains($this->getHashtagLink('hashtag', $index), $autolinkedDescription); 453 $this->assertContainsPolyfill($this->getHashtagLink('hashtag', $index), $autolinkedDescription);
454 $this->assertNotContains(' #hashtag', $autolinkedDescription); 454 $this->assertNotContainsPolyfill(' #hashtag', $autolinkedDescription);
455 $this->assertNotContains('>#nothashtag', $autolinkedDescription); 455 $this->assertNotContainsPolyfill('>#nothashtag', $autolinkedDescription);
456 $this->assertContains($this->getHashtagLink('ашок', $index), $autolinkedDescription); 456 $this->assertContainsPolyfill($this->getHashtagLink('ашок', $index), $autolinkedDescription);
457 $this->assertContains($this->getHashtagLink('カタカナ', $index), $autolinkedDescription); 457 $this->assertContainsPolyfill($this->getHashtagLink('カタカナ', $index), $autolinkedDescription);
458 $this->assertContains($this->getHashtagLink('hashtag_hashtag', $index), $autolinkedDescription); 458 $this->assertContainsPolyfill($this->getHashtagLink('hashtag_hashtag', $index), $autolinkedDescription);
459 $this->assertNotContains($this->getHashtagLink('hashtag-nothashtag', $index), $autolinkedDescription); 459 $this->assertNotContainsPolyfill($this->getHashtagLink('hashtag-nothashtag', $index), $autolinkedDescription);
460 } 460 }
461 461
462 /** 462 /**
@@ -467,9 +467,9 @@ class LinkUtilsTest extends TestCase
467 $rawDescription = 'blabla #hashtag x#nothashtag'; 467 $rawDescription = 'blabla #hashtag x#nothashtag';
468 $autolinkedDescription = hashtag_autolink($rawDescription); 468 $autolinkedDescription = hashtag_autolink($rawDescription);
469 469
470 $this->assertContains($this->getHashtagLink('hashtag'), $autolinkedDescription); 470 $this->assertContainsPolyfill($this->getHashtagLink('hashtag'), $autolinkedDescription);
471 $this->assertNotContains(' #hashtag', $autolinkedDescription); 471 $this->assertNotContainsPolyfill(' #hashtag', $autolinkedDescription);
472 $this->assertNotContains('>#nothashtag', $autolinkedDescription); 472 $this->assertNotContainsPolyfill('>#nothashtag', $autolinkedDescription);
473 } 473 }
474 474
475 /** 475 /**
diff --git a/tests/bootstrap.php b/tests/bootstrap.php
index d4ddedd5..2d675c9a 100644
--- a/tests/bootstrap.php
+++ b/tests/bootstrap.php
@@ -18,6 +18,7 @@ require_once 'application/bookmark/LinkUtils.php';
18require_once 'application/Utils.php'; 18require_once 'application/Utils.php';
19require_once 'application/http/UrlUtils.php'; 19require_once 'application/http/UrlUtils.php';
20require_once 'application/http/HttpUtils.php'; 20require_once 'application/http/HttpUtils.php';
21require_once 'tests/TestCase.php';
21require_once 'tests/container/ShaarliTestContainer.php'; 22require_once 'tests/container/ShaarliTestContainer.php';
22require_once 'tests/front/controller/visitor/FrontControllerMockHelper.php'; 23require_once 'tests/front/controller/visitor/FrontControllerMockHelper.php';
23require_once 'tests/front/controller/admin/FrontAdminControllerMockHelper.php'; 24require_once 'tests/front/controller/admin/FrontAdminControllerMockHelper.php';
diff --git a/tests/config/ConfigJsonTest.php b/tests/config/ConfigJsonTest.php
index f884b0c6..c0ba5b8f 100644
--- a/tests/config/ConfigJsonTest.php
+++ b/tests/config/ConfigJsonTest.php
@@ -4,7 +4,7 @@ namespace Shaarli\Config;
4/** 4/**
5 * Class ConfigJsonTest 5 * Class ConfigJsonTest
6 */ 6 */
7class ConfigJsonTest extends \PHPUnit\Framework\TestCase 7class ConfigJsonTest extends \Shaarli\TestCase
8{ 8{
9 /** 9 /**
10 * @var ConfigJson 10 * @var ConfigJson
@@ -42,7 +42,7 @@ class ConfigJsonTest extends \PHPUnit\Framework\TestCase
42 public function testReadInvalidJson() 42 public function testReadInvalidJson()
43 { 43 {
44 $this->expectException(\Exception::class); 44 $this->expectException(\Exception::class);
45 $this->expectExceptionMessageRegExp(' /An error occurred while parsing JSON configuration file \\([\\w\\/\\.]+\\): error code #4/'); 45 $this->expectExceptionMessageRegExp('/An error occurred while parsing JSON configuration file \\([\\w\\/\\.]+\\): error code #4/');
46 46
47 $this->configIO->read('tests/utils/config/configInvalid.json.php'); 47 $this->configIO->read('tests/utils/config/configInvalid.json.php');
48 } 48 }
@@ -111,17 +111,6 @@ class ConfigJsonTest extends \PHPUnit\Framework\TestCase
111 /** 111 /**
112 * Write to invalid path. 112 * Write to invalid path.
113 */ 113 */
114 public function testWriteInvalidArray()
115 {
116 $this->expectException(\Shaarli\Exceptions\IOException::class);
117
118 $conf = array('conf' => 'value');
119 @$this->configIO->write(array(), $conf);
120 }
121
122 /**
123 * Write to invalid path.
124 */
125 public function testWriteInvalidBlank() 114 public function testWriteInvalidBlank()
126 { 115 {
127 $this->expectException(\Shaarli\Exceptions\IOException::class); 116 $this->expectException(\Shaarli\Exceptions\IOException::class);
diff --git a/tests/config/ConfigManagerTest.php b/tests/config/ConfigManagerTest.php
index 802e6524..65d8ba2c 100644
--- a/tests/config/ConfigManagerTest.php
+++ b/tests/config/ConfigManagerTest.php
@@ -7,7 +7,7 @@ namespace Shaarli\Config;
7 * Note: it only test the manager with ConfigJson, 7 * Note: it only test the manager with ConfigJson,
8 * ConfigPhp is only a workaround to handle the transition to JSON type. 8 * ConfigPhp is only a workaround to handle the transition to JSON type.
9 */ 9 */
10class ConfigManagerTest extends \PHPUnit\Framework\TestCase 10class ConfigManagerTest extends \Shaarli\TestCase
11{ 11{
12 /** 12 /**
13 * @var ConfigManager 13 * @var ConfigManager
diff --git a/tests/config/ConfigPhpTest.php b/tests/config/ConfigPhpTest.php
index a9aa80f5..7bf9fe64 100644
--- a/tests/config/ConfigPhpTest.php
+++ b/tests/config/ConfigPhpTest.php
@@ -8,7 +8,7 @@ namespace Shaarli\Config;
8 * which are kept between tests. 8 * which are kept between tests.
9 * @runTestsInSeparateProcesses 9 * @runTestsInSeparateProcesses
10 */ 10 */
11class ConfigPhpTest extends \PHPUnit\Framework\TestCase 11class ConfigPhpTest extends \Shaarli\TestCase
12{ 12{
13 /** 13 /**
14 * @var ConfigPhp 14 * @var ConfigPhp
diff --git a/tests/config/ConfigPluginTest.php b/tests/config/ConfigPluginTest.php
index 3a45f623..fa72d8c4 100644
--- a/tests/config/ConfigPluginTest.php
+++ b/tests/config/ConfigPluginTest.php
@@ -9,7 +9,7 @@ require_once 'application/config/ConfigPlugin.php';
9/** 9/**
10 * Unitary tests for Shaarli config related functions 10 * Unitary tests for Shaarli config related functions
11 */ 11 */
12class ConfigPluginTest extends \PHPUnit\Framework\TestCase 12class ConfigPluginTest extends \Shaarli\TestCase
13{ 13{
14 /** 14 /**
15 * Test save_plugin_config with valid data. 15 * Test save_plugin_config with valid data.
diff --git a/tests/container/ContainerBuilderTest.php b/tests/container/ContainerBuilderTest.php
index 2047a63a..5d52daef 100644
--- a/tests/container/ContainerBuilderTest.php
+++ b/tests/container/ContainerBuilderTest.php
@@ -4,7 +4,6 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Container; 5namespace Shaarli\Container;
6 6
7use PHPUnit\Framework\TestCase;
8use Shaarli\Bookmark\BookmarkServiceInterface; 7use Shaarli\Bookmark\BookmarkServiceInterface;
9use Shaarli\Config\ConfigManager; 8use Shaarli\Config\ConfigManager;
10use Shaarli\Feed\FeedBuilder; 9use Shaarli\Feed\FeedBuilder;
@@ -20,6 +19,7 @@ use Shaarli\Render\PageCacheManager;
20use Shaarli\Security\CookieManager; 19use Shaarli\Security\CookieManager;
21use Shaarli\Security\LoginManager; 20use Shaarli\Security\LoginManager;
22use Shaarli\Security\SessionManager; 21use Shaarli\Security\SessionManager;
22use Shaarli\TestCase;
23use Shaarli\Thumbnailer; 23use Shaarli\Thumbnailer;
24use Shaarli\Updater\Updater; 24use Shaarli\Updater\Updater;
25use Slim\Http\Environment; 25use Slim\Http\Environment;
diff --git a/tests/feed/CachedPageTest.php b/tests/feed/CachedPageTest.php
index 25d640d3..904db9dc 100644
--- a/tests/feed/CachedPageTest.php
+++ b/tests/feed/CachedPageTest.php
@@ -7,7 +7,7 @@ namespace Shaarli\Feed;
7/** 7/**
8 * Unitary tests for cached pages 8 * Unitary tests for cached pages
9 */ 9 */
10class CachedPageTest extends \PHPUnit\Framework\TestCase 10class CachedPageTest extends \Shaarli\TestCase
11{ 11{
12 // test cache directory 12 // test cache directory
13 protected static $testCacheDir = 'sandbox/pagecache'; 13 protected static $testCacheDir = 'sandbox/pagecache';
diff --git a/tests/feed/FeedBuilderTest.php b/tests/feed/FeedBuilderTest.php
index 5dfe73aa..c29e8ef3 100644
--- a/tests/feed/FeedBuilderTest.php
+++ b/tests/feed/FeedBuilderTest.php
@@ -3,7 +3,6 @@
3namespace Shaarli\Feed; 3namespace Shaarli\Feed;
4 4
5use DateTime; 5use DateTime;
6use PHPUnit\Framework\TestCase;
7use ReferenceLinkDB; 6use ReferenceLinkDB;
8use Shaarli\Bookmark\Bookmark; 7use Shaarli\Bookmark\Bookmark;
9use Shaarli\Bookmark\BookmarkFileService; 8use Shaarli\Bookmark\BookmarkFileService;
@@ -11,6 +10,7 @@ use Shaarli\Bookmark\LinkDB;
11use Shaarli\Config\ConfigManager; 10use Shaarli\Config\ConfigManager;
12use Shaarli\Formatter\FormatterFactory; 11use Shaarli\Formatter\FormatterFactory;
13use Shaarli\History; 12use Shaarli\History;
13use Shaarli\TestCase;
14 14
15/** 15/**
16 * FeedBuilderTest class. 16 * FeedBuilderTest class.
@@ -97,9 +97,9 @@ class FeedBuilderTest extends TestCase
97 $pub = DateTime::createFromFormat(DateTime::RSS, $link['pub_iso_date']); 97 $pub = DateTime::createFromFormat(DateTime::RSS, $link['pub_iso_date']);
98 $up = DateTime::createFromFormat(DateTime::ATOM, $link['up_iso_date']); 98 $up = DateTime::createFromFormat(DateTime::ATOM, $link['up_iso_date']);
99 $this->assertEquals($pub, $up); 99 $this->assertEquals($pub, $up);
100 $this->assertContains('Stallman has a beard', $link['description']); 100 $this->assertContainsPolyfill('Stallman has a beard', $link['description']);
101 $this->assertContains('Permalink', $link['description']); 101 $this->assertContainsPolyfill('Permalink', $link['description']);
102 $this->assertContains('http://host.tld/shaare/WDWyig', $link['description']); 102 $this->assertContainsPolyfill('http://host.tld/shaare/WDWyig', $link['description']);
103 $this->assertEquals(1, count($link['taglist'])); 103 $this->assertEquals(1, count($link['taglist']));
104 $this->assertEquals('sTuff', $link['taglist'][0]); 104 $this->assertEquals('sTuff', $link['taglist'][0]);
105 105
@@ -201,16 +201,16 @@ class FeedBuilderTest extends TestCase
201 $this->assertEquals(DateTime::createFromFormat(Bookmark::LINK_DATE_FORMAT, '20150310_114651'), $link['created']); 201 $this->assertEquals(DateTime::createFromFormat(Bookmark::LINK_DATE_FORMAT, '20150310_114651'), $link['created']);
202 $this->assertEquals('http://host.tld/shaare/WDWyig', $link['guid']); 202 $this->assertEquals('http://host.tld/shaare/WDWyig', $link['guid']);
203 $this->assertEquals('http://host.tld/shaare/WDWyig', $link['url']); 203 $this->assertEquals('http://host.tld/shaare/WDWyig', $link['url']);
204 $this->assertContains('Direct link', $link['description']); 204 $this->assertContainsPolyfill('Direct link', $link['description']);
205 $this->assertContains('http://host.tld/shaare/WDWyig', $link['description']); 205 $this->assertContainsPolyfill('http://host.tld/shaare/WDWyig', $link['description']);
206 // Second link is a direct link 206 // Second link is a direct link
207 $link = $data['links'][array_keys($data['links'])[1]]; 207 $link = $data['links'][array_keys($data['links'])[1]];
208 $this->assertEquals(8, $link['id']); 208 $this->assertEquals(8, $link['id']);
209 $this->assertEquals(DateTime::createFromFormat(Bookmark::LINK_DATE_FORMAT, '20150310_114633'), $link['created']); 209 $this->assertEquals(DateTime::createFromFormat(Bookmark::LINK_DATE_FORMAT, '20150310_114633'), $link['created']);
210 $this->assertEquals('http://host.tld/shaare/RttfEw', $link['guid']); 210 $this->assertEquals('http://host.tld/shaare/RttfEw', $link['guid']);
211 $this->assertEquals('https://static.fsf.org/nosvn/faif-2.0.pdf', $link['url']); 211 $this->assertEquals('https://static.fsf.org/nosvn/faif-2.0.pdf', $link['url']);
212 $this->assertContains('Direct link', $link['description']); 212 $this->assertContainsPolyfill('Direct link', $link['description']);
213 $this->assertContains('https://static.fsf.org/nosvn/faif-2.0.pdf', $link['description']); 213 $this->assertContainsPolyfill('https://static.fsf.org/nosvn/faif-2.0.pdf', $link['description']);
214 } 214 }
215 215
216 /** 216 /**
@@ -274,6 +274,6 @@ class FeedBuilderTest extends TestCase
274 $link = $data['links'][array_keys($data['links'])[0]]; 274 $link = $data['links'][array_keys($data['links'])[0]];
275 $this->assertEquals('http://host.tld:8080/~user/shaarli/shaare/WDWyig', $link['guid']); 275 $this->assertEquals('http://host.tld:8080/~user/shaarli/shaare/WDWyig', $link['guid']);
276 $this->assertEquals('http://host.tld:8080/~user/shaarli/shaare/WDWyig', $link['url']); 276 $this->assertEquals('http://host.tld:8080/~user/shaarli/shaare/WDWyig', $link['url']);
277 $this->assertContains('http://host.tld:8080/~user/shaarli/./add-tag/hashtag', $link['description']); 277 $this->assertContainsPolyfill('http://host.tld:8080/~user/shaarli/./add-tag/hashtag', $link['description']);
278 } 278 }
279} 279}
diff --git a/tests/formatter/BookmarkDefaultFormatterTest.php b/tests/formatter/BookmarkDefaultFormatterTest.php
index 9ea86c14..9534436e 100644
--- a/tests/formatter/BookmarkDefaultFormatterTest.php
+++ b/tests/formatter/BookmarkDefaultFormatterTest.php
@@ -3,9 +3,9 @@
3namespace Shaarli\Formatter; 3namespace Shaarli\Formatter;
4 4
5use DateTime; 5use DateTime;
6use PHPUnit\Framework\TestCase;
7use Shaarli\Bookmark\Bookmark; 6use Shaarli\Bookmark\Bookmark;
8use Shaarli\Config\ConfigManager; 7use Shaarli\Config\ConfigManager;
8use Shaarli\TestCase;
9 9
10/** 10/**
11 * Class BookmarkDefaultFormatterTest 11 * Class BookmarkDefaultFormatterTest
diff --git a/tests/formatter/BookmarkMarkdownFormatterTest.php b/tests/formatter/BookmarkMarkdownFormatterTest.php
index a7729416..ab6b4080 100644
--- a/tests/formatter/BookmarkMarkdownFormatterTest.php
+++ b/tests/formatter/BookmarkMarkdownFormatterTest.php
@@ -3,9 +3,9 @@
3namespace Shaarli\Formatter; 3namespace Shaarli\Formatter;
4 4
5use DateTime; 5use DateTime;
6use PHPUnit\Framework\TestCase;
7use Shaarli\Bookmark\Bookmark; 6use Shaarli\Bookmark\Bookmark;
8use Shaarli\Config\ConfigManager; 7use Shaarli\Config\ConfigManager;
8use Shaarli\TestCase;
9 9
10/** 10/**
11 * Class BookmarkMarkdownFormatterTest 11 * Class BookmarkMarkdownFormatterTest
diff --git a/tests/formatter/BookmarkRawFormatterTest.php b/tests/formatter/BookmarkRawFormatterTest.php
index 76cf1172..c76bb7b9 100644
--- a/tests/formatter/BookmarkRawFormatterTest.php
+++ b/tests/formatter/BookmarkRawFormatterTest.php
@@ -3,9 +3,9 @@
3namespace Shaarli\Formatter; 3namespace Shaarli\Formatter;
4 4
5use DateTime; 5use DateTime;
6use PHPUnit\Framework\TestCase;
7use Shaarli\Bookmark\Bookmark; 6use Shaarli\Bookmark\Bookmark;
8use Shaarli\Config\ConfigManager; 7use Shaarli\Config\ConfigManager;
8use Shaarli\TestCase;
9 9
10/** 10/**
11 * Class BookmarkRawFormatterTest 11 * Class BookmarkRawFormatterTest
diff --git a/tests/formatter/FormatterFactoryTest.php b/tests/formatter/FormatterFactoryTest.php
index 6aab6a61..ae476cb5 100644
--- a/tests/formatter/FormatterFactoryTest.php
+++ b/tests/formatter/FormatterFactoryTest.php
@@ -2,8 +2,8 @@
2 2
3namespace Shaarli\Formatter; 3namespace Shaarli\Formatter;
4 4
5use PHPUnit\Framework\TestCase;
6use Shaarli\Config\ConfigManager; 5use Shaarli\Config\ConfigManager;
6use Shaarli\TestCase;
7 7
8/** 8/**
9 * Class FormatterFactoryTest 9 * Class FormatterFactoryTest
diff --git a/tests/front/ShaarliAdminMiddlewareTest.php b/tests/front/ShaarliAdminMiddlewareTest.php
index 7451330b..44025f11 100644
--- a/tests/front/ShaarliAdminMiddlewareTest.php
+++ b/tests/front/ShaarliAdminMiddlewareTest.php
@@ -4,10 +4,10 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Front; 5namespace Shaarli\Front;
6 6
7use PHPUnit\Framework\TestCase;
8use Shaarli\Config\ConfigManager; 7use Shaarli\Config\ConfigManager;
9use Shaarli\Container\ShaarliContainer; 8use Shaarli\Container\ShaarliContainer;
10use Shaarli\Security\LoginManager; 9use Shaarli\Security\LoginManager;
10use Shaarli\TestCase;
11use Shaarli\Updater\Updater; 11use Shaarli\Updater\Updater;
12use Slim\Http\Request; 12use Slim\Http\Request;
13use Slim\Http\Response; 13use Slim\Http\Response;
diff --git a/tests/front/ShaarliMiddlewareTest.php b/tests/front/ShaarliMiddlewareTest.php
index 05aa34a9..655c5bba 100644
--- a/tests/front/ShaarliMiddlewareTest.php
+++ b/tests/front/ShaarliMiddlewareTest.php
@@ -4,7 +4,6 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Front; 5namespace Shaarli\Front;
6 6
7use PHPUnit\Framework\TestCase;
8use Shaarli\Config\ConfigManager; 7use Shaarli\Config\ConfigManager;
9use Shaarli\Container\ShaarliContainer; 8use Shaarli\Container\ShaarliContainer;
10use Shaarli\Front\Exception\LoginBannedException; 9use Shaarli\Front\Exception\LoginBannedException;
@@ -12,6 +11,7 @@ use Shaarli\Front\Exception\UnauthorizedException;
12use Shaarli\Render\PageBuilder; 11use Shaarli\Render\PageBuilder;
13use Shaarli\Render\PageCacheManager; 12use Shaarli\Render\PageCacheManager;
14use Shaarli\Security\LoginManager; 13use Shaarli\Security\LoginManager;
14use Shaarli\TestCase;
15use Shaarli\Updater\Updater; 15use Shaarli\Updater\Updater;
16use Slim\Http\Request; 16use Slim\Http\Request;
17use Slim\Http\Response; 17use Slim\Http\Response;
diff --git a/tests/front/controller/admin/ConfigureControllerTest.php b/tests/front/controller/admin/ConfigureControllerTest.php
index 612f20f1..aca6cff3 100644
--- a/tests/front/controller/admin/ConfigureControllerTest.php
+++ b/tests/front/controller/admin/ConfigureControllerTest.php
@@ -4,10 +4,10 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Front\Controller\Admin; 5namespace Shaarli\Front\Controller\Admin;
6 6
7use PHPUnit\Framework\TestCase;
8use Shaarli\Config\ConfigManager; 7use Shaarli\Config\ConfigManager;
9use Shaarli\Front\Exception\WrongTokenException; 8use Shaarli\Front\Exception\WrongTokenException;
10use Shaarli\Security\SessionManager; 9use Shaarli\Security\SessionManager;
10use Shaarli\TestCase;
11use Shaarli\Thumbnailer; 11use Shaarli\Thumbnailer;
12use Slim\Http\Request; 12use Slim\Http\Request;
13use Slim\Http\Response; 13use Slim\Http\Response;
diff --git a/tests/front/controller/admin/ExportControllerTest.php b/tests/front/controller/admin/ExportControllerTest.php
index 12d26f4a..0e6f2762 100644
--- a/tests/front/controller/admin/ExportControllerTest.php
+++ b/tests/front/controller/admin/ExportControllerTest.php
@@ -4,12 +4,12 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Front\Controller\Admin; 5namespace Shaarli\Front\Controller\Admin;
6 6
7use PHPUnit\Framework\TestCase;
8use Shaarli\Bookmark\Bookmark; 7use Shaarli\Bookmark\Bookmark;
9use Shaarli\Formatter\BookmarkFormatter; 8use Shaarli\Formatter\BookmarkFormatter;
10use Shaarli\Formatter\BookmarkRawFormatter; 9use Shaarli\Formatter\BookmarkRawFormatter;
11use Shaarli\Netscape\NetscapeBookmarkUtils; 10use Shaarli\Netscape\NetscapeBookmarkUtils;
12use Shaarli\Security\SessionManager; 11use Shaarli\Security\SessionManager;
12use Shaarli\TestCase;
13use Slim\Http\Request; 13use Slim\Http\Request;
14use Slim\Http\Response; 14use Slim\Http\Response;
15 15
diff --git a/tests/front/controller/admin/ImportControllerTest.php b/tests/front/controller/admin/ImportControllerTest.php
index eb31fad0..c266caa5 100644
--- a/tests/front/controller/admin/ImportControllerTest.php
+++ b/tests/front/controller/admin/ImportControllerTest.php
@@ -4,10 +4,10 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Front\Controller\Admin; 5namespace Shaarli\Front\Controller\Admin;
6 6
7use PHPUnit\Framework\TestCase;
8use Psr\Http\Message\UploadedFileInterface; 7use Psr\Http\Message\UploadedFileInterface;
9use Shaarli\Netscape\NetscapeBookmarkUtils; 8use Shaarli\Netscape\NetscapeBookmarkUtils;
10use Shaarli\Security\SessionManager; 9use Shaarli\Security\SessionManager;
10use Shaarli\TestCase;
11use Slim\Http\Request; 11use Slim\Http\Request;
12use Slim\Http\Response; 12use Slim\Http\Response;
13use Slim\Http\UploadedFile; 13use Slim\Http\UploadedFile;
diff --git a/tests/front/controller/admin/LogoutControllerTest.php b/tests/front/controller/admin/LogoutControllerTest.php
index 45e84dc0..94e53019 100644
--- a/tests/front/controller/admin/LogoutControllerTest.php
+++ b/tests/front/controller/admin/LogoutControllerTest.php
@@ -4,10 +4,9 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Front\Controller\Admin; 5namespace Shaarli\Front\Controller\Admin;
6 6
7use PHPUnit\Framework\TestCase;
8use Shaarli\Security\CookieManager; 7use Shaarli\Security\CookieManager;
9use Shaarli\Security\LoginManager;
10use Shaarli\Security\SessionManager; 8use Shaarli\Security\SessionManager;
9use Shaarli\TestCase;
11use Slim\Http\Request; 10use Slim\Http\Request;
12use Slim\Http\Response; 11use Slim\Http\Response;
13 12
diff --git a/tests/front/controller/admin/ManageShaareControllerTest/AddShaareTest.php b/tests/front/controller/admin/ManageShaareControllerTest/AddShaareTest.php
index 7d5b752a..0f27ec2f 100644
--- a/tests/front/controller/admin/ManageShaareControllerTest/AddShaareTest.php
+++ b/tests/front/controller/admin/ManageShaareControllerTest/AddShaareTest.php
@@ -4,10 +4,10 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Front\Controller\Admin\ManageShaareControllerTest; 5namespace Shaarli\Front\Controller\Admin\ManageShaareControllerTest;
6 6
7use PHPUnit\Framework\TestCase;
8use Shaarli\Front\Controller\Admin\FrontAdminControllerMockHelper; 7use Shaarli\Front\Controller\Admin\FrontAdminControllerMockHelper;
9use Shaarli\Front\Controller\Admin\ManageShaareController; 8use Shaarli\Front\Controller\Admin\ManageShaareController;
10use Shaarli\Http\HttpAccess; 9use Shaarli\Http\HttpAccess;
10use Shaarli\TestCase;
11use Slim\Http\Request; 11use Slim\Http\Request;
12use Slim\Http\Response; 12use Slim\Http\Response;
13 13
diff --git a/tests/front/controller/admin/ManageShaareControllerTest/ChangeVisibilityBookmarkTest.php b/tests/front/controller/admin/ManageShaareControllerTest/ChangeVisibilityBookmarkTest.php
index 5a615791..096d0774 100644
--- a/tests/front/controller/admin/ManageShaareControllerTest/ChangeVisibilityBookmarkTest.php
+++ b/tests/front/controller/admin/ManageShaareControllerTest/ChangeVisibilityBookmarkTest.php
@@ -4,7 +4,6 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Front\Controller\Admin\ManageShaareControllerTest; 5namespace Shaarli\Front\Controller\Admin\ManageShaareControllerTest;
6 6
7use PHPUnit\Framework\TestCase;
8use Shaarli\Bookmark\Bookmark; 7use Shaarli\Bookmark\Bookmark;
9use Shaarli\Bookmark\Exception\BookmarkNotFoundException; 8use Shaarli\Bookmark\Exception\BookmarkNotFoundException;
10use Shaarli\Formatter\BookmarkFormatter; 9use Shaarli\Formatter\BookmarkFormatter;
@@ -14,6 +13,7 @@ use Shaarli\Front\Controller\Admin\FrontAdminControllerMockHelper;
14use Shaarli\Front\Controller\Admin\ManageShaareController; 13use Shaarli\Front\Controller\Admin\ManageShaareController;
15use Shaarli\Http\HttpAccess; 14use Shaarli\Http\HttpAccess;
16use Shaarli\Security\SessionManager; 15use Shaarli\Security\SessionManager;
16use Shaarli\TestCase;
17use Slim\Http\Request; 17use Slim\Http\Request;
18use Slim\Http\Response; 18use Slim\Http\Response;
19 19
diff --git a/tests/front/controller/admin/ManageShaareControllerTest/DeleteBookmarkTest.php b/tests/front/controller/admin/ManageShaareControllerTest/DeleteBookmarkTest.php
index dee622bb..ba774e21 100644
--- a/tests/front/controller/admin/ManageShaareControllerTest/DeleteBookmarkTest.php
+++ b/tests/front/controller/admin/ManageShaareControllerTest/DeleteBookmarkTest.php
@@ -4,7 +4,6 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Front\Controller\Admin\ManageShaareControllerTest; 5namespace Shaarli\Front\Controller\Admin\ManageShaareControllerTest;
6 6
7use PHPUnit\Framework\TestCase;
8use Shaarli\Bookmark\Bookmark; 7use Shaarli\Bookmark\Bookmark;
9use Shaarli\Bookmark\Exception\BookmarkNotFoundException; 8use Shaarli\Bookmark\Exception\BookmarkNotFoundException;
10use Shaarli\Formatter\BookmarkFormatter; 9use Shaarli\Formatter\BookmarkFormatter;
@@ -13,6 +12,7 @@ use Shaarli\Front\Controller\Admin\FrontAdminControllerMockHelper;
13use Shaarli\Front\Controller\Admin\ManageShaareController; 12use Shaarli\Front\Controller\Admin\ManageShaareController;
14use Shaarli\Http\HttpAccess; 13use Shaarli\Http\HttpAccess;
15use Shaarli\Security\SessionManager; 14use Shaarli\Security\SessionManager;
15use Shaarli\TestCase;
16use Slim\Http\Request; 16use Slim\Http\Request;
17use Slim\Http\Response; 17use Slim\Http\Response;
18 18
diff --git a/tests/front/controller/admin/ManageShaareControllerTest/DisplayCreateFormTest.php b/tests/front/controller/admin/ManageShaareControllerTest/DisplayCreateFormTest.php
index 777583d5..2eb95251 100644
--- a/tests/front/controller/admin/ManageShaareControllerTest/DisplayCreateFormTest.php
+++ b/tests/front/controller/admin/ManageShaareControllerTest/DisplayCreateFormTest.php
@@ -4,12 +4,12 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Front\Controller\Admin\ManageShaareControllerTest; 5namespace Shaarli\Front\Controller\Admin\ManageShaareControllerTest;
6 6
7use PHPUnit\Framework\TestCase;
8use Shaarli\Bookmark\Bookmark; 7use Shaarli\Bookmark\Bookmark;
9use Shaarli\Config\ConfigManager; 8use Shaarli\Config\ConfigManager;
10use Shaarli\Front\Controller\Admin\FrontAdminControllerMockHelper; 9use Shaarli\Front\Controller\Admin\FrontAdminControllerMockHelper;
11use Shaarli\Front\Controller\Admin\ManageShaareController; 10use Shaarli\Front\Controller\Admin\ManageShaareController;
12use Shaarli\Http\HttpAccess; 11use Shaarli\Http\HttpAccess;
12use Shaarli\TestCase;
13use Slim\Http\Request; 13use Slim\Http\Request;
14use Slim\Http\Response; 14use Slim\Http\Response;
15 15
@@ -96,12 +96,14 @@ class DisplayCreateFormTest extends TestCase
96 96
97 // Make sure that PluginManager hook is triggered 97 // Make sure that PluginManager hook is triggered
98 $this->container->pluginManager 98 $this->container->pluginManager
99 ->expects(static::at(0)) 99 ->expects(static::atLeastOnce())
100 ->method('executeHooks') 100 ->method('executeHooks')
101 ->withConsecutive(['render_editlink'], ['render_includes'])
101 ->willReturnCallback(function (string $hook, array $data) use ($remoteTitle, $remoteDesc): array { 102 ->willReturnCallback(function (string $hook, array $data) use ($remoteTitle, $remoteDesc): array {
102 static::assertSame('render_editlink', $hook); 103 if ('render_editlink' === $hook) {
103 static::assertSame($remoteTitle, $data['link']['title']); 104 static::assertSame($remoteTitle, $data['link']['title']);
104 static::assertSame($remoteDesc, $data['link']['description']); 105 static::assertSame($remoteDesc, $data['link']['description']);
106 }
105 107
106 return $data; 108 return $data;
107 }) 109 })
diff --git a/tests/front/controller/admin/ManageShaareControllerTest/DisplayEditFormTest.php b/tests/front/controller/admin/ManageShaareControllerTest/DisplayEditFormTest.php
index 1a1cdcf3..2dc3f41c 100644
--- a/tests/front/controller/admin/ManageShaareControllerTest/DisplayEditFormTest.php
+++ b/tests/front/controller/admin/ManageShaareControllerTest/DisplayEditFormTest.php
@@ -4,13 +4,13 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Front\Controller\Admin\ManageShaareControllerTest; 5namespace Shaarli\Front\Controller\Admin\ManageShaareControllerTest;
6 6
7use PHPUnit\Framework\TestCase;
8use Shaarli\Bookmark\Bookmark; 7use Shaarli\Bookmark\Bookmark;
9use Shaarli\Bookmark\Exception\BookmarkNotFoundException; 8use Shaarli\Bookmark\Exception\BookmarkNotFoundException;
10use Shaarli\Front\Controller\Admin\FrontAdminControllerMockHelper; 9use Shaarli\Front\Controller\Admin\FrontAdminControllerMockHelper;
11use Shaarli\Front\Controller\Admin\ManageShaareController; 10use Shaarli\Front\Controller\Admin\ManageShaareController;
12use Shaarli\Http\HttpAccess; 11use Shaarli\Http\HttpAccess;
13use Shaarli\Security\SessionManager; 12use Shaarli\Security\SessionManager;
13use Shaarli\TestCase;
14use Slim\Http\Request; 14use Slim\Http\Request;
15use Slim\Http\Response; 15use Slim\Http\Response;
16 16
diff --git a/tests/front/controller/admin/ManageShaareControllerTest/PinBookmarkTest.php b/tests/front/controller/admin/ManageShaareControllerTest/PinBookmarkTest.php
index 1607b475..50ce7df1 100644
--- a/tests/front/controller/admin/ManageShaareControllerTest/PinBookmarkTest.php
+++ b/tests/front/controller/admin/ManageShaareControllerTest/PinBookmarkTest.php
@@ -4,13 +4,13 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Front\Controller\Admin\ManageShaareControllerTest; 5namespace Shaarli\Front\Controller\Admin\ManageShaareControllerTest;
6 6
7use PHPUnit\Framework\TestCase;
8use Shaarli\Bookmark\Bookmark; 7use Shaarli\Bookmark\Bookmark;
9use Shaarli\Bookmark\Exception\BookmarkNotFoundException; 8use Shaarli\Bookmark\Exception\BookmarkNotFoundException;
10use Shaarli\Front\Controller\Admin\FrontAdminControllerMockHelper; 9use Shaarli\Front\Controller\Admin\FrontAdminControllerMockHelper;
11use Shaarli\Front\Controller\Admin\ManageShaareController; 10use Shaarli\Front\Controller\Admin\ManageShaareController;
12use Shaarli\Http\HttpAccess; 11use Shaarli\Http\HttpAccess;
13use Shaarli\Security\SessionManager; 12use Shaarli\Security\SessionManager;
13use Shaarli\TestCase;
14use Slim\Http\Request; 14use Slim\Http\Request;
15use Slim\Http\Response; 15use Slim\Http\Response;
16 16
diff --git a/tests/front/controller/admin/ManageShaareControllerTest/SaveBookmarkTest.php b/tests/front/controller/admin/ManageShaareControllerTest/SaveBookmarkTest.php
index a5e2dbc5..f7a68226 100644
--- a/tests/front/controller/admin/ManageShaareControllerTest/SaveBookmarkTest.php
+++ b/tests/front/controller/admin/ManageShaareControllerTest/SaveBookmarkTest.php
@@ -4,7 +4,6 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Front\Controller\Admin\ManageShaareControllerTest; 5namespace Shaarli\Front\Controller\Admin\ManageShaareControllerTest;
6 6
7use PHPUnit\Framework\TestCase;
8use Shaarli\Bookmark\Bookmark; 7use Shaarli\Bookmark\Bookmark;
9use Shaarli\Config\ConfigManager; 8use Shaarli\Config\ConfigManager;
10use Shaarli\Front\Controller\Admin\FrontAdminControllerMockHelper; 9use Shaarli\Front\Controller\Admin\FrontAdminControllerMockHelper;
@@ -12,6 +11,7 @@ use Shaarli\Front\Controller\Admin\ManageShaareController;
12use Shaarli\Front\Exception\WrongTokenException; 11use Shaarli\Front\Exception\WrongTokenException;
13use Shaarli\Http\HttpAccess; 12use Shaarli\Http\HttpAccess;
14use Shaarli\Security\SessionManager; 13use Shaarli\Security\SessionManager;
14use Shaarli\TestCase;
15use Shaarli\Thumbnailer; 15use Shaarli\Thumbnailer;
16use Slim\Http\Request; 16use Slim\Http\Request;
17use Slim\Http\Response; 17use Slim\Http\Response;
@@ -88,17 +88,18 @@ class SaveBookmarkTest extends TestCase
88 88
89 // Make sure that PluginManager hook is triggered 89 // Make sure that PluginManager hook is triggered
90 $this->container->pluginManager 90 $this->container->pluginManager
91 ->expects(static::at(0)) 91 ->expects(static::atLeastOnce())
92 ->method('executeHooks') 92 ->method('executeHooks')
93 ->withConsecutive(['save_link'])
93 ->willReturnCallback(function (string $hook, array $data) use ($parameters, $id): array { 94 ->willReturnCallback(function (string $hook, array $data) use ($parameters, $id): array {
94 static::assertSame('save_link', $hook); 95 if ('save_link' === $hook) {
95 96 static::assertSame($id, $data['id']);
96 static::assertSame($id, $data['id']); 97 static::assertSame($parameters['lf_url'], $data['url']);
97 static::assertSame($parameters['lf_url'], $data['url']); 98 static::assertSame($parameters['lf_title'], $data['title']);
98 static::assertSame($parameters['lf_title'], $data['title']); 99 static::assertSame($parameters['lf_description'], $data['description']);
99 static::assertSame($parameters['lf_description'], $data['description']); 100 static::assertSame($parameters['lf_tags'], $data['tags']);
100 static::assertSame($parameters['lf_tags'], $data['tags']); 101 static::assertTrue($data['private']);
101 static::assertTrue($data['private']); 102 }
102 103
103 return $data; 104 return $data;
104 }) 105 })
@@ -174,17 +175,18 @@ class SaveBookmarkTest extends TestCase
174 175
175 // Make sure that PluginManager hook is triggered 176 // Make sure that PluginManager hook is triggered
176 $this->container->pluginManager 177 $this->container->pluginManager
177 ->expects(static::at(0)) 178 ->expects(static::atLeastOnce())
178 ->method('executeHooks') 179 ->method('executeHooks')
180 ->withConsecutive(['save_link'])
179 ->willReturnCallback(function (string $hook, array $data) use ($parameters, $id): array { 181 ->willReturnCallback(function (string $hook, array $data) use ($parameters, $id): array {
180 static::assertSame('save_link', $hook); 182 if ('save_link' === $hook) {
181 183 static::assertSame($id, $data['id']);
182 static::assertSame($id, $data['id']); 184 static::assertSame($parameters['lf_url'], $data['url']);
183 static::assertSame($parameters['lf_url'], $data['url']); 185 static::assertSame($parameters['lf_title'], $data['title']);
184 static::assertSame($parameters['lf_title'], $data['title']); 186 static::assertSame($parameters['lf_description'], $data['description']);
185 static::assertSame($parameters['lf_description'], $data['description']); 187 static::assertSame($parameters['lf_tags'], $data['tags']);
186 static::assertSame($parameters['lf_tags'], $data['tags']); 188 static::assertTrue($data['private']);
187 static::assertTrue($data['private']); 189 }
188 190
189 return $data; 191 return $data;
190 }) 192 })
diff --git a/tests/front/controller/admin/ManageTagControllerTest.php b/tests/front/controller/admin/ManageTagControllerTest.php
index 09ba0b4b..8a0ff7a9 100644
--- a/tests/front/controller/admin/ManageTagControllerTest.php
+++ b/tests/front/controller/admin/ManageTagControllerTest.php
@@ -4,11 +4,11 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Front\Controller\Admin; 5namespace Shaarli\Front\Controller\Admin;
6 6
7use PHPUnit\Framework\TestCase;
8use Shaarli\Bookmark\Bookmark; 7use Shaarli\Bookmark\Bookmark;
9use Shaarli\Bookmark\BookmarkFilter; 8use Shaarli\Bookmark\BookmarkFilter;
10use Shaarli\Front\Exception\WrongTokenException; 9use Shaarli\Front\Exception\WrongTokenException;
11use Shaarli\Security\SessionManager; 10use Shaarli\Security\SessionManager;
11use Shaarli\TestCase;
12use Slim\Http\Request; 12use Slim\Http\Request;
13use Slim\Http\Response; 13use Slim\Http\Response;
14 14
diff --git a/tests/front/controller/admin/PasswordControllerTest.php b/tests/front/controller/admin/PasswordControllerTest.php
index 9a01089e..58f47b49 100644
--- a/tests/front/controller/admin/PasswordControllerTest.php
+++ b/tests/front/controller/admin/PasswordControllerTest.php
@@ -4,11 +4,11 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Front\Controller\Admin; 5namespace Shaarli\Front\Controller\Admin;
6 6
7use PHPUnit\Framework\TestCase;
8use Shaarli\Config\ConfigManager; 7use Shaarli\Config\ConfigManager;
9use Shaarli\Front\Exception\OpenShaarliPasswordException; 8use Shaarli\Front\Exception\OpenShaarliPasswordException;
10use Shaarli\Front\Exception\WrongTokenException; 9use Shaarli\Front\Exception\WrongTokenException;
11use Shaarli\Security\SessionManager; 10use Shaarli\Security\SessionManager;
11use Shaarli\TestCase;
12use Slim\Http\Request; 12use Slim\Http\Request;
13use Slim\Http\Response; 13use Slim\Http\Response;
14 14
diff --git a/tests/front/controller/admin/PluginsControllerTest.php b/tests/front/controller/admin/PluginsControllerTest.php
index 9526474c..974d614d 100644
--- a/tests/front/controller/admin/PluginsControllerTest.php
+++ b/tests/front/controller/admin/PluginsControllerTest.php
@@ -4,11 +4,11 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Front\Controller\Admin; 5namespace Shaarli\Front\Controller\Admin;
6 6
7use PHPUnit\Framework\TestCase;
8use Shaarli\Config\ConfigManager; 7use Shaarli\Config\ConfigManager;
9use Shaarli\Front\Exception\WrongTokenException; 8use Shaarli\Front\Exception\WrongTokenException;
10use Shaarli\Plugin\PluginManager; 9use Shaarli\Plugin\PluginManager;
11use Shaarli\Security\SessionManager; 10use Shaarli\Security\SessionManager;
11use Shaarli\TestCase;
12use Slim\Http\Request; 12use Slim\Http\Request;
13use Slim\Http\Response; 13use Slim\Http\Response;
14 14
diff --git a/tests/front/controller/admin/SessionFilterControllerTest.php b/tests/front/controller/admin/SessionFilterControllerTest.php
index c4253167..712a625b 100644
--- a/tests/front/controller/admin/SessionFilterControllerTest.php
+++ b/tests/front/controller/admin/SessionFilterControllerTest.php
@@ -4,9 +4,9 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Front\Controller\Admin; 5namespace Shaarli\Front\Controller\Admin;
6 6
7use PHPUnit\Framework\TestCase;
8use Shaarli\Security\LoginManager; 7use Shaarli\Security\LoginManager;
9use Shaarli\Security\SessionManager; 8use Shaarli\Security\SessionManager;
9use Shaarli\TestCase;
10use Slim\Http\Request; 10use Slim\Http\Request;
11use Slim\Http\Response; 11use Slim\Http\Response;
12 12
diff --git a/tests/front/controller/admin/ShaarliAdminControllerTest.php b/tests/front/controller/admin/ShaarliAdminControllerTest.php
index fff427cb..486d5d2d 100644
--- a/tests/front/controller/admin/ShaarliAdminControllerTest.php
+++ b/tests/front/controller/admin/ShaarliAdminControllerTest.php
@@ -4,9 +4,9 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Front\Controller\Admin; 5namespace Shaarli\Front\Controller\Admin;
6 6
7use PHPUnit\Framework\TestCase;
8use Shaarli\Front\Exception\WrongTokenException; 7use Shaarli\Front\Exception\WrongTokenException;
9use Shaarli\Security\SessionManager; 8use Shaarli\Security\SessionManager;
9use Shaarli\TestCase;
10use Slim\Http\Request; 10use Slim\Http\Request;
11 11
12/** 12/**
diff --git a/tests/front/controller/admin/ThumbnailsControllerTest.php b/tests/front/controller/admin/ThumbnailsControllerTest.php
index 0c0c8a83..f4a8acff 100644
--- a/tests/front/controller/admin/ThumbnailsControllerTest.php
+++ b/tests/front/controller/admin/ThumbnailsControllerTest.php
@@ -4,9 +4,9 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Front\Controller\Admin; 5namespace Shaarli\Front\Controller\Admin;
6 6
7use PHPUnit\Framework\TestCase;
8use Shaarli\Bookmark\Bookmark; 7use Shaarli\Bookmark\Bookmark;
9use Shaarli\Bookmark\Exception\BookmarkNotFoundException; 8use Shaarli\Bookmark\Exception\BookmarkNotFoundException;
9use Shaarli\TestCase;
10use Shaarli\Thumbnailer; 10use Shaarli\Thumbnailer;
11use Slim\Http\Request; 11use Slim\Http\Request;
12use Slim\Http\Response; 12use Slim\Http\Response;
diff --git a/tests/front/controller/admin/TokenControllerTest.php b/tests/front/controller/admin/TokenControllerTest.php
index 04b0c0fa..d2f0907f 100644
--- a/tests/front/controller/admin/TokenControllerTest.php
+++ b/tests/front/controller/admin/TokenControllerTest.php
@@ -4,7 +4,7 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Front\Controller\Admin; 5namespace Shaarli\Front\Controller\Admin;
6 6
7use PHPUnit\Framework\TestCase; 7use Shaarli\TestCase;
8use Slim\Http\Request; 8use Slim\Http\Request;
9use Slim\Http\Response; 9use Slim\Http\Response;
10 10
diff --git a/tests/front/controller/admin/ToolsControllerTest.php b/tests/front/controller/admin/ToolsControllerTest.php
index 39144d2f..e82f8b14 100644
--- a/tests/front/controller/admin/ToolsControllerTest.php
+++ b/tests/front/controller/admin/ToolsControllerTest.php
@@ -4,7 +4,7 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Front\Controller\Admin; 5namespace Shaarli\Front\Controller\Admin;
6 6
7use PHPUnit\Framework\TestCase; 7use Shaarli\TestCase;
8use Slim\Http\Request; 8use Slim\Http\Request;
9use Slim\Http\Response; 9use Slim\Http\Response;
10 10
diff --git a/tests/front/controller/visitor/BookmarkListControllerTest.php b/tests/front/controller/visitor/BookmarkListControllerTest.php
index 5daaa2c4..0c95df97 100644
--- a/tests/front/controller/visitor/BookmarkListControllerTest.php
+++ b/tests/front/controller/visitor/BookmarkListControllerTest.php
@@ -4,11 +4,11 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Front\Controller\Visitor; 5namespace Shaarli\Front\Controller\Visitor;
6 6
7use PHPUnit\Framework\TestCase;
8use Shaarli\Bookmark\Bookmark; 7use Shaarli\Bookmark\Bookmark;
9use Shaarli\Bookmark\Exception\BookmarkNotFoundException; 8use Shaarli\Bookmark\Exception\BookmarkNotFoundException;
10use Shaarli\Config\ConfigManager; 9use Shaarli\Config\ConfigManager;
11use Shaarli\Security\LoginManager; 10use Shaarli\Security\LoginManager;
11use Shaarli\TestCase;
12use Shaarli\Thumbnailer; 12use Shaarli\Thumbnailer;
13use Slim\Http\Request; 13use Slim\Http\Request;
14use Slim\Http\Response; 14use Slim\Http\Response;
diff --git a/tests/front/controller/visitor/DailyControllerTest.php b/tests/front/controller/visitor/DailyControllerTest.php
index cb5b96f3..fc78bc13 100644
--- a/tests/front/controller/visitor/DailyControllerTest.php
+++ b/tests/front/controller/visitor/DailyControllerTest.php
@@ -4,9 +4,9 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Front\Controller\Visitor; 5namespace Shaarli\Front\Controller\Visitor;
6 6
7use PHPUnit\Framework\TestCase;
8use Shaarli\Bookmark\Bookmark; 7use Shaarli\Bookmark\Bookmark;
9use Shaarli\Feed\CachedPage; 8use Shaarli\Feed\CachedPage;
9use Shaarli\TestCase;
10use Slim\Http\Request; 10use Slim\Http\Request;
11use Slim\Http\Response; 11use Slim\Http\Response;
12 12
@@ -78,19 +78,20 @@ class DailyControllerTest extends TestCase
78 78
79 // Make sure that PluginManager hook is triggered 79 // Make sure that PluginManager hook is triggered
80 $this->container->pluginManager 80 $this->container->pluginManager
81 ->expects(static::at(0)) 81 ->expects(static::atLeastOnce())
82 ->method('executeHooks') 82 ->method('executeHooks')
83 ->withConsecutive(['render_daily'])
83 ->willReturnCallback(function (string $hook, array $data, array $param) use ($currentDay): array { 84 ->willReturnCallback(function (string $hook, array $data, array $param) use ($currentDay): array {
84 static::assertSame('render_daily', $hook); 85 if ('render_daily' === $hook) {
86 static::assertArrayHasKey('linksToDisplay', $data);
87 static::assertCount(3, $data['linksToDisplay']);
88 static::assertSame(1, $data['linksToDisplay'][0]['id']);
89 static::assertSame($currentDay->getTimestamp(), $data['day']);
90 static::assertSame('20200510', $data['previousday']);
91 static::assertSame('20200516', $data['nextday']);
85 92
86 static::assertArrayHasKey('linksToDisplay', $data); 93 static::assertArrayHasKey('loggedin', $param);
87 static::assertCount(3, $data['linksToDisplay']); 94 }
88 static::assertSame(1, $data['linksToDisplay'][0]['id']);
89 static::assertSame($currentDay->getTimestamp(), $data['day']);
90 static::assertSame('20200510', $data['previousday']);
91 static::assertSame('20200516', $data['nextday']);
92
93 static::assertArrayHasKey('loggedin', $param);
94 95
95 return $data; 96 return $data;
96 }) 97 })
@@ -203,19 +204,20 @@ class DailyControllerTest extends TestCase
203 204
204 // Make sure that PluginManager hook is triggered 205 // Make sure that PluginManager hook is triggered
205 $this->container->pluginManager 206 $this->container->pluginManager
206 ->expects(static::at(0)) 207 ->expects(static::atLeastOnce())
207 ->method('executeHooks') 208 ->method('executeHooks')
209 ->withConsecutive(['render_daily'])
208 ->willReturnCallback(function (string $hook, array $data, array $param) use ($currentDay): array { 210 ->willReturnCallback(function (string $hook, array $data, array $param) use ($currentDay): array {
209 static::assertSame('render_daily', $hook); 211 if ('render_daily' === $hook) {
210 212 static::assertArrayHasKey('linksToDisplay', $data);
211 static::assertArrayHasKey('linksToDisplay', $data); 213 static::assertCount(1, $data['linksToDisplay']);
212 static::assertCount(1, $data['linksToDisplay']); 214 static::assertSame(1, $data['linksToDisplay'][0]['id']);
213 static::assertSame(1, $data['linksToDisplay'][0]['id']); 215 static::assertSame($currentDay->getTimestamp(), $data['day']);
214 static::assertSame($currentDay->getTimestamp(), $data['day']); 216 static::assertEmpty($data['previousday']);
215 static::assertEmpty($data['previousday']); 217 static::assertEmpty($data['nextday']);
216 static::assertEmpty($data['nextday']);
217 218
218 static::assertArrayHasKey('loggedin', $param); 219 static::assertArrayHasKey('loggedin', $param);
220 }
219 221
220 return $data; 222 return $data;
221 }); 223 });
@@ -281,7 +283,7 @@ class DailyControllerTest extends TestCase
281 283
282 // Make sure that PluginManager hook is triggered 284 // Make sure that PluginManager hook is triggered
283 $this->container->pluginManager 285 $this->container->pluginManager
284 ->expects(static::at(0)) 286 ->expects(static::atLeastOnce())
285 ->method('executeHooks') 287 ->method('executeHooks')
286 ->willReturnCallback(function (string $hook, array $data, array $param): array { 288 ->willReturnCallback(function (string $hook, array $data, array $param): array {
287 return $data; 289 return $data;
@@ -333,7 +335,7 @@ class DailyControllerTest extends TestCase
333 335
334 // Make sure that PluginManager hook is triggered 336 // Make sure that PluginManager hook is triggered
335 $this->container->pluginManager 337 $this->container->pluginManager
336 ->expects(static::at(0)) 338 ->expects(static::atLeastOnce())
337 ->method('executeHooks') 339 ->method('executeHooks')
338 ->willReturnCallback(function (string $hook, array $data, array $param): array { 340 ->willReturnCallback(function (string $hook, array $data, array $param): array {
339 return $data; 341 return $data;
diff --git a/tests/front/controller/visitor/ErrorControllerTest.php b/tests/front/controller/visitor/ErrorControllerTest.php
index e497bfef..75408cf4 100644
--- a/tests/front/controller/visitor/ErrorControllerTest.php
+++ b/tests/front/controller/visitor/ErrorControllerTest.php
@@ -4,8 +4,8 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Front\Controller\Visitor; 5namespace Shaarli\Front\Controller\Visitor;
6 6
7use PHPUnit\Framework\TestCase;
8use Shaarli\Front\Exception\ShaarliFrontException; 7use Shaarli\Front\Exception\ShaarliFrontException;
8use Shaarli\TestCase;
9use Slim\Http\Request; 9use Slim\Http\Request;
10use Slim\Http\Response; 10use Slim\Http\Response;
11 11
diff --git a/tests/front/controller/visitor/ErrorNotFoundControllerTest.php b/tests/front/controller/visitor/ErrorNotFoundControllerTest.php
index 625467b1..a1cbbecf 100644
--- a/tests/front/controller/visitor/ErrorNotFoundControllerTest.php
+++ b/tests/front/controller/visitor/ErrorNotFoundControllerTest.php
@@ -4,7 +4,7 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Front\Controller\Visitor; 5namespace Shaarli\Front\Controller\Visitor;
6 6
7use PHPUnit\Framework\TestCase; 7use Shaarli\TestCase;
8use Slim\Http\Request; 8use Slim\Http\Request;
9use Slim\Http\Response; 9use Slim\Http\Response;
10use Slim\Http\Uri; 10use Slim\Http\Uri;
diff --git a/tests/front/controller/visitor/FeedControllerTest.php b/tests/front/controller/visitor/FeedControllerTest.php
index 0a6b577f..4ae7c925 100644
--- a/tests/front/controller/visitor/FeedControllerTest.php
+++ b/tests/front/controller/visitor/FeedControllerTest.php
@@ -4,8 +4,8 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Front\Controller\Visitor; 5namespace Shaarli\Front\Controller\Visitor;
6 6
7use PHPUnit\Framework\TestCase;
8use Shaarli\Feed\FeedBuilder; 7use Shaarli\Feed\FeedBuilder;
8use Shaarli\TestCase;
9use Slim\Http\Request; 9use Slim\Http\Request;
10use Slim\Http\Response; 10use Slim\Http\Response;
11 11
@@ -45,14 +45,16 @@ class FeedControllerTest extends TestCase
45 45
46 // Make sure that PluginManager hook is triggered 46 // Make sure that PluginManager hook is triggered
47 $this->container->pluginManager 47 $this->container->pluginManager
48 ->expects(static::at(0)) 48 ->expects(static::atLeastOnce())
49 ->method('executeHooks') 49 ->method('executeHooks')
50 ->withConsecutive(['render_feed'])
50 ->willReturnCallback(function (string $hook, array $data, array $param): void { 51 ->willReturnCallback(function (string $hook, array $data, array $param): void {
51 static::assertSame('render_feed', $hook); 52 if ('render_feed' === $hook) {
52 static::assertSame('data', $data['content']); 53 static::assertSame('data', $data['content']);
53 54
54 static::assertArrayHasKey('loggedin', $param); 55 static::assertArrayHasKey('loggedin', $param);
55 static::assertSame('feed.rss', $param['target']); 56 static::assertSame('feed.rss', $param['target']);
57 }
56 }) 58 })
57 ; 59 ;
58 60
@@ -84,14 +86,16 @@ class FeedControllerTest extends TestCase
84 86
85 // Make sure that PluginManager hook is triggered 87 // Make sure that PluginManager hook is triggered
86 $this->container->pluginManager 88 $this->container->pluginManager
87 ->expects(static::at(0)) 89 ->expects(static::atLeastOnce())
88 ->method('executeHooks') 90 ->method('executeHooks')
91 ->withConsecutive(['render_feed'])
89 ->willReturnCallback(function (string $hook, array $data, array $param): void { 92 ->willReturnCallback(function (string $hook, array $data, array $param): void {
90 static::assertSame('render_feed', $hook); 93 if ('render_feed' === $hook) {
91 static::assertSame('data', $data['content']); 94 static::assertSame('data', $data['content']);
92 95
93 static::assertArrayHasKey('loggedin', $param); 96 static::assertArrayHasKey('loggedin', $param);
94 static::assertSame('feed.atom', $param['target']); 97 static::assertSame('feed.atom', $param['target']);
98 }
95 }) 99 })
96 ; 100 ;
97 101
@@ -124,14 +128,16 @@ class FeedControllerTest extends TestCase
124 128
125 // Make sure that PluginManager hook is triggered 129 // Make sure that PluginManager hook is triggered
126 $this->container->pluginManager 130 $this->container->pluginManager
127 ->expects(static::at(0)) 131 ->expects(static::atLeastOnce())
128 ->method('executeHooks') 132 ->method('executeHooks')
133 ->withConsecutive(['render_feed'])
129 ->willReturnCallback(function (string $hook, array $data, array $param): void { 134 ->willReturnCallback(function (string $hook, array $data, array $param): void {
130 static::assertSame('render_feed', $hook); 135 if ('render_feed' === $hook) {
131 static::assertSame('data', $data['content']); 136 static::assertSame('data', $data['content']);
132 137
133 static::assertArrayHasKey('loggedin', $param); 138 static::assertArrayHasKey('loggedin', $param);
134 static::assertSame('feed.atom', $param['target']); 139 static::assertSame('feed.atom', $param['target']);
140 }
135 }) 141 })
136 ; 142 ;
137 143
diff --git a/tests/front/controller/visitor/FrontControllerMockHelper.php b/tests/front/controller/visitor/FrontControllerMockHelper.php
index 6c53289b..fc0bb7d1 100644
--- a/tests/front/controller/visitor/FrontControllerMockHelper.php
+++ b/tests/front/controller/visitor/FrontControllerMockHelper.php
@@ -4,7 +4,6 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Front\Controller\Visitor; 5namespace Shaarli\Front\Controller\Visitor;
6 6
7use PHPUnit\Framework\MockObject\MockObject;
8use Shaarli\Bookmark\BookmarkServiceInterface; 7use Shaarli\Bookmark\BookmarkServiceInterface;
9use Shaarli\Config\ConfigManager; 8use Shaarli\Config\ConfigManager;
10use Shaarli\Container\ShaarliTestContainer; 9use Shaarli\Container\ShaarliTestContainer;
@@ -115,5 +114,5 @@ trait FrontControllerMockHelper
115 /** 114 /**
116 * Force to be used in PHPUnit context. 115 * Force to be used in PHPUnit context.
117 */ 116 */
118 protected abstract function createMock($originalClassName): MockObject; 117 protected abstract function isInTestsContext(): bool;
119} 118}
diff --git a/tests/front/controller/visitor/InstallControllerTest.php b/tests/front/controller/visitor/InstallControllerTest.php
index 994d3f33..345ad544 100644
--- a/tests/front/controller/visitor/InstallControllerTest.php
+++ b/tests/front/controller/visitor/InstallControllerTest.php
@@ -4,10 +4,10 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Front\Controller\Visitor; 5namespace Shaarli\Front\Controller\Visitor;
6 6
7use PHPUnit\Framework\TestCase;
8use Shaarli\Config\ConfigManager; 7use Shaarli\Config\ConfigManager;
9use Shaarli\Front\Exception\AlreadyInstalledException; 8use Shaarli\Front\Exception\AlreadyInstalledException;
10use Shaarli\Security\SessionManager; 9use Shaarli\Security\SessionManager;
10use Shaarli\TestCase;
11use Slim\Http\Request; 11use Slim\Http\Request;
12use Slim\Http\Response; 12use Slim\Http\Response;
13 13
diff --git a/tests/front/controller/visitor/LoginControllerTest.php b/tests/front/controller/visitor/LoginControllerTest.php
index 0a21f938..1312ccb7 100644
--- a/tests/front/controller/visitor/LoginControllerTest.php
+++ b/tests/front/controller/visitor/LoginControllerTest.php
@@ -4,13 +4,13 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Front\Controller\Visitor; 5namespace Shaarli\Front\Controller\Visitor;
6 6
7use PHPUnit\Framework\TestCase;
8use Shaarli\Config\ConfigManager; 7use Shaarli\Config\ConfigManager;
9use Shaarli\Front\Exception\LoginBannedException; 8use Shaarli\Front\Exception\LoginBannedException;
10use Shaarli\Front\Exception\WrongTokenException; 9use Shaarli\Front\Exception\WrongTokenException;
11use Shaarli\Render\TemplatePage; 10use Shaarli\Render\TemplatePage;
12use Shaarli\Security\CookieManager; 11use Shaarli\Security\CookieManager;
13use Shaarli\Security\SessionManager; 12use Shaarli\Security\SessionManager;
13use Shaarli\TestCase;
14use Slim\Http\Request; 14use Slim\Http\Request;
15use Slim\Http\Response; 15use Slim\Http\Response;
16 16
diff --git a/tests/front/controller/visitor/OpenSearchControllerTest.php b/tests/front/controller/visitor/OpenSearchControllerTest.php
index 9609a377..42d876c3 100644
--- a/tests/front/controller/visitor/OpenSearchControllerTest.php
+++ b/tests/front/controller/visitor/OpenSearchControllerTest.php
@@ -4,7 +4,7 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Front\Controller\Visitor; 5namespace Shaarli\Front\Controller\Visitor;
6 6
7use PHPUnit\Framework\TestCase; 7use Shaarli\TestCase;
8use Slim\Http\Request; 8use Slim\Http\Request;
9use Slim\Http\Response; 9use Slim\Http\Response;
10 10
diff --git a/tests/front/controller/visitor/PictureWallControllerTest.php b/tests/front/controller/visitor/PictureWallControllerTest.php
index 3dc3f292..b868231d 100644
--- a/tests/front/controller/visitor/PictureWallControllerTest.php
+++ b/tests/front/controller/visitor/PictureWallControllerTest.php
@@ -4,10 +4,10 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Front\Controller\Visitor; 5namespace Shaarli\Front\Controller\Visitor;
6 6
7use PHPUnit\Framework\TestCase;
8use Shaarli\Bookmark\Bookmark; 7use Shaarli\Bookmark\Bookmark;
9use Shaarli\Config\ConfigManager; 8use Shaarli\Config\ConfigManager;
10use Shaarli\Front\Exception\ThumbnailsDisabledException; 9use Shaarli\Front\Exception\ThumbnailsDisabledException;
10use Shaarli\TestCase;
11use Shaarli\Thumbnailer; 11use Shaarli\Thumbnailer;
12use Slim\Http\Request; 12use Slim\Http\Request;
13use Slim\Http\Response; 13use Slim\Http\Response;
@@ -67,15 +67,17 @@ class PictureWallControllerTest extends TestCase
67 67
68 // Make sure that PluginManager hook is triggered 68 // Make sure that PluginManager hook is triggered
69 $this->container->pluginManager 69 $this->container->pluginManager
70 ->expects(static::at(0)) 70 ->expects(static::atLeastOnce())
71 ->method('executeHooks') 71 ->method('executeHooks')
72 ->withConsecutive(['render_picwall'])
72 ->willReturnCallback(function (string $hook, array $data, array $param): array { 73 ->willReturnCallback(function (string $hook, array $data, array $param): array {
73 static::assertSame('render_picwall', $hook); 74 if ('render_picwall' === $hook) {
74 static::assertArrayHasKey('linksToDisplay', $data); 75 static::assertArrayHasKey('linksToDisplay', $data);
75 static::assertCount(2, $data['linksToDisplay']); 76 static::assertCount(2, $data['linksToDisplay']);
76 static::assertSame(1, $data['linksToDisplay'][0]['id']); 77 static::assertSame(1, $data['linksToDisplay'][0]['id']);
77 static::assertSame(3, $data['linksToDisplay'][1]['id']); 78 static::assertSame(3, $data['linksToDisplay'][1]['id']);
78 static::assertArrayHasKey('loggedin', $param); 79 static::assertArrayHasKey('loggedin', $param);
80 }
79 81
80 return $data; 82 return $data;
81 }); 83 });
diff --git a/tests/front/controller/visitor/PublicSessionFilterControllerTest.php b/tests/front/controller/visitor/PublicSessionFilterControllerTest.php
index b45fbe53..7e3b00af 100644
--- a/tests/front/controller/visitor/PublicSessionFilterControllerTest.php
+++ b/tests/front/controller/visitor/PublicSessionFilterControllerTest.php
@@ -4,8 +4,8 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Front\Controller\Visitor; 5namespace Shaarli\Front\Controller\Visitor;
6 6
7use PHPUnit\Framework\TestCase;
8use Shaarli\Security\SessionManager; 7use Shaarli\Security\SessionManager;
8use Shaarli\TestCase;
9use Slim\Http\Request; 9use Slim\Http\Request;
10use Slim\Http\Response; 10use Slim\Http\Response;
11 11
diff --git a/tests/front/controller/visitor/ShaarliVisitorControllerTest.php b/tests/front/controller/visitor/ShaarliVisitorControllerTest.php
index 00188c02..935ec24e 100644
--- a/tests/front/controller/visitor/ShaarliVisitorControllerTest.php
+++ b/tests/front/controller/visitor/ShaarliVisitorControllerTest.php
@@ -4,8 +4,8 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Front\Controller\Visitor; 5namespace Shaarli\Front\Controller\Visitor;
6 6
7use PHPUnit\Framework\TestCase;
8use Shaarli\Bookmark\BookmarkFilter; 7use Shaarli\Bookmark\BookmarkFilter;
8use Shaarli\TestCase;
9use Slim\Http\Request; 9use Slim\Http\Request;
10use Slim\Http\Response; 10use Slim\Http\Response;
11 11
diff --git a/tests/front/controller/visitor/TagCloudControllerTest.php b/tests/front/controller/visitor/TagCloudControllerTest.php
index 9a6a4bc0..9305612e 100644
--- a/tests/front/controller/visitor/TagCloudControllerTest.php
+++ b/tests/front/controller/visitor/TagCloudControllerTest.php
@@ -4,8 +4,8 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Front\Controller\Visitor; 5namespace Shaarli\Front\Controller\Visitor;
6 6
7use PHPUnit\Framework\TestCase;
8use Shaarli\Bookmark\BookmarkFilter; 7use Shaarli\Bookmark\BookmarkFilter;
8use Shaarli\TestCase;
9use Slim\Http\Request; 9use Slim\Http\Request;
10use Slim\Http\Response; 10use Slim\Http\Response;
11 11
@@ -53,14 +53,16 @@ class TagCloudControllerTest extends TestCase
53 53
54 // Make sure that PluginManager hook is triggered 54 // Make sure that PluginManager hook is triggered
55 $this->container->pluginManager 55 $this->container->pluginManager
56 ->expects(static::at(0)) 56 ->expects(static::atLeastOnce())
57 ->method('executeHooks') 57 ->method('executeHooks')
58 ->withConsecutive(['render_tagcloud'])
58 ->willReturnCallback(function (string $hook, array $data, array $param): array { 59 ->willReturnCallback(function (string $hook, array $data, array $param): array {
59 static::assertSame('render_tagcloud', $hook); 60 if ('render_tagcloud' === $hook) {
60 static::assertSame('', $data['search_tags']); 61 static::assertSame('', $data['search_tags']);
61 static::assertCount(3, $data['tags']); 62 static::assertCount(3, $data['tags']);
62 63
63 static::assertArrayHasKey('loggedin', $param); 64 static::assertArrayHasKey('loggedin', $param);
65 }
64 66
65 return $data; 67 return $data;
66 }) 68 })
@@ -124,14 +126,16 @@ class TagCloudControllerTest extends TestCase
124 126
125 // Make sure that PluginManager hook is triggered 127 // Make sure that PluginManager hook is triggered
126 $this->container->pluginManager 128 $this->container->pluginManager
127 ->expects(static::at(0)) 129 ->expects(static::atLeastOnce())
128 ->method('executeHooks') 130 ->method('executeHooks')
131 ->withConsecutive(['render_tagcloud'])
129 ->willReturnCallback(function (string $hook, array $data, array $param): array { 132 ->willReturnCallback(function (string $hook, array $data, array $param): array {
130 static::assertSame('render_tagcloud', $hook); 133 if ('render_tagcloud' === $hook) {
131 static::assertSame('ghi def', $data['search_tags']); 134 static::assertSame('ghi def', $data['search_tags']);
132 static::assertCount(1, $data['tags']); 135 static::assertCount(1, $data['tags']);
133 136
134 static::assertArrayHasKey('loggedin', $param); 137 static::assertArrayHasKey('loggedin', $param);
138 }
135 139
136 return $data; 140 return $data;
137 }) 141 })
@@ -175,14 +179,16 @@ class TagCloudControllerTest extends TestCase
175 179
176 // Make sure that PluginManager hook is triggered 180 // Make sure that PluginManager hook is triggered
177 $this->container->pluginManager 181 $this->container->pluginManager
178 ->expects(static::at(0)) 182 ->expects(static::atLeastOnce())
179 ->method('executeHooks') 183 ->method('executeHooks')
184 ->withConsecutive(['render_tagcloud'])
180 ->willReturnCallback(function (string $hook, array $data, array $param): array { 185 ->willReturnCallback(function (string $hook, array $data, array $param): array {
181 static::assertSame('render_tagcloud', $hook); 186 if ('render_tagcloud' === $hook) {
182 static::assertSame('', $data['search_tags']); 187 static::assertSame('', $data['search_tags']);
183 static::assertCount(0, $data['tags']); 188 static::assertCount(0, $data['tags']);
184 189
185 static::assertArrayHasKey('loggedin', $param); 190 static::assertArrayHasKey('loggedin', $param);
191 }
186 192
187 return $data; 193 return $data;
188 }) 194 })
@@ -227,14 +233,16 @@ class TagCloudControllerTest extends TestCase
227 233
228 // Make sure that PluginManager hook is triggered 234 // Make sure that PluginManager hook is triggered
229 $this->container->pluginManager 235 $this->container->pluginManager
230 ->expects(static::at(0)) 236 ->expects(static::atLeastOnce())
231 ->method('executeHooks') 237 ->method('executeHooks')
238 ->withConsecutive(['render_taglist'])
232 ->willReturnCallback(function (string $hook, array $data, array $param): array { 239 ->willReturnCallback(function (string $hook, array $data, array $param): array {
233 static::assertSame('render_taglist', $hook); 240 if ('render_taglist' === $hook) {
234 static::assertSame('', $data['search_tags']); 241 static::assertSame('', $data['search_tags']);
235 static::assertCount(3, $data['tags']); 242 static::assertCount(3, $data['tags']);
236 243
237 static::assertArrayHasKey('loggedin', $param); 244 static::assertArrayHasKey('loggedin', $param);
245 }
238 246
239 return $data; 247 return $data;
240 }) 248 })
@@ -297,14 +305,16 @@ class TagCloudControllerTest extends TestCase
297 305
298 // Make sure that PluginManager hook is triggered 306 // Make sure that PluginManager hook is triggered
299 $this->container->pluginManager 307 $this->container->pluginManager
300 ->expects(static::at(0)) 308 ->expects(static::atLeastOnce())
301 ->method('executeHooks') 309 ->method('executeHooks')
310 ->withConsecutive(['render_taglist'])
302 ->willReturnCallback(function (string $hook, array $data, array $param): array { 311 ->willReturnCallback(function (string $hook, array $data, array $param): array {
303 static::assertSame('render_taglist', $hook); 312 if ('render_taglist' === $hook) {
304 static::assertSame('ghi def', $data['search_tags']); 313 static::assertSame('ghi def', $data['search_tags']);
305 static::assertCount(1, $data['tags']); 314 static::assertCount(1, $data['tags']);
306 315
307 static::assertArrayHasKey('loggedin', $param); 316 static::assertArrayHasKey('loggedin', $param);
317 }
308 318
309 return $data; 319 return $data;
310 }) 320 })
@@ -344,14 +354,16 @@ class TagCloudControllerTest extends TestCase
344 354
345 // Make sure that PluginManager hook is triggered 355 // Make sure that PluginManager hook is triggered
346 $this->container->pluginManager 356 $this->container->pluginManager
347 ->expects(static::at(0)) 357 ->expects(static::atLeastOnce())
348 ->method('executeHooks') 358 ->method('executeHooks')
359 ->withConsecutive(['render_taglist'])
349 ->willReturnCallback(function (string $hook, array $data, array $param): array { 360 ->willReturnCallback(function (string $hook, array $data, array $param): array {
350 static::assertSame('render_taglist', $hook); 361 if ('render_taglist' === $hook) {
351 static::assertSame('', $data['search_tags']); 362 static::assertSame('', $data['search_tags']);
352 static::assertCount(0, $data['tags']); 363 static::assertCount(0, $data['tags']);
353 364
354 static::assertArrayHasKey('loggedin', $param); 365 static::assertArrayHasKey('loggedin', $param);
366 }
355 367
356 return $data; 368 return $data;
357 }) 369 })
diff --git a/tests/front/controller/visitor/TagControllerTest.php b/tests/front/controller/visitor/TagControllerTest.php
index 43076086..750ea02d 100644
--- a/tests/front/controller/visitor/TagControllerTest.php
+++ b/tests/front/controller/visitor/TagControllerTest.php
@@ -4,7 +4,7 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Front\Controller\Visitor; 5namespace Shaarli\Front\Controller\Visitor;
6 6
7use PHPUnit\Framework\TestCase; 7use Shaarli\TestCase;
8use Slim\Http\Request; 8use Slim\Http\Request;
9use Slim\Http\Response; 9use Slim\Http\Response;
10 10
diff --git a/tests/http/HttpUtils/ClientIpIdTest.php b/tests/http/HttpUtils/ClientIpIdTest.php
index 982e57e0..3a0fcf30 100644
--- a/tests/http/HttpUtils/ClientIpIdTest.php
+++ b/tests/http/HttpUtils/ClientIpIdTest.php
@@ -10,7 +10,7 @@ require_once 'application/http/HttpUtils.php';
10/** 10/**
11 * Unitary tests for client_ip_id() 11 * Unitary tests for client_ip_id()
12 */ 12 */
13class ClientIpIdTest extends \PHPUnit\Framework\TestCase 13class ClientIpIdTest extends \Shaarli\TestCase
14{ 14{
15 /** 15 /**
16 * Get a remote client ID based on its IP 16 * Get a remote client ID based on its IP
diff --git a/tests/http/HttpUtils/GetHttpUrlTest.php b/tests/http/HttpUtils/GetHttpUrlTest.php
index 3dc5bc9b..a868ac02 100644
--- a/tests/http/HttpUtils/GetHttpUrlTest.php
+++ b/tests/http/HttpUtils/GetHttpUrlTest.php
@@ -10,7 +10,7 @@ require_once 'application/http/HttpUtils.php';
10/** 10/**
11 * Unitary tests for get_http_response() 11 * Unitary tests for get_http_response()
12 */ 12 */
13class GetHttpUrlTest extends \PHPUnit\Framework\TestCase 13class GetHttpUrlTest extends \Shaarli\TestCase
14{ 14{
15 /** 15 /**
16 * Get an invalid local URL 16 * Get an invalid local URL
diff --git a/tests/http/HttpUtils/GetIpAdressFromProxyTest.php b/tests/http/HttpUtils/GetIpAdressFromProxyTest.php
index fe3a639e..60cdb992 100644
--- a/tests/http/HttpUtils/GetIpAdressFromProxyTest.php
+++ b/tests/http/HttpUtils/GetIpAdressFromProxyTest.php
@@ -7,7 +7,7 @@ require_once 'application/http/HttpUtils.php';
7/** 7/**
8 * Unitary tests for getIpAddressFromProxy() 8 * Unitary tests for getIpAddressFromProxy()
9 */ 9 */
10class GetIpAdressFromProxyTest extends \PHPUnit\Framework\TestCase 10class GetIpAdressFromProxyTest extends \Shaarli\TestCase
11{ 11{
12 12
13 /** 13 /**
diff --git a/tests/http/HttpUtils/IndexUrlTest.php b/tests/http/HttpUtils/IndexUrlTest.php
index cce45c51..f283d119 100644
--- a/tests/http/HttpUtils/IndexUrlTest.php
+++ b/tests/http/HttpUtils/IndexUrlTest.php
@@ -5,7 +5,7 @@
5 5
6namespace Shaarli\Http; 6namespace Shaarli\Http;
7 7
8use PHPUnit\Framework\TestCase; 8use Shaarli\TestCase;
9 9
10require_once 'application/http/HttpUtils.php'; 10require_once 'application/http/HttpUtils.php';
11 11
diff --git a/tests/http/HttpUtils/IndexUrlTestWithConstant.php b/tests/http/HttpUtils/IndexUrlTestWithConstant.php
index 15ca3d72..ecaea724 100644
--- a/tests/http/HttpUtils/IndexUrlTestWithConstant.php
+++ b/tests/http/HttpUtils/IndexUrlTestWithConstant.php
@@ -4,7 +4,7 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Http; 5namespace Shaarli\Http;
6 6
7use PHPUnit\Framework\TestCase; 7use Shaarli\TestCase;
8 8
9/** 9/**
10 * Test index_url with SHAARLI_ROOT_URL defined to override automatic retrieval. 10 * Test index_url with SHAARLI_ROOT_URL defined to override automatic retrieval.
diff --git a/tests/http/HttpUtils/IsHttpsTest.php b/tests/http/HttpUtils/IsHttpsTest.php
index 348956c6..8b3fd93d 100644
--- a/tests/http/HttpUtils/IsHttpsTest.php
+++ b/tests/http/HttpUtils/IsHttpsTest.php
@@ -9,7 +9,7 @@ require_once 'application/http/HttpUtils.php';
9 * 9 *
10 * Test class for is_https() function. 10 * Test class for is_https() function.
11 */ 11 */
12class IsHttpsTest extends \PHPUnit\Framework\TestCase 12class IsHttpsTest extends \Shaarli\TestCase
13{ 13{
14 14
15 /** 15 /**
diff --git a/tests/http/HttpUtils/PageUrlTest.php b/tests/http/HttpUtils/PageUrlTest.php
index f1991716..ebb3e617 100644
--- a/tests/http/HttpUtils/PageUrlTest.php
+++ b/tests/http/HttpUtils/PageUrlTest.php
@@ -10,7 +10,7 @@ require_once 'application/http/HttpUtils.php';
10/** 10/**
11 * Unitary tests for page_url() 11 * Unitary tests for page_url()
12 */ 12 */
13class PageUrlTest extends \PHPUnit\Framework\TestCase 13class PageUrlTest extends \Shaarli\TestCase
14{ 14{
15 /** 15 /**
16 * If on the main page, remove "index.php" from the URL resource 16 * If on the main page, remove "index.php" from the URL resource
diff --git a/tests/http/HttpUtils/ServerUrlTest.php b/tests/http/HttpUtils/ServerUrlTest.php
index 9caf1049..339664e1 100644
--- a/tests/http/HttpUtils/ServerUrlTest.php
+++ b/tests/http/HttpUtils/ServerUrlTest.php
@@ -10,7 +10,7 @@ require_once 'application/http/HttpUtils.php';
10/** 10/**
11 * Unitary tests for server_url() 11 * Unitary tests for server_url()
12 */ 12 */
13class ServerUrlTest extends \PHPUnit\Framework\TestCase 13class ServerUrlTest extends \Shaarli\TestCase
14{ 14{
15 /** 15 /**
16 * Detect if the server uses SSL 16 * Detect if the server uses SSL
diff --git a/tests/http/UrlTest.php b/tests/http/UrlTest.php
index ae92f73a..c6b39c29 100644
--- a/tests/http/UrlTest.php
+++ b/tests/http/UrlTest.php
@@ -8,7 +8,7 @@ namespace Shaarli\Http;
8/** 8/**
9 * Unitary tests for URL utilities 9 * Unitary tests for URL utilities
10 */ 10 */
11class UrlTest extends \PHPUnit\Framework\TestCase 11class UrlTest extends \Shaarli\TestCase
12{ 12{
13 // base URL for tests 13 // base URL for tests
14 protected static $baseUrl = 'http://domain.tld:3000'; 14 protected static $baseUrl = 'http://domain.tld:3000';
diff --git a/tests/http/UrlUtils/CleanupUrlTest.php b/tests/http/UrlUtils/CleanupUrlTest.php
index 6c4d124b..45690ecf 100644
--- a/tests/http/UrlUtils/CleanupUrlTest.php
+++ b/tests/http/UrlUtils/CleanupUrlTest.php
@@ -7,7 +7,7 @@ namespace Shaarli\Http;
7 7
8require_once 'application/http/UrlUtils.php'; 8require_once 'application/http/UrlUtils.php';
9 9
10class CleanupUrlTest extends \PHPUnit\Framework\TestCase 10class CleanupUrlTest extends \Shaarli\TestCase
11{ 11{
12 /** 12 /**
13 * @var string reference URL 13 * @var string reference URL
diff --git a/tests/http/UrlUtils/GetUrlSchemeTest.php b/tests/http/UrlUtils/GetUrlSchemeTest.php
index 2b97f7be..18a9a5e5 100644
--- a/tests/http/UrlUtils/GetUrlSchemeTest.php
+++ b/tests/http/UrlUtils/GetUrlSchemeTest.php
@@ -7,7 +7,7 @@ namespace Shaarli\Http;
7 7
8require_once 'application/http/UrlUtils.php'; 8require_once 'application/http/UrlUtils.php';
9 9
10class GetUrlSchemeTest extends \PHPUnit\Framework\TestCase 10class GetUrlSchemeTest extends \Shaarli\TestCase
11{ 11{
12 /** 12 /**
13 * Get empty scheme string for empty UrlUtils 13 * Get empty scheme string for empty UrlUtils
diff --git a/tests/http/UrlUtils/UnparseUrlTest.php b/tests/http/UrlUtils/UnparseUrlTest.php
index 040d8c54..5e6246cc 100644
--- a/tests/http/UrlUtils/UnparseUrlTest.php
+++ b/tests/http/UrlUtils/UnparseUrlTest.php
@@ -10,7 +10,7 @@ require_once 'application/http/UrlUtils.php';
10/** 10/**
11 * Unitary tests for unparse_url() 11 * Unitary tests for unparse_url()
12 */ 12 */
13class UnparseUrlTest extends \PHPUnit\Framework\TestCase 13class UnparseUrlTest extends \Shaarli\TestCase
14{ 14{
15 /** 15 /**
16 * Thanks for building nothing 16 * Thanks for building nothing
diff --git a/tests/http/UrlUtils/WhitelistProtocolsTest.php b/tests/http/UrlUtils/WhitelistProtocolsTest.php
index 69512dbd..b8a6baaa 100644
--- a/tests/http/UrlUtils/WhitelistProtocolsTest.php
+++ b/tests/http/UrlUtils/WhitelistProtocolsTest.php
@@ -9,7 +9,7 @@ require_once 'application/http/UrlUtils.php';
9 * 9 *
10 * Test whitelist_protocols() function of UrlUtils. 10 * Test whitelist_protocols() function of UrlUtils.
11 */ 11 */
12class WhitelistProtocolsTest extends \PHPUnit\Framework\TestCase 12class WhitelistProtocolsTest extends \Shaarli\TestCase
13{ 13{
14 /** 14 /**
15 * Test whitelist_protocols() on a note (relative URL). 15 * Test whitelist_protocols() on a note (relative URL).
diff --git a/tests/languages/fr/LanguagesFrTest.php b/tests/languages/fr/LanguagesFrTest.php
index e412b5bc..d84feed1 100644
--- a/tests/languages/fr/LanguagesFrTest.php
+++ b/tests/languages/fr/LanguagesFrTest.php
@@ -12,7 +12,7 @@ use Shaarli\Config\ConfigManager;
12 * 12 *
13 * @package Shaarli 13 * @package Shaarli
14 */ 14 */
15class LanguagesFrTest extends \PHPUnit\Framework\TestCase 15class LanguagesFrTest extends \Shaarli\TestCase
16{ 16{
17 /** 17 /**
18 * @var string Config file path (without extension). 18 * @var string Config file path (without extension).
diff --git a/tests/legacy/LegacyControllerTest.php b/tests/legacy/LegacyControllerTest.php
index 4e52f3e1..1a2549a3 100644
--- a/tests/legacy/LegacyControllerTest.php
+++ b/tests/legacy/LegacyControllerTest.php
@@ -4,8 +4,8 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Legacy; 5namespace Shaarli\Legacy;
6 6
7use PHPUnit\Framework\TestCase;
8use Shaarli\Front\Controller\Visitor\FrontControllerMockHelper; 7use Shaarli\Front\Controller\Visitor\FrontControllerMockHelper;
8use Shaarli\TestCase;
9use Slim\Http\Request; 9use Slim\Http\Request;
10use Slim\Http\Response; 10use Slim\Http\Response;
11 11
diff --git a/tests/legacy/LegacyLinkDBTest.php b/tests/legacy/LegacyLinkDBTest.php
index 819bc272..df2cad62 100644
--- a/tests/legacy/LegacyLinkDBTest.php
+++ b/tests/legacy/LegacyLinkDBTest.php
@@ -18,7 +18,7 @@ require_once 'tests/utils/ReferenceLinkDB.php';
18/** 18/**
19 * Unitary tests for LegacyLinkDBTest 19 * Unitary tests for LegacyLinkDBTest
20 */ 20 */
21class LegacyLinkDBTest extends \PHPUnit\Framework\TestCase 21class LegacyLinkDBTest extends \Shaarli\TestCase
22{ 22{
23 // datastore to test write operations 23 // datastore to test write operations
24 protected static $testDatastore = 'sandbox/datastore.php'; 24 protected static $testDatastore = 'sandbox/datastore.php';
@@ -99,11 +99,10 @@ class LegacyLinkDBTest extends \PHPUnit\Framework\TestCase
99 99
100 /** 100 /**
101 * Attempt to instantiate a LinkDB whereas the datastore is not writable 101 * Attempt to instantiate a LinkDB whereas the datastore is not writable
102 *
103 * @expectedException Shaarli\Exceptions\IOException
104 */ 102 */
105 public function testConstructDatastoreNotWriteable() 103 public function testConstructDatastoreNotWriteable()
106 { 104 {
105 $this->expectException(\Shaarli\Exceptions\IOException::class);
107 $this->expectExceptionMessageRegExp('/Error accessing "null"/'); 106 $this->expectExceptionMessageRegExp('/Error accessing "null"/');
108 107
109 new LegacyLinkDB('null/store.db', false, false); 108 new LegacyLinkDB('null/store.db', false, false);
@@ -258,7 +257,7 @@ class LegacyLinkDBTest extends \PHPUnit\Framework\TestCase
258 $link = self::$publicLinkDB->getLinkFromUrl('http://mediagoblin.org/'); 257 $link = self::$publicLinkDB->getLinkFromUrl('http://mediagoblin.org/');
259 258
260 $this->assertNotEquals(false, $link); 259 $this->assertNotEquals(false, $link);
261 $this->assertContains( 260 $this->assertContainsPolyfill(
262 'A free software media publishing platform', 261 'A free software media publishing platform',
263 $link['description'] 262 $link['description']
264 ); 263 );
@@ -471,9 +470,9 @@ class LegacyLinkDBTest extends \PHPUnit\Framework\TestCase
471 470
472 $res = $linkDB->renameTag('cartoon', 'Taz'); 471 $res = $linkDB->renameTag('cartoon', 'Taz');
473 $this->assertEquals(3, count($res)); 472 $this->assertEquals(3, count($res));
474 $this->assertContains(' Taz ', $linkDB[4]['tags']); 473 $this->assertContainsPolyfill(' Taz ', $linkDB[4]['tags']);
475 $this->assertContains(' Taz ', $linkDB[1]['tags']); 474 $this->assertContainsPolyfill(' Taz ', $linkDB[1]['tags']);
476 $this->assertContains(' Taz ', $linkDB[0]['tags']); 475 $this->assertContainsPolyfill(' Taz ', $linkDB[0]['tags']);
477 } 476 }
478 477
479 /** 478 /**
@@ -513,7 +512,7 @@ class LegacyLinkDBTest extends \PHPUnit\Framework\TestCase
513 512
514 $res = $linkDB->renameTag('cartoon', null); 513 $res = $linkDB->renameTag('cartoon', null);
515 $this->assertEquals(3, count($res)); 514 $this->assertEquals(3, count($res));
516 $this->assertNotContains('cartoon', $linkDB[4]['tags']); 515 $this->assertNotContainsPolyfill('cartoon', $linkDB[4]['tags']);
517 } 516 }
518 517
519 /** 518 /**
diff --git a/tests/legacy/LegacyLinkFilterTest.php b/tests/legacy/LegacyLinkFilterTest.php
index 9db921a9..45d7754d 100644
--- a/tests/legacy/LegacyLinkFilterTest.php
+++ b/tests/legacy/LegacyLinkFilterTest.php
@@ -10,7 +10,7 @@ use Shaarli\Legacy\LegacyLinkFilter;
10/** 10/**
11 * Class LegacyLinkFilterTest. 11 * Class LegacyLinkFilterTest.
12 */ 12 */
13class LegacyLinkFilterTest extends \PHPUnit\Framework\TestCase 13class LegacyLinkFilterTest extends \Shaarli\TestCase
14{ 14{
15 /** 15 /**
16 * @var string Test datastore path. 16 * @var string Test datastore path.
@@ -197,10 +197,10 @@ class LegacyLinkFilterTest extends \PHPUnit\Framework\TestCase
197 197
198 /** 198 /**
199 * Use an invalid date format 199 * Use an invalid date format
200 * @expectedException Exception
201 */ 200 */
202 public function testFilterInvalidDayWithChars() 201 public function testFilterInvalidDayWithChars()
203 { 202 {
203 $this->expectException(\Exception::class);
204 $this->expectExceptionMessageRegExp('/Invalid date format/'); 204 $this->expectExceptionMessageRegExp('/Invalid date format/');
205 205
206 self::$linkFilter->filter(LegacyLinkFilter::$FILTER_DAY, 'Rainy day, dream away'); 206 self::$linkFilter->filter(LegacyLinkFilter::$FILTER_DAY, 'Rainy day, dream away');
@@ -208,10 +208,10 @@ class LegacyLinkFilterTest extends \PHPUnit\Framework\TestCase
208 208
209 /** 209 /**
210 * Use an invalid date format 210 * Use an invalid date format
211 * @expectedException Exception
212 */ 211 */
213 public function testFilterInvalidDayDigits() 212 public function testFilterInvalidDayDigits()
214 { 213 {
214 $this->expectException(\Exception::class);
215 $this->expectExceptionMessageRegExp('/Invalid date format/'); 215 $this->expectExceptionMessageRegExp('/Invalid date format/');
216 216
217 self::$linkFilter->filter(LegacyLinkFilter::$FILTER_DAY, '20'); 217 self::$linkFilter->filter(LegacyLinkFilter::$FILTER_DAY, '20');
diff --git a/tests/legacy/LegacyUpdaterTest.php b/tests/legacy/LegacyUpdaterTest.php
index acfac530..f7391b86 100644
--- a/tests/legacy/LegacyUpdaterTest.php
+++ b/tests/legacy/LegacyUpdaterTest.php
@@ -20,7 +20,7 @@ require_once 'inc/rain.tpl.class.php';
20 * Class UpdaterTest. 20 * Class UpdaterTest.
21 * Runs unit tests against the updater class. 21 * Runs unit tests against the updater class.
22 */ 22 */
23class LegacyUpdaterTest extends \PHPUnit\Framework\TestCase 23class LegacyUpdaterTest extends \Shaarli\TestCase
24{ 24{
25 /** 25 /**
26 * @var string Path to test datastore. 26 * @var string Path to test datastore.
@@ -80,11 +80,10 @@ class LegacyUpdaterTest extends \PHPUnit\Framework\TestCase
80 80
81 /** 81 /**
82 * Test errors in UpdaterUtils::write_updates_file(): empty updates file. 82 * Test errors in UpdaterUtils::write_updates_file(): empty updates file.
83 *
84 * @expectedException Exception
85 */ 83 */
86 public function testWriteEmptyUpdatesFile() 84 public function testWriteEmptyUpdatesFile()
87 { 85 {
86 $this->expectException(\Exception::class);
88 $this->expectExceptionMessageRegExp('/Updates file path is not set(.*)/'); 87 $this->expectExceptionMessageRegExp('/Updates file path is not set(.*)/');
89 88
90 UpdaterUtils::write_updates_file('', array('test')); 89 UpdaterUtils::write_updates_file('', array('test'));
@@ -92,11 +91,10 @@ class LegacyUpdaterTest extends \PHPUnit\Framework\TestCase
92 91
93 /** 92 /**
94 * Test errors in UpdaterUtils::write_updates_file(): not writable updates file. 93 * Test errors in UpdaterUtils::write_updates_file(): not writable updates file.
95 *
96 * @expectedException Exception
97 */ 94 */
98 public function testWriteUpdatesFileNotWritable() 95 public function testWriteUpdatesFileNotWritable()
99 { 96 {
97 $this->expectException(\Exception::class);
100 $this->expectExceptionMessageRegExp('/Unable to write(.*)/'); 98 $this->expectExceptionMessageRegExp('/Unable to write(.*)/');
101 99
102 $updatesFile = $this->conf->get('resource.data_dir') . '/updates.txt'; 100 $updatesFile = $this->conf->get('resource.data_dir') . '/updates.txt';
@@ -725,7 +723,7 @@ $GLOBALS[\'privateLinkByDefault\'] = true;';
725 $this->assertEquals(\Shaarli\Thumbnailer::MODE_ALL, $this->conf->get('thumbnails.mode')); 723 $this->assertEquals(\Shaarli\Thumbnailer::MODE_ALL, $this->conf->get('thumbnails.mode'));
726 $this->assertEquals(125, $this->conf->get('thumbnails.width')); 724 $this->assertEquals(125, $this->conf->get('thumbnails.width'));
727 $this->assertEquals(90, $this->conf->get('thumbnails.height')); 725 $this->assertEquals(90, $this->conf->get('thumbnails.height'));
728 $this->assertContains('You have enabled or changed thumbnails', $_SESSION['warnings'][0]); 726 $this->assertContainsPolyfill('You have enabled or changed thumbnails', $_SESSION['warnings'][0]);
729 } 727 }
730 728
731 /** 729 /**
diff --git a/tests/netscape/BookmarkExportTest.php b/tests/netscape/BookmarkExportTest.php
index a6eacae4..9b95ccc9 100644
--- a/tests/netscape/BookmarkExportTest.php
+++ b/tests/netscape/BookmarkExportTest.php
@@ -2,12 +2,12 @@
2 2
3namespace Shaarli\Netscape; 3namespace Shaarli\Netscape;
4 4
5use PHPUnit\Framework\TestCase;
6use Shaarli\Bookmark\BookmarkFileService; 5use Shaarli\Bookmark\BookmarkFileService;
7use Shaarli\Config\ConfigManager; 6use Shaarli\Config\ConfigManager;
8use Shaarli\Formatter\BookmarkFormatter; 7use Shaarli\Formatter\BookmarkFormatter;
9use Shaarli\Formatter\FormatterFactory; 8use Shaarli\Formatter\FormatterFactory;
10use Shaarli\History; 9use Shaarli\History;
10use Shaarli\TestCase;
11 11
12require_once 'tests/utils/ReferenceLinkDB.php'; 12require_once 'tests/utils/ReferenceLinkDB.php';
13 13
@@ -77,10 +77,10 @@ class BookmarkExportTest extends TestCase
77 77
78 /** 78 /**
79 * Attempt to export an invalid link selection 79 * Attempt to export an invalid link selection
80 * @expectedException Exception
81 */ 80 */
82 public function testFilterAndFormatInvalid() 81 public function testFilterAndFormatInvalid()
83 { 82 {
83 $this->expectException(\Exception::class);
84 $this->expectExceptionMessageRegExp('/Invalid export selection/'); 84 $this->expectExceptionMessageRegExp('/Invalid export selection/');
85 85
86 $this->netscapeBookmarkUtils->filterAndFormat( 86 $this->netscapeBookmarkUtils->filterAndFormat(
diff --git a/tests/netscape/BookmarkImportTest.php b/tests/netscape/BookmarkImportTest.php
index 89ae4aa7..c1e49b5f 100644
--- a/tests/netscape/BookmarkImportTest.php
+++ b/tests/netscape/BookmarkImportTest.php
@@ -3,13 +3,13 @@
3namespace Shaarli\Netscape; 3namespace Shaarli\Netscape;
4 4
5use DateTime; 5use DateTime;
6use PHPUnit\Framework\TestCase;
7use Psr\Http\Message\UploadedFileInterface; 6use Psr\Http\Message\UploadedFileInterface;
8use Shaarli\Bookmark\Bookmark; 7use Shaarli\Bookmark\Bookmark;
9use Shaarli\Bookmark\BookmarkFileService; 8use Shaarli\Bookmark\BookmarkFileService;
10use Shaarli\Bookmark\BookmarkFilter; 9use Shaarli\Bookmark\BookmarkFilter;
11use Shaarli\Config\ConfigManager; 10use Shaarli\Config\ConfigManager;
12use Shaarli\History; 11use Shaarli\History;
12use Shaarli\TestCase;
13use Slim\Http\UploadedFile; 13use Slim\Http\UploadedFile;
14 14
15/** 15/**
diff --git a/tests/plugins/PluginAddlinkTest.php b/tests/plugins/PluginAddlinkTest.php
index 1f60d289..a3ec9fc9 100644
--- a/tests/plugins/PluginAddlinkTest.php
+++ b/tests/plugins/PluginAddlinkTest.php
@@ -9,7 +9,7 @@ require_once 'plugins/addlink_toolbar/addlink_toolbar.php';
9/** 9/**
10 * Unit test for the Addlink toolbar plugin 10 * Unit test for the Addlink toolbar plugin
11 */ 11 */
12class PluginAddlinkTest extends \PHPUnit\Framework\TestCase 12class PluginAddlinkTest extends \Shaarli\TestCase
13{ 13{
14 /** 14 /**
15 * Reset plugin path. 15 * Reset plugin path.
diff --git a/tests/plugins/PluginArchiveorgTest.php b/tests/plugins/PluginArchiveorgTest.php
index 9c19752c..467dc3d0 100644
--- a/tests/plugins/PluginArchiveorgTest.php
+++ b/tests/plugins/PluginArchiveorgTest.php
@@ -6,8 +6,8 @@ namespace Shaarli\Plugin\Archiveorg;
6 * PluginArchiveorgTest.php 6 * PluginArchiveorgTest.php
7 */ 7 */
8 8
9use PHPUnit\Framework\TestCase;
10use Shaarli\Plugin\PluginManager; 9use Shaarli\Plugin\PluginManager;
10use Shaarli\TestCase;
11 11
12require_once 'plugins/archiveorg/archiveorg.php'; 12require_once 'plugins/archiveorg/archiveorg.php';
13 13
diff --git a/tests/plugins/PluginDefaultColorsTest.php b/tests/plugins/PluginDefaultColorsTest.php
index 240bb4b2..cc844c60 100644
--- a/tests/plugins/PluginDefaultColorsTest.php
+++ b/tests/plugins/PluginDefaultColorsTest.php
@@ -2,10 +2,10 @@
2 2
3namespace Shaarli\Plugin\DefaultColors; 3namespace Shaarli\Plugin\DefaultColors;
4 4
5use PHPUnit\Framework\TestCase;
6use Shaarli\Bookmark\LinkDB; 5use Shaarli\Bookmark\LinkDB;
7use Shaarli\Config\ConfigManager; 6use Shaarli\Config\ConfigManager;
8use Shaarli\Plugin\PluginManager; 7use Shaarli\Plugin\PluginManager;
8use Shaarli\TestCase;
9 9
10require_once 'plugins/default_colors/default_colors.php'; 10require_once 'plugins/default_colors/default_colors.php';
11 11
diff --git a/tests/plugins/PluginIssoTest.php b/tests/plugins/PluginIssoTest.php
index 2bbb93d2..16ecf357 100644
--- a/tests/plugins/PluginIssoTest.php
+++ b/tests/plugins/PluginIssoTest.php
@@ -2,10 +2,10 @@
2namespace Shaarli\Plugin\Isso; 2namespace Shaarli\Plugin\Isso;
3 3
4use DateTime; 4use DateTime;
5use PHPUnit\Framework\TestCase;
6use Shaarli\Bookmark\Bookmark; 5use Shaarli\Bookmark\Bookmark;
7use Shaarli\Config\ConfigManager; 6use Shaarli\Config\ConfigManager;
8use Shaarli\Plugin\PluginManager; 7use Shaarli\Plugin\PluginManager;
8use Shaarli\TestCase;
9 9
10require_once 'plugins/isso/isso.php'; 10require_once 'plugins/isso/isso.php';
11 11
@@ -116,8 +116,8 @@ class PluginIssoTest extends TestCase
116 116
117 $processed = hook_isso_render_linklist($data, $conf); 117 $processed = hook_isso_render_linklist($data, $conf);
118 // link_plugin should be added for the icon 118 // link_plugin should be added for the icon
119 $this->assertContains('<a href="/shaare/'. $short1 .'#isso-thread">', $processed['links'][0]['link_plugin'][0]); 119 $this->assertContainsPolyfill('<a href="/shaare/'. $short1 .'#isso-thread">', $processed['links'][0]['link_plugin'][0]);
120 $this->assertContains('<a href="/shaare/'. $short2 .'#isso-thread">', $processed['links'][1]['link_plugin'][0]); 120 $this->assertContainsPolyfill('<a href="/shaare/'. $short2 .'#isso-thread">', $processed['links'][1]['link_plugin'][0]);
121 } 121 }
122 122
123 /** 123 /**
@@ -146,7 +146,7 @@ class PluginIssoTest extends TestCase
146 $processed = hook_isso_render_linklist($data, $conf); 146 $processed = hook_isso_render_linklist($data, $conf);
147 147
148 // link_plugin should be added for the icon 148 // link_plugin should be added for the icon
149 $this->assertContains('<a href="/shaare/'. $short1 .'#isso-thread">', $processed['links'][0]['link_plugin'][0]); 149 $this->assertContainsPolyfill('<a href="/shaare/'. $short1 .'#isso-thread">', $processed['links'][0]['link_plugin'][0]);
150 } 150 }
151 151
152 /** 152 /**
diff --git a/tests/plugins/PluginPlayvideosTest.php b/tests/plugins/PluginPlayvideosTest.php
index de1a1aec..338d2e35 100644
--- a/tests/plugins/PluginPlayvideosTest.php
+++ b/tests/plugins/PluginPlayvideosTest.php
@@ -14,7 +14,7 @@ require_once 'plugins/playvideos/playvideos.php';
14 * Class PluginPlayvideosTest 14 * Class PluginPlayvideosTest
15 * Unit test for the PlayVideos plugin 15 * Unit test for the PlayVideos plugin
16 */ 16 */
17class PluginPlayvideosTest extends \PHPUnit\Framework\TestCase 17class PluginPlayvideosTest extends \Shaarli\TestCase
18{ 18{
19 /** 19 /**
20 * Reset plugin path 20 * Reset plugin path
diff --git a/tests/plugins/PluginPubsubhubbubTest.php b/tests/plugins/PluginPubsubhubbubTest.php
index d30c3703..d3f7b439 100644
--- a/tests/plugins/PluginPubsubhubbubTest.php
+++ b/tests/plugins/PluginPubsubhubbubTest.php
@@ -11,7 +11,7 @@ require_once 'plugins/pubsubhubbub/pubsubhubbub.php';
11 * Class PluginPubsubhubbubTest 11 * Class PluginPubsubhubbubTest
12 * Unit test for the pubsubhubbub plugin 12 * Unit test for the pubsubhubbub plugin
13 */ 13 */
14class PluginPubsubhubbubTest extends \PHPUnit\Framework\TestCase 14class PluginPubsubhubbubTest extends \Shaarli\TestCase
15{ 15{
16 /** 16 /**
17 * @var string Config file path (without extension). 17 * @var string Config file path (without extension).
diff --git a/tests/plugins/PluginQrcodeTest.php b/tests/plugins/PluginQrcodeTest.php
index bc6be0eb..1d85fba6 100644
--- a/tests/plugins/PluginQrcodeTest.php
+++ b/tests/plugins/PluginQrcodeTest.php
@@ -14,7 +14,7 @@ require_once 'plugins/qrcode/qrcode.php';
14 * Class PluginQrcodeTest 14 * Class PluginQrcodeTest
15 * Unit test for the QR-Code plugin 15 * Unit test for the QR-Code plugin
16 */ 16 */
17class PluginQrcodeTest extends \PHPUnit\Framework\TestCase 17class PluginQrcodeTest extends \Shaarli\TestCase
18{ 18{
19 /** 19 /**
20 * Reset plugin path 20 * Reset plugin path
diff --git a/tests/plugins/PluginWallabagTest.php b/tests/plugins/PluginWallabagTest.php
index 372929ea..36317215 100644
--- a/tests/plugins/PluginWallabagTest.php
+++ b/tests/plugins/PluginWallabagTest.php
@@ -10,7 +10,7 @@ require_once 'plugins/wallabag/wallabag.php';
10 * Class PluginWallabagTest 10 * Class PluginWallabagTest
11 * Unit test for the Wallabag plugin 11 * Unit test for the Wallabag plugin
12 */ 12 */
13class PluginWallabagTest extends \PHPUnit\Framework\TestCase 13class PluginWallabagTest extends \Shaarli\TestCase
14{ 14{
15 /** 15 /**
16 * Reset plugin path 16 * Reset plugin path
diff --git a/tests/plugins/WallabagInstanceTest.php b/tests/plugins/WallabagInstanceTest.php
index 4cb0d4cc..5ef3de1a 100644
--- a/tests/plugins/WallabagInstanceTest.php
+++ b/tests/plugins/WallabagInstanceTest.php
@@ -4,7 +4,7 @@ namespace Shaarli\Plugin\Wallabag;
4/** 4/**
5 * Class WallabagInstanceTest 5 * Class WallabagInstanceTest
6 */ 6 */
7class WallabagInstanceTest extends \PHPUnit\Framework\TestCase 7class WallabagInstanceTest extends \Shaarli\TestCase
8{ 8{
9 /** 9 /**
10 * @var string wallabag url. 10 * @var string wallabag url.
diff --git a/tests/render/PageCacheManagerTest.php b/tests/render/PageCacheManagerTest.php
index 4aa7e179..08d4e5ea 100644
--- a/tests/render/PageCacheManagerTest.php
+++ b/tests/render/PageCacheManagerTest.php
@@ -6,8 +6,8 @@
6 6
7namespace Shaarli\Render; 7namespace Shaarli\Render;
8 8
9use PHPUnit\Framework\TestCase;
10use Shaarli\Security\SessionManager; 9use Shaarli\Security\SessionManager;
10use Shaarli\TestCase;
11 11
12/** 12/**
13 * Unitary tests for cached pages 13 * Unitary tests for cached pages
diff --git a/tests/render/ThemeUtilsTest.php b/tests/render/ThemeUtilsTest.php
index 58e3426b..7d841e4d 100644
--- a/tests/render/ThemeUtilsTest.php
+++ b/tests/render/ThemeUtilsTest.php
@@ -7,7 +7,7 @@ namespace Shaarli\Render;
7 * 7 *
8 * @package Shaarli 8 * @package Shaarli
9 */ 9 */
10class ThemeUtilsTest extends \PHPUnit\Framework\TestCase 10class ThemeUtilsTest extends \Shaarli\TestCase
11{ 11{
12 /** 12 /**
13 * Test getThemes() with existing theme directories. 13 * Test getThemes() with existing theme directories.
diff --git a/tests/security/BanManagerTest.php b/tests/security/BanManagerTest.php
index 2fef82f5..698d3d10 100644
--- a/tests/security/BanManagerTest.php
+++ b/tests/security/BanManagerTest.php
@@ -3,8 +3,8 @@
3 3
4namespace Shaarli\Security; 4namespace Shaarli\Security;
5 5
6use PHPUnit\Framework\TestCase;
7use Shaarli\FileUtils; 6use Shaarli\FileUtils;
7use Shaarli\TestCase;
8 8
9/** 9/**
10 * Test coverage for BanManager 10 * Test coverage for BanManager
diff --git a/tests/security/LoginManagerTest.php b/tests/security/LoginManagerTest.php
index cc9aa647..d302983d 100644
--- a/tests/security/LoginManagerTest.php
+++ b/tests/security/LoginManagerTest.php
@@ -2,7 +2,7 @@
2 2
3namespace Shaarli\Security; 3namespace Shaarli\Security;
4 4
5use PHPUnit\Framework\TestCase; 5use Shaarli\TestCase;
6 6
7/** 7/**
8 * Test coverage for LoginManager 8 * Test coverage for LoginManager
diff --git a/tests/security/SessionManagerTest.php b/tests/security/SessionManagerTest.php
index 27e3b1a9..3f9c3ef5 100644
--- a/tests/security/SessionManagerTest.php
+++ b/tests/security/SessionManagerTest.php
@@ -2,7 +2,7 @@
2 2
3namespace Shaarli\Security; 3namespace Shaarli\Security;
4 4
5use PHPUnit\Framework\TestCase; 5use Shaarli\TestCase;
6 6
7/** 7/**
8 * Test coverage for SessionManager 8 * Test coverage for SessionManager
diff --git a/tests/updater/DummyUpdater.php b/tests/updater/DummyUpdater.php
index 07c7f5c4..3403233f 100644
--- a/tests/updater/DummyUpdater.php
+++ b/tests/updater/DummyUpdater.php
@@ -37,7 +37,7 @@ class DummyUpdater extends Updater
37 * 37 *
38 * @return bool true. 38 * @return bool true.
39 */ 39 */
40 final private function updateMethodDummy1() 40 final protected function updateMethodDummy1()
41 { 41 {
42 return true; 42 return true;
43 } 43 }
@@ -47,7 +47,7 @@ class DummyUpdater extends Updater
47 * 47 *
48 * @return bool true. 48 * @return bool true.
49 */ 49 */
50 final private function updateMethodDummy2() 50 final protected function updateMethodDummy2()
51 { 51 {
52 return true; 52 return true;
53 } 53 }
@@ -57,7 +57,7 @@ class DummyUpdater extends Updater
57 * 57 *
58 * @return bool true. 58 * @return bool true.
59 */ 59 */
60 final private function updateMethodDummy3() 60 final protected function updateMethodDummy3()
61 { 61 {
62 return true; 62 return true;
63 } 63 }
@@ -67,7 +67,7 @@ class DummyUpdater extends Updater
67 * 67 *
68 * @throws Exception error. 68 * @throws Exception error.
69 */ 69 */
70 final private function updateMethodException() 70 final protected function updateMethodException()
71 { 71 {
72 throw new Exception('whatever'); 72 throw new Exception('whatever');
73 } 73 }
diff --git a/tests/updater/UpdaterTest.php b/tests/updater/UpdaterTest.php
index 5cfcd5db..a6280b8c 100644
--- a/tests/updater/UpdaterTest.php
+++ b/tests/updater/UpdaterTest.php
@@ -2,11 +2,11 @@
2namespace Shaarli\Updater; 2namespace Shaarli\Updater;
3 3
4use Exception; 4use Exception;
5use PHPUnit\Framework\TestCase;
6use Shaarli\Bookmark\BookmarkFileService; 5use Shaarli\Bookmark\BookmarkFileService;
7use Shaarli\Bookmark\BookmarkServiceInterface; 6use Shaarli\Bookmark\BookmarkServiceInterface;
8use Shaarli\Config\ConfigManager; 7use Shaarli\Config\ConfigManager;
9use Shaarli\History; 8use Shaarli\History;
9use Shaarli\TestCase;
10 10
11 11
12/** 12/**
@@ -87,11 +87,10 @@ class UpdaterTest extends TestCase
87 87
88 /** 88 /**
89 * Test errors in UpdaterUtils::write_updates_file(): empty updates file. 89 * Test errors in UpdaterUtils::write_updates_file(): empty updates file.
90 *
91 * @expectedException Exception
92 */ 90 */
93 public function testWriteEmptyUpdatesFile() 91 public function testWriteEmptyUpdatesFile()
94 { 92 {
93 $this->expectException(\Exception::class);
95 $this->expectExceptionMessageRegExp('/Updates file path is not set(.*)/'); 94 $this->expectExceptionMessageRegExp('/Updates file path is not set(.*)/');
96 95
97 UpdaterUtils::write_updates_file('', array('test')); 96 UpdaterUtils::write_updates_file('', array('test'));
@@ -99,11 +98,10 @@ class UpdaterTest extends TestCase
99 98
100 /** 99 /**
101 * Test errors in UpdaterUtils::write_updates_file(): not writable updates file. 100 * Test errors in UpdaterUtils::write_updates_file(): not writable updates file.
102 *
103 * @expectedException Exception
104 */ 101 */
105 public function testWriteUpdatesFileNotWritable() 102 public function testWriteUpdatesFileNotWritable()
106 { 103 {
104 $this->expectException(\Exception::class);
107 $this->expectExceptionMessageRegExp('/Unable to write(.*)/'); 105 $this->expectExceptionMessageRegExp('/Unable to write(.*)/');
108 106
109 $updatesFile = $this->conf->get('resource.data_dir') . '/updates.txt'; 107 $updatesFile = $this->conf->get('resource.data_dir') . '/updates.txt';