* Fix downloading files in tests with new Chromiums
Newer versions of chromium apparently need these flags to download files
without prompting the user.
* Expose port to watch remote browser
This allows to watch the remote controlled browser in your browser at
<http://localhost:7900/?autoconnect=1&resize=scale&password=secret>
(you have to comment out the `--headless` argument in TestCase::driver()
before).
* More ignore-patterns in eslint config
So we don't have to specify them on the command line when we check
codestyle locally.
* Test setup for local and CI using containers
It uses standalone containers for the greenmail IMAP server and the
standalone browser.
A testrunner image is built in the CI (for `linux/amd64` only, because
Github doesn't support multi-platform building on their default
runners and we don't have our own.)
This setup helps to run the tests (reproduceably) also locally.
Previously, on my machine, they produced varying results.
It also reduces the dependencies for running the browser test.
Local execution only depends on `docker compose`, no other tools
(previously it required `sudo`, `java`, and some more.)
The previous solution should still work, if you want it.
The scripts are stored in a directory called `.ci` to hide them a little
and avoid confusion with the container images from the
`roundcubemail-docker` repo.
* Fix UI tests by waiting for element before using it
This only was a flaky problem only occurring sometimes.
* Force a new IMAP connection in plugin tests, too
In other code the initial connection is forced. Doing this here, too,
fixes occasional problems with lost imap connections.
* Make waiting for zipfile's content more robust
* CI: Run tests from script on Windows, too
* CI: Do start local chrome if no connect URL is given
* Move compose.yml to tests/
This way it's less easy mistaken as usable for running Roundcubemail in
production.
* Move compose.yml to .ci/
* align_single_space_minimal for assign
* assign operators grouping is not supported by PHP CS Fixer
* binary_operator_spaces = single_space
* fix anonymous function on single line
* align comments manually
* replace void with never return type
* replace "return void" phpdoc with native type in tests
* replace "return void" phpdoc with native type in rcube_addressbook
* replace "return void" phpdoc with native type in rcmail_oauth
* fix remaining