Merge branch 'master' of github.com:Shaarli/Shaarli into upstream

This commit is contained in:
Keith Carangelo 2021-08-26 14:17:37 -04:00
commit 6ca8ab31b2
131 changed files with 4833 additions and 2527 deletions

View file

@ -4,7 +4,6 @@
.github
.gitattributes
.gitignore
.travis.yml
tests
# Docker related resources are not needed inside the container

99
.github/workflows/ci.yml vendored Normal file
View file

@ -0,0 +1,99 @@
name: Shaarli CI
on: [push, pull_request]
jobs:
php:
runs-on: ubuntu-18.04
strategy:
matrix:
php-versions: ['7.1', '7.2', '7.3', '7.4', '8.0', '8.1']
name: PHP ${{ matrix.php-versions }}
steps:
- name: Set locales
run: |
sudo locale-gen de_DE.utf8 && \
sudo locale-gen en_US.utf8 && \
sudo locale-gen fr_FR.utf8 && \
sudo dpkg-reconfigure --frontend=noninteractive locales
- name: Install Gettext
run: sudo apt-get install gettext
- name: Checkout
uses: actions/checkout@v2
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-versions }}
extensions: gd, xml, curl, mbstring, intl, gettext
tools: composer:v2
- name: Check PHP version
run: php -v
- name: Setup Composer from PHP version + update
run: composer config --unset platform && composer config platform.php ${{ matrix.php-versions }}
- name: Update dependencies for PHP 8.x
if: ${{ matrix.php-versions == '8.0' || matrix.php-versions == '8.1' }}
run: |
composer update --ignore-platform-req=php && \
composer remove --dev --ignore-platform-req=php phpunit/phpunit && \
composer require --dev --ignore-platform-req=php phpunit/php-text-template ^2.0 && \
composer require --dev --ignore-platform-req=php phpunit/phpunit ^9.0
- name: Update dependencies for PHP 7.x
if: ${{ matrix.php-versions != '8.0' && matrix.php-versions != '8.1' }}
run: composer update
- name: Clean up
run: make clean
- name: Check permissions
run: make check_permissions
- name: Run PHPCS
run: make code_sniffer
- name: Run tests
run: make all_tests
node:
runs-on: ubuntu-18.04
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Setup Node.js
uses: actions/setup-node@v1
with:
node-version: '14.x'
- name: Yarn install
run: yarn install
- name: Verify successful frontend builds
run: yarn run build
- name: JS static analysis
run: make eslint
- name: Linter for SASS syntax
run: make sasslint
python:
runs-on: ubuntu-18.04
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Setup Python
uses: actions/setup-python@v2
with:
node-version: 3.8
- name: Install dependencies
run: pip install mkdocs
- name: Build documentation
run: mkdocs build --clean

25
.github/workflows/docker-latest.yml vendored Normal file
View file

@ -0,0 +1,25 @@
name: Build/push Docker image (master/latest)
on:
push:
branches: [ master ]
jobs:
docker-build:
runs-on: ubuntu-latest
steps:
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
id: docker_build
uses: docker/build-push-action@v2
with:
push: true
tags: shaarli/shaarli:latest
- name: Image digest
run: echo ${{ steps.docker_build.outputs.digest }}

31
.github/workflows/docker-tags.yml vendored Normal file
View file

@ -0,0 +1,31 @@
name: Build/push Docker image (tags/releases)
on:
push:
tags:
- "v*.*.*"
branches:
- "v*.*"
- release
jobs:
docker-build:
runs-on: ubuntu-latest
steps:
- name: Get the tag name
run: echo "REF=${GITHUB_REF##*/}" >> $GITHUB_ENV
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
id: docker_build
uses: docker/build-push-action@v2
with:
push: true
tags: shaarli/shaarli:${{ env.REF }}
- name: Image digest
run: echo ${{ steps.docker_build.outputs.digest }}

View file

@ -1,68 +0,0 @@
dist: bionic
matrix:
include:
# jobs for each supported php version
- language: php
php: nightly # PHP 8.0
install:
- composer self-update --2
- composer update --ignore-platform-req=php
- composer remove --dev --ignore-platform-req=php phpunit/phpunit
- composer require --dev --ignore-platform-req=php phpunit/php-text-template ^2.0
- composer require --dev --ignore-platform-req=php phpunit/phpunit ^9.0
- language: php
php: 7.4
- language: php
php: 7.3
- language: php
php: 7.2
- language: php
php: 7.1
# jobs for frontend builds
- language: node_js
node_js: 10
cache:
yarn: true
directories:
- $HOME/.cache/yarn
install:
- yarn install
before_script:
- PATH=${PATH//:\.\/node_modules\/\.bin/}
script:
- yarn run build # verify successful frontend builds
- make eslint # javascript static analysis
- make sasslint # linter for SASS syntax
# jobs for documentation builds
- language: python
python: 3.6
cache:
directories:
- $HOME/.cache/pip
install:
- pip install mkdocs
script:
- mkdocs build --clean
cache:
directories:
- $HOME/.composer/cache
before_install:
# Disable xdebug: it significantly speed up tests and linter, and we don't use coverage yet
- phpenv config-rm xdebug.ini || echo 'No xdebug config.'
install:
# install/update composer and php dependencies
- composer config --unset platform && composer config platform.php $TRAVIS_PHP_VERSION
- composer update
before_script:
- PATH=${PATH//:\.\/node_modules\/\.bin/}
script:
- make clean
- make check_permissions
- make code_sniffer
- make all_tests

View file

@ -6,6 +6,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
## [v0.12.2]() - UNRELEASED
> The `:master` Docker image is deprecated, please use `:latest` instead.
> The `:stable` Docker image is deprecated, please use `:release` instead.
## [v0.12.1](https://github.com/shaarli/Shaarli/releases/tag/v0.12.0) - 2020-11-12
> nginx ([#1628](https://github.com/shaarli/Shaarli/pull/1628)) and Apache ([#1630](https://github.com/shaarli/Shaarli/pull/1630)) configurations have been reviewed. It is recommended that you

View file

@ -13,7 +13,7 @@ _It is designed to be personal (single-user), fast and handy._
[![](https://img.shields.io/travis/shaarli/Shaarli/latest.svg?label=latest)](https://travis-ci.org/shaarli/Shaarli)
•
[![](https://img.shields.io/badge/master-v0.12.x-blue.svg)](https://github.com/shaarli/Shaarli)
[![](https://img.shields.io/travis/shaarli/Shaarli.svg?label=master)](https://travis-ci.org/shaarli/Shaarli)
[![](https://github.com/shaarli/Shaarli/actions/workflows/ci.yml/badge.svg)](https://github.com/shaarli/Shaarli/actions)
[![Join the chat at https://gitter.im/shaarli/Shaarli](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/shaarli/Shaarli)
[![Bountysource](https://www.bountysource.com/badge/team?team_id=19583&style=bounties_received)](https://www.bountysource.com/teams/shaarli/issues)

View file

@ -187,6 +187,7 @@ public static function getAvailableLanguages()
'fr' => t('French'),
'jp' => t('Japanese'),
'ru' => t('Russian'),
'zh_CN' => t('Chinese (Simplified)'),
];
}
}

View file

@ -74,7 +74,7 @@ public function __construct(
$this->isLoggedIn = $isLoggedIn;
if (!$this->isLoggedIn && $this->conf->get('privacy.hide_public_links', false)) {
$this->bookmarks = [];
$this->bookmarks = new BookmarkArray();
} else {
try {
$this->bookmarks = $this->bookmarksIO->read();

View file

@ -12,8 +12,8 @@
*/
class BookmarkDefaultFormatter extends BookmarkFormatter
{
public const SEARCH_HIGHLIGHT_OPEN = '||O_HIGHLIGHT';
public const SEARCH_HIGHLIGHT_CLOSE = '||C_HIGHLIGHT';
public const SEARCH_HIGHLIGHT_OPEN = 'SHAARLI_O_HIGHLIGHT';
public const SEARCH_HIGHLIGHT_CLOSE = 'SHAARLI_C_HIGHLIGHT';
/**
* @inheritdoc

View file

@ -71,5 +71,11 @@
"Shaarli\\Updater\\": "application/updater",
"Shaarli\\Updater\\Exception\\": "application/updater/exception"
}
},
"autoload-dev": {
"psr-4": {
"Shaarli\\Tests\\": "tests",
"Shaarli\\Tests\\Utils\\": "tests/utils"
}
}
}

518
composer.lock generated

File diff suppressed because it is too large Load diff

View file

@ -14,7 +14,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
{%- if 'media.readthedocs.org' not in config.extra_css[0] %}
{%- if config.extra_css|length and 'media.readthedocs.org' not in config.extra_css[0] %}
<meta name="robots" content="noindex, nofollow">
{%- endif %}

View file

@ -41,9 +41,10 @@ docker run hello-world
Shaarli images are available on [DockerHub](https://hub.docker.com/r/shaarli/shaarli/) `shaarli/shaarli`:
- `latest`: latest branch (last release)
- `stable`: stable branch (last release in previous major version)
- `master`: master branch (development branch)
- `latest`: master (development) branch
- `vX.Y.Z`: shaarli [releases](https://github.com/shaarli/Shaarli/releases)
- `release`: always points to the last release
- `stable` and `master`: **deprecated**. These tags are no longer maintained and may be removed without notice
These images are built automatically on DockerHub and rely on:

View file

@ -49,7 +49,6 @@ Usage of each plugin is documented in it's README file:
* `archiveorg`: For each Shaare, add a link to the archived page on Archive.org
* `default_colors`: Override default theme colors.
* `isso`: Let visitor comment your shaares on permalinks with Isso.
* [`markdown`](https://github.com/shaarli/Shaarli/blob/master/plugins/markdown/README.md): Render shaare description with Markdown syntax.
* `piwik`: A plugin that adds Piwik tracking code to Shaarli pages.
* [`playvideos`](https://github.com/shaarli/Shaarli/blob/master/plugins/playvideos/README.md): Add a button in the toolbar allowing to watch all videos.
* `pubsubhubbub`: Enable PubSubHubbub feed publishing
@ -59,4 +58,4 @@ Usage of each plugin is documented in it's README file:
### Third party plugins
See [Community & related software](https://shaarli.readthedocs.io/en/master/Community-and-Related-software/)
See [Community & related software](https://shaarli.readthedocs.io/en/master/Community-and-related-software/)

View file

@ -118,6 +118,7 @@ http {
ssl_certificate /path/to/certificate
ssl_certificate_key /path/to/private/key
# if shaarli is installed in a subdirectory of the main domain, edit the location accordingly
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

View file

@ -59,10 +59,15 @@ Extension | Required? | Usage
[`php-json`](http://php.net/manual/en/book.json.php) | required | configuration parsing
[`php-simplexml`](https://www.php.net/manual/en/book.simplexml.php) | required | REST API (Slim framework)
[`php-mbstring`](http://php.net/manual/en/book.mbstring.php) | CentOS, Fedora, RHEL, Windows, some hosting providers | multibyte (Unicode) string support
[`php-ctype`](https://www.php.net/manual/en/book.ctype.php) | required (bundled with most PHP installation) | Type checking
[`php-iconv`](https://www.php.net/manual/en/book.iconv.php) | required (bundled with most PHP installation) | Character encoding used in translations
[`php-session`](https://www.php.net/manual/en/book.session.php) | required (bundled with most PHP installation) | User session
[`php-zlib`](https://www.php.net/manual/en/book.zlib.php) | required (bundled with most PHP installation) | Datastore I/O compression
[`php-gd`](http://php.net/manual/en/book.image.php) | optional | required to use thumbnails
[`php-intl`](http://php.net/manual/en/book.intl.php) | optional | localized text sorting (e.g. `e->è->f`)
[`php-curl`](http://php.net/manual/en/book.curl.php) | optional | using cURL for fetching webpages and thumbnails in a more robust way
[`php-gettext`](http://php.net/manual/en/book.gettext.php) | optional | Use the translation system in gettext mode (faster)
[`php-ldap`](https://www.php.net/manual/en/book.ldap.php) | optional | LDAP login support
Some [plugins](Plugins.md) may require additional configuration.
@ -300,6 +305,7 @@ server {
client_max_body_size 100m;
# relative path to shaarli from the root of the webserver
# if shaarli is installed in a subdirectory of the main domain, edit the location accordingly
location / {
# default index file when no file URI is requested
index index.php;

View file

@ -96,6 +96,14 @@ If you hosting provider only provides apache 2.2 and no support for `mod_version
Follow the instructions in the error message. Make sure you are accessing shaarli via a direct IP address or a proper hostname. If you have **no dots** in the hostname (e.g. `localhost` or `http://my-webserver/shaarli/`), some browsers will not store cookies at all (this respects the [HTTP cookie specification](http://curl.haxx.se/rfc/cookie_spec.html)).
### Error 406 "Not acceptable"
If attempting to save a link results in a `Not acceptable` error (HTTP status code of `406`), it is likely due to strict settings for `mod_security` (a module used with Apache). This cannot be mitigated by reconfiguring Shaarli itself, and must be dealt with at the level of the underlying web server instead.
On some shared hosting services (such as **Bluehost**), `mod_security` is enabled by default, so the recommended course of action is to get in touch with the helpdesk and ask them to disable `mod_security` for your domain, sub-domain, or the subdirectory where Shaarli is installed. Ideally, you want to narrow it down to a very specific location, so as to continue reaping the benefits of `mod_security` elsewhere on your domain. If asked for specific, you can refer support staff to this [issue](https://github.com/shaarli/Shaarli/issues/1736), where more technical details are available.
----------------------------------------------------------
## Upgrades
@ -164,7 +172,7 @@ You can use the third-party tool [Derefind](https://github.com/ShawnPConroy/Dere
### The bookmarklet doesn't work
Websites which enforce Content Security Policy (CSP), such as github.com, disallow usage of bookmarklets. Unfortunately, there is nothing Shaarli can do about it ([1](https://github.com/shaarli/Shaarli/issues/196), [2](https://bugzilla.mozilla.org/show_bug.cgi?id=866522), [3](https://code.google.com/p/chromium/issues/detail?id=233903).
Some websites may disallow usage of bookmarklets through [Content Security Policy (CSP)](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP). Unfortunately, there is nothing Shaarli can do about it ([1](https://github.com/shaarli/Shaarli/issues/196), [2](https://bugzilla.mozilla.org/show_bug.cgi?id=866522), [3](https://code.google.com/p/chromium/issues/detail?id=233903).
Under Opera, you can't drag'n drop the button: You have to right-click on it and add a bookmark to your personal toolbar.

View file

@ -143,17 +143,19 @@ A [`Makefile`](https://github.com/shaarli/Shaarli/blob/master/Makefile) is avail
### Continuous Integration
[Travis CI](http://docs.travis-ci.com/) is a Continuous Integration build server, that runs a build:
[Github Actions](https://github.com/shaarli/Shaarli/actions) is a Continuous Integration build server, that runs a build:
- each time a commit is merged to the mainline (`master` branch)
- each time a commit is pushed to any branch
- each time a Pull Request is submitted or updated
After all jobs have finished, Travis returns the results to GitHub:
After all jobs have finished, Github Actions returns the results to GitHub:
- a status icon represents the result for the `master` branch: [![](https://api.travis-ci.org/shaarli/Shaarli.svg)](https://travis-ci.org/shaarli/Shaarli)
- Pull Requests are updated with the Travis build result.
- a status icon represents the result for the `master` branch: [![Build Status](https://github.com/shaarli/Shaarli/actions/workflows/ci.yml/badge.svg)](https://github.com/shaarli/Shaarli/actions)
- Pull Requests are updated with the Github Actions build result.
See [`.travis.yml`](https://github.com/shaarli/Shaarli/blob/master/.travis.yml).
Github Actions is also used to build and push [Docker](../Docker.md) images to <https://hub.docker.com/r/shaarli/shaarli> for the `master` branch and on every git `tag`/[release](https://github.com/shaarli/Shaarli/releases).
See [`.github/workflows/`](https://github.com/shaarli/Shaarli/tree/master/.github/workflows).
### Documentation
@ -169,13 +171,11 @@ Patches should try to stick to the [PHP Standard Recommendations](http://www.php
- [PSR-2](http://www.php-fig.org/psr/psr-2/) - Coding Style Guide
- [PSR-12](http://www.php-fig.org/psr/psr-12/) - Extended Coding Style Guide
These are enforced on pull requests using our Continuous Integration tools.
These are enforced on pull requests using our Continuous Integration tools with [PHP Code Sniffer](https://github.com/squizlabs/PHP_CodeSniffer).
**Work in progress:** Static analysis is currently being discussed here: in [#95 - Fix coding style (static analysis)](https://github.com/shaarli/Shaarli/issues/95), [#130 - Continuous Integration tools & features](https://github.com/shaarli/Shaarli/issues/130)
Static analysis tools can be installed with Composer, and used through Shaarli's [Makefile](https://github.com/shaarli/Shaarli/blob/master/Makefile).
Static analysis tools are installed with Composer dependencies, and used through Shaarli's [Makefile](https://github.com/shaarli/Shaarli/blob/master/Makefile) with `make code_sniffer`.
For an overview of the available features, see:
- [Code quality: Makefile to run static code checkers](https://github.com/shaarli/Shaarli/pull/124) (#124)
- [Run PHPCS against different coding standards](https://github.com/shaarli/Shaarli/pull/276) (#276)
- [Apply PHP Code Sniffer to Shaarli code base](https://github.com/shaarli/Shaarli/pull/1635) (#1635)

View file

@ -60,6 +60,7 @@ Shaarli can be used:
- Easily extensible by any client using the [REST API](REST-API.md) exposed by Shaarli
- Bookmarklet and [other tools](Community-and-related-software.md) to share links in one click
- Responsive/support for mobile browsers, degrades gracefully with Javascript disabled
- LDAP (single-user) login support
### Easy setup

View file

@ -624,7 +624,7 @@ msgstr "Bildwand ist nicht verfügbar (Miniaturansichten sind deaktiviert)."
#: application/front/exceptions/WrongTokenException.php:16
msgid "Wrong token."
msgstr "Falsches Zeichen."
msgstr "Falsches Token."
#: application/helper/ApplicationUtils.php:165
#, php-format

View file

@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Shaarli\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-10-19 10:19+0900\n"
"PO-Revision-Date: 2021-01-04 18:54+0900\n"
"POT-Creation-Date: 2021-04-04 11:29+0900\n"
"PO-Revision-Date: 2021-04-04 13:20+0900\n"
"Last-Translator: yude <yudesleepy@gmail.com>\n"
"Language-Team: Shaarli\n"
"Language: ja\n"
@ -19,61 +19,38 @@ msgstr ""
"X-Poedit-SearchPathExcluded-0: node_modules\n"
"X-Poedit-SearchPathExcluded-1: vendor\n"
#: application/ApplicationUtils.php:161
#, php-format
msgid ""
"Your PHP version is obsolete! Shaarli requires at least PHP %s, and thus "
"cannot run. Your PHP version has known security vulnerabilities and should "
"be updated as soon as possible."
msgstr ""
"使用している PHP のバージョンが古すぎます! Shaarli の実行には最低でも PHP %s "
"が必要です。 現在使用している PHP のバージョンには脆弱性があり、できるだけ速"
"やかにアップデートするべきです。"
#: application/ApplicationUtils.php:192 application/ApplicationUtils.php:204
msgid "directory is not readable"
msgstr "ディレクトリを読み込めません"
#: application/ApplicationUtils.php:207
msgid "directory is not writable"
msgstr "ディレクトリに書き込めません"
#: application/ApplicationUtils.php:225
msgid "file is not readable"
msgstr "ファイルを読み取る権限がありません"
#: application/ApplicationUtils.php:228
msgid "file is not writable"
msgstr "ファイルを書き込む権限がありません"
#: application/History.php:179
#: application/History.php:181
msgid "History file isn't readable or writable"
msgstr "履歴ファイルを読み込む、または書き込むための権限がありません"
#: application/History.php:190
#: application/History.php:192
msgid "Could not parse history file"
msgstr "履歴ファイルを正常に復元できませんでした"
#: application/Languages.php:181
#: application/Languages.php:184
msgid "Automatic"
msgstr "自動"
#: application/Languages.php:182
#: application/Languages.php:185
msgid "German"
msgstr "ドイツ語"
#: application/Languages.php:183
#: application/Languages.php:186
msgid "English"
msgstr "英語"
#: application/Languages.php:184
#: application/Languages.php:187
msgid "French"
msgstr "フランス語"
#: application/Languages.php:185
#: application/Languages.php:188
msgid "Japanese"
msgstr "日本語"
#: application/Languages.php:189
msgid "Russian"
msgstr "ロシア語"
#: application/Thumbnailer.php:62
msgid ""
"php-gd extension must be loaded to use thumbnails. Thumbnails are now "
@ -82,49 +59,49 @@ msgstr ""
"サムネイルを使用するには、php-gd 拡張機能が読み込まれている必要があります。サ"
"ムネイルは無効化されました。ページを再読込してください。"
#: application/Utils.php:383 tests/UtilsTest.php:343
#: application/Utils.php:406 tests/UtilsTest.php:327
msgid "Setting not set"
msgstr "未設定"
#: application/Utils.php:390 tests/UtilsTest.php:341 tests/UtilsTest.php:342
#: application/Utils.php:413 tests/UtilsTest.php:325 tests/UtilsTest.php:326
msgid "Unlimited"
msgstr "無制限"
#: application/Utils.php:393 tests/UtilsTest.php:338 tests/UtilsTest.php:339
#: tests/UtilsTest.php:353
#: application/Utils.php:416 tests/UtilsTest.php:322 tests/UtilsTest.php:323
#: tests/UtilsTest.php:337
msgid "B"
msgstr "B"
#: application/Utils.php:393 tests/UtilsTest.php:332 tests/UtilsTest.php:333
#: tests/UtilsTest.php:340
#: application/Utils.php:416 tests/UtilsTest.php:316 tests/UtilsTest.php:317
#: tests/UtilsTest.php:324
msgid "kiB"
msgstr "kiB"
#: application/Utils.php:393 tests/UtilsTest.php:334 tests/UtilsTest.php:335
#: tests/UtilsTest.php:351 tests/UtilsTest.php:352
#: application/Utils.php:416 tests/UtilsTest.php:318 tests/UtilsTest.php:319
#: tests/UtilsTest.php:335 tests/UtilsTest.php:336
msgid "MiB"
msgstr "MiB"
#: application/Utils.php:393 tests/UtilsTest.php:336 tests/UtilsTest.php:337
#: application/Utils.php:416 tests/UtilsTest.php:320 tests/UtilsTest.php:321
msgid "GiB"
msgstr "GiB"
#: application/bookmark/BookmarkFileService.php:180
#: application/bookmark/BookmarkFileService.php:202
#: application/bookmark/BookmarkFileService.php:224
#: application/bookmark/BookmarkFileService.php:238
#: application/bookmark/BookmarkFileService.php:203
#: application/bookmark/BookmarkFileService.php:225
#: application/bookmark/BookmarkFileService.php:247
#: application/bookmark/BookmarkFileService.php:261
msgid "You're not authorized to alter the datastore"
msgstr "設定を変更する権限がありません"
#: application/bookmark/BookmarkFileService.php:205
#: application/bookmark/BookmarkFileService.php:228
msgid "This bookmarks already exists"
msgstr "このブックマークは既に存在します"
#: application/bookmark/BookmarkInitializer.php:39
#: application/bookmark/BookmarkInitializer.php:42
msgid "(private bookmark with thumbnail demo)"
msgstr "(サムネイルデモが付属しているプライベートブックマーク)"
#: application/bookmark/BookmarkInitializer.php:42
#: application/bookmark/BookmarkInitializer.php:45
msgid ""
"Shaarli will automatically pick up the thumbnail for links to a variety of "
"websites.\n"
@ -146,11 +123,11 @@ msgstr ""
"\n"
"今から、既定の shaares を編集したり、削除したりすることができます。\n"
#: application/bookmark/BookmarkInitializer.php:55
#: application/bookmark/BookmarkInitializer.php:58
msgid "Note: Shaare descriptions"
msgstr "説明: Shaare の概要"
#: application/bookmark/BookmarkInitializer.php:57
#: application/bookmark/BookmarkInitializer.php:60
msgid ""
"Adding a shaare without entering a URL creates a text-only \"note\" post "
"such as this one.\n"
@ -214,14 +191,14 @@ msgstr ""
"| レモン | 果物 | 黄 | 30 |\n"
"| 人参 | 野菜 | 赤 | 14 |\n"
#: application/bookmark/BookmarkInitializer.php:91
#: application/bookmark/BookmarkInitializer.php:94
#: application/legacy/LegacyLinkDB.php:246
msgid ""
"The personal, minimalist, super-fast, database free, bookmarking service"
msgstr ""
"個人向けの、ミニマムで高速でかつデータベースのいらないブックマークサービス"
#: application/bookmark/BookmarkInitializer.php:94
#: application/bookmark/BookmarkInitializer.php:97
msgid ""
"Welcome to Shaarli!\n"
"\n"
@ -269,11 +246,11 @@ msgstr ""
"何か問題に遭遇したり、提案があれば、気軽に [Issue](https://github.com/"
"shaarli/Shaarli/issues) を開いてください。\n"
#: application/bookmark/exception/BookmarkNotFoundException.php:13
#: application/bookmark/exception/BookmarkNotFoundException.php:14
msgid "The link you are trying to reach does not exist or has been deleted."
msgstr "開こうとしたリンクは存在しないか、削除されています。"
#: application/config/ConfigJson.php:52 application/config/ConfigPhp.php:129
#: application/config/ConfigJson.php:52 application/config/ConfigPhp.php:131
msgid ""
"Shaarli could not create the config file. Please make sure Shaarli has the "
"right to write in the folder is it installed in."
@ -282,13 +259,13 @@ msgstr ""
"ていて、インストールされているディレクトリに書き込みできることを確認してくだ"
"さい。"
#: application/config/ConfigManager.php:136
#: application/config/ConfigManager.php:163
#: application/config/ConfigManager.php:137
#: application/config/ConfigManager.php:164
msgid "Invalid setting key parameter. String expected, got: "
msgstr ""
"不正なキーの値です。文字列が想定されていますが、次のように入力されました: "
#: application/config/exception/MissingFieldConfigException.php:21
#: application/config/exception/MissingFieldConfigException.php:20
#, php-format
msgid "Configuration value is required for %s"
msgstr "%s には設定が必要です"
@ -297,42 +274,43 @@ msgstr "%s には設定が必要です"
msgid "An error occurred while trying to save plugins loading order."
msgstr "プラグインの読込順を変更する際にエラーが発生しました。"
#: application/config/exception/UnauthorizedConfigException.php:16
#: application/config/exception/UnauthorizedConfigException.php:15
msgid "You are not authorized to alter config."
msgstr "設定を変更する権限がありません。"
#: application/exceptions/IOException.php:22
#: application/exceptions/IOException.php:23
msgid "Error accessing"
msgstr "読込中にエラーが発生しました"
#: application/feed/FeedBuilder.php:179
#: application/feed/FeedBuilder.php:174
msgid "Direct link"
msgstr "ダイレクトリンク"
#: application/feed/FeedBuilder.php:181
#: application/feed/FeedBuilder.php:176
msgid "Permalink"
msgstr "パーマリンク"
#: application/front/controller/admin/ConfigureController.php:54
#: application/front/controller/admin/ConfigureController.php:56
msgid "Configure"
msgstr "設定"
#: application/front/controller/admin/ConfigureController.php:102
#: application/legacy/LegacyUpdater.php:537
#: application/front/controller/admin/ConfigureController.php:106
#: application/legacy/LegacyUpdater.php:539
msgid "You have enabled or changed thumbnails mode."
msgstr "サムネイルのモードを有効化、または変更しました。"
#: application/front/controller/admin/ConfigureController.php:103
#: application/legacy/LegacyUpdater.php:538
#: application/front/controller/admin/ConfigureController.php:108
#: application/front/controller/admin/ServerController.php:81
#: application/legacy/LegacyUpdater.php:540
msgid "Please synchronize them."
msgstr "それらを同期してください。"
#: application/front/controller/admin/ConfigureController.php:113
#: application/front/controller/visitor/InstallController.php:136
#: application/front/controller/admin/ConfigureController.php:119
#: application/front/controller/visitor/InstallController.php:154
msgid "Error while writing config file after configuration update."
msgstr "設定ファイルを更新した後の書き込みに失敗しました。"
#: application/front/controller/admin/ConfigureController.php:122
#: application/front/controller/admin/ConfigureController.php:128
msgid "Configuration was saved."
msgstr "設定は保存されました。"
@ -362,61 +340,42 @@ msgstr ""
"ルサイズ (%s) よりも大きいです。もう少し小さいものをアップロードしてくださ"
"い。"
#: application/front/controller/admin/ManageShaareController.php:29
msgid "Shaare a new link"
msgstr "新しいリンクを追加"
#: application/front/controller/admin/ManageTagController.php:30
msgid "whitespace"
msgstr "空白"
#: application/front/controller/admin/ManageShaareController.php:78
msgid "Note: "
msgstr "注: "
#: application/front/controller/admin/ManageShaareController.php:109
#: application/front/controller/admin/ManageShaareController.php:206
#: application/front/controller/admin/ManageShaareController.php:275
#: application/front/controller/admin/ManageShaareController.php:315
#, php-format
msgid "Bookmark with identifier %s could not be found."
msgstr "%s という識別子を持ったブックマークは見つかりませんでした。"
#: application/front/controller/admin/ManageShaareController.php:194
#: application/front/controller/admin/ManageShaareController.php:252
msgid "Invalid bookmark ID provided."
msgstr "不正なブックマーク ID が入力されました。"
#: application/front/controller/admin/ManageShaareController.php:260
msgid "Invalid visibility provided."
msgstr "不正な公開設定が入力されました。"
#: application/front/controller/admin/ManageShaareController.php:363
msgid "Edit"
msgstr "共有"
#: application/front/controller/admin/ManageShaareController.php:366
msgid "Shaare"
msgstr "Shaare"
#: application/front/controller/admin/ManageTagController.php:29
#: application/front/controller/admin/ManageTagController.php:35
msgid "Manage tags"
msgstr "タグを設定"
#: application/front/controller/admin/ManageTagController.php:48
#: application/front/controller/admin/ManageTagController.php:54
msgid "Invalid tags provided."
msgstr "不正なタグが入力されました。"
#: application/front/controller/admin/ManageTagController.php:72
#: application/front/controller/admin/ManageTagController.php:81
#, php-format
msgid "The tag was removed from %d bookmark."
msgid_plural "The tag was removed from %d bookmarks."
msgstr[0] "%d 件のリンクからタグが削除されました。"
msgstr[1] "%d 件のリンクからタグが削除されました。"
#: application/front/controller/admin/ManageTagController.php:77
#: application/front/controller/admin/ManageTagController.php:86
#, php-format
msgid "The tag was renamed in %d bookmark."
msgid_plural "The tag was renamed in %d bookmarks."
msgstr[0] "このタグを持つ %d 件のリンクにおいて、名前が変更されました。"
msgstr[1] "このタグを持つ %d 件のリンクにおいて、名前が変更されました。"
#: application/front/controller/admin/ManageTagController.php:108
msgid "Tags separator must be a single character."
msgstr "タグを分離する文字は1つでなければいけません。"
#: application/front/controller/admin/ManageTagController.php:114
msgid "These characters are reserved and can't be used as tags separator: "
msgstr ""
"それらの文字は予約文字であり、タグを分離するための文字として使うことはできま"
"せん: "
#: application/front/controller/admin/PasswordController.php:28
msgid "Change password"
msgstr "パスワードを変更"
@ -447,6 +406,55 @@ msgstr "設定が正常に保存されました。"
msgid "Error while saving plugin configuration: "
msgstr "プラグインの設定ファイルを保存するときにエラーが発生しました: "
#: application/front/controller/admin/ServerController.php:35
msgid "Check disabled"
msgstr "無効になっている項目をチェック"
#: application/front/controller/admin/ServerController.php:62
msgid "Server administration"
msgstr "サーバー管理"
#: application/front/controller/admin/ServerController.php:79
msgid "Thumbnails cache has been cleared."
msgstr "サムネイルのキャッシュがクリアされました。"
#: application/front/controller/admin/ServerController.php:90
msgid "Shaarli's cache folder has been cleared!"
msgstr "Shaarli のキャッシュのフォルダーがクリアされました!"
#: application/front/controller/admin/ShaareAddController.php:26
msgid "Shaare a new link"
msgstr "新しいリンクを追加"
#: application/front/controller/admin/ShaareManageController.php:35
#: application/front/controller/admin/ShaareManageController.php:97
msgid "Invalid bookmark ID provided."
msgstr "不正なブックマーク ID が入力されました。"
#: application/front/controller/admin/ShaareManageController.php:47
#: application/front/controller/admin/ShaareManageController.php:120
#: application/front/controller/admin/ShaareManageController.php:160
#: application/front/controller/admin/ShaarePublishController.php:82
#, php-format
msgid "Bookmark with identifier %s could not be found."
msgstr "%s という識別子を持ったブックマークは見つかりませんでした。"
#: application/front/controller/admin/ShaareManageController.php:105
msgid "Invalid visibility provided."
msgstr "不正な公開設定が入力されました。"
#: application/front/controller/admin/ShaarePublishController.php:173
msgid "Edit"
msgstr "共有"
#: application/front/controller/admin/ShaarePublishController.php:176
msgid "Shaare"
msgstr "Shaare"
#: application/front/controller/admin/ShaarePublishController.php:208
msgid "Note: "
msgstr "注: "
#: application/front/controller/admin/ThumbnailsController.php:37
msgid "Thumbnails update"
msgstr "サムネイルの更新"
@ -455,23 +463,44 @@ msgstr "サムネイルの更新"
msgid "Tools"
msgstr "ツール"
#: application/front/controller/visitor/BookmarkListController.php:116
#: application/front/controller/visitor/BookmarkListController.php:103
msgid "Search: "
msgstr "検索: "
#: application/front/controller/visitor/DailyController.php:45
msgid "Today"
msgstr "日"
#: application/front/controller/visitor/DailyController.php:201
msgid "day"
msgstr "日"
#: application/front/controller/visitor/DailyController.php:47
msgid "Yesterday"
msgstr "昨日"
#: application/front/controller/visitor/DailyController.php:85
#: application/front/controller/visitor/DailyController.php:201
#: application/front/controller/visitor/DailyController.php:204
msgid "Daily"
msgstr "デイリー"
#: application/front/controller/visitor/ErrorController.php:36
#: application/front/controller/visitor/DailyController.php:202
msgid "week"
msgstr "週"
#: application/front/controller/visitor/DailyController.php:202
msgid "Weekly"
msgstr "週間"
#: application/front/controller/visitor/DailyController.php:203
msgid "month"
msgstr "月"
#: application/front/controller/visitor/DailyController.php:203
msgid "Monthly"
msgstr "月間"
#: application/front/controller/visitor/ErrorController.php:30
msgid "Error: "
msgstr "エラー: "
#: application/front/controller/visitor/ErrorController.php:34
msgid "Please report it on Github."
msgstr "GitHub で報告してください。"
#: application/front/controller/visitor/ErrorController.php:39
msgid "An unexpected error occurred."
msgstr "予期しないエラーが発生しました。"
@ -479,7 +508,11 @@ msgstr "予期しないエラーが発生しました。"
msgid "Requested page could not be found."
msgstr "リクエストされたページは存在しません。"
#: application/front/controller/visitor/InstallController.php:73
#: application/front/controller/visitor/InstallController.php:70
msgid "Install Shaarli"
msgstr "Shaarli をインストール"
#: application/front/controller/visitor/InstallController.php:90
#, php-format
msgid ""
"<pre>Sessions do not seem to work correctly on your server.<br>Make sure the "
@ -497,14 +530,14 @@ msgstr ""
"ります。IP アドレスや完全なドメイン名でサーバーにアクセスすることをおすすめし"
"ます。<br>"
#: application/front/controller/visitor/InstallController.php:144
#: application/front/controller/visitor/InstallController.php:162
msgid ""
"Shaarli is now configured. Please login and start shaaring your bookmarks!"
msgstr ""
"Shaarli の設定が完了しました。ログインして、あなたのブックマークを登録しま"
"しょう!"
#: application/front/controller/visitor/InstallController.php:158
#: application/front/controller/visitor/InstallController.php:176
msgid "Insufficient permissions:"
msgstr "権限がありません:"
@ -520,7 +553,7 @@ msgstr "不正なユーザー名、またはパスワードです。"
msgid "Picture wall"
msgstr "ピクチャウォール"
#: application/front/controller/visitor/TagCloudController.php:88
#: application/front/controller/visitor/TagCloudController.php:90
msgid "Tag "
msgstr "タグ "
@ -547,6 +580,94 @@ msgstr "ピクチャ ウォールは利用できません (サムネイルが無
msgid "Wrong token."
msgstr "不正なトークンです。"
#: application/helper/ApplicationUtils.php:165
#, php-format
msgid ""
"Your PHP version is obsolete! Shaarli requires at least PHP %s, and thus "
"cannot run. Your PHP version has known security vulnerabilities and should "
"be updated as soon as possible."
msgstr ""
"使用している PHP のバージョンが古すぎます! Shaarli の実行には最低でも PHP %s "
"が必要です。 現在使用している PHP のバージョンには脆弱性があり、できるだけ速"
"やかにアップデートするべきです。"
#: application/helper/ApplicationUtils.php:200
#: application/helper/ApplicationUtils.php:220
msgid "directory is not readable"
msgstr "ディレクトリを読み込めません"
#: application/helper/ApplicationUtils.php:223
msgid "directory is not writable"
msgstr "ディレクトリに書き込めません"
#: application/helper/ApplicationUtils.php:247
msgid "file is not readable"
msgstr "ファイルを読み取る権限がありません"
#: application/helper/ApplicationUtils.php:250
msgid "file is not writable"
msgstr "ファイルを書き込む権限がありません"
#: application/helper/ApplicationUtils.php:265
msgid ""
"Lock can not be acquired on the datastore. You might encounter concurrent "
"access issues."
msgstr ""
"ロックはデータストアでは取得できません。同時にアクセスしたことによってエラー"
"が発生した可能性があります。"
#: application/helper/ApplicationUtils.php:298
msgid "Configuration parsing"
msgstr "設定ファイルのパース"
#: application/helper/ApplicationUtils.php:299
msgid "Slim Framework (routing, etc.)"
msgstr "軽量なフレームワーク (ルーティングなど)"
#: application/helper/ApplicationUtils.php:300
msgid "Multibyte (Unicode) string support"
msgstr "マルチバイト (Unicode) の文字のサポート"
#: application/helper/ApplicationUtils.php:301
msgid "Required to use thumbnails"
msgstr "サムネイルを使うことは必須です"
#: application/helper/ApplicationUtils.php:302
msgid "Localized text sorting (e.g. e->è->f)"
msgstr "ローカライズされた文字のソート (例: e->è->f)"
#: application/helper/ApplicationUtils.php:303
msgid "Better retrieval of bookmark metadata and thumbnail"
msgstr "ブックマークのメタデータとサムネイルの改善された検索"
#: application/helper/ApplicationUtils.php:304
msgid "Use the translation system in gettext mode"
msgstr "gettext モードで翻訳システムを使用"
#: application/helper/ApplicationUtils.php:305
msgid "Login using LDAP server"
msgstr "LDAP サーバーを使用してログイン"
#: application/helper/DailyPageHelper.php:179
msgid "Week"
msgstr "週"
#: application/helper/DailyPageHelper.php:183
msgid "Today"
msgstr "今日"
#: application/helper/DailyPageHelper.php:185
msgid "Yesterday"
msgstr "昨日"
#: application/helper/FileUtils.php:100
msgid "Provided path is not a directory."
msgstr "入力されたパスはディレクトリではありません。"
#: application/helper/FileUtils.php:104
msgid "Trying to delete a folder outside of Shaarli path."
msgstr "Shaarli のパスの外にあるフォルダを削除しようとしています。"
#: application/legacy/LegacyLinkDB.php:131
msgid "You are not authorized to add a link."
msgstr "リンクを追加するには、ログインする必要があります。"
@ -597,7 +718,7 @@ msgstr ""
msgid "Couldn't retrieve updater class methods."
msgstr "アップデーターのクラスメゾットを受信できませんでした。"
#: application/legacy/LegacyUpdater.php:538
#: application/legacy/LegacyUpdater.php:540
msgid "<a href=\"./admin/thumbnails\">"
msgstr "<a href=\"./admin/thumbnails\">"
@ -623,16 +744,17 @@ msgstr ""
"が %d 秒で処理され、%d 件のリンクがインポートされ、%d 件のリンクが上書きさ"
"れ、%d 件のリンクがスキップされました。"
#: application/plugin/PluginManager.php:124
#: application/plugin/PluginManager.php:103
#: application/plugin/PluginManager.php:141
msgid " [plugin incompatibility]: "
msgstr " [非対応のプラグイン]: "
#: application/plugin/exception/PluginFileNotFoundException.php:21
#: application/plugin/exception/PluginFileNotFoundException.php:22
#, php-format
msgid "Plugin \"%s\" files not found."
msgstr "プラグイン「%s」のファイルが存在しません。"
#: application/render/PageCacheManager.php:32
#: application/render/PageCacheManager.php:33
#, php-format
msgid "Cannot purge %s: no directory"
msgstr "%s を削除できません: ディレクトリが存在しません"
@ -641,7 +763,7 @@ msgstr "%s を削除できません: ディレクトリが存在しません"
msgid "An error occurred while running the update "
msgstr "更新中に問題が発生しました "
#: index.php:65
#: index.php:82
msgid "Shared bookmarks on "
msgstr "次において共有されたリンク "
@ -657,11 +779,11 @@ msgstr "リンクを追加"
msgid "Adds the addlink input on the linklist page."
msgstr "リンク一覧のページに、リンクを追加するためのフォームを表示する。"
#: plugins/archiveorg/archiveorg.php:28
#: plugins/archiveorg/archiveorg.php:29
msgid "View on archive.org"
msgstr "archive.org 上で表示する"
#: plugins/archiveorg/archiveorg.php:41
#: plugins/archiveorg/archiveorg.php:42
msgid "For each link, add an Archive.org icon."
msgstr "それぞれのリンクに、Archive.org のアイコンを追加する。"
@ -673,24 +795,24 @@ msgstr ""
"既定の色のプラグインにおけるエラー: このプラグインは有効なので、カスタム カ"
"ラーは適用されません。"
#: plugins/default_colors/default_colors.php:113
#: plugins/default_colors/default_colors.php:127
msgid "Override default theme colors. Use any CSS valid color."
msgstr ""
"既定のテーマの色を上書きします。どのような CSS カラーコードでも使えます。"
#: plugins/default_colors/default_colors.php:114
#: plugins/default_colors/default_colors.php:128
msgid "Main color (navbar green)"
msgstr "メイン カラー (ナビバーの緑)"
#: plugins/default_colors/default_colors.php:115
#: plugins/default_colors/default_colors.php:129
msgid "Background color (light grey)"
msgstr "背景色 (灰色)"
#: plugins/default_colors/default_colors.php:116
#: plugins/default_colors/default_colors.php:130
msgid "Dark main color (e.g. visited links)"
msgstr "暗い方の メイン カラー (例: 閲覧済みリンク)"
#: plugins/demo_plugin/demo_plugin.php:477
#: plugins/demo_plugin/demo_plugin.php:528
msgid ""
"A demo plugin covering all use cases for template designers and plugin "
"developers."
@ -698,11 +820,11 @@ msgstr ""
"テンプレートのデザイナーや、プラグインの開発者のためのすべての状況に対応でき"
"るデモプラグインです。"
#: plugins/demo_plugin/demo_plugin.php:478
#: plugins/demo_plugin/demo_plugin.php:529
msgid "This is a parameter dedicated to the demo plugin. It'll be suffixed."
msgstr "これはデモプラグイン専用のパラメーターです。末尾に追加されます。"
#: plugins/demo_plugin/demo_plugin.php:479
#: plugins/demo_plugin/demo_plugin.php:530
msgid "Other demo parameter"
msgstr "他のデモ パラメーター"
@ -724,7 +846,7 @@ msgstr ""
msgid "Isso server URL (without 'http://')"
msgstr "Isso server URL ('http://' 抜き)"
#: plugins/piwik/piwik.php:23
#: plugins/piwik/piwik.php:24
msgid ""
"Piwik plugin error: Please define PIWIK_URL and PIWIK_SITEID in the plugin "
"administration page."
@ -732,27 +854,27 @@ msgstr ""
"Piwik プラグインエラー: PIWIK_URL と PIWIK_SITEID の値をプラグイン管理ページ"
"で指定してください。"
#: plugins/piwik/piwik.php:72
#: plugins/piwik/piwik.php:73
msgid "A plugin that adds Piwik tracking code to Shaarli pages."
msgstr "Piwik のトラッキングコードをShaarliに追加するプラグインです。"
#: plugins/piwik/piwik.php:73
#: plugins/piwik/piwik.php:74
msgid "Piwik URL"
msgstr "Piwik URL"
#: plugins/piwik/piwik.php:74
#: plugins/piwik/piwik.php:75
msgid "Piwik site ID"
msgstr "Piwik サイトID"
#: plugins/playvideos/playvideos.php:25
#: plugins/playvideos/playvideos.php:26
msgid "Video player"
msgstr "動画プレイヤー"
#: plugins/playvideos/playvideos.php:28
#: plugins/playvideos/playvideos.php:29
msgid "Play Videos"
msgstr "動画を再生"
#: plugins/playvideos/playvideos.php:59
#: plugins/playvideos/playvideos.php:60
msgid "Add a button in the toolbar allowing to watch all videos."
msgstr "すべての動画を閲覧するボタンをツールバーに追加します。"
@ -779,11 +901,11 @@ msgstr "ハブ %s からの不正なレスポンス"
msgid "Enable PubSubHubbub feed publishing."
msgstr "PubSubHubbub へのフィードを公開する。"
#: plugins/qrcode/qrcode.php:73 plugins/wallabag/wallabag.php:70
#: plugins/qrcode/qrcode.php:74 plugins/wallabag/wallabag.php:72
msgid "For each link, add a QRCode icon."
msgstr "それぞれのリンクについて、QRコードのアイコンを追加する。"
#: plugins/wallabag/wallabag.php:21
#: plugins/wallabag/wallabag.php:22
msgid ""
"Wallabag plugin error: Please define the \"WALLABAG_URL\" setting in the "
"plugin administration page."
@ -791,15 +913,15 @@ msgstr ""
"Wallabag プラグインエラー: \"WALLABAG_URL\" の値をプラグイン管理ページにおい"
"て指定してください。"
#: plugins/wallabag/wallabag.php:47
#: plugins/wallabag/wallabag.php:49
msgid "Save to wallabag"
msgstr "Wallabag に保存"
#: plugins/wallabag/wallabag.php:71
#: plugins/wallabag/wallabag.php:73
msgid "Wallabag API URL"
msgstr "Wallabag のAPIのURL"
#: plugins/wallabag/wallabag.php:72
#: plugins/wallabag/wallabag.php:74
msgid "Wallabag API version (1 or 2)"
msgstr "Wallabag のAPIのバージョン (1 または 2)"
@ -944,9 +1066,6 @@ msgstr[1] "検索"
#~ msgid "Do not show any links if the user is not logged in"
#~ msgstr "ログインしていないユーザーには何のリンクも表示しない"
#~ msgid "Check updates"
#~ msgstr "更新を確認"
#~ msgid "Notify me when a new release is ready"
#~ msgstr "新しいバージョンがリリースされたときに通知"
@ -1043,9 +1162,6 @@ msgstr[1] "検索"
#~ msgid "Add default tags"
#~ msgstr "既定のタグを追加"
#~ msgid "Install Shaarli"
#~ msgstr "Shaarli をインストール"
#~ msgid ""
#~ "It looks like it's the first time you run Shaarli. Please configure it."
#~ msgstr "どうやら Shaarli を初めて起動しているようです。設定してください。"
@ -1161,9 +1277,6 @@ msgstr[1] "検索"
#~ msgid "is available"
#~ msgstr "が利用可能"
#~ msgid "Error"
#~ msgstr "エラー"
#~ msgid "Picture Wall"
#~ msgstr "ピクチャーウォール"

File diff suppressed because it is too large Load diff

View file

@ -12,7 +12,7 @@ site_dir: doc/html
# - https://github.com/rtfd/readthedocs.org/issues/4314
# strict: true
pages:
nav:
- Home: index.md
- Setup:
- Server configuration: Server-configuration.md

View file

@ -5,7 +5,7 @@
<file>index.php</file>
<file>application</file>
<file>plugins</file>
<!-- <file>tests</file>-->
<file>tests</file>
<exclude-pattern>*/*.css</exclude-pattern>
<exclude-pattern>*/*.js</exclude-pattern>
@ -19,5 +19,11 @@
<!-- index.php bootstraps everything, so yes mixed symbols with side effects -->
<exclude-pattern>index.php</exclude-pattern>
<exclude-pattern>plugins/*</exclude-pattern>
<exclude-pattern>tests/bootstrap.php</exclude-pattern>
<exclude-pattern>tests/utils/RainTPL.php</exclude-pattern>
</rule>
<rule ref="PSR1.Classes.ClassDeclaration.MissingNamespace">
<exclude-pattern>tests/utils/RainTPL.php</exclude-pattern>
</rule>
</ruleset>

View file

@ -39,7 +39,7 @@ public function setUp(): void
public function testPlugin(): void
{
PluginManager::$PLUGINS_PATH = self::$pluginPath;
$this->pluginManager->load(array(self::$pluginName));
$this->pluginManager->load([self::$pluginName]);
$this->assertTrue(function_exists('hook_test_random'));
@ -50,19 +50,19 @@ public function testPlugin(): void
static::assertSame('woot', $data[1]);
$data = [0 => 'woot'];
$this->pluginManager->executeHooks('random', $data, array('target' => 'test'));
$this->pluginManager->executeHooks('random', $data, ['target' => 'test']);
static::assertCount(2, $data);
static::assertSame('page test', $data[1]);
$data = [0 => 'woot'];
$this->pluginManager->executeHooks('random', $data, array('loggedin' => true));
$this->pluginManager->executeHooks('random', $data, ['loggedin' => true]);
static::assertCount(2, $data);
static::assertEquals('loggedin', $data[1]);
$data = [0 => 'woot'];
$this->pluginManager->executeHooks('random', $data, array('loggedin' => null));
$this->pluginManager->executeHooks('random', $data, ['loggedin' => null]);
static::assertCount(3, $data);
static::assertEquals('loggedin', $data[1]);
@ -76,7 +76,7 @@ public function testPlugin(): void
public function testPluginWithPhpError(): void
{
PluginManager::$PLUGINS_PATH = self::$pluginPath;
$this->pluginManager->load(array(self::$pluginName));
$this->pluginManager->load([self::$pluginName]);
$this->assertTrue(function_exists('hook_test_error'));

View file

@ -15,9 +15,9 @@
*/
class ThumbnailerTest extends TestCase
{
const WIDTH = 190;
protected const WIDTH = 190;
const HEIGHT = 210;
protected const HEIGHT = 210;
/**
* @var Thumbnailer;
@ -103,10 +103,10 @@ protected function rrmdirContent($dir)
$objects = scandir($dir);
foreach ($objects as $object) {
if ($object != "." && $object != "..") {
if (is_dir($dir."/".$object)) {
$this->rrmdirContent($dir."/".$object);
if (is_dir($dir . "/" . $object)) {
$this->rrmdirContent($dir . "/" . $object);
} else {
unlink($dir."/".$object);
unlink($dir . "/" . $object);
}
}
}

View file

@ -1,14 +1,17 @@
<?php
/**
* TimeZone's tests
*/
require_once 'application/TimeZone.php';
namespace Shaarli\Tests;
use Shaarli\TestCase;
/**
* Unitary tests for timezone utilities
*/
class TimeZoneTest extends \Shaarli\TestCase
class TimeZoneTest extends TestCase
{
/**
* @var array of timezones

View file

@ -1,16 +1,18 @@
<?php
/**
* Utilities' tests
*/
require_once 'application/Utils.php';
require_once 'application/Languages.php';
namespace Shaarli\Tests;
use DateTime;
use Shaarli\TestCase;
/**
* Unitary tests for Shaarli utilities
*/
class UtilsTest extends \Shaarli\TestCase
class UtilsTest extends TestCase
{
// Log file
protected static $testLogFile = 'tests.log';
@ -54,7 +56,7 @@ protected function setUp(): void
/**
* Returns a list of the elements from the last logged entry
*
* @return list (date, ip address, message)
* @return array (date, ip address, message)
*/
protected function getLastLogEntry()
{
@ -187,7 +189,7 @@ public function testGenerateLocation()
public function testGenerateLocationLoop()
{
$ref = 'http://localhost/?test';
$this->assertEquals('./?', generateLocation($ref, 'localhost', array('test')));
$this->assertEquals('./?', generateLocation($ref, 'localhost', ['test']));
}
/**
@ -313,15 +315,15 @@ public function testReturnBytes()
*/
public function testHumanBytes()
{
$this->assertEquals('2'. t('kiB'), human_bytes(2 * 1024));
$this->assertEquals('2'. t('kiB'), human_bytes(strval(2 * 1024)));
$this->assertEquals('2'. t('MiB'), human_bytes(2 * (pow(1024, 2))));
$this->assertEquals('2'. t('MiB'), human_bytes(strval(2 * (pow(1024, 2)))));
$this->assertEquals('2'. t('GiB'), human_bytes(2 * (pow(1024, 3))));
$this->assertEquals('2'. t('GiB'), human_bytes(strval(2 * (pow(1024, 3)))));
$this->assertEquals('374'. t('B'), human_bytes(374));
$this->assertEquals('374'. t('B'), human_bytes('374'));
$this->assertEquals('232'. t('kiB'), human_bytes(237481));
$this->assertEquals('2' . t('kiB'), human_bytes(2 * 1024));
$this->assertEquals('2' . t('kiB'), human_bytes(strval(2 * 1024)));
$this->assertEquals('2' . t('MiB'), human_bytes(2 * (pow(1024, 2))));
$this->assertEquals('2' . t('MiB'), human_bytes(strval(2 * (pow(1024, 2)))));
$this->assertEquals('2' . t('GiB'), human_bytes(2 * (pow(1024, 3))));
$this->assertEquals('2' . t('GiB'), human_bytes(strval(2 * (pow(1024, 3)))));
$this->assertEquals('374' . t('B'), human_bytes(374));
$this->assertEquals('374' . t('B'), human_bytes('374'));
$this->assertEquals('232' . t('kiB'), human_bytes(237481));
$this->assertEquals(t('Unlimited'), human_bytes('0'));
$this->assertEquals(t('Unlimited'), human_bytes(0));
$this->assertEquals(t('Setting not set'), human_bytes(''));
@ -332,9 +334,9 @@ public function testHumanBytes()
*/
public function testGetMaxUploadSize()
{
$this->assertEquals('1'. t('MiB'), get_max_upload_size(2097152, '1024k'));
$this->assertEquals('1'. t('MiB'), get_max_upload_size('1m', '2m'));
$this->assertEquals('100'. t('B'), get_max_upload_size(100, 100));
$this->assertEquals('1' . t('MiB'), get_max_upload_size(2097152, '1024k'));
$this->assertEquals('1' . t('MiB'), get_max_upload_size('1m', '2m'));
$this->assertEquals('100' . t('B'), get_max_upload_size(100, 100));
}
/**

View file

@ -1,9 +1,11 @@
<?php
namespace Shaarli\Api;
use Shaarli\Config\ConfigManager;
use Shaarli\History;
use Shaarli\Plugin\PluginManager;
use Shaarli\Tests\Utils\ReferenceLinkDB;
use Slim\Container;
use Slim\Http\Environment;
use Slim\Http\Request;
@ -32,7 +34,7 @@ class ApiMiddlewareTest extends \Shaarli\TestCase
protected $conf;
/**
* @var \ReferenceLinkDB instance.
* @var ReferenceLinkDB instance.
*/
protected $refDB = null;
@ -49,7 +51,7 @@ protected function setUp(): void
$this->conf = new ConfigManager('tests/utils/config/configJson');
$this->conf->set('api.secret', 'NapoleonWasALizard');
$this->refDB = new \ReferenceLinkDB();
$this->refDB = new ReferenceLinkDB();
$this->refDB->write(self::$testDatastore);
$history = new History('sandbox/history.php');
@ -80,7 +82,7 @@ public function testInvokeMiddlewareWithValidToken(): void
$env = Environment::mock([
'REQUEST_METHOD' => 'GET',
'REQUEST_URI' => '/echo',
'HTTP_AUTHORIZATION'=> 'Bearer ' . ApiUtilsTest::generateValidJwtToken('NapoleonWasALizard'),
'HTTP_AUTHORIZATION' => 'Bearer ' . ApiUtilsTest::generateValidJwtToken('NapoleonWasALizard'),
]);
$request = Request::createFromEnvironment($env);
$response = new Response();
@ -196,7 +198,7 @@ public function testInvokeMiddlewareNoSecretSetDebug()
$env = Environment::mock([
'REQUEST_METHOD' => 'GET',
'REQUEST_URI' => '/echo',
'HTTP_AUTHORIZATION'=> 'Bearer jwt',
'HTTP_AUTHORIZATION' => 'Bearer jwt',
]);
$request = Request::createFromEnvironment($env);
$response = new Response();
@ -219,7 +221,7 @@ public function testInvalidJwtAuthHeaderDebug()
$env = Environment::mock([
'REQUEST_METHOD' => 'GET',
'REQUEST_URI' => '/echo',
'HTTP_AUTHORIZATION'=> 'PolarBearer jwt',
'HTTP_AUTHORIZATION' => 'PolarBearer jwt',
]);
$request = Request::createFromEnvironment($env);
$response = new Response();
@ -245,7 +247,7 @@ public function testInvokeMiddlewareInvalidJwtDebug()
$env = Environment::mock([
'REQUEST_METHOD' => 'GET',
'REQUEST_URI' => '/echo',
'HTTP_AUTHORIZATION'=> 'Bearer jwt',
'HTTP_AUTHORIZATION' => 'Bearer jwt',
]);
$request = Request::createFromEnvironment($env);
$response = new Response();

View file

@ -32,10 +32,10 @@ public static function generateValidJwtToken($secret)
"alg": "HS512"
}');
$payload = Base64Url::encode('{
"iat": '. time() .'
"iat": ' . time() . '
}');
$signature = Base64Url::encode(hash_hmac('sha512', $header .'.'. $payload, $secret, true));
return $header .'.'. $payload .'.'. $signature;
$signature = Base64Url::encode(hash_hmac('sha512', $header . '.' . $payload, $secret, true));
return $header . '.' . $payload . '.' . $signature;
}
/**

View file

@ -4,14 +4,14 @@
use Shaarli\Config\ConfigManager;
use Shaarli\History;
use Shaarli\TestCase;
use Shaarli\Tests\Utils\ReferenceHistory;
use Slim\Container;
use Slim\Http\Environment;
use Slim\Http\Request;
use Slim\Http\Response;
require_once 'tests/utils/ReferenceHistory.php';
class HistoryTest extends \Shaarli\TestCase
class HistoryTest extends TestCase
{
/**
* @var string datastore to test write operations
@ -24,7 +24,7 @@ class HistoryTest extends \Shaarli\TestCase
protected $conf;
/**
* @var \ReferenceHistory instance.
* @var ReferenceHistory instance.
*/
protected $refHistory = null;
@ -44,7 +44,7 @@ class HistoryTest extends \Shaarli\TestCase
protected function setUp(): void
{
$this->conf = new ConfigManager('tests/utils/config/configJson');
$this->refHistory = new \ReferenceHistory();
$this->refHistory = new ReferenceHistory();
$this->refHistory->write(self::$testHistory);
$this->container = new Container();
$this->container['conf'] = $this->conf;

View file

@ -1,4 +1,5 @@
<?php
namespace Shaarli\Api\Controllers;
use malkusch\lock\mutex\NoMutex;
@ -7,6 +8,7 @@
use Shaarli\History;
use Shaarli\Plugin\PluginManager;
use Shaarli\TestCase;
use Shaarli\Tests\Utils\ReferenceLinkDB;
use Slim\Container;
use Slim\Http\Environment;
use Slim\Http\Request;
@ -32,7 +34,7 @@ class InfoTest extends TestCase
protected $conf;
/**
* @var \ReferenceLinkDB instance.
* @var ReferenceLinkDB instance.
*/
protected $refDB = null;
@ -54,7 +56,7 @@ protected function setUp(): void
$mutex = new NoMutex();
$this->conf = new ConfigManager('tests/utils/config/configJson');
$this->conf->set('resource.datastore', self::$testDatastore);
$this->refDB = new \ReferenceLinkDB();
$this->refDB = new ReferenceLinkDB();
$this->refDB->write(self::$testDatastore);
$this->pluginManager = new PluginManager($this->conf);
$history = new History('sandbox/history.php');
@ -95,7 +97,7 @@ public function testGetInfo()
$this->assertEquals(200, $response->getStatusCode());
$data = json_decode((string) $response->getBody(), true);
$this->assertEquals(\ReferenceLinkDB::$NB_LINKS_TOTAL, $data['global_counter']);
$this->assertEquals(ReferenceLinkDB::$NB_LINKS_TOTAL, $data['global_counter']);
$this->assertEquals(2, $data['private_counter']);
$this->assertEquals('Shaarli', $data['settings']['title']);
$this->assertEquals('?', $data['settings']['header_link']);
@ -106,7 +108,7 @@ public function testGetInfo()
$title = 'My bookmarks';
$headerLink = 'http://shaarli.tld';
$timezone = 'Europe/Paris';
$enabledPlugins = array('foo', 'bar');
$enabledPlugins = ['foo', 'bar'];
$defaultPrivateLinks = true;
$this->conf->set('general.title', $title);
$this->conf->set('general.header_link', $headerLink);
@ -118,7 +120,7 @@ public function testGetInfo()
$this->assertEquals(200, $response->getStatusCode());
$data = json_decode((string) $response->getBody(), true);
$this->assertEquals(\ReferenceLinkDB::$NB_LINKS_TOTAL, $data['global_counter']);
$this->assertEquals(ReferenceLinkDB::$NB_LINKS_TOTAL, $data['global_counter']);
$this->assertEquals(2, $data['private_counter']);
$this->assertEquals($title, $data['settings']['title']);
$this->assertEquals($headerLink, $data['settings']['header_link']);

View file

@ -1,6 +1,5 @@
<?php
namespace Shaarli\Api\Controllers;
use malkusch\lock\mutex\NoMutex;
@ -8,6 +7,8 @@
use Shaarli\Config\ConfigManager;
use Shaarli\History;
use Shaarli\Plugin\PluginManager;
use Shaarli\Tests\Utils\ReferenceHistory;
use Shaarli\Tests\Utils\ReferenceLinkDB;
use Slim\Container;
use Slim\Http\Environment;
use Slim\Http\Request;
@ -31,7 +32,7 @@ class DeleteLinkTest extends \Shaarli\TestCase
protected $conf;
/**
* @var \ReferenceLinkDB instance.
* @var ReferenceLinkDB instance.
*/
protected $refDB = null;
@ -69,9 +70,9 @@ protected function setUp(): void
$this->mutex = new NoMutex();
$this->conf = new ConfigManager('tests/utils/config/configJson');
$this->conf->set('resource.datastore', self::$testDatastore);
$this->refDB = new \ReferenceLinkDB();
$this->refDB = new ReferenceLinkDB();
$this->refDB->write(self::$testDatastore);
$refHistory = new \ReferenceHistory();
$refHistory = new ReferenceHistory();
$refHistory->write(self::$testHistory);
$this->history = new History(self::$testHistory);
$this->pluginManager = new PluginManager($this->conf);

View file

@ -8,6 +8,7 @@
use Shaarli\Config\ConfigManager;
use Shaarli\History;
use Shaarli\Plugin\PluginManager;
use Shaarli\Tests\Utils\ReferenceLinkDB;
use Slim\Container;
use Slim\Http\Environment;
use Slim\Http\Request;
@ -35,7 +36,7 @@ class GetLinkIdTest extends \Shaarli\TestCase
protected $conf;
/**
* @var \ReferenceLinkDB instance.
* @var ReferenceLinkDB instance.
*/
protected $refDB = null;
@ -52,7 +53,7 @@ class GetLinkIdTest extends \Shaarli\TestCase
/**
* Number of JSON fields per link.
*/
const NB_FIELDS_LINK = 9;
protected const NB_FIELDS_LINK = 9;
/**
* Before each test, instantiate a new Api with its config, plugins and bookmarks.
@ -62,7 +63,7 @@ protected function setUp(): void
$mutex = new NoMutex();
$this->conf = new ConfigManager('tests/utils/config/configJson');
$this->conf->set('resource.datastore', self::$testDatastore);
$this->refDB = new \ReferenceLinkDB();
$this->refDB = new ReferenceLinkDB();
$this->refDB->write(self::$testDatastore);
$history = new History('sandbox/history.php');

View file

@ -1,4 +1,5 @@
<?php
namespace Shaarli\Api\Controllers;
use malkusch\lock\mutex\NoMutex;
@ -8,6 +9,7 @@
use Shaarli\Config\ConfigManager;
use Shaarli\History;
use Shaarli\Plugin\PluginManager;
use Shaarli\Tests\Utils\ReferenceLinkDB;
use Slim\Container;
use Slim\Http\Environment;
use Slim\Http\Request;
@ -35,7 +37,7 @@ class GetLinksTest extends \Shaarli\TestCase
protected $conf;
/**
* @var \ReferenceLinkDB instance.
* @var ReferenceLinkDB instance.
*/
protected $refDB = null;
@ -52,7 +54,7 @@ class GetLinksTest extends \Shaarli\TestCase
/**
* Number of JSON field per link.
*/
const NB_FIELDS_LINK = 9;
protected const NB_FIELDS_LINK = 9;
/**
* Before every test, instantiate a new Api with its config, plugins and bookmarks.
@ -62,7 +64,7 @@ protected function setUp(): void
$mutex = new NoMutex();
$this->conf = new ConfigManager('tests/utils/config/configJson');
$this->conf->set('resource.datastore', self::$testDatastore);
$this->refDB = new \ReferenceLinkDB();
$this->refDB = new ReferenceLinkDB();
$this->refDB->write(self::$testDatastore);
$history = new History('sandbox/history.php');
@ -329,7 +331,7 @@ public function testGetLinksSearchTerm()
// URL encoding
$env = Environment::mock([
'REQUEST_METHOD' => 'GET',
'QUERY_STRING' => 'searchterm='. urlencode('@web')
'QUERY_STRING' => 'searchterm=' . urlencode('@web')
]);
$request = Request::createFromEnvironment($env);
$response = $this->controller->getLinks($request, new Response());
@ -430,7 +432,7 @@ public function testGetLinksSearchTags()
$response = $this->controller->getLinks($request, new Response());
$this->assertEquals(200, $response->getStatusCode());
$data = json_decode((string) $response->getBody(), true);
$this->assertEquals(\ReferenceLinkDB::$NB_LINKS_TOTAL, count($data));
$this->assertEquals(ReferenceLinkDB::$NB_LINKS_TOTAL, count($data));
$this->assertEquals(10, $data[0]['id']);
$this->assertEquals(41, $data[2]['id']);

View file

@ -9,6 +9,8 @@
use Shaarli\History;
use Shaarli\Plugin\PluginManager;
use Shaarli\TestCase;
use Shaarli\Tests\Utils\ReferenceHistory;
use Shaarli\Tests\Utils\ReferenceLinkDB;
use Slim\Container;
use Slim\Http\Environment;
use Slim\Http\Request;
@ -40,7 +42,7 @@ class PostLinkTest extends TestCase
protected $conf;
/**
* @var \ReferenceLinkDB instance.
* @var ReferenceLinkDB instance.
*/
protected $refDB = null;
@ -67,7 +69,7 @@ class PostLinkTest extends TestCase
/**
* Number of JSON field per link.
*/
const NB_FIELDS_LINK = 9;
protected const NB_FIELDS_LINK = 9;
/**
* Before every test, instantiate a new Api with its config, plugins and bookmarks.
@ -77,9 +79,9 @@ protected function setUp(): void
$mutex = new NoMutex();
$this->conf = new ConfigManager('tests/utils/config/configJson');
$this->conf->set('resource.datastore', self::$testDatastore);
$this->refDB = new \ReferenceLinkDB();
$this->refDB = new ReferenceLinkDB();
$this->refDB->write(self::$testDatastore);
$refHistory = new \ReferenceHistory();
$refHistory = new ReferenceHistory();
$refHistory->write(self::$testHistory);
$this->history = new History(self::$testHistory);
$pluginManager = new PluginManager($this->conf);

View file

@ -1,6 +1,5 @@
<?php
namespace Shaarli\Api\Controllers;
use malkusch\lock\mutex\NoMutex;
@ -9,6 +8,8 @@
use Shaarli\Config\ConfigManager;
use Shaarli\History;
use Shaarli\Plugin\PluginManager;
use Shaarli\Tests\Utils\ReferenceHistory;
use Shaarli\Tests\Utils\ReferenceLinkDB;
use Slim\Container;
use Slim\Http\Environment;
use Slim\Http\Request;
@ -32,7 +33,7 @@ class PutLinkTest extends \Shaarli\TestCase
protected $conf;
/**
* @var \ReferenceLinkDB instance.
* @var ReferenceLinkDB instance.
*/
protected $refDB = null;
@ -59,7 +60,7 @@ class PutLinkTest extends \Shaarli\TestCase
/**
* Number of JSON field per link.
*/
const NB_FIELDS_LINK = 9;
protected const NB_FIELDS_LINK = 9;
/**
* Before every test, instantiate a new Api with its config, plugins and bookmarks.
@ -69,9 +70,9 @@ protected function setUp(): void
$mutex = new NoMutex();
$this->conf = new ConfigManager('tests/utils/config/configJson');
$this->conf->set('resource.datastore', self::$testDatastore);
$this->refDB = new \ReferenceLinkDB();
$this->refDB = new ReferenceLinkDB();
$this->refDB->write(self::$testDatastore);
$refHistory = new \ReferenceHistory();
$refHistory = new ReferenceHistory();
$refHistory->write(self::$testHistory);
$this->history = new History(self::$testHistory);
$pluginManager = new PluginManager($this->conf);

View file

@ -1,6 +1,5 @@
<?php
namespace Shaarli\Api\Controllers;
use malkusch\lock\mutex\NoMutex;
@ -9,6 +8,8 @@
use Shaarli\Config\ConfigManager;
use Shaarli\History;
use Shaarli\Plugin\PluginManager;
use Shaarli\Tests\Utils\ReferenceHistory;
use Shaarli\Tests\Utils\ReferenceLinkDB;
use Slim\Container;
use Slim\Http\Environment;
use Slim\Http\Request;
@ -32,7 +33,7 @@ class DeleteTagTest extends \Shaarli\TestCase
protected $conf;
/**
* @var \ReferenceLinkDB instance.
* @var ReferenceLinkDB instance.
*/
protected $refDB = null;
@ -70,9 +71,9 @@ protected function setUp(): void
$this->mutex = new NoMutex();
$this->conf = new ConfigManager('tests/utils/config/configJson');
$this->conf->set('resource.datastore', self::$testDatastore);
$this->refDB = new \ReferenceLinkDB();
$this->refDB = new ReferenceLinkDB();
$this->refDB->write(self::$testDatastore);
$refHistory = new \ReferenceHistory();
$refHistory = new ReferenceHistory();
$refHistory->write(self::$testHistory);
$this->history = new History(self::$testHistory);
$this->pluginManager = new PluginManager($this->conf);

View file

@ -8,6 +8,7 @@
use Shaarli\Config\ConfigManager;
use Shaarli\History;
use Shaarli\Plugin\PluginManager;
use Shaarli\Tests\Utils\ReferenceLinkDB;
use Slim\Container;
use Slim\Http\Environment;
use Slim\Http\Request;
@ -33,7 +34,7 @@ class GetTagNameTest extends \Shaarli\TestCase
protected $conf;
/**
* @var \ReferenceLinkDB instance.
* @var ReferenceLinkDB instance.
*/
protected $refDB = null;
@ -53,7 +54,7 @@ class GetTagNameTest extends \Shaarli\TestCase
/**
* Number of JSON fields per link.
*/
const NB_FIELDS_TAG = 2;
protected const NB_FIELDS_TAG = 2;
/**
* Before each test, instantiate a new Api with its config, plugins and bookmarks.
@ -63,7 +64,7 @@ protected function setUp(): void
$mutex = new NoMutex();
$this->conf = new ConfigManager('tests/utils/config/configJson');
$this->conf->set('resource.datastore', self::$testDatastore);
$this->refDB = new \ReferenceLinkDB();
$this->refDB = new ReferenceLinkDB();
$this->refDB->write(self::$testDatastore);
$history = new History('sandbox/history.php');

View file

@ -1,4 +1,5 @@
<?php
namespace Shaarli\Api\Controllers;
use malkusch\lock\mutex\NoMutex;
@ -7,6 +8,7 @@
use Shaarli\Config\ConfigManager;
use Shaarli\History;
use Shaarli\Plugin\PluginManager;
use Shaarli\Tests\Utils\ReferenceLinkDB;
use Slim\Container;
use Slim\Http\Environment;
use Slim\Http\Request;
@ -32,7 +34,7 @@ class GetTagsTest extends \Shaarli\TestCase
protected $conf;
/**
* @var \ReferenceLinkDB instance.
* @var ReferenceLinkDB instance.
*/
protected $refDB = null;
@ -57,7 +59,7 @@ class GetTagsTest extends \Shaarli\TestCase
/**
* Number of JSON field per link.
*/
const NB_FIELDS_TAG = 2;
protected const NB_FIELDS_TAG = 2;
/**
* Before every test, instantiate a new Api with its config, plugins and bookmarks.
@ -67,7 +69,7 @@ protected function setUp(): void
$mutex = new NoMutex();
$this->conf = new ConfigManager('tests/utils/config/configJson');
$this->conf->set('resource.datastore', self::$testDatastore);
$this->refDB = new \ReferenceLinkDB();
$this->refDB = new ReferenceLinkDB();
$this->refDB->write(self::$testDatastore);
$history = new History('sandbox/history.php');
$this->pluginManager = new PluginManager($this->conf);

View file

@ -9,6 +9,8 @@
use Shaarli\Config\ConfigManager;
use Shaarli\History;
use Shaarli\Plugin\PluginManager;
use Shaarli\Tests\Utils\ReferenceHistory;
use Shaarli\Tests\Utils\ReferenceLinkDB;
use Slim\Container;
use Slim\Http\Environment;
use Slim\Http\Request;
@ -32,7 +34,7 @@ class PutTagTest extends \Shaarli\TestCase
protected $conf;
/**
* @var \ReferenceLinkDB instance.
* @var ReferenceLinkDB instance.
*/
protected $refDB = null;
@ -62,7 +64,7 @@ class PutTagTest extends \Shaarli\TestCase
/**
* Number of JSON field per link.
*/
const NB_FIELDS_TAG = 2;
protected const NB_FIELDS_TAG = 2;
/**
* Before every test, instantiate a new Api with its config, plugins and bookmarks.
@ -72,9 +74,9 @@ protected function setUp(): void
$mutex = new NoMutex();
$this->conf = new ConfigManager('tests/utils/config/configJson');
$this->conf->set('resource.datastore', self::$testDatastore);
$this->refDB = new \ReferenceLinkDB();
$this->refDB = new ReferenceLinkDB();
$this->refDB->write(self::$testDatastore);
$refHistory = new \ReferenceHistory();
$refHistory = new ReferenceHistory();
$refHistory->write(self::$testHistory);
$this->history = new History(self::$testHistory);
$this->pluginManager = new PluginManager($this->conf);

View file

@ -3,6 +3,7 @@
namespace Shaarli\Bookmark;
use Shaarli\TestCase;
use Shaarli\Tests\Utils\ReferenceLinkDB;
/**
* Class BookmarkArrayTest
@ -185,7 +186,7 @@ public function testArrayAccessIterate()
$this->assertCount(3, $array);
foreach ($array as $id => $bookmark) {
$this->assertEquals(${'bookmark'. $id}, $bookmark);
$this->assertEquals(${'bookmark' . $id}, $bookmark);
}
}
@ -194,7 +195,7 @@ public function testArrayAccessIterate()
*/
public function testReorder()
{
$refDB = new \ReferenceLinkDB();
$refDB = new ReferenceLinkDB();
$refDB->write('sandbox/datastore.php');

View file

@ -1,4 +1,5 @@
<?php
/**
* Link datastore tests
*/
@ -7,7 +8,6 @@
use DateTime;
use malkusch\lock\mutex\NoMutex;
use ReferenceLinkDB;
use ReflectionClass;
use Shaarli;
use Shaarli\Bookmark\Exception\BookmarkNotFoundException;
@ -16,6 +16,8 @@
use Shaarli\History;
use Shaarli\Plugin\PluginManager;
use Shaarli\TestCase;
use Shaarli\Tests\Utils\FakeBookmarkService;
use Shaarli\Tests\Utils\ReferenceLinkDB;
/**
* Unitary tests for LegacyLinkDBTest
@ -82,19 +84,19 @@ protected function setUp(): void
unlink(self::$testDatastore);
}
if (file_exists(self::$testConf .'.json.php')) {
unlink(self::$testConf .'.json.php');
if (file_exists(self::$testConf . '.json.php')) {
unlink(self::$testConf . '.json.php');
}
if (file_exists(self::$testUpdates)) {
unlink(self::$testUpdates);
}
copy('tests/utils/config/configJson.json.php', self::$testConf .'.json.php');
copy('tests/utils/config/configJson.json.php', self::$testConf . '.json.php');
$this->conf = new ConfigManager(self::$testConf);
$this->conf->set('resource.datastore', self::$testDatastore);
$this->conf->set('resource.updates', self::$testUpdates);
$this->refDB = new \ReferenceLinkDB();
$this->refDB = new ReferenceLinkDB();
$this->refDB->write(self::$testDatastore);
$this->history = new History('sandbox/history.php');
$this->pluginManager = new PluginManager($this->conf);
@ -123,12 +125,12 @@ public function testDatabaseMigration()
define('SHAARLI_VERSION', 'dev');
}
$this->refDB = new \ReferenceLinkDB(true);
$this->refDB = new ReferenceLinkDB(true);
$this->refDB->write(self::$testDatastore);
$db = self::getMethod('migrate');
$db->invokeArgs($this->privateLinkDB, []);
$db = new \FakeBookmarkService(
$db = new FakeBookmarkService(
$this->conf,
$this->pluginManager,
$this->history,
@ -203,7 +205,7 @@ public function testAddFull()
$this->assertEquals($updated, $bookmark->getUpdated());
// reload from file
$this->privateLinkDB = new \FakeBookmarkService(
$this->privateLinkDB = new FakeBookmarkService(
$this->conf,
$this->pluginManager,
$this->history,
@ -714,7 +716,7 @@ public function testCheckDBNewLoggedOut()
{
unlink(self::$testDatastore);
$this->assertFileNotExists(self::$testDatastore);
$db = new \FakeBookmarkService($this->conf, $this->pluginManager, $this->history, $this->mutex, false);
$db = new FakeBookmarkService($this->conf, $this->pluginManager, $this->history, $this->mutex, false);
$this->assertFileNotExists(self::$testDatastore);
$this->assertInstanceOf(BookmarkArray::class, $db->getBookmarks());
$this->assertCount(0, $db->getBookmarks());

View file

@ -3,11 +3,12 @@
namespace Shaarli\Bookmark;
use malkusch\lock\mutex\NoMutex;
use ReferenceLinkDB;
use Shaarli\Config\ConfigManager;
use Shaarli\History;
use Shaarli\Plugin\PluginManager;
use Shaarli\TestCase;
use Shaarli\Tests\Utils\FakeBookmarkService;
use Shaarli\Tests\Utils\ReferenceLinkDB;
/**
* Class BookmarkFilterTest.
@ -46,10 +47,10 @@ public static function setUpBeforeClass(): void
$conf = new ConfigManager('tests/utils/config/configJson');
$conf->set('resource.datastore', self::$testDatastore);
static::$pluginManager = new PluginManager($conf);
self::$refDB = new \ReferenceLinkDB();
self::$refDB = new ReferenceLinkDB();
self::$refDB->write(self::$testDatastore);
$history = new History('sandbox/history.php');
self::$bookmarkService = new \FakeBookmarkService($conf, static::$pluginManager, $history, $mutex, true);
self::$bookmarkService = new FakeBookmarkService($conf, static::$pluginManager, $history, $mutex, true);
self::$linkFilter = new BookmarkFilter(self::$bookmarkService->getBookmarks(), $conf, static::$pluginManager);
}
@ -417,28 +418,28 @@ public function testFilterCrossedSearch()
1,
count(self::$linkFilter->filter(
BookmarkFilter::$FILTER_TAG | BookmarkFilter::$FILTER_TEXT,
array($tags, $terms)
[$tags, $terms]
))
);
$this->assertEquals(
2,
count(self::$linkFilter->filter(
BookmarkFilter::$FILTER_TAG | BookmarkFilter::$FILTER_TEXT,
array('', $terms)
['', $terms]
))
);
$this->assertEquals(
1,
count(self::$linkFilter->filter(
BookmarkFilter::$FILTER_TAG | BookmarkFilter::$FILTER_TEXT,
array(false, 'PSR-2')
[false, 'PSR-2']
))
);
$this->assertEquals(
1,
count(self::$linkFilter->filter(
BookmarkFilter::$FILTER_TAG | BookmarkFilter::$FILTER_TEXT,
array($tags, '')
[$tags, '']
))
);
$this->assertEquals(

View file

@ -7,6 +7,7 @@
use Shaarli\History;
use Shaarli\Plugin\PluginManager;
use Shaarli\TestCase;
use Shaarli\Tests\Utils\ReferenceLinkDB;
/**
* Class BookmarkInitializerTest
@ -52,7 +53,7 @@ public function setUp(): void
unlink(self::$testDatastore);
}
copy('tests/utils/config/configJson.json.php', self::$testConf .'.json.php');
copy('tests/utils/config/configJson.json.php', self::$testConf . '.json.php');
$this->conf = new ConfigManager(self::$testConf);
$this->conf->set('resource.datastore', self::$testDatastore);
$this->pluginManager = new PluginManager($this->conf);
@ -73,7 +74,7 @@ public function setUp(): void
*/
public function testInitializeNotEmptyDataStore(): void
{
$refDB = new \ReferenceLinkDB();
$refDB = new ReferenceLinkDB();
$refDB->write(self::$testDatastore);
$this->bookmarkService = new BookmarkFileService(
$this->conf,

View file

@ -167,7 +167,7 @@ public function testValidateNotValidNoId()
$exception = $e;
}
$this->assertNotNull($exception);
$this->assertContainsPolyfill('- ID: '. PHP_EOL, $exception->getMessage());
$this->assertContainsPolyfill('- ID: ' . PHP_EOL, $exception->getMessage());
}
/**
@ -186,7 +186,7 @@ public function testValidateNotValidNoShortUrl()
$exception = $e;
}
$this->assertNotNull($exception);
$this->assertContainsPolyfill('- ShortUrl: '. PHP_EOL, $exception->getMessage());
$this->assertContainsPolyfill('- ShortUrl: ' . PHP_EOL, $exception->getMessage());
}
/**
@ -205,7 +205,7 @@ public function testValidateNotValidNoCreated()
$exception = $e;
}
$this->assertNotNull($exception);
$this->assertContainsPolyfill('- Created: '. PHP_EOL, $exception->getMessage());
$this->assertContainsPolyfill('- Created: ' . PHP_EOL, $exception->getMessage());
}
/**

View file

@ -4,8 +4,6 @@
use Shaarli\TestCase;
require_once 'tests/utils/CurlUtils.php';
/**
* Class LinkUtilsTest.
*/
@ -142,7 +140,7 @@ public function testHtmlExtractExistentNameTag()
$this->assertEquals($description, html_extract_tag('description', $html));
// OpenGraph multiple properties both end with noise
$html = '<meta tag1="content1" property="og:unrelated1 og:description og:unrelated2" '.
$html = '<meta tag1="content1" property="og:unrelated1 og:description og:unrelated2" ' .
'tag2="content2" content="' . $description . '" tag3="content3">';
$this->assertEquals($description, html_extract_tag('description', $html));
@ -159,7 +157,7 @@ public function testHtmlExtractExistentNameTag()
$this->assertEquals($description, html_extract_tag('description', $html));
// OpenGraph reversed multiple properties both end with noise
$html = '<meta tag1="content1" content="' . $description . '" tag2="content2" '.
$html = '<meta tag1="content1" content="' . $description . '" tag2="content2" ' .
'property="og:unrelated1 og:description og:unrelated2" tag3="content3">';
$this->assertEquals($description, html_extract_tag('description', $html));
@ -178,7 +176,7 @@ public function testHtmlExtractExistentNameTagWithMixedQuotes(): void
$html = '<meta property="og:description" content="' . $description . '">';
$this->assertEquals($description, html_extract_tag('description', $html));
$html = '<meta tag1="content1" property="og:unrelated1 og:description og:unrelated2" '.
$html = '<meta tag1="content1" property="og:unrelated1 og:description og:unrelated2" ' .
'tag2="content2" content="' . $description . '" tag3="content3">';
$this->assertEquals($description, html_extract_tag('description', $html));
@ -190,7 +188,7 @@ public function testHtmlExtractExistentNameTagWithMixedQuotes(): void
$html = '<meta property="og:description" content=\'' . $description . '\'>';
$this->assertEquals($description, html_extract_tag('description', $html));
$html = '<meta tag1="content1" property="og:unrelated1 og:description og:unrelated2" '.
$html = '<meta tag1="content1" property="og:unrelated1 og:description og:unrelated2" ' .
'tag2="content2" content=\'' . $description . '\' tag3="content3">';
$this->assertEquals($description, html_extract_tag('description', $html));
@ -247,9 +245,9 @@ public function testHtmlExtractNonExistentOgTag()
public function testHtmlExtractDescriptionFromGoogleRealCase(): void
{
$html = 'id="gsr"><meta content="Fêtes de fin d\'année" property="twitter:title"><meta '.
'content="Bonnes fêtes de fin d\'année ! #GoogleDoodle" property="twitter:description">'.
'<meta content="Bonnes fêtes de fin d\'année ! #GoogleDoodle" property="og:description">'.
$html = 'id="gsr"><meta content="Fêtes de fin d\'année" property="twitter:title"><meta ' .
'content="Bonnes fêtes de fin d\'année ! #GoogleDoodle" property="twitter:description">' .
'<meta content="Bonnes fêtes de fin d\'année ! #GoogleDoodle" property="og:description">' .
'<meta content="summary_large_image" property="twitter:card"><meta co'
;
$this->assertSame('Bonnes fêtes de fin d\'année ! #GoogleDoodle', html_extract_tag('description', $html));
@ -701,7 +699,10 @@ public function testTagsFilterWithSpaceSeparator(): void
static::assertSame(['tag1', 'tag2', 'tag3'], tags_filter(['tag1', 'tag2', 'tag3'], $separator));
static::assertSame(['tag1,', 'tag2@', 'tag3'], tags_filter(['tag1,', 'tag2@', 'tag3'], $separator));
static::assertSame(['tag1', 'tag2', 'tag3'], tags_filter([' tag1 ', 'tag2', 'tag3 '], $separator));
static::assertSame(['tag1', 'tag2', 'tag3'], tags_filter([' tag1 ', ' ', 'tag2', ' ', 'tag3 '], $separator));
static::assertSame(
['tag1', 'tag2', 'tag3'],
tags_filter([' tag1 ', ' ', 'tag2', ' ', 'tag3 '], $separator)
);
static::assertSame(['tag1'], tags_filter([' tag1 '], $separator));
static::assertSame([], tags_filter([' '], $separator));
static::assertSame([], tags_filter([], $separator));
@ -721,7 +722,10 @@ public function testTagsArrayFilterWithSpaceSeparator(): void
['tag1', 'tag2, and other', 'tag3'],
tags_filter(['@@@@ tag1@@@', ' @tag2, and other @', 'tag3@@@@'], $separator)
);
static::assertSame(['tag1', 'tag2', 'tag3'], tags_filter(['@@@tag1@@@', '@', 'tag2', '@@@', 'tag3@@@'], $separator));
static::assertSame(
['tag1', 'tag2', 'tag3'],
tags_filter(['@@@tag1@@@', '@', 'tag2', '@@@', 'tag3@@@'], $separator)
);
static::assertSame(['tag1'], tags_filter(['@@@@tag1@@@@'], $separator));
static::assertSame([], tags_filter(['@@@'], $separator));
static::assertSame([], tags_filter([], $separator));

View file

@ -2,6 +2,8 @@
require_once 'vendor/autoload.php';
use Shaarli\Tests\Utils\ReferenceSessionIdHashes;
$conf = new \Shaarli\Config\ConfigManager('tests/utils/config/configJson');
new \Shaarli\Languages('en', $conf);
@ -13,23 +15,26 @@ function is_iterable($var)
}
}
// TODO: remove this after fixing UT
// raw functions
require_once 'application/config/ConfigPlugin.php';
require_once 'application/bookmark/LinkUtils.php';
require_once 'application/Utils.php';
require_once 'application/http/UrlUtils.php';
require_once 'application/http/HttpUtils.php';
require_once 'application/Utils.php';
require_once 'application/TimeZone.php';
require_once 'tests/utils/CurlUtils.php';
require_once 'tests/utils/RainTPL.php';
// TODO: remove this after fixing UT
require_once 'tests/TestCase.php';
require_once 'tests/container/ShaarliTestContainer.php';
require_once 'tests/front/controller/visitor/FrontControllerMockHelper.php';
require_once 'tests/front/controller/admin/FrontAdminControllerMockHelper.php';
require_once 'tests/updater/DummyUpdater.php';
require_once 'tests/utils/FakeBookmarkService.php';
require_once 'tests/utils/FakeConfigManager.php';
require_once 'tests/utils/ReferenceHistory.php';
require_once 'tests/utils/ReferenceLinkDB.php';
require_once 'tests/utils/ReferenceSessionIdHashes.php';
\ReferenceSessionIdHashes::genAllHashes();
ReferenceSessionIdHashes::genAllHashes();
if (!defined('SHAARLI_MUTEX_FILE')) {
define('SHAARLI_MUTEX_FILE', __FILE__);

View file

@ -1,4 +1,5 @@
<?php
namespace Shaarli\Config;
/**
@ -29,13 +30,13 @@ public function testSetGet()
$this->conf->set('paramInt', 42);
$this->conf->set('paramString', 'value1');
$this->conf->set('paramBool', false);
$this->conf->set('paramArray', array('foo' => 'bar'));
$this->conf->set('paramArray', ['foo' => 'bar']);
$this->conf->set('paramNull', null);
$this->assertEquals(42, $this->conf->get('paramInt'));
$this->assertEquals('value1', $this->conf->get('paramString'));
$this->assertFalse($this->conf->get('paramBool'));
$this->assertEquals(array('foo' => 'bar'), $this->conf->get('paramArray'));
$this->assertEquals(['foo' => 'bar'], $this->conf->get('paramArray'));
$this->assertEquals(null, $this->conf->get('paramNull'));
}
@ -51,7 +52,7 @@ public function testSetWriteGet()
$this->conf->set('paramInt', 42);
$this->conf->set('paramString', 'value1');
$this->conf->set('paramBool', false);
$this->conf->set('paramArray', array('foo' => 'bar'));
$this->conf->set('paramArray', ['foo' => 'bar']);
$this->conf->set('paramNull', null);
$this->conf->setConfigFile('tests/utils/config/configTmp');
@ -62,7 +63,7 @@ public function testSetWriteGet()
$this->assertEquals(42, $this->conf->get('paramInt'));
$this->assertEquals('value1', $this->conf->get('paramString'));
$this->assertFalse($this->conf->get('paramBool'));
$this->assertEquals(array('foo' => 'bar'), $this->conf->get('paramArray'));
$this->assertEquals(['foo' => 'bar'], $this->conf->get('paramArray'));
$this->assertEquals(null, $this->conf->get('paramNull'));
}
@ -112,7 +113,7 @@ public function testSetArrayKey()
$this->expectException(\Exception::class);
$this->expectExceptionMessageRegExp('#^Invalid setting key parameter. String expected, got.*#');
$this->conf->set(array('foo' => 'bar'), 'stuff');
$this->conf->set(['foo' => 'bar'], 'stuff');
}
/**

View file

@ -1,4 +1,5 @@
<?php
namespace Shaarli\Config;
/**
@ -37,7 +38,7 @@ public function testRead()
*/
public function testReadNonExistent()
{
$this->assertEquals(array(), $this->configIO->read('nope'));
$this->assertEquals([], $this->configIO->read('nope'));
}
/**
@ -60,16 +61,16 @@ public function testReadEmpty()
public function testWriteNew()
{
$dataFile = 'tests/utils/config/configWrite.php';
$data = array(
$data = [
'login' => 'root',
'redirector' => 'lala',
'config' => array(
'config' => [
'DATASTORE' => 'data/datastore.php',
),
'plugins' => array(
],
'plugins' => [
'WALLABAG_VERSION' => '1',
)
);
]
];
$this->configIO->write($dataFile, $data);
$expected = '<?php
$GLOBALS[\'login\'] = \'root\';

View file

@ -1,15 +1,15 @@
<?php
namespace Shaarli\Config;
use Shaarli\Config\Exception\PluginConfigOrderException;
use Shaarli\Plugin\PluginManager;
require_once 'application/config/ConfigPlugin.php';
use Shaarli\TestCase;
/**
* Unitary tests for Shaarli config related functions
*/
class ConfigPluginTest extends \Shaarli\TestCase
class ConfigPluginTest extends TestCase
{
/**
* Test save_plugin_config with valid data.
@ -35,12 +35,16 @@ public function testSavePluginConfigValid()
mkdir($path = __DIR__ . '/folder');
PluginManager::$PLUGINS_PATH = $path;
array_map(function (string $plugin) use ($path) { touch($path . '/' . $plugin); }, $expected);
array_map(function (string $plugin) use ($path) {
touch($path . '/' . $plugin);
}, $expected);
$out = save_plugin_config($data);
$this->assertEquals($expected, $out);
array_map(function (string $plugin) use ($path) { unlink($path . '/' . $plugin); }, $expected);
array_map(function (string $plugin) use ($path) {
unlink($path . '/' . $plugin);
}, $expected);
rmdir($path);
}
@ -49,15 +53,15 @@ public function testSavePluginConfigValid()
*/
public function testSavePluginConfigInvalid()
{
$this->expectException(\Shaarli\Config\Exception\PluginConfigOrderException::class);
$this->expectException(PluginConfigOrderException::class);
$data = array(
$data = [
'plugin2' => 0,
'plugin3' => 0,
'order_plugin3' => 0,
'plugin4' => 0,
'order_plugin4' => 0,
);
];
save_plugin_config($data);
}
@ -67,7 +71,7 @@ public function testSavePluginConfigInvalid()
*/
public function testSavePluginConfigEmpty()
{
$this->assertEquals(array(), save_plugin_config(array()));
$this->assertEquals([], save_plugin_config([]));
}
/**
@ -75,14 +79,14 @@ public function testSavePluginConfigEmpty()
*/
public function testValidatePluginOrderValid()
{
$data = array(
$data = [
'order_plugin1' => 2,
'plugin2' => 0,
'plugin3' => 0,
'order_plugin3' => 1,
'plugin4' => 0,
'order_plugin4' => 5,
);
];
$this->assertTrue(validate_plugin_order($data));
}
@ -92,11 +96,11 @@ public function testValidatePluginOrderValid()
*/
public function testValidatePluginOrderInvalid()
{
$data = array(
$data = [
'order_plugin1' => 2,
'order_plugin3' => 1,
'order_plugin4' => 1,
);
];
$this->assertFalse(validate_plugin_order($data));
}
@ -106,20 +110,20 @@ public function testValidatePluginOrderInvalid()
*/
public function testLoadPluginParameterValues()
{
$plugins = array(
'plugin_name' => array(
'parameters' => array(
'param1' => array('value' => true),
'param2' => array('value' => false),
'param3' => array('value' => ''),
)
)
);
$plugins = [
'plugin_name' => [
'parameters' => [
'param1' => ['value' => true],
'param2' => ['value' => false],
'param3' => ['value' => ''],
]
]
];
$parameters = array(
$parameters = [
'param1' => 'value1',
'param2' => 'value2',
);
];
$result = load_plugin_parameter_values($plugins, $parameters);
$this->assertEquals('value1', $result['plugin_name']['parameters']['param1']['value']);

View file

@ -1,7 +1,9 @@
<?php
/**
* PageCache tests
*/
namespace Shaarli\Feed;
/**

View file

@ -4,7 +4,6 @@
use DateTime;
use malkusch\lock\mutex\NoMutex;
use ReferenceLinkDB;
use Shaarli\Bookmark\Bookmark;
use Shaarli\Bookmark\BookmarkFileService;
use Shaarli\Bookmark\LinkDB;
@ -13,6 +12,7 @@
use Shaarli\History;
use Shaarli\Plugin\PluginManager;
use Shaarli\TestCase;
use Shaarli\Tests\Utils\ReferenceLinkDB;
/**
* FeedBuilderTest class.
@ -52,7 +52,7 @@ public static function setUpBeforeClass(): void
$mutex = new NoMutex();
$conf = new ConfigManager('tests/utils/config/configJson');
$conf->set('resource.datastore', self::$testDatastore);
$refLinkDB = new \ReferenceLinkDB();
$refLinkDB = new ReferenceLinkDB();
$refLinkDB->write(self::$testDatastore);
$history = new History('sandbox/history.php');
$factory = new FormatterFactory($conf, true);
@ -66,13 +66,13 @@ public static function setUpBeforeClass(): void
true
);
self::$serverInfo = array(
self::$serverInfo = [
'HTTPS' => 'Off',
'SERVER_NAME' => 'host.tld',
'SERVER_PORT' => '80',
'SCRIPT_NAME' => '/index.php',
'REQUEST_URI' => '/feed/atom',
);
];
}
/**
@ -100,7 +100,10 @@ public function testRSSBuildData()
// Test first not pinned link (note link)
$link = $data['links'][array_keys($data['links'])[0]];
$this->assertEquals(41, $link['id']);
$this->assertEquals(DateTime::createFromFormat(Bookmark::LINK_DATE_FORMAT, '20150310_114651'), $link['created']);
$this->assertEquals(
DateTime::createFromFormat(Bookmark::LINK_DATE_FORMAT, '20150310_114651'),
$link['created']
);
$this->assertEquals('http://host.tld/shaare/WDWyig', $link['guid']);
$this->assertEquals('http://host.tld/shaare/WDWyig', $link['url']);
$this->assertRegExp('/Tue, 10 Mar 2015 11:46:51 \+\d{4}/', $link['pub_iso_date']);
@ -149,10 +152,10 @@ public function testAtomBuildData()
*/
public function testBuildDataFiltered()
{
$criteria = array(
$criteria = [
'searchtags' => 'stuff',
'searchterm' => 'beard',
);
];
$feedBuilder = new FeedBuilder(
self::$bookmarkService,
self::$formatter,
@ -164,7 +167,10 @@ public function testBuildDataFiltered()
$this->assertEquals(1, count($data['links']));
$link = array_shift($data['links']);
$this->assertEquals(41, $link['id']);
$this->assertEquals(DateTime::createFromFormat(Bookmark::LINK_DATE_FORMAT, '20150310_114651'), $link['created']);
$this->assertEquals(
DateTime::createFromFormat(Bookmark::LINK_DATE_FORMAT, '20150310_114651'),
$link['created']
);
}
/**
@ -172,9 +178,9 @@ public function testBuildDataFiltered()
*/
public function testBuildDataCount()
{
$criteria = array(
$criteria = [
'nb' => '3',
);
];
$feedBuilder = new FeedBuilder(
self::$bookmarkService,
self::$formatter,
@ -186,7 +192,10 @@ public function testBuildDataCount()
$this->assertEquals(3, count($data['links']));
$link = $data['links'][array_keys($data['links'])[0]];
$this->assertEquals(41, $link['id']);
$this->assertEquals(DateTime::createFromFormat(Bookmark::LINK_DATE_FORMAT, '20150310_114651'), $link['created']);
$this->assertEquals(
DateTime::createFromFormat(Bookmark::LINK_DATE_FORMAT, '20150310_114651'),
$link['created']
);
}
/**
@ -208,7 +217,10 @@ public function testBuildDataPermalinks()
// First link is a permalink
$link = $data['links'][array_keys($data['links'])[0]];
$this->assertEquals(41, $link['id']);
$this->assertEquals(DateTime::createFromFormat(Bookmark::LINK_DATE_FORMAT, '20150310_114651'), $link['created']);
$this->assertEquals(
DateTime::createFromFormat(Bookmark::LINK_DATE_FORMAT, '20150310_114651'),
$link['created']
);
$this->assertEquals('http://host.tld/shaare/WDWyig', $link['guid']);
$this->assertEquals('http://host.tld/shaare/WDWyig', $link['url']);
$this->assertContainsPolyfill('Direct link', $link['description']);
@ -216,7 +228,10 @@ public function testBuildDataPermalinks()
// Second link is a direct link
$link = $data['links'][array_keys($data['links'])[1]];
$this->assertEquals(8, $link['id']);
$this->assertEquals(DateTime::createFromFormat(Bookmark::LINK_DATE_FORMAT, '20150310_114633'), $link['created']);
$this->assertEquals(
DateTime::createFromFormat(Bookmark::LINK_DATE_FORMAT, '20150310_114633'),
$link['created']
);
$this->assertEquals('http://host.tld/shaare/RttfEw', $link['guid']);
$this->assertEquals('https://static.fsf.org/nosvn/faif-2.0.pdf', $link['url']);
$this->assertContainsPolyfill('Direct link', $link['description']);
@ -259,13 +274,13 @@ public function testBuildDataHideDates()
*/
public function testBuildDataServerSubdir()
{
$serverInfo = array(
$serverInfo = [
'HTTPS' => 'Off',
'SERVER_NAME' => 'host.tld',
'SERVER_PORT' => '8080',
'SCRIPT_NAME' => '/~user/shaarli/index.php',
'REQUEST_URI' => '/~user/shaarli/feed/atom',
);
];
$feedBuilder = new FeedBuilder(
self::$bookmarkService,
self::$formatter,

View file

@ -27,7 +27,7 @@ class BookmarkDefaultFormatterTest extends TestCase
*/
protected function setUp(): void
{
copy('tests/utils/config/configJson.json.php', self::$testConf .'.json.php');
copy('tests/utils/config/configJson.json.php', self::$testConf . '.json.php');
$this->conf = new ConfigManager(self::$testConf);
$this->formatter = new BookmarkDefaultFormatter($this->conf, true);
}
@ -112,9 +112,9 @@ public function testFormatDescription()
{
$description = [];
$description[] = 'This a <strong>description</strong>' . PHP_EOL;
$description[] = 'text https://sub.domain.tld?query=here&for=real#hash more text'. PHP_EOL;
$description[] = 'Also, there is an #hashtag added'. PHP_EOL;
$description[] = ' A N D KEEP SPACES ! '. PHP_EOL;
$description[] = 'text https://sub.domain.tld?query=here&for=real#hash more text' . PHP_EOL;
$description[] = 'Also, there is an #hashtag added' . PHP_EOL;
$description[] = ' A N D KEEP SPACES ! ' . PHP_EOL;
$bookmark = new Bookmark();
$bookmark->setDescription(implode('', $description));
@ -122,10 +122,10 @@ public function testFormatDescription()
$description[0] = 'This a &lt;strong&gt;description&lt;/strong&gt;<br />';
$url = 'https://sub.domain.tld?query=here&amp;for=real#hash';
$description[1] = 'text <a href="'. $url .'">'. $url .'</a> more text<br />';
$description[2] = 'Also, there is an <a href="./add-tag/hashtag" '.
$description[1] = 'text <a href="' . $url . '">' . $url . '</a> more text<br />';
$description[2] = 'Also, there is an <a href="./add-tag/hashtag" ' .
'title="Hashtag hashtag">#hashtag</a> added<br />';
$description[3] = '&nbsp; &nbsp; A &nbsp;N &nbsp;D KEEP &nbsp; &nbsp; '.
$description[3] = '&nbsp; &nbsp; A &nbsp;N &nbsp;D KEEP &nbsp; &nbsp; ' .
'SPACES &nbsp; &nbsp;! &nbsp; <br />';
$this->assertEquals(implode(PHP_EOL, $description) . PHP_EOL, $link['description']);
@ -148,7 +148,7 @@ public function testFormatNoteWithIndexUrl()
$this->assertEquals($root . $short, $link['url']);
$this->assertEquals($root . $short, $link['real_url']);
$this->assertEquals(
'Text <a href="'. $root .'./add-tag/hashtag" title="Hashtag hashtag">'.
'Text <a href="' . $root . './add-tag/hashtag" title="Hashtag hashtag">' .
'#hashtag</a> more text',
$link['description']
);

View file

@ -27,7 +27,7 @@ class BookmarkMarkdownExtraFormatterTest extends TestCase
*/
public function setUp(): void
{
copy('tests/utils/config/configJson.json.php', self::$testConf .'.json.php');
copy('tests/utils/config/configJson.json.php', self::$testConf . '.json.php');
$this->conf = new ConfigManager(self::$testConf);
$this->formatter = new BookmarkMarkdownExtraFormatter($this->conf, true);
}
@ -60,8 +60,8 @@ public function testFormatExtra(): void
);
$this->assertEquals('This is a &lt;strong&gt;bookmark&lt;/strong&gt;', $link['title']);
$this->assertEquals(
'<div class="markdown"><p>'.
'&lt;h2&gt;Content&lt;/h2&gt;&lt;p&gt;`Here is some content&lt;/p&gt;'.
'<div class="markdown"><p>' .
'&lt;h2&gt;Content&lt;/h2&gt;&lt;p&gt;`Here is some content&lt;/p&gt;' .
'</p></div>',
$link['description']
);
@ -112,21 +112,21 @@ public function testFormatExtraMinimal(): void
*/
public function testFormatExtrraDescription(): void
{
$description = 'This a <strong>description</strong>'. PHP_EOL;
$description .= 'text https://sub.domain.tld?query=here&for=real#hash more text'. PHP_EOL;
$description .= 'Also, there is an #hashtag added'. PHP_EOL;
$description .= ' A N D KEEP SPACES ! '. PHP_EOL;
$description .= '# Header {.class}'. PHP_EOL;
$description = 'This a <strong>description</strong>' . PHP_EOL;
$description .= 'text https://sub.domain.tld?query=here&for=real#hash more text' . PHP_EOL;
$description .= 'Also, there is an #hashtag added' . PHP_EOL;
$description .= ' A N D KEEP SPACES ! ' . PHP_EOL;
$description .= '# Header {.class}' . PHP_EOL;
$bookmark = new Bookmark();
$bookmark->setDescription($description);
$link = $this->formatter->format($bookmark);
$description = '<div class="markdown"><p>';
$description .= 'This a &lt;strong&gt;description&lt;/strong&gt;<br />'. PHP_EOL;
$description .= 'This a &lt;strong&gt;description&lt;/strong&gt;<br />' . PHP_EOL;
$url = 'https://sub.domain.tld?query=here&amp;for=real#hash';
$description .= 'text <a href="'. $url .'">'. $url .'</a> more text<br />'. PHP_EOL;
$description .= 'Also, there is an <a href="./add-tag/hashtag">#hashtag</a> added<br />'. PHP_EOL;
$description .= 'text <a href="' . $url . '">' . $url . '</a> more text<br />' . PHP_EOL;
$description .= 'Also, there is an <a href="./add-tag/hashtag">#hashtag</a> added<br />' . PHP_EOL;
$description .= 'A N D KEEP SPACES ! </p>' . PHP_EOL;
$description .= '<h1 class="class">Header</h1>';
$description .= '</div>';
@ -148,7 +148,7 @@ public function testFormatExtraNoteWithIndexUrl(): void
$this->formatter->addContextData('index_url', $root = 'https://domain.tld/hithere/');
$description = '<div class="markdown"><p>';
$description .= 'Text <a href="'. $root .'./add-tag/hashtag">#hashtag</a> more text';
$description .= 'Text <a href="' . $root . './add-tag/hashtag">#hashtag</a> more text';
$description .= '</p></div>';
$link = $this->formatter->format($bookmark);

View file

@ -27,7 +27,7 @@ class BookmarkMarkdownFormatterTest extends TestCase
*/
protected function setUp(): void
{
copy('tests/utils/config/configJson.json.php', self::$testConf .'.json.php');
copy('tests/utils/config/configJson.json.php', self::$testConf . '.json.php');
$this->conf = new ConfigManager(self::$testConf);
$this->formatter = new BookmarkMarkdownFormatter($this->conf, true);
}
@ -60,8 +60,8 @@ public function testFormatFull()
);
$this->assertEquals('This is a &lt;strong&gt;bookmark&lt;/strong&gt;', $link['title']);
$this->assertEquals(
'<div class="markdown"><p>'.
'&lt;h2&gt;Content&lt;/h2&gt;&lt;p&gt;`Here is some content&lt;/p&gt;'.
'<div class="markdown"><p>' .
'&lt;h2&gt;Content&lt;/h2&gt;&lt;p&gt;`Here is some content&lt;/p&gt;' .
'</p></div>',
$link['description']
);
@ -112,20 +112,20 @@ public function testFormatMinimal()
*/
public function testFormatDescription()
{
$description = 'This a <strong>description</strong>'. PHP_EOL;
$description .= 'text https://sub.domain.tld?query=here&for=real#hash more text'. PHP_EOL;
$description .= 'Also, there is an #hashtag added'. PHP_EOL;
$description .= ' A N D KEEP SPACES ! '. PHP_EOL;
$description = 'This a <strong>description</strong>' . PHP_EOL;
$description .= 'text https://sub.domain.tld?query=here&for=real#hash more text' . PHP_EOL;
$description .= 'Also, there is an #hashtag added' . PHP_EOL;
$description .= ' A N D KEEP SPACES ! ' . PHP_EOL;
$bookmark = new Bookmark();
$bookmark->setDescription($description);
$link = $this->formatter->format($bookmark);
$description = '<div class="markdown"><p>';
$description .= 'This a &lt;strong&gt;description&lt;/strong&gt;<br />'. PHP_EOL;
$description .= 'This a &lt;strong&gt;description&lt;/strong&gt;<br />' . PHP_EOL;
$url = 'https://sub.domain.tld?query=here&amp;for=real#hash';
$description .= 'text <a href="'. $url .'">'. $url .'</a> more text<br />'. PHP_EOL;
$description .= 'Also, there is an <a href="./add-tag/hashtag">#hashtag</a> added<br />'. PHP_EOL;
$description .= 'text <a href="' . $url . '">' . $url . '</a> more text<br />' . PHP_EOL;
$description .= 'Also, there is an <a href="./add-tag/hashtag">#hashtag</a> added<br />' . PHP_EOL;
$description .= 'A N D KEEP SPACES ! ';
$description .= '</p></div>';
@ -137,11 +137,11 @@ public function testFormatDescription()
*/
public function testFormatDescriptionWithSearchHighlight()
{
$description = 'This a <strong>description</strong>'. PHP_EOL;
$description .= 'text https://sub.domain.tld?query=here&for=real#hash more text'. PHP_EOL;
$description .= 'Also, there is an #hashtag added'. PHP_EOL;
$description .= ' A N D KEEP SPACES ! '. PHP_EOL;
$description .= 'And [yet another link](https://other.domain.tld)'. PHP_EOL;
$description = 'This a <strong>description</strong>' . PHP_EOL;
$description .= 'text https://sub.domain.tld?query=here&for=real#hash more text' . PHP_EOL;
$description .= 'Also, there is an #hashtag added' . PHP_EOL;
$description .= ' A N D KEEP SPACES ! ' . PHP_EOL;
$description .= 'And [yet another link](https://other.domain.tld)' . PHP_EOL;
$bookmark = new Bookmark();
$bookmark->setDescription($description);
@ -164,9 +164,9 @@ public function testFormatDescriptionWithSearchHighlight()
$url = 'https://sub.domain.tld?query=here&amp;for=real#hash';
$highlighted = 'https://<span class="search-highlight">sub</span>.domain.tld';
$highlighted .= '?query=here&amp;for=real#<span class="search-highlight">hash</span>';
$description .= 'text <a href="'. $url .'">'. $highlighted .'</a> more text<br />'. PHP_EOL;
$description .= 'text <a href="' . $url . '">' . $highlighted . '</a> more text<br />' . PHP_EOL;
$description .= 'Also, there is an <a href="./add-tag/hashtag">#<span class="search-highlight">hasht</span>' .
'ag</a> added<br />'. PHP_EOL;
'ag</a> added<br />' . PHP_EOL;
$description .= 'A N D KEEP SPACES !<br />' . PHP_EOL;
$description .= 'And <a href="https://other.domain.tld">' .
'<span class="search-highlight">yet another link</span></a>';
@ -189,7 +189,7 @@ public function testFormatNoteWithIndexUrl()
$this->formatter->addContextData('index_url', $root = 'https://domain.tld/hithere/');
$description = '<div class="markdown"><p>';
$description .= 'Text <a href="'. $root .'./add-tag/hashtag">#hashtag</a> more text';
$description .= 'Text <a href="' . $root . './add-tag/hashtag">#hashtag</a> more text';
$description .= '</p></div>';
$link = $this->formatter->format($bookmark);

View file

@ -27,7 +27,7 @@ class BookmarkRawFormatterTest extends TestCase
*/
protected function setUp(): void
{
copy('tests/utils/config/configJson.json.php', self::$testConf .'.json.php');
copy('tests/utils/config/configJson.json.php', self::$testConf . '.json.php');
$this->conf = new ConfigManager(self::$testConf);
$this->formatter = new BookmarkRawFormatter($this->conf, true);
}

View file

@ -26,7 +26,7 @@ class FormatterFactoryTest extends TestCase
*/
protected function setUp(): void
{
copy('tests/utils/config/configJson.json.php', self::$testConf .'.json.php');
copy('tests/utils/config/configJson.json.php', self::$testConf . '.json.php');
$this->conf = new ConfigManager(self::$testConf);
$this->factory = new FormatterFactory($this->conf, true);
}

View file

@ -63,7 +63,8 @@ public function testMiddlewareWhileLoggedOut(): void
$response = new Response();
/** @var Response $result */
$result = $this->middleware->__invoke($request, $response, function () {});
$result = $this->middleware->__invoke($request, $response, function () {
});
static::assertSame(302, $result->getStatusCode());
static::assertSame(

View file

@ -91,7 +91,7 @@ public function testMiddlewareExecutionWithFrontException(): void
$controller = function (): void {
$exception = new LoginBannedException();
throw new $exception;
throw new $exception();
};
$pageBuilder = $this->createMock(PageBuilder::class);
@ -148,7 +148,8 @@ public function testMiddlewareExecutionWithServerException(): void
return $uri;
});
$dummyException = new class() extends \Exception {};
$dummyException = new class () extends \Exception {
};
$response = new Response();
$controller = function () use ($dummyException): void {

View file

@ -62,7 +62,7 @@ public function testIndex(): void
static::assertSame('privacy.hide_public_links', $assignedVariables['hide_public_links']);
static::assertSame('api.enabled', $assignedVariables['api_enabled']);
static::assertSame('api.secret', $assignedVariables['api_secret']);
static::assertCount(6, $assignedVariables['languages']);
static::assertCount(7, $assignedVariables['languages']);
static::assertArrayHasKey('gd_enabled', $assignedVariables);
static::assertSame('thumbnails.mode', $assignedVariables['thumbnails_mode']);
}
@ -122,8 +122,7 @@ public function testSaveNewConfig(): void
}
return $parameters[$key];
}
);
});
$response = new Response();
@ -137,8 +136,7 @@ public function testSaveNewConfig(): void
}
static::assertSame($parametersConfigMapping[$key], $value);
}
);
});
$result = $this->controller->save($request, $response);
static::assertSame(302, $result->getStatusCode());

View file

@ -80,7 +80,10 @@ function (
string $selection,
bool $prependNoteUrl,
string $indexUrl
) use ($parameters, $bookmarks): array {
) use (
$parameters,
$bookmarks
): array {
static::assertInstanceOf(BookmarkRawFormatter::class, $formatter);
static::assertSame($parameters['selection'], $selection);
static::assertTrue($prependNoteUrl);

View file

@ -74,7 +74,10 @@ public function testImportDefault(): void
function (
array $post,
UploadedFileInterface $file
) use ($parameters, $requestFile): string {
) use (
$parameters,
$requestFile
): string {
static::assertSame($parameters, $post);
static::assertSame($requestFile, $file);

View file

@ -16,7 +16,7 @@ class PluginsControllerTest extends TestCase
{
use FrontAdminControllerMockHelper;
const PLUGIN_NAMES = ['plugin1', 'plugin2', 'plugin3', 'plugin4'];
protected const PLUGIN_NAMES = ['plugin1', 'plugin2', 'plugin3', 'plugin4'];
/** @var PluginsController */
protected $controller;
@ -29,13 +29,17 @@ public function setUp(): void
mkdir($path = __DIR__ . '/folder');
PluginManager::$PLUGINS_PATH = $path;
array_map(function (string $plugin) use ($path) { touch($path . '/' . $plugin); }, static::PLUGIN_NAMES);
array_map(function (string $plugin) use ($path) {
touch($path . '/' . $plugin);
}, static::PLUGIN_NAMES);
}
public function tearDown(): void
{
$path = __DIR__ . '/folder';
array_map(function (string $plugin) use ($path) { unlink($path . '/' . $plugin); }, static::PLUGIN_NAMES);
array_map(function (string $plugin) use ($path) {
unlink($path . '/' . $plugin);
}, static::PLUGIN_NAMES);
rmdir($path);
}

View file

@ -365,5 +365,4 @@ public function testSaveBookmarkWrongToken(): void
$this->controller->save($request, $response);
}
}

View file

@ -26,7 +26,7 @@ public function setUp(): void
{
$this->createContainer();
$this->controller = new class($this->container) extends ShaarliAdminController
$this->controller = new class ($this->container) extends ShaarliAdminController
{
public function checkToken(Request $request): bool
{

View file

@ -54,8 +54,7 @@ public function testIndexDefaultFirstPage(): void
(new Bookmark())->setId(1)->setUrl('http://url1.tld')->setTitle('Title 1'),
(new Bookmark())->setId(2)->setUrl('http://url2.tld')->setTitle('Title 2'),
(new Bookmark())->setId(3)->setUrl('http://url3.tld')->setTitle('Title 3'),
], 0, 2)
);
], 0, 2));
$this->container->sessionManager
->method('getSessionParameter')

View file

@ -102,7 +102,7 @@ function (string $hook, array $data, array $param) use ($currentDay, $previousDa
static::assertSame(200, $result->getStatusCode());
static::assertSame('daily', (string) $result->getBody());
static::assertSame(
'Daily - '. format_date($currentDay, false, true) .' - Shaarli',
'Daily - ' . format_date($currentDay, false, true) . ' - Shaarli',
$assignedVariables['pagetitle']
);
static::assertEquals($currentDay, $assignedVariables['dayDate']);
@ -225,7 +225,7 @@ public function testValidIndexControllerInvokeNoFutureOrPast(): void
static::assertSame(200, $result->getStatusCode());
static::assertSame('daily', (string) $result->getBody());
static::assertSame(
'Daily - '. format_date($currentDay, false, true) .' - Shaarli',
'Daily - ' . format_date($currentDay, false, true) . ' - Shaarli',
$assignedVariables['pagetitle']
);
static::assertCount(1, $assignedVariables['linksToDisplay']);
@ -285,7 +285,9 @@ public function testValidIndexControllerInvokeHeightAdjustment(): void
static::assertCount(7, $assignedVariables['linksToDisplay']);
$columnIds = function (array $column): array {
return array_map(function (array $item): int { return $item['id']; }, $column);
return array_map(function (array $item): int {
return $item['id'];
}, $column);
};
static::assertSame([1, 4, 6], $columnIds($assignedVariables['cols'][0]));
@ -366,8 +368,7 @@ public function testValidRssControllerInvokeDefault(): void
$cachedPage->expects(static::once())->method('cache')->with('dailyrss');
return $cachedPage;
}
);
});
// Save RainTPL assigned variables
$assignedVariables = [];
@ -390,7 +391,7 @@ public function testValidRssControllerInvokeDefault(): void
static::assertEquals($date, $day['date']);
static::assertSame($date->format(\DateTime::RSS), $day['date_rss']);
static::assertSame(format_date($date, false), $day['date_human']);
static::assertSame('http://shaarli/subfolder/daily?day='. $dates[0]->format('Ymd'), $day['absolute_url']);
static::assertSame('http://shaarli/subfolder/daily?day=' . $dates[0]->format('Ymd'), $day['absolute_url']);
static::assertCount(1, $day['links']);
static::assertSame(1, $day['links'][0]['id']);
static::assertSame('http://domain.tld/1', $day['links'][0]['url']);
@ -402,7 +403,7 @@ public function testValidRssControllerInvokeDefault(): void
static::assertEquals($date, $day['date']);
static::assertSame($date->format(\DateTime::RSS), $day['date_rss']);
static::assertSame(format_date($date, false), $day['date_human']);
static::assertSame('http://shaarli/subfolder/daily?day='. $dates[1]->format('Ymd'), $day['absolute_url']);
static::assertSame('http://shaarli/subfolder/daily?day=' . $dates[1]->format('Ymd'), $day['absolute_url']);
static::assertCount(2, $day['links']);
static::assertSame(2, $day['links'][0]['id']);
@ -418,7 +419,7 @@ public function testValidRssControllerInvokeDefault(): void
static::assertEquals($date, $day['date']);
static::assertSame($date->format(\DateTime::RSS), $day['date_rss']);
static::assertSame(format_date($date, false), $day['date_human']);
static::assertSame('http://shaarli/subfolder/daily?day='. $dates[2]->format('Ymd'), $day['absolute_url']);
static::assertSame('http://shaarli/subfolder/daily?day=' . $dates[2]->format('Ymd'), $day['absolute_url']);
static::assertCount(1, $day['links']);
static::assertSame(4, $day['links'][0]['id']);
static::assertSame('http://domain.tld/4', $day['links'][0]['url']);
@ -647,7 +648,7 @@ public function testSimpleRssWeekly(): void
static::assertEquals($date, $day['date']);
static::assertSame($date->format(\DateTime::RSS), $day['date_rss']);
static::assertSame('Week 21 (May 18, 2020)', $day['date_human']);
static::assertSame('http://shaarli/subfolder/daily?week='. $dates[0]->format('YW'), $day['absolute_url']);
static::assertSame('http://shaarli/subfolder/daily?week=' . $dates[0]->format('YW'), $day['absolute_url']);
static::assertCount(1, $day['links']);
$day = $assignedVariables['days'][$dates[1]->format('YW')];
@ -656,7 +657,7 @@ public function testSimpleRssWeekly(): void
static::assertEquals($date, $day['date']);
static::assertSame($date->format(\DateTime::RSS), $day['date_rss']);
static::assertSame('Week 20 (May 11, 2020)', $day['date_human']);
static::assertSame('http://shaarli/subfolder/daily?week='. $dates[1]->format('YW'), $day['absolute_url']);
static::assertSame('http://shaarli/subfolder/daily?week=' . $dates[1]->format('YW'), $day['absolute_url']);
static::assertCount(2, $day['links']);
}
@ -710,7 +711,7 @@ public function testSimpleRssMonthly(): void
static::assertEquals($date, $day['date']);
static::assertSame($date->format(\DateTime::RSS), $day['date_rss']);
static::assertSame('May, 2020', $day['date_human']);
static::assertSame('http://shaarli/subfolder/daily?month='. $dates[0]->format('Ym'), $day['absolute_url']);
static::assertSame('http://shaarli/subfolder/daily?month=' . $dates[0]->format('Ym'), $day['absolute_url']);
static::assertCount(1, $day['links']);
$day = $assignedVariables['days'][$dates[1]->format('Ym')];
@ -719,7 +720,7 @@ public function testSimpleRssMonthly(): void
static::assertEquals($date, $day['date']);
static::assertSame($date->format(\DateTime::RSS), $day['date_rss']);
static::assertSame('April, 2020', $day['date_human']);
static::assertSame('http://shaarli/subfolder/daily?month='. $dates[1]->format('Ym'), $day['absolute_url']);
static::assertSame('http://shaarli/subfolder/daily?month=' . $dates[1]->format('Ym'), $day['absolute_url']);
static::assertCount(2, $day['links']);
}
}

View file

@ -41,7 +41,8 @@ public function testDisplayFrontExceptionError(): void
$result = ($this->controller)(
$request,
$response,
new class($message, $errorCode) extends ShaarliFrontException {}
new class ($message, $errorCode) extends ShaarliFrontException {
}
);
static::assertSame($errorCode, $result->getStatusCode());

View file

@ -118,5 +118,5 @@ protected static function generateString(int $length): string
/**
* Force to be used in PHPUnit context.
*/
protected abstract function isInTestsContext(): bool;
abstract protected function isInTestsContext(): bool;
}

View file

@ -15,7 +15,7 @@ class InstallControllerTest extends TestCase
{
use FrontControllerMockHelper;
const MOCK_FILE = '.tmp';
protected const MOCK_FILE = '.tmp';
/** @var InstallController */
protected $controller;

View file

@ -32,7 +32,7 @@ public function setUp(): void
{
$this->createContainer();
$this->controller = new class($this->container) extends ShaarliVisitorController
$this->controller = new class ($this->container) extends ShaarliVisitorController
{
public function assignView(string $key, $value): ShaarliVisitorController
{

View file

@ -1,10 +1,9 @@
<?php
namespace Shaarli\Helper;
use Shaarli\Config\ConfigManager;
use Shaarli\FakeApplicationUtils;
require_once 'tests/utils/FakeApplicationUtils.php';
use Shaarli\Tests\Utils\FakeApplicationUtils;
/**
* Unitary tests for Shaarli utilities
@ -49,7 +48,7 @@ public function testGetVersionCode()
'0.5.4',
ApplicationUtils::getVersion(
'https://raw.githubusercontent.com/shaarli/Shaarli/'
.'v0.5.4/shaarli_version.php',
. 'v0.5.4/shaarli_version.php',
$testTimeout
)
);
@ -57,7 +56,7 @@ public function testGetVersionCode()
self::$versionPattern,
ApplicationUtils::getVersion(
'https://raw.githubusercontent.com/shaarli/Shaarli/'
.'latest/shaarli_version.php',
. 'latest/shaarli_version.php',
$testTimeout
)
);
@ -68,7 +67,7 @@ public function testGetVersionCode()
*/
public function testGetVersionCodeFromFile()
{
file_put_contents('sandbox/version.php', '<?php /* 1.2.3 */ ?>'. PHP_EOL);
file_put_contents('sandbox/version.php', '<?php /* 1.2.3 */ ?>' . PHP_EOL);
$this->assertEquals(
'1.2.3',
ApplicationUtils::getVersion('sandbox/version.php', 1)
@ -301,7 +300,7 @@ public function testCheckCurrentResourcePermissions()
$conf->set('resource.update_check', 'data/lastupdatecheck.txt');
$this->assertEquals(
array(),
[],
ApplicationUtils::checkResourcePermissions($conf)
);
}
@ -324,7 +323,7 @@ public function testCheckCurrentResourcePermissionsErrors()
$conf->set('resource.raintpl_theme', 'null/tpl/default');
$conf->set('resource.update_check', 'null/data/lastupdatecheck.txt');
$this->assertEquals(
array(
[
'"null/tpl" directory is not readable',
'"null/tpl/default" directory is not readable',
'"null/cache" directory is not readable',
@ -335,7 +334,7 @@ public function testCheckCurrentResourcePermissionsErrors()
'"null/pagecache" directory is not writable',
'"null/tmp" directory is not readable',
'"null/tmp" directory is not writable'
),
],
ApplicationUtils::checkResourcePermissions($conf)
);
}

View file

@ -4,6 +4,7 @@
namespace Shaarli\Helper;
use DateTime;
use DateTimeImmutable;
use DateTimeInterface;
use Shaarli\Bookmark\Bookmark;
@ -147,7 +148,8 @@ public function getDescriptionByTypeExceptionUnknownType(): void
/**
* @dataProvider getRssLengthsByType
*/
public function testGeRssLengthsByType(string $type): void {
public function testGeRssLengthsByType(string $type): void
{
$length = DailyPageHelper::getRssLengthByType($type);
static::assertIsInt($length);
@ -208,31 +210,31 @@ public function getRequestedTypes(): array
public function getRequestedDateTimes(): array
{
return [
[DailyPageHelper::DAY, '20201013', null, new \DateTime('2020-10-13')],
[DailyPageHelper::DAY, '20201013', null, new DateTime('2020-10-13')],
[
DailyPageHelper::DAY,
'',
(new Bookmark())->setCreated($date = new \DateTime('2020-10-13 12:05:31')),
(new Bookmark())->setCreated($date = new DateTime('2020-10-13 12:05:31')),
$date,
],
[DailyPageHelper::DAY, '', null, new \DateTime()],
[DailyPageHelper::WEEK, '202030', null, new \DateTime('2020-07-20')],
[DailyPageHelper::DAY, '', null, new DateTime()],
[DailyPageHelper::WEEK, '202030', null, new DateTime('2020-07-20')],
[
DailyPageHelper::WEEK,
'',
(new Bookmark())->setCreated($date = new \DateTime('2020-10-13 12:05:31')),
new \DateTime('2020-10-13'),
(new Bookmark())->setCreated($date = new DateTime('2020-10-13 12:05:31')),
new DateTime('2020-10-13'),
],
[DailyPageHelper::WEEK, '', null, new \DateTime(), 'Ym'],
[DailyPageHelper::MONTH, '202008', null, new \DateTime('2020-08-01'), 'Ym'],
[DailyPageHelper::WEEK, '', null, new DateTime(), 'Ym'],
[DailyPageHelper::MONTH, '202008', null, new DateTime('2020-08-01'), 'Ym'],
[
DailyPageHelper::MONTH,
'',
(new Bookmark())->setCreated($date = new \DateTime('2020-10-13 12:05:31')),
new \DateTime('2020-10-13'),
(new Bookmark())->setCreated($date = new DateTime('2020-10-13 12:05:31')),
new DateTime('2020-10-13'),
'Ym'
],
[DailyPageHelper::MONTH, '', null, new \DateTime(), 'Ym'],
[DailyPageHelper::MONTH, '', null, new DateTime(), 'Ym'],
];
}
@ -254,9 +256,9 @@ public function getFormatsByType(): array
public function getStartDatesByType(): array
{
return [
[DailyPageHelper::DAY, new DateTimeImmutable('2020-10-09 04:05:06'), new \DateTime('2020-10-09 00:00:00')],
[DailyPageHelper::WEEK, new DateTimeImmutable('2020-10-09 04:05:06'), new \DateTime('2020-10-05 00:00:00')],
[DailyPageHelper::MONTH, new DateTimeImmutable('2020-10-09 04:05:06'), new \DateTime('2020-10-01 00:00:00')],
[DailyPageHelper::DAY, new DateTimeImmutable('2020-10-09 04:05:06'), new DateTime('2020-10-09 00:00:00')],
[DailyPageHelper::WEEK, new DateTimeImmutable('2020-10-09 04:05:06'), new DateTime('2020-10-05 00:00:00')],
[DailyPageHelper::MONTH, new DateTimeImmutable('2020-10-09 04:05:06'), new DateTime('2020-10-01 00:00:00')],
];
}
@ -266,9 +268,9 @@ public function getStartDatesByType(): array
public function getEndDatesByType(): array
{
return [
[DailyPageHelper::DAY, new DateTimeImmutable('2020-10-09 04:05:06'), new \DateTime('2020-10-09 23:59:59')],
[DailyPageHelper::WEEK, new DateTimeImmutable('2020-10-09 04:05:06'), new \DateTime('2020-10-11 23:59:59')],
[DailyPageHelper::MONTH, new DateTimeImmutable('2020-10-09 04:05:06'), new \DateTime('2020-10-31 23:59:59')],
[DailyPageHelper::DAY, new DateTimeImmutable('2020-10-09 04:05:06'), new DateTime('2020-10-09 23:59:59')],
[DailyPageHelper::WEEK, new DateTimeImmutable('2020-10-09 04:05:06'), new DateTime('2020-10-11 23:59:59')],
[DailyPageHelper::MONTH, new DateTimeImmutable('2020-10-09 04:05:06'), new DateTime('2020-10-31 23:59:59')],
];
}
@ -321,20 +323,20 @@ public function getCacheDatePeriodByType(): array
[
DailyPageHelper::DAY,
new DateTimeImmutable('2020-10-09 04:05:06'),
new \DateTime('2020-10-09 00:00:00'),
new \DateTime('2020-10-09 23:59:59'),
new DateTime('2020-10-09 00:00:00'),
new DateTime('2020-10-09 23:59:59'),
],
[
DailyPageHelper::WEEK,
new DateTimeImmutable('2020-10-09 04:05:06'),
new \DateTime('2020-10-05 00:00:00'),
new \DateTime('2020-10-11 23:59:59'),
new DateTime('2020-10-05 00:00:00'),
new DateTime('2020-10-11 23:59:59'),
],
[
DailyPageHelper::MONTH,
new DateTimeImmutable('2020-10-09 04:05:06'),
new \DateTime('2020-10-01 00:00:00'),
new \DateTime('2020-10-31 23:59:59'),
new DateTime('2020-10-01 00:00:00'),
new DateTime('2020-10-31 23:59:59'),
],
];
}

View file

@ -1,12 +1,11 @@
<?php
/**
* HttpUtils' tests
*/
namespace Shaarli\Http;
require_once 'application/http/HttpUtils.php';
/**
* Unitary tests for client_ip_id()
*/

View file

@ -1,12 +1,11 @@
<?php
/**
* HttpUtils' tests
*/
namespace Shaarli\Http;
require_once 'application/http/HttpUtils.php';
/**
* Unitary tests for get_http_response()
*/

View file

@ -2,8 +2,6 @@
namespace Shaarli\Http;
require_once 'application/http/HttpUtils.php';
/**
* Unitary tests for getIpAddressFromProxy()
*/
@ -15,7 +13,7 @@ class GetIpAdressFromProxyTest extends \Shaarli\TestCase
*/
public function testWithoutProxy()
{
$this->assertFalse(getIpAddressFromProxy(array(), array()));
$this->assertFalse(getIpAddressFromProxy([], []));
}
/**
@ -24,8 +22,8 @@ public function testWithoutProxy()
public function testWithOneForwardedIp()
{
$ip = '1.1.1.1';
$server = array('HTTP_X_FORWARDED_FOR' => $ip);
$this->assertEquals($ip, getIpAddressFromProxy($server, array()));
$server = ['HTTP_X_FORWARDED_FOR' => $ip];
$this->assertEquals($ip, getIpAddressFromProxy($server, []));
}
/**
@ -36,11 +34,11 @@ public function testWithMultipleForwardedIp()
$ip = '1.1.1.1';
$ip2 = '2.2.2.2';
$server = array('HTTP_X_FORWARDED_FOR' => $ip .','. $ip2);
$this->assertEquals($ip2, getIpAddressFromProxy($server, array()));
$server = ['HTTP_X_FORWARDED_FOR' => $ip . ',' . $ip2];
$this->assertEquals($ip2, getIpAddressFromProxy($server, []));
$server = array('HTTP_X_FORWARDED_FOR' => $ip .' , '. $ip2);
$this->assertEquals($ip2, getIpAddressFromProxy($server, array()));
$server = ['HTTP_X_FORWARDED_FOR' => $ip . ' , ' . $ip2];
$this->assertEquals($ip2, getIpAddressFromProxy($server, []));
}
/**
@ -51,11 +49,11 @@ public function testWithTrustedIp()
$ip = '1.1.1.1';
$ip2 = '2.2.2.2';
$server = array('HTTP_X_FORWARDED_FOR' => $ip);
$this->assertFalse(getIpAddressFromProxy($server, array($ip)));
$server = ['HTTP_X_FORWARDED_FOR' => $ip];
$this->assertFalse(getIpAddressFromProxy($server, [$ip]));
$server = array('HTTP_X_FORWARDED_FOR' => $ip .','. $ip2);
$this->assertEquals($ip2, getIpAddressFromProxy($server, array($ip)));
$this->assertFalse(getIpAddressFromProxy($server, array($ip, $ip2)));
$server = ['HTTP_X_FORWARDED_FOR' => $ip . ',' . $ip2];
$this->assertEquals($ip2, getIpAddressFromProxy($server, [$ip]));
$this->assertFalse(getIpAddressFromProxy($server, [$ip, $ip2]));
}
}

View file

@ -1,4 +1,5 @@
<?php
/**
* HttpUtils' tests
*/
@ -7,8 +8,6 @@
use Shaarli\TestCase;
require_once 'application/http/HttpUtils.php';
/**
* Unitary tests for index_url()
*/
@ -22,24 +21,24 @@ public function testRemoveIndex()
$this->assertEquals(
'http://host.tld/',
index_url(
array(
[
'HTTPS' => 'Off',
'SERVER_NAME' => 'host.tld',
'SERVER_PORT' => '80',
'SCRIPT_NAME' => '/index.php'
)
]
)
);
$this->assertEquals(
'http://host.tld/admin/',
index_url(
array(
[
'HTTPS' => 'Off',
'SERVER_NAME' => 'host.tld',
'SERVER_PORT' => '80',
'SCRIPT_NAME' => '/admin/index.php'
)
]
)
);
}
@ -52,24 +51,24 @@ public function testOtherResource()
$this->assertEquals(
'http://host.tld/page.php',
page_url(
array(
[
'HTTPS' => 'Off',
'SERVER_NAME' => 'host.tld',
'SERVER_PORT' => '80',
'SCRIPT_NAME' => '/page.php'
)
]
)
);
$this->assertEquals(
'http://host.tld/admin/page.php',
page_url(
array(
[
'HTTPS' => 'Off',
'SERVER_NAME' => 'host.tld',
'SERVER_PORT' => '80',
'SCRIPT_NAME' => '/admin/page.php'
)
]
)
);
}
@ -82,26 +81,26 @@ public function testPageUrlWithRoute()
$this->assertEquals(
'http://host.tld/picture-wall',
page_url(
array(
[
'HTTPS' => 'Off',
'SERVER_NAME' => 'host.tld',
'SERVER_PORT' => '80',
'SCRIPT_NAME' => '/index.php',
'REQUEST_URI' => '/picture-wall',
)
]
)
);
$this->assertEquals(
'http://host.tld/admin/picture-wall',
page_url(
array(
[
'HTTPS' => 'Off',
'SERVER_NAME' => 'host.tld',
'SERVER_PORT' => '80',
'SCRIPT_NAME' => '/admin/index.php',
'REQUEST_URI' => '/admin/picture-wall',
)
]
)
);
}
@ -114,26 +113,26 @@ public function testPageUrlWithRouteUnderSubfolder()
$this->assertEquals(
'http://host.tld/subfolder/picture-wall',
page_url(
array(
[
'HTTPS' => 'Off',
'SERVER_NAME' => 'host.tld',
'SERVER_PORT' => '80',
'SCRIPT_NAME' => '/subfolder/index.php',
'REQUEST_URI' => '/subfolder/picture-wall',
)
]
)
);
$this->assertEquals(
'http://host.tld/subfolder/admin/picture-wall',
page_url(
array(
[
'HTTPS' => 'Off',
'SERVER_NAME' => 'host.tld',
'SERVER_PORT' => '80',
'SCRIPT_NAME' => '/subfolder/admin/index.php',
'REQUEST_URI' => '/subfolder/admin/picture-wall',
)
]
)
);
}

View file

@ -25,26 +25,26 @@ public function testIndexUrlWithConstantDefined()
$this->assertEquals(
'http://other-host.tld/subfolder/',
index_url(
array(
[
'HTTPS' => 'Off',
'SERVER_NAME' => 'host.tld',
'SERVER_PORT' => '80',
'SCRIPT_NAME' => '/index.php',
'REQUEST_URI' => '/picture-wall',
)
]
)
);
$this->assertEquals(
'http://other-host.tld/subfolder/',
index_url(
array(
[
'HTTPS' => 'Off',
'SERVER_NAME' => 'host.tld',
'SERVER_PORT' => '80',
'SCRIPT_NAME' => '/admin/index.php',
'REQUEST_URI' => '/admin/picture-wall',
)
]
)
);
}

View file

@ -2,8 +2,6 @@
namespace Shaarli\Http;
require_once 'application/http/HttpUtils.php';
/**
* Class IsHttpsTest
*

View file

@ -1,12 +1,11 @@
<?php
/**
* HttpUtils' tests
*/
namespace Shaarli\Http;
require_once 'application/http/HttpUtils.php';
/**
* Unitary tests for page_url()
*/
@ -20,26 +19,26 @@ public function testRemoveIndex()
$this->assertEquals(
'http://host.tld/?p1=v1&p2=v2',
page_url(
array(
[
'HTTPS' => 'Off',
'SERVER_NAME' => 'host.tld',
'SERVER_PORT' => '80',
'SCRIPT_NAME' => '/index.php',
'QUERY_STRING' => 'p1=v1&p2=v2'
)
]
)
);
$this->assertEquals(
'http://host.tld/admin/?action=edit_tag',
page_url(
array(
[
'HTTPS' => 'Off',
'SERVER_NAME' => 'host.tld',
'SERVER_PORT' => '80',
'SCRIPT_NAME' => '/admin/index.php',
'QUERY_STRING' => 'action=edit_tag'
)
]
)
);
}
@ -52,26 +51,26 @@ public function testOtherResource()
$this->assertEquals(
'http://host.tld/page.php?p1=v1&p2=v2',
page_url(
array(
[
'HTTPS' => 'Off',
'SERVER_NAME' => 'host.tld',
'SERVER_PORT' => '80',
'SCRIPT_NAME' => '/page.php',
'QUERY_STRING' => 'p1=v1&p2=v2'
)
]
)
);
$this->assertEquals(
'http://host.tld/admin/page.php?action=edit_tag',
page_url(
array(
[
'HTTPS' => 'Off',
'SERVER_NAME' => 'host.tld',
'SERVER_PORT' => '80',
'SCRIPT_NAME' => '/admin/page.php',
'QUERY_STRING' => 'action=edit_tag'
)
]
)
);
}

View file

@ -1,12 +1,11 @@
<?php
/**
* HttpUtils' tests
*/
namespace Shaarli\Http;
require_once 'application/http/HttpUtils.php';
/**
* Unitary tests for server_url()
*/
@ -20,22 +19,22 @@ public function testHttpsScheme()
$this->assertEquals(
'https://host.tld',
server_url(
array(
[
'HTTPS' => 'ON',
'SERVER_NAME' => 'host.tld',
'SERVER_PORT' => '443'
)
]
)
);
$this->assertEquals(
'https://host.tld:8080',
server_url(
array(
[
'HTTPS' => 'ON',
'SERVER_NAME' => 'host.tld',
'SERVER_PORT' => '8080'
)
]
)
);
}
@ -48,22 +47,22 @@ public function testHttpsProxyForwardedHost()
$this->assertEquals(
'https://host.tld:8080',
server_url(
array(
[
'HTTP_X_FORWARDED_PROTO' => 'https',
'HTTP_X_FORWARDED_PORT' => '8080',
'HTTP_X_FORWARDED_HOST' => 'host.tld'
)
]
)
);
$this->assertEquals(
'https://host.tld:4974',
server_url(
array(
[
'HTTP_X_FORWARDED_PROTO' => 'https, https',
'HTTP_X_FORWARDED_PORT' => '4974, 80',
'HTTP_X_FORWARDED_HOST' => 'host.tld, example.com'
)
]
)
);
}
@ -76,51 +75,51 @@ public function testHttpsProxyForward()
$this->assertEquals(
'https://host.tld:8080',
server_url(
array(
[
'HTTPS' => 'Off',
'SERVER_NAME' => 'host.tld',
'SERVER_PORT' => '80',
'HTTP_X_FORWARDED_PROTO' => 'https',
'HTTP_X_FORWARDED_PORT' => '8080'
)
]
)
);
$this->assertEquals(
'https://host.tld',
server_url(
array(
[
'HTTPS' => 'Off',
'SERVER_NAME' => 'host.tld',
'SERVER_PORT' => '80',
'HTTP_X_FORWARDED_PROTO' => 'https'
)
]
)
);
$this->assertEquals(
'https://host.tld',
server_url(
array(
[
'HTTPS' => 'Off',
'SERVER_NAME' => 'host.tld',
'SERVER_PORT' => '80',
'HTTP_X_FORWARDED_PROTO' => 'https',
'HTTP_X_FORWARDED_PORT' => '443'
)
]
)
);
$this->assertEquals(
'https://host.tld:4974',
server_url(
array(
[
'HTTPS' => 'Off',
'SERVER_NAME' => 'host.tld',
'SERVER_PORT' => '80',
'HTTP_X_FORWARDED_PROTO' => 'https, https',
'HTTP_X_FORWARDED_PORT' => '4974, 80'
)
]
)
);
}
@ -134,11 +133,11 @@ public function testPort()
$this->assertEquals(
'http://host.tld:8080',
server_url(
array(
[
'HTTPS' => 'OFF',
'SERVER_NAME' => 'host.tld',
'SERVER_PORT' => '8080'
)
]
)
);
@ -146,11 +145,11 @@ public function testPort()
$this->assertEquals(
'https://host.tld:8080',
server_url(
array(
[
'HTTPS' => 'ON',
'SERVER_NAME' => 'host.tld',
'SERVER_PORT' => '8080'
)
]
)
);
}
@ -163,11 +162,11 @@ public function testStandardHttpPort()
$this->assertEquals(
'http://host.tld',
server_url(
array(
[
'HTTPS' => 'OFF',
'SERVER_NAME' => 'host.tld',
'SERVER_PORT' => '80'
)
]
)
);
}
@ -180,11 +179,11 @@ public function testStandardHttpsPort()
$this->assertEquals(
'https://host.tld',
server_url(
array(
[
'HTTPS' => 'ON',
'SERVER_NAME' => 'host.tld',
'SERVER_PORT' => '443'
)
]
)
);
}
@ -197,26 +196,26 @@ public function testHttpWithPort433()
$this->assertEquals(
'https://host.tld',
server_url(
array(
[
'HTTPS' => 'Off',
'SERVER_NAME' => 'host.tld',
'SERVER_PORT' => '80',
'HTTP_X_FORWARDED_PROTO' => 'http',
'HTTP_X_FORWARDED_PORT' => '443'
)
]
)
);
$this->assertEquals(
'https://host.tld',
server_url(
array(
[
'HTTPS' => 'Off',
'SERVER_NAME' => 'host.tld',
'SERVER_PORT' => '80',
'HTTP_X_FORWARDED_PROTO' => 'https, http',
'HTTP_X_FORWARDED_PORT' => '443, 80'
)
]
)
);
}

View file

@ -66,7 +66,12 @@ function (&$charset) use (
->expects(static::once())
->method('getCurlDownloadCallback')
->willReturnCallback(
function (&$charset, &$title, &$description, &$tags) use (
function (
&$charset,
&$title,
&$description,
&$tags
) use (
$remoteCharset,
$remoteTitle,
$remoteDesc,
@ -95,7 +100,7 @@ function (&$charset, &$title, &$description, &$tags) use (
->expects(static::once())
->method('getHttpResponse')
->with($url, 30, 4194304)
->willReturnCallback(function($url, $timeout, $maxBytes, $headerCallback, $dlCallback): void {
->willReturnCallback(function ($url, $timeout, $maxBytes, $headerCallback, $dlCallback): void {
$headerCallback();
$dlCallback();
})
@ -124,7 +129,8 @@ public function testEmptyRetrieval(): void
->method('getCurlDownloadCallback')
->willReturnCallback(
function (): callable {
return function (): void {};
return function (): void {
};
}
)
;
@ -133,7 +139,8 @@ function (): callable {
->method('getCurlHeaderCallback')
->willReturnCallback(
function (): callable {
return function (): void {};
return function (): void {
};
}
)
;
@ -141,7 +148,7 @@ function (): callable {
->expects(static::once())
->method('getHttpResponse')
->with($url, 30, 4194304)
->willReturnCallback(function($url, $timeout, $maxBytes, $headerCallback, $dlCallback): void {
->willReturnCallback(function ($url, $timeout, $maxBytes, $headerCallback, $dlCallback): void {
$headerCallback();
$dlCallback();
})

View file

@ -1,4 +1,5 @@
<?php
/**
* UrlUtils's tests
*/

View file

@ -1,12 +1,11 @@
<?php
/**
* Unitary tests for cleanup_url()
*/
namespace Shaarli\Http;
require_once 'application/http/UrlUtils.php';
class CleanupUrlTest extends \Shaarli\TestCase
{
/**
@ -29,7 +28,7 @@ public function testCleanupUrlEmpty()
public function testCleanupUrlAlreadyClean()
{
$this->assertEquals($this->ref, cleanup_url($this->ref));
$this->ref2 = $this->ref.'/path/to/dir/';
$this->ref2 = $this->ref . '/path/to/dir/';
$this->assertEquals($this->ref2, cleanup_url($this->ref2));
}
@ -38,9 +37,9 @@ public function testCleanupUrlAlreadyClean()
*/
public function testCleanupUrlFragment()
{
$this->assertEquals($this->ref, cleanup_url($this->ref.'#tk.rss_all'));
$this->assertEquals($this->ref, cleanup_url($this->ref.'#xtor=RSS-'));
$this->assertEquals($this->ref, cleanup_url($this->ref.'#xtor=RSS-U3ht0tkc4b'));
$this->assertEquals($this->ref, cleanup_url($this->ref . '#tk.rss_all'));
$this->assertEquals($this->ref, cleanup_url($this->ref . '#xtor=RSS-'));
$this->assertEquals($this->ref, cleanup_url($this->ref . '#xtor=RSS-U3ht0tkc4b'));
}
/**
@ -48,23 +47,23 @@ public function testCleanupUrlFragment()
*/
public function testCleanupUrlQuerySingle()
{
$this->assertEquals($this->ref, cleanup_url($this->ref.'?action_object_map=junk'));
$this->assertEquals($this->ref, cleanup_url($this->ref.'?action_ref_map=Cr4p!'));
$this->assertEquals($this->ref, cleanup_url($this->ref.'?action_type_map=g4R84g3'));
$this->assertEquals($this->ref, cleanup_url($this->ref . '?action_object_map=junk'));
$this->assertEquals($this->ref, cleanup_url($this->ref . '?action_ref_map=Cr4p!'));
$this->assertEquals($this->ref, cleanup_url($this->ref . '?action_type_map=g4R84g3'));
$this->assertEquals($this->ref, cleanup_url($this->ref.'?fb_stuff=v41u3'));
$this->assertEquals($this->ref, cleanup_url($this->ref.'?fb=71m3w4573'));
$this->assertEquals($this->ref, cleanup_url($this->ref . '?fb_stuff=v41u3'));
$this->assertEquals($this->ref, cleanup_url($this->ref . '?fb=71m3w4573'));
$this->assertEquals($this->ref, cleanup_url($this->ref.'?utm_campaign=zomg'));
$this->assertEquals($this->ref, cleanup_url($this->ref.'?utm_medium=numnum'));
$this->assertEquals($this->ref, cleanup_url($this->ref.'?utm_source=c0d3'));
$this->assertEquals($this->ref, cleanup_url($this->ref.'?utm_term=1n4l'));
$this->assertEquals($this->ref, cleanup_url($this->ref . '?utm_campaign=zomg'));
$this->assertEquals($this->ref, cleanup_url($this->ref . '?utm_medium=numnum'));
$this->assertEquals($this->ref, cleanup_url($this->ref . '?utm_source=c0d3'));
$this->assertEquals($this->ref, cleanup_url($this->ref . '?utm_term=1n4l'));
$this->assertEquals($this->ref, cleanup_url($this->ref.'?xtor=some-url'));
$this->assertEquals($this->ref, cleanup_url($this->ref . '?xtor=some-url'));
$this->assertEquals($this->ref, cleanup_url($this->ref.'?campaign_name=junk'));
$this->assertEquals($this->ref, cleanup_url($this->ref.'?campaign_start=junk'));
$this->assertEquals($this->ref, cleanup_url($this->ref.'?campaign_item_index=junk'));
$this->assertEquals($this->ref, cleanup_url($this->ref . '?campaign_name=junk'));
$this->assertEquals($this->ref, cleanup_url($this->ref . '?campaign_start=junk'));
$this->assertEquals($this->ref, cleanup_url($this->ref . '?campaign_item_index=junk'));
}
/**
@ -72,14 +71,14 @@ public function testCleanupUrlQuerySingle()
*/
public function testCleanupUrlQueryMultiple()
{
$this->assertEquals($this->ref, cleanup_url($this->ref.'?xtor=some-url&fb=som3th1ng'));
$this->assertEquals($this->ref, cleanup_url($this->ref . '?xtor=some-url&fb=som3th1ng'));
$this->assertEquals($this->ref, cleanup_url(
$this->ref.'?fb=stuff&utm_campaign=zomg&utm_medium=numnum&utm_source=c0d3'
$this->ref . '?fb=stuff&utm_campaign=zomg&utm_medium=numnum&utm_source=c0d3'
));
$this->assertEquals($this->ref, cleanup_url(
$this->ref.'?campaign_start=zomg&campaign_name=numnum'
$this->ref . '?campaign_start=zomg&campaign_name=numnum'
));
}
@ -89,22 +88,22 @@ public function testCleanupUrlQueryMultiple()
public function testCleanupUrlQueryFragment()
{
$this->assertEquals($this->ref, cleanup_url(
$this->ref.'?xtor=some-url&fb=som3th1ng#tk.rss_all'
$this->ref . '?xtor=some-url&fb=som3th1ng#tk.rss_all'
));
// ditch annoying query params and fragment, keep useful params
$this->assertEquals(
$this->ref.'?my=stuff&is=kept',
$this->ref . '?my=stuff&is=kept',
cleanup_url(
$this->ref.'?fb=zomg&my=stuff&utm_medium=numnum&is=kept#tk.rss_all'
$this->ref . '?fb=zomg&my=stuff&utm_medium=numnum&is=kept#tk.rss_all'
)
);
// ditch annoying query params, keep useful params and fragment
$this->assertEquals(
$this->ref.'?my=stuff&is=kept#again',
$this->ref . '?my=stuff&is=kept#again',
cleanup_url(
$this->ref.'?fb=zomg&my=stuff&utm_medium=numnum&is=kept#again'
$this->ref . '?fb=zomg&my=stuff&utm_medium=numnum&is=kept#again'
)
);
}

View file

@ -1,13 +1,14 @@
<?php
/**
* Unitary tests for get_url_scheme()
*/
namespace Shaarli\Http;
require_once 'application/http/UrlUtils.php';
use Shaarli\TestCase;
class GetUrlSchemeTest extends \Shaarli\TestCase
class GetUrlSchemeTest extends TestCase
{
/**
* Get empty scheme string for empty UrlUtils

View file

@ -1,23 +1,24 @@
<?php
/**
* Unpares UrlUtils's tests
*/
namespace Shaarli\Http;
require_once 'application/http/UrlUtils.php';
use Shaarli\TestCase;
/**
* Unitary tests for unparse_url()
*/
class UnparseUrlTest extends \Shaarli\TestCase
class UnparseUrlTest extends TestCase
{
/**
* Thanks for building nothing
*/
public function testUnparseEmptyArray()
{
$this->assertEquals('', unparse_url(array()));
$this->assertEquals('', unparse_url([]));
}
/**
@ -26,7 +27,7 @@ public function testUnparseEmptyArray()
public function testUnparseFull()
{
$ref = 'http://username:password@hostname:9090/path'
.'?arg1=value1&arg2=value2#anchor';
. '?arg1=value1&arg2=value2#anchor';
$this->assertEquals($ref, unparse_url(parse_url($ref)));
}
}

View file

@ -2,14 +2,14 @@
namespace Shaarli\Http;
require_once 'application/http/UrlUtils.php';
use Shaarli\TestCase;
/**
* Class WhitelistProtocolsTest
*
* Test whitelist_protocols() function of UrlUtils.
*/
class WhitelistProtocolsTest extends \Shaarli\TestCase
class WhitelistProtocolsTest extends TestCase
{
/**
* Test whitelist_protocols() on a note (relative URL).
@ -30,7 +30,7 @@ public function testWhitelistProtocolMissing()
{
$whitelist = ['ftp', 'magnet'];
$url = 'test.tld/path/?query=value#hash';
$this->assertEquals('http://'. $url, whitelist_protocols($url, $whitelist));
$this->assertEquals('http://' . $url, whitelist_protocols($url, $whitelist));
}
/**

View file

@ -1,4 +1,5 @@
<?php
require_once 'tests/bootstrap.php';
if (! empty(getenv('UT_LOCALE'))) {

View file

@ -1,7 +1,8 @@
<?php
require_once 'tests/UtilsTest.php';
namespace Shaarli\Tests;
use DateTime;
class UtilsDeTest extends UtilsTest
{

View file

@ -1,7 +1,8 @@
<?php
require_once 'tests/UtilsTest.php';
namespace Shaarli\Tests;
use DateTime;
class UtilsEnTest extends UtilsTest
{

View file

@ -1,9 +1,10 @@
<?php
namespace Shaarli;
namespace Shaarli\Tests;
use Shaarli\Config\ConfigManager;
use Shaarli\Languages;
use Shaarli\TestCase;
/**
* Class LanguagesFrTest
@ -12,7 +13,7 @@
*
* @package Shaarli
*/
class LanguagesFrTest extends \Shaarli\TestCase
class LanguagesFrTest extends TestCase
{
/**
* @var string Config file path (without extension).

View file

@ -1,7 +1,8 @@
<?php
require_once 'tests/UtilsTest.php';
namespace Shaarli\Tests;
use DateTime;
class UtilsFrTest extends UtilsTest
{

View file

@ -1,4 +1,5 @@
<?php
namespace Shaarli\Updater;
use Exception;

View file

@ -1,4 +1,5 @@
<?php
/**
* Link datastore tests
*/
@ -6,14 +7,10 @@
namespace Shaarli\Legacy;
use DateTime;
use ReferenceLinkDB;
use ReflectionClass;
use Shaarli;
use Shaarli\Bookmark\Bookmark;
require_once 'application/Utils.php';
require_once 'tests/utils/ReferenceLinkDB.php';
use Shaarli\Tests\Utils\ReferenceLinkDB;
/**
* Unitary tests for LegacyLinkDBTest
@ -118,7 +115,7 @@ public function testCheckDBNew()
$this->assertFileNotExists(self::$testDatastore);
$checkDB = self::getMethod('check');
$checkDB->invokeArgs($linkDB, array());
$checkDB->invokeArgs($linkDB, []);
$this->assertFileExists(self::$testDatastore);
// ensure the correct data has been written
@ -135,7 +132,7 @@ public function testCheckDBLoad()
$this->assertGreaterThan(0, $datastoreSize);
$checkDB = self::getMethod('check');
$checkDB->invokeArgs($linkDB, array());
$checkDB->invokeArgs($linkDB, []);
// ensure the datastore is left unmodified
$this->assertEquals(
@ -185,7 +182,7 @@ public function testSave()
$testDB = new LegacyLinkDB(self::$testDatastore, true, false);
$dbSize = sizeof($testDB);
$link = array(
$link = [
'id' => 43,
'title' => 'an additional link',
'url' => 'http://dum.my',
@ -193,7 +190,7 @@ public function testSave()
'private' => 0,
'created' => DateTime::createFromFormat(Bookmark::LINK_DATE_FORMAT, '20150518_190000'),
'tags' => 'unit test'
);
];
$testDB[$link['id']] = $link;
$testDB->save('tests');
@ -239,12 +236,12 @@ public function testCountHiddenPublic()
public function testDays()
{
$this->assertEquals(
array('20100309', '20100310', '20121206', '20121207', '20130614', '20150310'),
['20100309', '20100310', '20121206', '20121207', '20130614', '20150310'],
self::$publicLinkDB->days()
);
$this->assertEquals(
array('20100309', '20100310', '20121206', '20121207', '20130614', '20141125', '20150310'),
['20100309', '20100310', '20121206', '20121207', '20130614', '20141125', '20150310'],
self::$privateLinkDB->days()
);
}
@ -280,7 +277,7 @@ public function testGetUnknownLinkFromURL()
public function testAllTags()
{
$this->assertEquals(
array(
[
'web' => 3,
'cartoon' => 2,
'gnu' => 2,
@ -300,12 +297,12 @@ public function testAllTags()
'coding-style' => 1,
'quality' => 1,
'standards' => 1,
),
],
self::$publicLinkDB->linksCountPerTag()
);
$this->assertEquals(
array(
[
'web' => 4,
'cartoon' => 3,
'gnu' => 2,
@ -332,11 +329,11 @@ public function testAllTags()
'coding-style' => 1,
'quality' => 1,
'standards' => 1,
),
],
self::$privateLinkDB->linksCountPerTag()
);
$this->assertEquals(
array(
[
'web' => 4,
'cartoon' => 2,
'gnu' => 1,
@ -349,17 +346,17 @@ public function testAllTags()
'Mercurial' => 1,
'.hidden' => 1,
'hashtag' => 1,
),
],
self::$privateLinkDB->linksCountPerTag(['web'])
);
$this->assertEquals(
array(
[
'web' => 1,
'html' => 1,
'w3c' => 1,
'css' => 1,
'Mercurial' => 1,
),
],
self::$privateLinkDB->linksCountPerTag(['web'], 'private')
);
}
@ -370,7 +367,7 @@ public function testAllTags()
public function testFilterString()
{
$tags = 'dev cartoon';
$request = array('searchtags' => $tags);
$request = ['searchtags' => $tags];
$this->assertEquals(
2,
count(self::$privateLinkDB->filterSearch($request, true, false))
@ -382,8 +379,8 @@ public function testFilterString()
*/
public function testFilterArray()
{
$tags = array('dev', 'cartoon');
$request = array('searchtags' => $tags);
$tags = ['dev', 'cartoon'];
$request = ['searchtags' => $tags];
$this->assertEquals(
2,
count(self::$privateLinkDB->filterSearch($request, true, false))
@ -397,7 +394,7 @@ public function testFilterArray()
public function testHiddenTags()
{
$tags = '.hidden';
$request = array('searchtags' => $tags);
$request = ['searchtags' => $tags];
$this->assertEquals(
1,
count(self::$privateLinkDB->filterSearch($request, true, false))
@ -639,7 +636,7 @@ public function testConsistentOrder()
for ($i = 0; $i < 4; ++$i) {
$linkDB[$nextId + $i] = [
'id' => $nextId + $i,
'url' => 'http://'. $i,
'url' => 'http://' . $i,
'created' => $creation,
'title' => true,
'description' => true,
@ -657,7 +654,7 @@ public function testConsistentOrder()
continue;
}
$this->assertEquals($nextId + $count, $link['id']);
$this->assertEquals('http://'. $count, $link['url']);
$this->assertEquals('http://' . $count, $link['url']);
if (--$count < 0) {
break;
}

View file

@ -2,10 +2,9 @@
namespace Shaarli\Bookmark;
use Exception;
use ReferenceLinkDB;
use Shaarli\Legacy\LegacyLinkDB;
use Shaarli\Legacy\LegacyLinkFilter;
use Shaarli\Tests\Utils\ReferenceLinkDB;
/**
* Class LegacyLinkFilterTest.
@ -450,28 +449,28 @@ public function testFilterCrossedSearch()
1,
count(self::$linkFilter->filter(
LegacyLinkFilter::$FILTER_TAG | LegacyLinkFilter::$FILTER_TEXT,
array($tags, $terms)
[$tags, $terms]
))
);
$this->assertEquals(
2,
count(self::$linkFilter->filter(
LegacyLinkFilter::$FILTER_TAG | LegacyLinkFilter::$FILTER_TEXT,
array('', $terms)
['', $terms]
))
);
$this->assertEquals(
1,
count(self::$linkFilter->filter(
LegacyLinkFilter::$FILTER_TAG | LegacyLinkFilter::$FILTER_TEXT,
array(false, 'PSR-2')
[false, 'PSR-2']
))
);
$this->assertEquals(
1,
count(self::$linkFilter->filter(
LegacyLinkFilter::$FILTER_TAG | LegacyLinkFilter::$FILTER_TEXT,
array($tags, '')
[$tags, '']
))
);
$this->assertEquals(

View file

@ -1,4 +1,5 @@
<?php
namespace Shaarli\Updater;
use DateTime;
@ -9,18 +10,16 @@
use Shaarli\Config\ConfigPhp;
use Shaarli\Legacy\LegacyLinkDB;
use Shaarli\Legacy\LegacyUpdater;
use Shaarli\TestCase;
use Shaarli\Tests\updater\DummyUpdater;
use Shaarli\Tests\Utils\ReferenceLinkDB;
use Shaarli\Thumbnailer;
require_once 'application/updater/UpdaterUtils.php';
require_once 'tests/updater/DummyUpdater.php';
require_once 'tests/utils/ReferenceLinkDB.php';
require_once 'inc/rain.tpl.class.php';
/**
* Class UpdaterTest.
* Runs unit tests against the updater class.
*/
class LegacyUpdaterTest extends \Shaarli\TestCase
class LegacyUpdaterTest extends TestCase
{
/**
* @var string Path to test datastore.
@ -42,7 +41,7 @@ class LegacyUpdaterTest extends \Shaarli\TestCase
*/
protected function setUp(): void
{
copy('tests/utils/config/configJson.json.php', self::$configFile .'.json.php');
copy('tests/utils/config/configJson.json.php', self::$configFile . '.json.php');
$this->conf = new ConfigManager(self::$configFile);
}
@ -51,10 +50,10 @@ protected function setUp(): void
*/
public function testReadEmptyUpdatesFile()
{
$this->assertEquals(array(), UpdaterUtils::readUpdatesFile(''));
$this->assertEquals([], UpdaterUtils::readUpdatesFile(''));
$updatesFile = $this->conf->get('resource.data_dir') . '/updates.txt';
touch($updatesFile);
$this->assertEquals(array(), UpdaterUtils::readUpdatesFile($updatesFile));
$this->assertEquals([], UpdaterUtils::readUpdatesFile($updatesFile));
unlink($updatesFile);
}
@ -64,7 +63,7 @@ public function testReadEmptyUpdatesFile()
public function testReadWriteUpdatesFile()
{
$updatesFile = $this->conf->get('resource.data_dir') . '/updates.txt';
$updatesMethods = array('m1', 'm2', 'm3');
$updatesMethods = ['m1', 'm2', 'm3'];
UpdaterUtils::writeUpdatesFile($updatesFile, $updatesMethods);
$readMethods = UpdaterUtils::readUpdatesFile($updatesFile);
@ -86,7 +85,7 @@ public function testWriteEmptyUpdatesFile()
$this->expectException(\Exception::class);
$this->expectExceptionMessageRegExp('/Updates file path is not set(.*)/');
UpdaterUtils::writeUpdatesFile('', array('test'));
UpdaterUtils::writeUpdatesFile('', ['test']);
}
/**
@ -101,7 +100,7 @@ public function testWriteUpdatesFileNotWritable()
touch($updatesFile);
chmod($updatesFile, 0444);
try {
@UpdaterUtils::writeUpdatesFile($updatesFile, array('test'));
@UpdaterUtils::writeUpdatesFile($updatesFile, ['test']);
} catch (Exception $e) {
unlink($updatesFile);
throw $e;
@ -115,17 +114,17 @@ public function testWriteUpdatesFileNotWritable()
*/
public function testNoUpdates()
{
$updates = array(
$updates = [
'updateMethodDummy1',
'updateMethodDummy2',
'updateMethodDummy3',
'updateMethodException',
);
$updater = new DummyUpdater($updates, array(), $this->conf, true);
$this->assertEquals(array(), $updater->update());
];
$updater = new DummyUpdater($updates, [], $this->conf, true);
$this->assertEquals([], $updater->update());
$updater = new DummyUpdater(array(), array(), $this->conf, false);
$this->assertEquals(array(), $updater->update());
$updater = new DummyUpdater([], [], $this->conf, false);
$this->assertEquals([], $updater->update());
}
/**
@ -133,13 +132,13 @@ public function testNoUpdates()
*/
public function testUpdatesFirstTime()
{
$updates = array('updateMethodException',);
$expectedUpdates = array(
$updates = ['updateMethodException',];
$expectedUpdates = [
'updateMethodDummy1',
'updateMethodDummy2',
'updateMethodDummy3',
);
$updater = new DummyUpdater($updates, array(), $this->conf, true);
];
$updater = new DummyUpdater($updates, [], $this->conf, true);
$this->assertEquals($expectedUpdates, $updater->update());
}
@ -148,14 +147,14 @@ public function testUpdatesFirstTime()
*/
public function testOneUpdate()
{
$updates = array(
$updates = [
'updateMethodDummy1',
'updateMethodDummy3',
'updateMethodException',
);
$expectedUpdate = array('updateMethodDummy2');
];
$expectedUpdate = ['updateMethodDummy2'];
$updater = new DummyUpdater($updates, array(), $this->conf, true);
$updater = new DummyUpdater($updates, [], $this->conf, true);
$this->assertEquals($expectedUpdate, $updater->update());
}
@ -166,13 +165,13 @@ public function testUpdateFailed()
{
$this->expectException(\Exception::class);
$updates = array(
$updates = [
'updateMethodDummy1',
'updateMethodDummy2',
'updateMethodDummy3',
);
];
$updater = new DummyUpdater($updates, array(), $this->conf, true);
$updater = new DummyUpdater($updates, [], $this->conf, true);
$updater->update();
}
@ -197,7 +196,7 @@ public function testUpdateMergeDeprecatedConfig()
$this->conf->setConfigFile('tests/updater/config');
// merge configs
$updater = new LegacyUpdater(array(), array(), $this->conf, true);
$updater = new LegacyUpdater([], [], $this->conf, true);
// This writes a new config file in tests/updater/config.php
$updater->updateMethodMergeDeprecatedConfigFile();
@ -214,7 +213,7 @@ public function testUpdateMergeDeprecatedConfig()
*/
public function testMergeDeprecatedConfigNoFile()
{
$updater = new LegacyUpdater(array(), array(), $this->conf, true);
$updater = new LegacyUpdater([], [], $this->conf, true);
$updater->updateMethodMergeDeprecatedConfigFile();
$this->assertEquals('root', $this->conf->get('credentials.login'));
@ -225,14 +224,14 @@ public function testMergeDeprecatedConfigNoFile()
*/
public function testRenameDashTags()
{
$refDB = new \ReferenceLinkDB(true);
$refDB = new ReferenceLinkDB(true);
$refDB->write(self::$testDatastore);
$linkDB = new LegacyLinkDB(self::$testDatastore, true, false);
$this->assertEmpty($linkDB->filterSearch(array('searchtags' => 'exclude')));
$updater = new LegacyUpdater(array(), $linkDB, $this->conf, true);
$this->assertEmpty($linkDB->filterSearch(['searchtags' => 'exclude']));
$updater = new LegacyUpdater([], $linkDB, $this->conf, true);
$updater->updateMethodRenameDashTags();
$this->assertNotEmpty($linkDB->filterSearch(array('searchtags' => 'exclude')));
$this->assertNotEmpty($linkDB->filterSearch(['searchtags' => 'exclude']));
}
/**
@ -247,7 +246,7 @@ public function testConfigToJson()
// The ConfigIO is initialized with ConfigPhp.
$this->assertTrue($this->conf->getConfigIO() instanceof ConfigPhp);
$updater = new LegacyUpdater(array(), array(), $this->conf, false);
$updater = new LegacyUpdater([], [], $this->conf, false);
$done = $updater->updateMethodConfigToJson();
$this->assertTrue($done);
@ -272,7 +271,7 @@ public function testConfigToJson()
public function testConfigToJsonNothingToDo()
{
$filetime = filemtime($this->conf->getConfigFileExt());
$updater = new LegacyUpdater(array(), array(), $this->conf, false);
$updater = new LegacyUpdater([], [], $this->conf, false);
$done = $updater->updateMethodConfigToJson();
$this->assertTrue($done);
$expected = filemtime($this->conf->getConfigFileExt());
@ -291,7 +290,7 @@ public function testEscapeConfig()
$headerLink = '<script>alert("header_link");</script>';
$this->conf->set('general.title', $title);
$this->conf->set('general.header_link', $headerLink);
$updater = new LegacyUpdater(array(), array(), $this->conf, true);
$updater = new LegacyUpdater([], [], $this->conf, true);
$done = $updater->updateMethodEscapeUnescapedConfig();
$this->assertTrue($done);
$this->conf->reload();
@ -306,9 +305,9 @@ public function testEscapeConfig()
public function testUpdateApiSettings()
{
$confFile = 'sandbox/config';
copy(self::$configFile .'.json.php', $confFile .'.json.php');
copy(self::$configFile . '.json.php', $confFile . '.json.php');
$conf = new ConfigManager($confFile);
$updater = new LegacyUpdater(array(), array(), $conf, true);
$updater = new LegacyUpdater([], [], $conf, true);
$this->assertFalse($conf->exists('api.enabled'));
$this->assertFalse($conf->exists('api.secret'));
@ -316,7 +315,7 @@ public function testUpdateApiSettings()
$conf->reload();
$this->assertTrue($conf->get('api.enabled'));
$this->assertTrue($conf->exists('api.secret'));
unlink($confFile .'.json.php');
unlink($confFile . '.json.php');
}
/**
@ -325,15 +324,15 @@ public function testUpdateApiSettings()
public function testUpdateApiSettingsNothingToDo()
{
$confFile = 'sandbox/config';
copy(self::$configFile .'.json.php', $confFile .'.json.php');
copy(self::$configFile . '.json.php', $confFile . '.json.php');
$conf = new ConfigManager($confFile);
$conf->set('api.enabled', false);
$conf->set('api.secret', '');
$updater = new LegacyUpdater(array(), array(), $conf, true);
$updater = new LegacyUpdater([], [], $conf, true);
$updater->updateMethodApiSettings();
$this->assertFalse($conf->get('api.enabled'));
$this->assertEmpty($conf->get('api.secret'));
unlink($confFile .'.json.php');
unlink($confFile . '.json.php');
}
/**
@ -341,8 +340,8 @@ public function testUpdateApiSettingsNothingToDo()
*/
public function testDatastoreIds()
{
$links = array(
'20121206_182539' => array(
$links = [
'20121206_182539' => [
'linkdate' => '20121206_182539',
'title' => 'Geek and Poke',
'url' => 'http://geek-and-poke.com/',
@ -350,25 +349,25 @@ public function testDatastoreIds()
'tags' => 'dev cartoon tag1 tag2 tag3 tag4 ',
'updated' => '20121206_190301',
'private' => false,
),
'20121206_172539' => array(
],
'20121206_172539' => [
'linkdate' => '20121206_172539',
'title' => 'UserFriendly - Samba',
'url' => 'http://ars.userfriendly.org/cartoons/?id=20010306',
'description' => '',
'tags' => 'samba cartoon web',
'private' => false,
),
'20121206_142300' => array(
],
'20121206_142300' => [
'linkdate' => '20121206_142300',
'title' => 'UserFriendly - Web Designer',
'url' => 'http://ars.userfriendly.org/cartoons/?id=20121206',
'description' => 'Naming conventions... #private',
'tags' => 'samba cartoon web',
'private' => true,
),
);
$refDB = new \ReferenceLinkDB(true);
],
];
$refDB = new ReferenceLinkDB(true);
$refDB->setLinks($links);
$refDB->write(self::$testDatastore);
$linkDB = new LegacyLinkDB(self::$testDatastore, true, false);
@ -378,12 +377,12 @@ public function testDatastoreIds()
$this->conf->set('resource.data_dir', 'sandbox');
$this->conf->set('resource.datastore', self::$testDatastore);
$updater = new LegacyUpdater(array(), $linkDB, $this->conf, true);
$updater = new LegacyUpdater([], $linkDB, $this->conf, true);
$this->assertTrue($updater->updateMethodDatastoreIds());
$linkDB = new LegacyLinkDB(self::$testDatastore, true, false);
$backupFiles = glob($this->conf->get('resource.data_dir') . '/datastore.'. date('YmdH') .'*.php');
$backupFiles = glob($this->conf->get('resource.data_dir') . '/datastore.' . date('YmdH') . '*.php');
$backup = null;
foreach ($backupFiles as $backupFile) {
if (strpos($backupFile, '_1') === false) {
@ -437,7 +436,7 @@ public function testDatastoreIds()
*/
public function testDatastoreIdsNothingToDo()
{
$refDB = new \ReferenceLinkDB(true);
$refDB = new ReferenceLinkDB(true);
$refDB->write(self::$testDatastore);
$linkDB = new LegacyLinkDB(self::$testDatastore, true, false);
@ -445,7 +444,7 @@ public function testDatastoreIdsNothingToDo()
$this->conf->set('resource.datastore', self::$testDatastore);
$checksum = hash_file('sha1', self::$testDatastore);
$updater = new LegacyUpdater(array(), $linkDB, $this->conf, true);
$updater = new LegacyUpdater([], $linkDB, $this->conf, true);
$this->assertTrue($updater->updateMethodDatastoreIds());
$this->assertEquals($checksum, hash_file('sha1', self::$testDatastore));
}
@ -478,9 +477,9 @@ public function testDefaultThemeWithCustomTheme()
$sandbox = 'sandbox/config';
copy(self::$configFile . '.json.php', $sandbox . '.json.php');
$this->conf = new ConfigManager($sandbox);
mkdir('sandbox/'. $theme);
touch('sandbox/'. $theme .'/linklist.html');
$this->conf->set('resource.raintpl_tpl', 'sandbox/'. $theme .'/');
mkdir('sandbox/' . $theme);
touch('sandbox/' . $theme . '/linklist.html');
$this->conf->set('resource.raintpl_tpl', 'sandbox/' . $theme . '/');
$updater = new LegacyUpdater([], [], $this->conf, true);
$this->assertTrue($updater->updateMethodDefaultTheme());
@ -490,8 +489,8 @@ public function testDefaultThemeWithCustomTheme()
$this->assertEquals('sandbox', $this->conf->get('resource.raintpl_tpl'));
$this->assertEquals($theme, $this->conf->get('resource.theme'));
unlink($sandbox . '.json.php');
unlink('sandbox/'. $theme .'/linklist.html');
rmdir('sandbox/'. $theme);
unlink('sandbox/' . $theme . '/linklist.html');
rmdir('sandbox/' . $theme);
}
/**
@ -572,11 +571,11 @@ public function testUpdatePiwikUrlValid()
$this->conf->set('plugins.PIWIK_URL', $url);
$updater = new LegacyUpdater([], [], $this->conf, true);
$this->assertTrue($updater->updateMethodPiwikUrl());
$this->assertEquals('http://'. $url, $this->conf->get('plugins.PIWIK_URL'));
$this->assertEquals('http://' . $url, $this->conf->get('plugins.PIWIK_URL'));
// reload from file
$this->conf = new ConfigManager($sandboxConf);
$this->assertEquals('http://'. $url, $this->conf->get('plugins.PIWIK_URL'));
$this->assertEquals('http://' . $url, $this->conf->get('plugins.PIWIK_URL'));
}
/**
@ -781,12 +780,12 @@ public function testUpdateStickyValid()
1 => ['id' => 1] + $blank,
2 => ['id' => 2] + $blank,
];
$refDB = new \ReferenceLinkDB(true);
$refDB = new ReferenceLinkDB(true);
$refDB->setLinks($links);
$refDB->write(self::$testDatastore);
$linkDB = new LegacyLinkDB(self::$testDatastore, true, false);
$updater = new LegacyUpdater(array(), $linkDB, $this->conf, true);
$updater = new LegacyUpdater([], $linkDB, $this->conf, true);
$this->assertTrue($updater->updateMethodSetSticky());
$linkDB = new LegacyLinkDB(self::$testDatastore, true, false);
@ -812,12 +811,12 @@ public function testUpdateStickyNothingToDo()
1 => ['id' => 1, 'sticky' => true] + $blank,
2 => ['id' => 2] + $blank,
];
$refDB = new \ReferenceLinkDB(true);
$refDB = new ReferenceLinkDB(true);
$refDB->setLinks($links);
$refDB->write(self::$testDatastore);
$linkDB = new LegacyLinkDB(self::$testDatastore, true, false);
$updater = new LegacyUpdater(array(), $linkDB, $this->conf, true);
$updater = new LegacyUpdater([], $linkDB, $this->conf, true);
$this->assertTrue($updater->updateMethodSetSticky());
$linkDB = new LegacyLinkDB(self::$testDatastore, true, false);

View file

@ -10,8 +10,7 @@
use Shaarli\History;
use Shaarli\Plugin\PluginManager;
use Shaarli\TestCase;
require_once 'tests/utils/ReferenceLinkDB.php';
use Shaarli\Tests\Utils\ReferenceLinkDB;
/**
* Netscape bookmark export
@ -29,7 +28,7 @@ class BookmarkExportTest extends TestCase
protected static $conf;
/**
* @var \ReferenceLinkDB instance.
* @var ReferenceLinkDB instance.
*/
protected static $refDb = null;
@ -64,7 +63,7 @@ public static function setUpBeforeClass(): void
$mutex = new NoMutex();
static::$conf = new ConfigManager('tests/utils/config/configJson');
static::$conf->set('resource.datastore', static::$testDatastore);
static::$refDb = new \ReferenceLinkDB();
static::$refDb = new ReferenceLinkDB();
static::$refDb->write(static::$testDatastore);
static::$history = new History('sandbox/history.php');
static::$pluginManager = new PluginManager(static::$conf);

View file

@ -135,7 +135,7 @@ public function testImportEmptyData()
$files = file2array('empty.htm');
$this->assertEquals(
'File empty.htm (0 bytes) has an unknown file format.'
.' Nothing was imported.',
. ' Nothing was imported.',
$this->netscapeBookmarkUtils->import(null, $files)
);
$this->assertEquals(0, $this->bookmarkService->count());
@ -162,7 +162,7 @@ public function testImportLowecaseDoctype()
$files = file2array('lowercase_doctype.htm');
$this->assertStringMatchesFormat(
'File lowercase_doctype.htm (386 bytes) was successfully processed in %d seconds:'
.' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
. ' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
$this->netscapeBookmarkUtils->import(null, $files)
);
$this->assertEquals(2, $this->bookmarkService->count());
@ -177,7 +177,7 @@ public function testImportInternetExplorerEncoding()
$files = file2array('internet_explorer_encoding.htm');
$this->assertStringMatchesFormat(
'File internet_explorer_encoding.htm (356 bytes) was successfully processed in %d seconds:'
.' 1 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
. ' 1 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
$this->netscapeBookmarkUtils->import([], $files)
);
$this->assertEquals(1, $this->bookmarkService->count());
@ -205,7 +205,7 @@ public function testImportNested()
$files = file2array('netscape_nested.htm');
$this->assertStringMatchesFormat(
'File netscape_nested.htm (1337 bytes) was successfully processed in %d seconds:'
.' 8 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
. ' 8 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
$this->netscapeBookmarkUtils->import([], $files)
);
$this->assertEquals(8, $this->bookmarkService->count());
@ -326,7 +326,7 @@ public function testImportDefaultPrivacyNoPost()
$files = file2array('netscape_basic.htm');
$this->assertStringMatchesFormat(
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
.' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
. ' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
$this->netscapeBookmarkUtils->import([], $files)
);
@ -365,11 +365,11 @@ public function testImportDefaultPrivacyNoPost()
*/
public function testImportKeepPrivacy()
{
$post = array('privacy' => 'default');
$post = ['privacy' => 'default'];
$files = file2array('netscape_basic.htm');
$this->assertStringMatchesFormat(
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
.' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
. ' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
$this->netscapeBookmarkUtils->import($post, $files)
);
@ -408,11 +408,11 @@ public function testImportKeepPrivacy()
*/
public function testImportAsPublic()
{
$post = array('privacy' => 'public');
$post = ['privacy' => 'public'];
$files = file2array('netscape_basic.htm');
$this->assertStringMatchesFormat(
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
.' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
. ' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
$this->netscapeBookmarkUtils->import($post, $files)
);
$this->assertEquals(2, $this->bookmarkService->count());
@ -426,11 +426,11 @@ public function testImportAsPublic()
*/
public function testImportAsPrivate()
{
$post = array('privacy' => 'private');
$post = ['privacy' => 'private'];
$files = file2array('netscape_basic.htm');
$this->assertStringMatchesFormat(
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
.' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
. ' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
$this->netscapeBookmarkUtils->import($post, $files)
);
$this->assertEquals(2, $this->bookmarkService->count());
@ -447,10 +447,10 @@ public function testOverwriteAsPublic()
$files = file2array('netscape_basic.htm');
// import bookmarks as private
$post = array('privacy' => 'private');
$post = ['privacy' => 'private'];
$this->assertStringMatchesFormat(
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
.' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
. ' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
$this->netscapeBookmarkUtils->import($post, $files)
);
$this->assertEquals(2, $this->bookmarkService->count());
@ -459,13 +459,13 @@ public function testOverwriteAsPublic()
$this->assertTrue($this->bookmarkService->get(1)->isPrivate());
// re-import as public, enable overwriting
$post = array(
$post = [
'privacy' => 'public',
'overwrite' => 'true'
);
];
$this->assertStringMatchesFormat(
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
.' 2 bookmarks imported, 2 bookmarks overwritten, 0 bookmarks skipped.',
. ' 2 bookmarks imported, 2 bookmarks overwritten, 0 bookmarks skipped.',
$this->netscapeBookmarkUtils->import($post, $files)
);
$this->assertEquals(2, $this->bookmarkService->count());
@ -482,10 +482,10 @@ public function testOverwriteAsPrivate()
$files = file2array('netscape_basic.htm');
// import bookmarks as public
$post = array('privacy' => 'public');
$post = ['privacy' => 'public'];
$this->assertStringMatchesFormat(
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
.' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
. ' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
$this->netscapeBookmarkUtils->import($post, $files)
);
$this->assertEquals(2, $this->bookmarkService->count());
@ -494,13 +494,13 @@ public function testOverwriteAsPrivate()
$this->assertFalse($this->bookmarkService->get(1)->isPrivate());
// re-import as private, enable overwriting
$post = array(
$post = [
'privacy' => 'private',
'overwrite' => 'true'
);
];
$this->assertStringMatchesFormat(
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
.' 2 bookmarks imported, 2 bookmarks overwritten, 0 bookmarks skipped.',
. ' 2 bookmarks imported, 2 bookmarks overwritten, 0 bookmarks skipped.',
$this->netscapeBookmarkUtils->import($post, $files)
);
$this->assertEquals(2, $this->bookmarkService->count());
@ -514,21 +514,21 @@ public function testOverwriteAsPrivate()
*/
public function testSkipOverwrite()
{
$post = array('privacy' => 'public');
$post = ['privacy' => 'public'];
$files = file2array('netscape_basic.htm');
$this->assertStringMatchesFormat(
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
.' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
. ' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
$this->netscapeBookmarkUtils->import($post, $files)
);
$this->assertEquals(2, $this->bookmarkService->count());
$this->assertEquals(0, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));
// re-import as private, DO NOT enable overwriting
$post = array('privacy' => 'private');
$post = ['privacy' => 'private'];
$this->assertStringMatchesFormat(
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
.' 0 bookmarks imported, 0 bookmarks overwritten, 2 bookmarks skipped.',
. ' 0 bookmarks imported, 0 bookmarks overwritten, 2 bookmarks skipped.',
$this->netscapeBookmarkUtils->import($post, $files)
);
$this->assertEquals(2, $this->bookmarkService->count());
@ -540,14 +540,14 @@ public function testSkipOverwrite()
*/
public function testSetDefaultTags()
{
$post = array(
$post = [
'privacy' => 'public',
'default_tags' => 'tag1 tag2 tag3'
);
];
$files = file2array('netscape_basic.htm');
$this->assertStringMatchesFormat(
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
.' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
. ' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
$this->netscapeBookmarkUtils->import($post, $files)
);
$this->assertEquals(2, $this->bookmarkService->count());
@ -561,14 +561,14 @@ public function testSetDefaultTags()
*/
public function testSanitizeDefaultTags()
{
$post = array(
$post = [
'privacy' => 'public',
'default_tags' => 'tag1& tag2 "tag3"'
);
];
$files = file2array('netscape_basic.htm');
$this->assertStringMatchesFormat(
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
.' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
. ' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
$this->netscapeBookmarkUtils->import($post, $files)
);
$this->assertEquals(2, $this->bookmarkService->count());
@ -597,7 +597,7 @@ public function testSetDefaultTagsWithCustomSeparator()
$files = file2array('netscape_basic.htm');
$this->assertStringMatchesFormat(
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
.' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
. ' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
$this->netscapeBookmarkUtils->import($post, $files)
);
$this->assertEquals(2, $this->bookmarkService->count());
@ -630,8 +630,8 @@ public function testImportSameDate()
$files = file2array('same_date.htm');
$this->assertStringMatchesFormat(
'File same_date.htm (453 bytes) was successfully processed in %d seconds:'
.' 3 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
$this->netscapeBookmarkUtils->import(array(), $files)
. ' 3 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
$this->netscapeBookmarkUtils->import([], $files)
);
$this->assertEquals(3, $this->bookmarkService->count());
$this->assertEquals(0, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));

Some files were not shown because too many files have changed in this diff Show more