mirror of
https://github.com/Combodo/iTop.git
synced 2026-04-22 01:58:47 +02:00
N°6274 Fix PHP Notices not caught in ItopDataTestCase PHPUnit
This was caused by the set_error_handler() done in DeprecatedCallsLog during startup Now we are : * not registering the handler if a PHPUnit test is running (based on a constant set in ItopTestCase::setUp) * on registration only do it for the required notices
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
use Combodo\iTop\Test\UnitTest\ItopTestCase;
|
||||
|
||||
|
||||
/**
|
||||
@@ -1071,16 +1072,19 @@ class DeprecatedCallsLog extends LogAPI
|
||||
* @uses \set_error_handler() to catch deprecated notices
|
||||
*
|
||||
* @since 3.0.0 N°3002 logs deprecated notices in called code
|
||||
* @since 3.0.4 N°6274 do not set handler when in PHPUnit context (otherwise PHP notices won't be caught)
|
||||
*/
|
||||
public static function Enable($sTargetFile = null): void
|
||||
{
|
||||
public static function Enable($sTargetFile = null): void {
|
||||
if (empty($sTargetFile)) {
|
||||
$sTargetFile = APPROOT.'log/deprecated-calls.log';
|
||||
}
|
||||
parent::Enable($sTargetFile);
|
||||
|
||||
if (static::IsLogLevelEnabledSafe(self::LEVEL_WARNING, self::ENUM_CHANNEL_PHP_LIBMETHOD)) {
|
||||
set_error_handler([static::class, 'DeprecatedNoticesErrorHandler']);
|
||||
if (
|
||||
(false === defined(ItopTestCase::ITOP_PHPUNIT_RUNNING_CONSTANT_NAME))
|
||||
&& static::IsLogLevelEnabledSafe(self::LEVEL_WARNING, self::ENUM_CHANNEL_PHP_LIBMETHOD)
|
||||
) {
|
||||
set_error_handler([static::class, 'DeprecatedNoticesErrorHandler'], E_DEPRECATED | E_USER_DEPRECATED);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -32,13 +32,20 @@ use SetupUtils;
|
||||
|
||||
define('DEBUG_UNIT_TEST', true);
|
||||
|
||||
class ItopTestCase extends TestCase
|
||||
{
|
||||
const TEST_LOG_DIR = 'test';
|
||||
class ItopTestCase extends TestCase {
|
||||
/**
|
||||
* @since 3.0.4 N°6274 Allow to test if PHPUnit is currently running. Starting with PHPUnit 9.5 we'll be able to replace it with $GLOBALS['phpunit_version']
|
||||
*/
|
||||
public const ITOP_PHPUNIT_RUNNING_CONSTANT_NAME = 'ITOP_PHPUNIT_RUNNING';
|
||||
|
||||
public const TEST_LOG_DIR = 'test';
|
||||
|
||||
protected function setUp(): void {
|
||||
if (false === defined(static::ITOP_PHPUNIT_RUNNING_CONSTANT_NAME)) {
|
||||
// setUp might be called multiple times, so protecting the define() call !
|
||||
define(static::ITOP_PHPUNIT_RUNNING_CONSTANT_NAME, true);
|
||||
}
|
||||
|
||||
/** @noinspection UsingInclusionOnceReturnValueInspection avoid errors for approot includes */
|
||||
protected function setUp(): void
|
||||
{
|
||||
$sAppRootRelPath = 'approot.inc.php';
|
||||
$sDepthSeparator = '../';
|
||||
for ($iDepth = 0; $iDepth < 8; $iDepth++) {
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
/*
|
||||
* @copyright Copyright (C) 2010-2023 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
namespace Combodo\iTop\Test\UnitTest\Core\Log;
|
||||
|
||||
|
||||
use Combodo\iTop\Test\UnitTest\ItopTestCase;
|
||||
use DeprecatedCallsLog;
|
||||
|
||||
class DeprecatedCallsLogTest extends ItopTestCase {
|
||||
public function testPhpNoticeWithoutDeprecatedCallsLog(): void {
|
||||
$this->expectNotice();
|
||||
|
||||
$aArray = [];
|
||||
if ('toto' === $aArray['tutu']) {
|
||||
//Do nothing, just raising a undefined offset warning
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The error handler set by DeprecatedCallsLog during startup was causing PHPUnit to miss PHP notices like "undefined offset"
|
||||
*
|
||||
* The error handler is now disabled when running PHPUnit
|
||||
*
|
||||
* @since 3.0.4 N°6274
|
||||
* @covers DeprecatedCallsLog::DeprecatedNoticesErrorHandler
|
||||
*/
|
||||
public function testPhpNoticeWithDeprecatedCallsLog(): void {
|
||||
$this->RequireOnceItopFile('core/log.class.inc.php');
|
||||
DeprecatedCallsLog::Enable(); // will set error handler
|
||||
$this->expectNotice();
|
||||
|
||||
$aArray = [];
|
||||
if ('toto' === $aArray['tutu']) {
|
||||
//Do nothing, just raising a undefined offset warning
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user