diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml
index 4d52983ba..4ca606ac5 100644
--- a/.github/workflows/php.yml
+++ b/.github/workflows/php.yml
@@ -17,11 +17,12 @@ jobs:
strategy:
fail-fast: false
matrix:
- php: ['5.6', '7.0', '7.1', '7.2', '7.3', '7.4']
+ php: ['5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0']
os: ['ubuntu-latest']
include:
- php: '5.6'
allow_failure: true
+ phplint_options: "--exclude='{(?>.*/)?test/php/.*}' --exclude=library/Icinga/Test/BaseTestCase.php"
- php: '7.0'
allow_failure: true
@@ -40,7 +41,7 @@ jobs:
- name: PHP Lint
if: success() || matrix.allow_failure
- run: ./vendor/bin/phplint -n --exclude={^vendor/.*} --exclude=library/Icinga/Util/String.php -- .
+ run: ./vendor/bin/phplint -n --exclude={^vendor/.*} --exclude=library/Icinga/Util/String.php ${{ matrix.phplint_options }} -- .
- name: PHP CodeSniffer
if: success() || matrix.allow_failure
@@ -51,14 +52,16 @@ jobs:
runs-on: ${{ matrix.os }}
env:
- phpunit-version: 5.7.27
- mockery-version: 0.9.9 # *Any* other version is not compatible with PHP 5.6 and anything above phpunit 6
+ phpunit-version: 9.5.4
strategy:
fail-fast: false
matrix:
- php: ['5.6', '7.0', '7.1', '7.2', '7.3', '7.4']
+ php: ['7.2', '7.3', '7.4', '8.0']
os: ['ubuntu-latest']
+ include:
+ - php: '7.2'
+ phpunit-version: 8.5.15
services:
mysql:
@@ -98,13 +101,13 @@ jobs:
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
- tools: phpunit:${{ env.phpunit-version }}
+ tools: phpunit:${{ matrix.phpunit-version || env.phpunit-version }}
extensions: mysql, pgsql, ldap
- name: Setup dependencies
run: |
sudo locale-gen en_US.UTF-8 de_DE.UTF-8 fr_FR.UTF-8
- composer require -n --no-progress mockery/mockery:${{ env.mockery-version }}
+ composer require -n --no-progress mockery/mockery
- name: PHPUnit
env:
diff --git a/library/Icinga/Application/ApplicationBootstrap.php b/library/Icinga/Application/ApplicationBootstrap.php
index 04cc930d2..8c72d0e51 100644
--- a/library/Icinga/Application/ApplicationBootstrap.php
+++ b/library/Icinga/Application/ApplicationBootstrap.php
@@ -605,7 +605,7 @@ abstract class ApplicationBootstrap
ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
set_error_handler(function ($errno, $errstr, $errfile, $errline) {
- if (error_reporting() === 0) {
+ if (! (error_reporting() & $errno)) {
// Error was suppressed with the @-operator
return false; // Continue with the normal error handler
}
diff --git a/library/Icinga/Test/BaseTestCase.php b/library/Icinga/Test/BaseTestCase.php
index 286ec3059..aea79210f 100644
--- a/library/Icinga/Test/BaseTestCase.php
+++ b/library/Icinga/Test/BaseTestCase.php
@@ -23,7 +23,6 @@ namespace Icinga\Test {
use Exception;
use RuntimeException;
use Mockery;
- use PHPUnit_Framework_TestCase;
use Icinga\Application\Icinga;
use Icinga\Data\ConfigObject;
use Icinga\Data\ResourceFactory;
@@ -32,7 +31,7 @@ namespace Icinga\Test {
/**
* Class BaseTestCase
*/
- abstract class BaseTestCase extends PHPUnit_Framework_TestCase implements DbTest
+ abstract class BaseTestCase extends Mockery\Adapter\Phpunit\MockeryTestCase implements DbTest
{
/**
* Path to application/
@@ -138,7 +137,7 @@ namespace Icinga\Test {
/**
* Setup MVC bootstrapping and ensure that the Icinga-Mock gets reinitialized
*/
- public function setUp()
+ public function setUp(): void
{
parent::setUp();
$this->setupIcingaMock();
@@ -334,6 +333,23 @@ namespace Icinga\Test {
$adapter->exec('DROP TABLE ' . $table . ';');
}
}
+
+ /**
+ * Add assertMatchesRegularExpression() method for phpunit >= 8.0 < 9.0 for compatibility with PHP 7.2.
+ *
+ * @TODO Remove once PHP 7.2 support is not needed for testing anymore.
+ */
+ public static function assertMatchesRegularExpression(
+ string $pattern,
+ string $string,
+ string $message = ''
+ ): void {
+ if (method_exists(parent::class, 'assertMatchesRegularExpression')) {
+ parent::assertMatchesRegularExpression($pattern, $string, $message);
+ } else {
+ static::assertRegExp($pattern, $string, $message);
+ }
+ }
}
BaseTestCase::setupTimezone();
diff --git a/modules/monitoring/library/Monitoring/Backend/Ido/Query/HostdowntimestarthistoryQuery.php b/modules/monitoring/library/Monitoring/Backend/Ido/Query/HostdowntimestarthistoryQuery.php
index 831df6c81..5d0517884 100644
--- a/modules/monitoring/library/Monitoring/Backend/Ido/Query/HostdowntimestarthistoryQuery.php
+++ b/modules/monitoring/library/Monitoring/Backend/Ido/Query/HostdowntimestarthistoryQuery.php
@@ -96,7 +96,7 @@ class HostdowntimestarthistoryQuery extends IdoQuery
array()
);
- if (@func_get_arg(0) === false) {
+ if (func_num_args() === 0 || func_get_arg(0) === false) {
$this->select->where(
"hdh.actual_start_time > '1970-01-02 00:00:00'"
);
diff --git a/modules/monitoring/library/Monitoring/Backend/Ido/Query/ServicedowntimestarthistoryQuery.php b/modules/monitoring/library/Monitoring/Backend/Ido/Query/ServicedowntimestarthistoryQuery.php
index 6ed081ef7..932d854a0 100644
--- a/modules/monitoring/library/Monitoring/Backend/Ido/Query/ServicedowntimestarthistoryQuery.php
+++ b/modules/monitoring/library/Monitoring/Backend/Ido/Query/ServicedowntimestarthistoryQuery.php
@@ -97,7 +97,7 @@ class ServicedowntimestarthistoryQuery extends IdoQuery
array()
);
- if (@func_get_arg(0) === false) {
+ if (func_num_args() === 0 || func_get_arg(0) === false) {
$this->select->where(
"sdh.actual_start_time > '1970-01-02 00:00:00'"
);
diff --git a/modules/monitoring/test/php/application/views/helpers/PluginOutputTest.php b/modules/monitoring/test/php/application/views/helpers/PluginOutputTest.php
index a07614079..94efee939 100644
--- a/modules/monitoring/test/php/application/views/helpers/PluginOutputTest.php
+++ b/modules/monitoring/test/php/application/views/helpers/PluginOutputTest.php
@@ -20,7 +20,7 @@ class PluginOutputTest extends BaseTestCase
protected static $statusTags = array('OK', 'WARNING', 'CRITICAL', 'UNKNOWN', 'UP', 'DOWN');
- public function setUp()
+ public function setUp(): void
{
parent::setUp();
@@ -45,7 +45,7 @@ class PluginOutputTest extends BaseTestCase
$html,
preg_quote(self::SUFFIX, '~')
);
- $this->assertRegExp($expect, $actual, 'Output must match example regexp');
+ $this->assertMatchesRegularExpression($expect, $actual, 'Output must match example regexp');
} else {
$expect = $prefix . $html . self::SUFFIX;
$this->assertEquals($expect, $actual, 'Output must match example');
diff --git a/modules/monitoring/test/php/library/Monitoring/Plugin/PerfdataTest.php b/modules/monitoring/test/php/library/Monitoring/Plugin/PerfdataTest.php
index dbccb5c80..ab6ffa938 100644
--- a/modules/monitoring/test/php/library/Monitoring/Plugin/PerfdataTest.php
+++ b/modules/monitoring/test/php/library/Monitoring/Plugin/PerfdataTest.php
@@ -8,19 +8,17 @@ use Icinga\Module\Monitoring\Plugin\Perfdata;
class PerfdataTest extends BaseTestCase
{
- /**
- * @expectedException \InvalidArgumentException
- */
public function testWhetherFromStringThrowsExceptionWhenGivenAnEmptyString()
{
+ $this->expectException(\InvalidArgumentException::class);
+
Perfdata::fromString('');
}
- /**
- * @expectedException \InvalidArgumentException
- */
public function testWhetherFromStringThrowsExceptionWhenGivenAnInvalidString()
{
+ $this->expectException(\InvalidArgumentException::class);
+
Perfdata::fromString('test');
}
diff --git a/modules/monitoring/test/php/library/Monitoring/Web/Rest/RestRequestTest.php b/modules/monitoring/test/php/library/Monitoring/Web/Rest/RestRequestTest.php
index e422ec076..6e77ffcdd 100644
--- a/modules/monitoring/test/php/library/Monitoring/Web/Rest/RestRequestTest.php
+++ b/modules/monitoring/test/php/library/Monitoring/Web/Rest/RestRequestTest.php
@@ -16,11 +16,10 @@ class MockedRestRequest extends RestRequest
class RestRequestTest extends BaseTestCase
{
- /**
- * @expectedException \Icinga\Exception\Json\JsonDecodeException
- */
public function testInvalidServerResponseHandling()
{
+ $this->expectException(\Icinga\Exception\Json\JsonDecodeException::class);
+
MockedRestRequest::get('http://localhost')->send();
}
}
diff --git a/modules/monitoring/test/php/regression/Bug7043Test.php b/modules/monitoring/test/php/regression/Bug7043Test.php
index 07cc02428..ba9291be6 100644
--- a/modules/monitoring/test/php/regression/Bug7043Test.php
+++ b/modules/monitoring/test/php/regression/Bug7043Test.php
@@ -24,7 +24,7 @@ class ConfigWithSetModuleConfig extends Config
class Bug7043Test extends BaseTestCase
{
- public function tearDown()
+ public function tearDown(): void
{
parent::tearDown();
Mockery::close(); // Necessary because some tests run in a separate process
diff --git a/modules/setup/application/views/scripts/index/index.phtml b/modules/setup/application/views/scripts/index/index.phtml
index b5fb40798..3a6e17965 100644
--- a/modules/setup/application/views/scripts/index/index.phtml
+++ b/modules/setup/application/views/scripts/index/index.phtml
@@ -9,10 +9,10 @@ $currentPos = array_search($wizard->getCurrentPage(), $pages, true);
list($configPagesLeft, $configPagesRight) = array_chunk($configPages, count($configPages) / 2, true);
$visitedPages = array_keys($wizard->getPageData());
-$maxProgress = @max(array_keys(array_filter(
+$maxProgress = max(array_merge([0], array_keys(array_filter(
$pages,
function ($page) use ($visitedPages) { return in_array($page->getName(), $visitedPages); }
-)));
+))));
?>
diff --git a/test/php/application/views/helpers/DateFormatTestBroken.php b/test/php/application/views/helpers/DateFormatTestBroken.php
index 188c62988..6fb768b3c 100644
--- a/test/php/application/views/helpers/DateFormatTestBroken.php
+++ b/test/php/application/views/helpers/DateFormatTestBroken.php
@@ -12,7 +12,7 @@ require_once BaseTestCase::$appDir . '/views/helpers/DateFormat.php';
class DateFormatTest extends BaseTestCase
{
- public function tearDown()
+ public function tearDown(): void
{
DateTimeFactory::setConfig(array('timezone' => date_default_timezone_get()));
}
diff --git a/test/php/bootstrap.php b/test/php/bootstrap.php
index 75912674c..6f7871172 100644
--- a/test/php/bootstrap.php
+++ b/test/php/bootstrap.php
@@ -36,10 +36,6 @@ if (file_exists($vendorAutoload)) {
require_once($icingaLibPath . '/Test/ClassLoader.php');
-if (! class_exists('PHPUnit_Framework_TestCase')) {
- require_once __DIR__ . '/phpunit-compat.php';
-}
-
$loader = new Icinga\Test\ClassLoader();
$loader->registerNamespace('Tests', $testLibraryPath);
$loader->registerNamespace('Icinga', $icingaLibPath);
diff --git a/test/php/library/Icinga/Application/ClassLoaderTest.php b/test/php/library/Icinga/Application/ClassLoaderTest.php
index 542286912..7b88c6e74 100644
--- a/test/php/library/Icinga/Application/ClassLoaderTest.php
+++ b/test/php/library/Icinga/Application/ClassLoaderTest.php
@@ -26,7 +26,7 @@ class TestStruct
EOD;
- public function setUp()
+ public function setUp(): void
{
parent::setUp();
$tempDir = sys_get_temp_dir();
@@ -35,7 +35,7 @@ EOD;
file_put_contents($this->baseDir. self::$classFile, self::$classContent);
}
- public function tearDown()
+ public function tearDown(): void
{
parent::tearDown();
system('rm -rf '. $this->baseDir);
diff --git a/test/php/library/Icinga/Application/ConfigTest.php b/test/php/library/Icinga/Application/ConfigTest.php
index e47173679..5fb47639a 100644
--- a/test/php/library/Icinga/Application/ConfigTest.php
+++ b/test/php/library/Icinga/Application/ConfigTest.php
@@ -11,7 +11,7 @@ class ConfigTest extends BaseTestCase
/**
* Set up config dir
*/
- public function setUp()
+ public function setUp(): void
{
parent::setUp();
$this->oldConfigDir = Config::$configDir;
@@ -21,7 +21,7 @@ class ConfigTest extends BaseTestCase
/**
* Reset config dir
*/
- public function tearDown()
+ public function tearDown(): void
{
parent::tearDown();
Config::$configDir = $this->oldConfigDir;
@@ -185,11 +185,10 @@ class ConfigTest extends BaseTestCase
);
}
- /**
- * @expectedException UnexpectedValueException
- */
public function testWhetherAnExceptionIsThrownWhenTryingToAccessASectionPropertyOnANonSection()
{
+ $this->expectException(\UnexpectedValueException::class);
+
$config = Config::fromArray(array('a' => 'b'));
$config->get('a', 'b');
}
@@ -234,11 +233,10 @@ class ConfigTest extends BaseTestCase
);
}
- /**
- * @expectedException Icinga\Exception\NotReadableError
- */
public function testWhetherFromIniThrowsAnExceptionOnInsufficientPermission()
{
+ $this->expectException(\Icinga\Exception\NotReadableError::class);
+
Config::fromIni('/etc/shadow');
}
diff --git a/test/php/library/Icinga/Application/Hook/AuditHookTest.php b/test/php/library/Icinga/Application/Hook/AuditHookTest.php
index 8f0a12507..14ca43792 100644
--- a/test/php/library/Icinga/Application/Hook/AuditHookTest.php
+++ b/test/php/library/Icinga/Application/Hook/AuditHookTest.php
@@ -32,27 +32,24 @@ class AuditHookTest extends BaseTestCase
$this->assertEquals('foo', (new TestAuditHook())->formatMessage('{{te{.}st}}', ['te{' => ['}st' => 'foo']]));
}
- /**
- * @expectedException \InvalidArgumentException
- */
public function testFormatMessageComplainsAboutUnresolvedParameters()
{
+ $this->expectException(\InvalidArgumentException::class);
+
(new TestAuditHook())->formatMessage('{{missing}}', []);
}
- /**
- * @expectedException \InvalidArgumentException
- */
public function testFormatMessageComplainsAboutNonScalarParameters()
{
+ $this->expectException(\InvalidArgumentException::class);
+
(new TestAuditHook())->formatMessage('{{test}}', ['test' => ['foo' => 'bar']]);
}
- /**
- * @expectedException \InvalidArgumentException
- */
public function testFormatMessageComplainsAboutNonArrayParameters()
{
+ $this->expectException(\InvalidArgumentException::class);
+
(new TestAuditHook())->formatMessage('{{test.foo}}', ['test' => 'foo']);
}
}
diff --git a/test/php/library/Icinga/Data/ConfigObjectTest.php b/test/php/library/Icinga/Data/ConfigObjectTest.php
index 9b87019bf..f6b577b03 100644
--- a/test/php/library/Icinga/Data/ConfigObjectTest.php
+++ b/test/php/library/Icinga/Data/ConfigObjectTest.php
@@ -115,11 +115,10 @@ class ConfigObjectTest extends BaseTestCase
);
}
- /**
- * @expectedException \Icinga\Exception\ProgrammingError
- */
public function testWhetherItIsNotPossibleToAppendProperties()
{
+ $this->expectException(\Icinga\Exception\ProgrammingError::class);
+
$config = new ConfigObject();
$config[] = 'test';
}
diff --git a/test/php/library/Icinga/Data/DataArray/ArrayDatasourceTest.php b/test/php/library/Icinga/Data/DataArray/ArrayDatasourceTest.php
index 5ad2b1b09..7e715cac2 100644
--- a/test/php/library/Icinga/Data/DataArray/ArrayDatasourceTest.php
+++ b/test/php/library/Icinga/Data/DataArray/ArrayDatasourceTest.php
@@ -10,7 +10,7 @@ class ArrayDatasourceTest extends BaseTestCase
{
private $sampleData;
- public function setUp()
+ public function setUp(): void
{
parent::setUp();
$this->sampleData = array(
diff --git a/test/php/library/Icinga/Data/Filter/FilterTest.php b/test/php/library/Icinga/Data/Filter/FilterTest.php
index 97133a216..9bbff01a3 100644
--- a/test/php/library/Icinga/Data/Filter/FilterTest.php
+++ b/test/php/library/Icinga/Data/Filter/FilterTest.php
@@ -61,7 +61,7 @@ class FilterTest extends BaseTestCase
private $sampleData;
- public function setUp()
+ public function setUp(): void
{
parent::setUp();
$this->sampleData = array(
diff --git a/test/php/library/Icinga/File/Ini/IniParserTest.php b/test/php/library/Icinga/File/Ini/IniParserTest.php
index 5a1d7df90..b945cc44e 100644
--- a/test/php/library/Icinga/File/Ini/IniParserTest.php
+++ b/test/php/library/Icinga/File/Ini/IniParserTest.php
@@ -12,13 +12,13 @@ class IniParserTest extends BaseTestCase
{
protected $tempFile;
- public function setUp()
+ public function setUp(): void
{
parent::setUp();
$this->tempFile = tempnam(sys_get_temp_dir(), 'icinga-ini-parser-test');
}
- public function tearDown()
+ public function tearDown(): void
{
parent::tearDown();
unlink($this->tempFile);
diff --git a/test/php/library/Icinga/File/Ini/IniWriterTest.php b/test/php/library/Icinga/File/Ini/IniWriterTest.php
index c3fb6df1f..41e1f13e6 100644
--- a/test/php/library/Icinga/File/Ini/IniWriterTest.php
+++ b/test/php/library/Icinga/File/Ini/IniWriterTest.php
@@ -12,7 +12,7 @@ class IniWriterTest extends BaseTestCase
protected $tempFile;
protected $tempFile2;
- public function setUp()
+ public function setUp(): void
{
parent::setUp();
@@ -20,7 +20,7 @@ class IniWriterTest extends BaseTestCase
$this->tempFile2 = tempnam(sys_get_temp_dir(), 'icinga-ini-writer-test-2');
}
- public function tearDown()
+ public function tearDown(): void
{
parent::tearDown();
@@ -275,7 +275,7 @@ inkey' => 'blarg'
);
$rendered = $writer->render();
- $this->assertRegExp(
+ $this->assertMatchesRegularExpression(
'~linebreak\\\\nin line~',
$rendered,
'newlines in values are not escaped'
@@ -322,11 +322,10 @@ EOD;
);
}
- /**
- * @expectedException \Icinga\Exception\ConfigurationError
- */
public function testWhetherBracketsAreIllegalInSectionNames()
{
+ $this->expectException(\Icinga\Exception\ConfigurationError::class);
+
$config = Config::fromArray(['section [brackets]' => []]);
(new IniWriter($config, $this->tempFile))->write();
}
@@ -419,7 +418,7 @@ EOD;
$config->setSection('garbage', $section);
$iniWriter = new IniWriter($config, '/dev/null');
- $this->assertNotContains(
+ $this->assertStringNotContainsString(
'foobar',
$iniWriter->render(),
'IniWriter persists section keys with null values'
@@ -434,7 +433,7 @@ EOD;
$config->setSection('garbage', $section);
$iniWriter = new IniWriter($config, '/dev/null');
- $this->assertContains(
+ $this->assertStringContainsString(
'foobar',
$iniWriter->render(),
'IniWriter doesn\'t persist section keys with empty values'
@@ -451,7 +450,7 @@ EOD;
$section = $config->getSection('garbage');
$section->foobar = null;
$iniWriter = new IniWriter($config, $filename);
- $this->assertNotContains(
+ $this->assertStringNotContainsString(
'foobar',
$iniWriter->render(),
'IniWriter doesn\'t remove section keys with null values'
diff --git a/test/php/library/Icinga/File/Storage/LocalFileStorageTest.php b/test/php/library/Icinga/File/Storage/LocalFileStorageTest.php
index 5f104a50c..7ba0efd2f 100644
--- a/test/php/library/Icinga/File/Storage/LocalFileStorageTest.php
+++ b/test/php/library/Icinga/File/Storage/LocalFileStorageTest.php
@@ -54,11 +54,10 @@ class LocalFileStorageTest extends BaseTestCase
static::assertSame(array('foobar'), array_values(iterator_to_array($lfs->getIterator())));
}
- /**
- * @expectedException \Icinga\Exception\NotReadableError
- */
public function testGetIteratorThrowsNotReadableError()
{
+ $this->expectException(\Icinga\Exception\NotReadableError::class);
+
$lfs = new LocalFileStorage('/notreadabledirectory');
$lfs->getIterator();
}
@@ -79,21 +78,19 @@ class LocalFileStorageTest extends BaseTestCase
static::assertSame('Hello world!', $lfs->read('foo/bar'));
}
- /**
- * @expectedException \Icinga\Exception\AlreadyExistsException
- */
public function testCreateThrowsAlreadyExistsException()
{
+ $this->expectException(\Icinga\Exception\AlreadyExistsException::class);
+
$lfs = new TemporaryLocalFileStorage();
$lfs->create('foobar', 'Hello world!');
$lfs->create('foobar', 'Hello world!');
}
- /**
- * @expectedException \Icinga\Exception\NotWritableError
- */
public function testCreateThrowsNotWritableError()
{
+ $this->expectException(\Icinga\Exception\NotWritableError::class);
+
$lfs = new LocalFileStorage('/notwritabledirectory');
$lfs->create('foobar', 'Hello world!');
}
@@ -105,20 +102,18 @@ class LocalFileStorageTest extends BaseTestCase
static::assertSame('Hello world!', $lfs->read('foobar'));
}
- /**
- * @expectedException \Icinga\Exception\NotFoundError
- */
public function testReadThrowsNotFoundError()
{
+ $this->expectException(\Icinga\Exception\NotFoundError::class);
+
$lfs = new TemporaryLocalFileStorage();
$lfs->read('foobar');
}
- /**
- * @expectedException \Icinga\Exception\NotReadableError
- */
public function testReadThrowsNotReadableError()
{
+ $this->expectException(\Icinga\Exception\NotReadableError::class);
+
$lfs = new TemporaryLocalFileStorage();
$lfs->create('foobar', 'Hello world!');
chmod($lfs->resolvePath('foobar'), 0);
@@ -133,20 +128,18 @@ class LocalFileStorageTest extends BaseTestCase
static::assertSame('Hello universe!', $lfs->read('foobar'));
}
- /**
- * @expectedException \Icinga\Exception\NotFoundError
- */
public function testUpdateThrowsNotFoundError()
{
+ $this->expectException(\Icinga\Exception\NotFoundError::class);
+
$lfs = new TemporaryLocalFileStorage();
$lfs->update('foobar', 'Hello universe!');
}
- /**
- * @expectedException \Icinga\Exception\NotWritableError
- */
public function testUpdateThrowsNotWritableError()
{
+ $this->expectException(\Icinga\Exception\NotWritableError::class);
+
$lfs = new TemporaryLocalFileStorage();
$lfs->create('foobar', 'Hello world!');
chmod($lfs->resolvePath('foobar'), 0);
@@ -161,20 +154,18 @@ class LocalFileStorageTest extends BaseTestCase
static::assertFalse($lfs->has('foobar'));
}
- /**
- * @expectedException \Icinga\Exception\NotFoundError
- */
public function testDeleteThrowsNotFoundError()
{
+ $this->expectException(\Icinga\Exception\NotFoundError::class);
+
$lfs = new TemporaryLocalFileStorage();
$lfs->delete('foobar');
}
- /**
- * @expectedException \Icinga\Exception\NotWritableError
- */
public function testDeleteThrowsNotWritableError()
{
+ $this->expectException(\Icinga\Exception\NotWritableError::class);
+
$lfs = new TemporaryLocalFileStorage();
$lfs->create('foobar', 'Hello world!');
@@ -204,20 +195,18 @@ class LocalFileStorageTest extends BaseTestCase
$lfs->resolvePath('./notRelevant/../foobar', true);
}
- /**
- * @expectedException \Icinga\Exception\NotFoundError
- */
public function testResolvePathThrowsNotFoundError()
{
+ $this->expectException(\Icinga\Exception\NotFoundError::class);
+
$lfs = new TemporaryLocalFileStorage();
$lfs->resolvePath('foobar', true);
}
- /**
- * @expectedException \InvalidArgumentException
- */
public function testResolvePathThrowsInvalidArgumentException()
{
+ $this->expectException(\InvalidArgumentException::class);
+
$lfs = new LocalFileStorage('/notreadabledirectory');
$lfs->resolvePath('../foobar');
}
diff --git a/test/php/library/Icinga/Logger/Writer/StreamWriterTest.php b/test/php/library/Icinga/Logger/Writer/StreamWriterTest.php
index 38ff4dc0d..dfd356248 100644
--- a/test/php/library/Icinga/Logger/Writer/StreamWriterTest.php
+++ b/test/php/library/Icinga/Logger/Writer/StreamWriterTest.php
@@ -10,14 +10,14 @@ use Icinga\Test\BaseTestCase;
class StreamWriterTest extends BaseTestCase
{
- public function setUp()
+ public function setUp(): void
{
parent::setUp();
$this->target = tempnam(sys_get_temp_dir(), 'log');
}
- public function tearDown()
+ public function tearDown(): void
{
parent::tearDown();
@@ -38,6 +38,6 @@ class StreamWriterTest extends BaseTestCase
$writer = new FileWriter(new ConfigObject(array('file' => $this->target)));
$writer->log(Logger::ERROR, 'This is a test error');
$log = file_get_contents($this->target);
- $this->assertContains('This is a test error', $log, 'StreamWriter does not write log messages');
+ $this->assertStringContainsString('This is a test error', $log, 'StreamWriter does not write log messages');
}
}
diff --git a/test/php/library/Icinga/Test/BaseTestCaseTest.php b/test/php/library/Icinga/Test/BaseTestCaseTest.php
index 8611dbe62..5c06ad966 100644
--- a/test/php/library/Icinga/Test/BaseTestCaseTest.php
+++ b/test/php/library/Icinga/Test/BaseTestCaseTest.php
@@ -10,7 +10,7 @@ class BaseTestCaseTest extends BaseTestCase
{
protected $emptySqlDumpFile;
- public function tearDown()
+ public function tearDown(): void
{
parent::tearDown();
@@ -148,19 +148,17 @@ class BaseTestCaseTest extends BaseTestCase
$this->assertCount(0, $tables);
}
- /**
- * @expectedException RuntimeException
- */
public function testWhetherLoadSqlThrowsErrorWhenFileMissing()
{
+ $this->expectException(\RuntimeException::class);
+
$this->loadSql(Mockery::mock('Icinga\Data\Db\DbConnection'), 'not_existing');
}
- /**
- * @expectedException RuntimeException
- */
public function testWhetherLoadSqlThrowsErrorWhenFileEmpty()
{
+ $this->expectException(\RuntimeException::class);
+
$this->emptySqlDumpFile = tempnam(sys_get_temp_dir(), 'icinga2-web-db-test-empty');
$this->loadSql(Mockery::mock('Icinga\Data\Db\DbConnection'), $this->emptySqlDumpFile);
}
diff --git a/test/php/library/Icinga/User/Store/DbStoreTest.php b/test/php/library/Icinga/User/Store/DbStoreTest.php
index 54855cf60..1f56f93cb 100644
--- a/test/php/library/Icinga/User/Store/DbStoreTest.php
+++ b/test/php/library/Icinga/User/Store/DbStoreTest.php
@@ -83,11 +83,10 @@ class DbStoreTest extends BaseTestCase
$this->assertEmpty($dbMock->deletions, 'DbStore::save deletes *new* preferences');
}
- /**
- * @expectedException \Icinga\Exception\NotWritableError
- */
public function testWhetherPreferenceInsertionThrowsNotWritableError()
{
+ $this->expectException(\Icinga\Exception\NotWritableError::class);
+
$store = $this->getStore(new FaultyDatabaseMock());
$store->save(
Mockery::mock(
@@ -114,11 +113,10 @@ class DbStoreTest extends BaseTestCase
$this->assertEmpty($dbMock->deletions, 'DbStore::save inserts *existing* preferneces');
}
- /**
- * @expectedException \Icinga\Exception\NotWritableError
- */
public function testWhetherPreferenceUpdatesThrowNotWritableError()
{
+ $this->expectException(\Icinga\Exception\NotWritableError::class);
+
$store = $this->getStore(new FaultyDatabaseMock());
$store->setPreferences(array('testsection' => array('key' => 'value')));
$store->save(
@@ -146,11 +144,10 @@ class DbStoreTest extends BaseTestCase
$this->assertEmpty($dbMock->updates, 'DbStore::save updates *removed* preferences');
}
- /**
- * @expectedException \Icinga\Exception\NotWritableError
- */
public function testWhetherPreferenceDeletionThrowsNotWritableError()
{
+ $this->expectException(\Icinga\Exception\NotWritableError::class);
+
$store = $this->getStore(new FaultyDatabaseMock());
$store->setPreferences(array('testsection' => array('key' => 'value')));
$store->save(
diff --git a/test/php/library/Icinga/UserTest.php b/test/php/library/Icinga/UserTest.php
index 7798aee50..a5f7ebdb1 100644
--- a/test/php/library/Icinga/UserTest.php
+++ b/test/php/library/Icinga/UserTest.php
@@ -52,11 +52,10 @@ class UserTest extends BaseTestCase
);
}
- /**
- * @expectedException \InvalidArgumentException
- */
public function testWhetherInvalidEmailsCannotBeSet()
{
+ $this->expectException(\InvalidArgumentException::class);
+
$user = new User('unittest');
$user->setEmail('mySampleEmail at someDomain dot org');
}
diff --git a/test/php/library/Icinga/Util/FileTest.php b/test/php/library/Icinga/Util/FileTest.php
index 68074a5d3..d05be2bec 100644
--- a/test/php/library/Icinga/Util/FileTest.php
+++ b/test/php/library/Icinga/Util/FileTest.php
@@ -8,20 +8,18 @@ use Icinga\Test\BaseTestCase;
class FileTest extends BaseTestCase
{
- /**
- * @expectedException \Icinga\Exception\NotWritableError
- */
public function testWhetherWritingToNonWritableFilesThrowsAnException()
{
+ $this->expectException(\Icinga\Exception\NotWritableError::class);
+
$file = new File('/dev/null');
$file->fwrite('test');
}
- /**
- * @expectedException \Icinga\Exception\NotWritableError
- */
public function testWhetherTruncatingNonWritableFilesThrowsAnException()
{
+ $this->expectException(\Icinga\Exception\NotWritableError::class);
+
$file = new File('/dev/null');
$file->ftruncate(0);
}
diff --git a/test/php/library/Icinga/Util/TranslatorTest.php b/test/php/library/Icinga/Util/TranslatorTest.php
index d61ea4a9d..1ebb7b414 100644
--- a/test/php/library/Icinga/Util/TranslatorTest.php
+++ b/test/php/library/Icinga/Util/TranslatorTest.php
@@ -17,7 +17,7 @@ class TranslatorWithHardcodedLocaleCodes extends Translator
class TranslatorTest extends BaseTestCase
{
- public function setUp()
+ public function setUp(): void
{
parent::setUp();
Translator::registerDomain('icingatest', BaseTestCase::$testDir . '/res/locale');
@@ -48,11 +48,10 @@ class TranslatorTest extends BaseTestCase
);
}
- /**
- * @expectedException Icinga\Exception\IcingaException
- */
public function testWhetherSetupLocaleThrowsAnExceptionWhenGivenAnInvalidLocale()
{
+ $this->expectException(\Icinga\Exception\IcingaException::class);
+
Translator::setupLocale('foobar');
}
diff --git a/test/php/library/Icinga/Web/FormTest.php b/test/php/library/Icinga/Web/FormTest.php
index 3d6ac7d1e..b43efe452 100644
--- a/test/php/library/Icinga/Web/FormTest.php
+++ b/test/php/library/Icinga/Web/FormTest.php
@@ -26,7 +26,7 @@ class SuccessfulForm extends Form
class FormTest extends BaseTestCase
{
- public function tearDown()
+ public function tearDown(): void
{
Mockery::close(); // Necessary as some tests are running isolated
}
@@ -251,11 +251,10 @@ class FormTest extends BaseTestCase
);
}
- /**
- * @expectedException \Icinga\Exception\ProgrammingError
- */
public function testWhetherTheOnSuccessOptionMustBeCallable()
{
+ $this->expectException(\Icinga\Exception\ProgrammingError::class);
+
new Form(array('onSuccess' => '_invalid_'));
}
diff --git a/test/php/library/Icinga/Web/HookTest.php b/test/php/library/Icinga/Web/HookTest.php
index fdee11636..111b6be37 100644
--- a/test/php/library/Icinga/Web/HookTest.php
+++ b/test/php/library/Icinga/Web/HookTest.php
@@ -41,14 +41,14 @@ class HookTest extends BaseTestCase
protected $failingHook = '\\Tests\\Icinga\\Web\\FailingHook';
protected $testBaseClass = '\\Icinga\\Web\\Hook\\TestHook';
- public function setUp()
+ public function setUp(): void
{
$this->markTestSkipped();
parent::setUp();
Hook::clean();
}
- public function tearDown()
+ public function tearDown(): void
{
parent::tearDown();
Hook::clean();
diff --git a/test/php/library/Icinga/Web/Paginator/ScrollingStyle/SlidingWithBorderTest.php b/test/php/library/Icinga/Web/Paginator/ScrollingStyle/SlidingWithBorderTest.php
index 93fc2b171..96d2ec65c 100644
--- a/test/php/library/Icinga/Web/Paginator/ScrollingStyle/SlidingWithBorderTest.php
+++ b/test/php/library/Icinga/Web/Paginator/ScrollingStyle/SlidingWithBorderTest.php
@@ -17,7 +17,7 @@ class SlidingwithborderTest extends BaseTestCase
$paginator = new Zend_Paginator($this->getPaginatorAdapter());
$pages = $scrollingStyle->getPages($paginator);
- $this->assertInternalType('array', $pages);
+ $this->assertIsArray($pages);
$this->assertCount(10, $pages);
$this->assertEquals('...', $pages[8]);
}
@@ -29,7 +29,7 @@ class SlidingwithborderTest extends BaseTestCase
$paginator->setCurrentPageNumber(9);
$pages = $scrollingStyle->getPages($paginator);
- $this->assertInternalType('array', $pages);
+ $this->assertIsArray($pages);
$this->assertCount(10, $pages);
$this->assertEquals('...', $pages[3]);
$this->assertEquals('...', $pages[12]);
diff --git a/test/php/library/Icinga/Web/Session/SessionNamespaceTest.php b/test/php/library/Icinga/Web/Session/SessionNamespaceTest.php
index 99f08317d..7f90b2cd6 100644
--- a/test/php/library/Icinga/Web/Session/SessionNamespaceTest.php
+++ b/test/php/library/Icinga/Web/Session/SessionNamespaceTest.php
@@ -62,11 +62,10 @@ class SessionNamespaceTest extends BaseTestCase
$this->assertNull($ns->get('key2'));
}
- /**
- * @expectedException Icinga\Exception\IcingaException
- */
public function testFailingPropertyAccess()
{
+ $this->expectException(\Icinga\Exception\IcingaException::class);
+
$ns = new SessionNamespace();
$ns->missing;
}
diff --git a/test/php/library/Icinga/Web/UrlTest.php b/test/php/library/Icinga/Web/UrlTest.php
index 31c790c99..cbe8b6bf8 100644
--- a/test/php/library/Icinga/Web/UrlTest.php
+++ b/test/php/library/Icinga/Web/UrlTest.php
@@ -130,11 +130,10 @@ class UrlTest extends BaseTestCase
);
}
- /**
- * @expectedException Icinga\Exception\ProgrammingError
- */
public function testWhetherFromPathProperlyHandlesInvalidUrls()
{
+ $this->expectException(\Icinga\Exception\ProgrammingError::class);
+
Url::fromPath(null);
}
diff --git a/test/php/library/Icinga/Web/Widget/DashboardTest.php b/test/php/library/Icinga/Web/Widget/DashboardTest.php
index 260e5b494..3749bc8ef 100644
--- a/test/php/library/Icinga/Web/Widget/DashboardTest.php
+++ b/test/php/library/Icinga/Web/Widget/DashboardTest.php
@@ -39,7 +39,7 @@ class DashboardWithPredefinableActiveName extends Dashboard
class DashboardTest extends BaseTestCase
{
- public function tearDown()
+ public function tearDown(): void
{
parent::tearDown();
Mockery::close(); // Necessary because some tests run in a separate process
@@ -109,11 +109,12 @@ class DashboardTest extends BaseTestCase
}
/**
- * @expectedException \Icinga\Exception\ProgrammingError
* @depends testWhetherCreatePaneCreatesAPane
*/
public function testWhetherGetPaneThrowsAnExceptionOnNotExistentPaneName()
{
+ $this->expectException(\Icinga\Exception\ProgrammingError::class);
+
$dashboard = new Dashboard();
$dashboard->createPane('test1');
@@ -267,11 +268,10 @@ class DashboardTest extends BaseTestCase
);
}
- /**
- * @expectedException \Icinga\Exception\ConfigurationError
- */
public function testWhetherDetermineActivePaneThrowsAnExceptionIfCouldNotDetermine()
{
+ $this->expectException(\Icinga\Exception\ConfigurationError::class);
+
$dashboard = new Dashboard();
$dashboard->determineActivePane();
}
@@ -279,11 +279,12 @@ class DashboardTest extends BaseTestCase
/**
* @runInSeparateProcess
* @preserveGlobalState disabled
- * @expectedException \Icinga\Exception\ProgrammingError
* @depends testWhetherCreatePaneCreatesAPane
*/
public function testWhetherDetermineActivePaneThrowsAnExceptionIfCouldNotDetermineInvalidPane()
{
+ $this->expectException(\Icinga\Exception\ProgrammingError::class);
+
$dashboard = new DashboardWithPredefinableActiveName();
$dashboard->createPane('test1');
diff --git a/test/php/library/Icinga/Web/Widget/SearchDashboardTest.php b/test/php/library/Icinga/Web/Widget/SearchDashboardTest.php
index 7370338e5..916ab7914 100644
--- a/test/php/library/Icinga/Web/Widget/SearchDashboardTest.php
+++ b/test/php/library/Icinga/Web/Widget/SearchDashboardTest.php
@@ -11,7 +11,7 @@ use Icinga\Web\Widget\SearchDashboard;
class SearchDashboardTest extends BaseTestCase
{
- public function setUp()
+ public function setUp(): void
{
$moduleMock = Mockery::mock('Icinga\Application\Modules\Module');
$searchUrl = (object) array(
@@ -32,11 +32,10 @@ class SearchDashboardTest extends BaseTestCase
$bootstrapMock->shouldReceive('getModuleManager')->andReturn($moduleManagerMock);
}
- /**
- * @expectedException Zend_Controller_Action_Exception
- */
public function testWhetherRenderThrowsAnExceptionWhenHasNoDashlets()
{
+ $this->expectException(\Zend_Controller_Action_Exception::class);
+
$user = new User('test');
$user->setPermissions(array('*' => '*'));
$dashboard = new SearchDashboard();
diff --git a/test/php/phpunit-compat.php b/test/php/phpunit-compat.php
deleted file mode 100644
index 88287906d..000000000
--- a/test/php/phpunit-compat.php
+++ /dev/null
@@ -1,15 +0,0 @@
-assertContains('Bug4102Test', $class);
- }
-
- /**
- * Test namespace to match definition
- */
- public function testNamespace()
- {
- $namespace = __NAMESPACE__;
- $this->assertEquals('Tests\Icinga\Regression', $namespace);
- }
-
- /**
- * Test phpunit inheritance
- */
- public function testInheritance()
- {
- $this->assertInstanceOf('\PHPUnit_Framework_TestCase', $this);
- }
-}