Getting ready for PHP8, handling changed error levels/handlers mostly

This commit is contained in:
Simon Wisselink
2020-09-11 00:36:56 +02:00
parent e12895359b
commit 818aa3c3da
14 changed files with 37 additions and 27 deletions

View File

@@ -6,7 +6,7 @@ dist: trusty
matrix: matrix:
include: include:
- php: 5.3 # Composer requires PHP 5.3.2+ to run, so we cannot test below 5.3 - php: 5.3 # Composer and PHPUnit require PHP 5.3.2+ to run, so we cannot test below 5.3
dist: precise # PHP 5.3 is supported only on Precise. dist: precise # PHP 5.3 is supported only on Precise.
- php: 5.4 - php: 5.4
- php: 5.5 - php: 5.5

View File

@@ -94,9 +94,9 @@ class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_C
break; break;
} }
if (strpos($_index[ 1 ], '$') === false && strpos($_index[ 1 ], '\'') === false) { if (strpos($_index[ 1 ], '$') === false && strpos($_index[ 1 ], '\'') === false) {
return "@constant('{$_index[1]}')"; return "defined('{$_index[1]}') ? constant('{$_index[1]}') : null";
} else { } else {
return "@constant({$_index[1]})"; return "defined({$_index[1]}) ? @constant({$_index[1]}) : null";
} }
// no break // no break
case 'config': case 'config':

View File

@@ -29,7 +29,7 @@ class UndefinedTemplateVarTest extends PHPUnit_Smarty
public function testE_NoticeDisabled() public function testE_NoticeDisabled()
{ {
$e1 = error_reporting(); $e1 = error_reporting();
$this->smarty->setErrorReporting(E_ALL & ~E_NOTICE); $this->smarty->setErrorReporting(E_ALL & ~E_WARNING & ~E_NOTICE);
$this->assertEquals('undefined = ', $this->smarty->fetch('001_main.tpl')); $this->assertEquals('undefined = ', $this->smarty->fetch('001_main.tpl'));
$e2 = error_reporting(); $e2 = error_reporting();
$this->assertEquals($e1, $e2); $this->assertEquals($e1, $e2);
@@ -41,7 +41,7 @@ class UndefinedTemplateVarTest extends PHPUnit_Smarty
public function testE_NoticeDisabledTplObject_1() public function testE_NoticeDisabledTplObject_1()
{ {
$e1 = error_reporting(); $e1 = error_reporting();
$this->smarty->setErrorReporting(E_ALL & ~E_NOTICE); $this->smarty->setErrorReporting(E_ALL & ~E_WARNING & ~E_NOTICE);
$tpl = $this->smarty->createTemplate('001_main.tpl'); $tpl = $this->smarty->createTemplate('001_main.tpl');
$this->assertEquals('undefined = ', $tpl->fetch()); $this->assertEquals('undefined = ', $tpl->fetch());
$e2 = error_reporting(); $e2 = error_reporting();
@@ -51,7 +51,7 @@ class UndefinedTemplateVarTest extends PHPUnit_Smarty
public function testE_NoticeDisabledTplObject_2() public function testE_NoticeDisabledTplObject_2()
{ {
$e1 = error_reporting(); $e1 = error_reporting();
$this->smarty->setErrorReporting(E_ALL & ~E_NOTICE); $this->smarty->setErrorReporting(E_ALL & ~E_WARNING & ~E_NOTICE);
$tpl = $this->smarty->createTemplate('001_main.tpl'); $tpl = $this->smarty->createTemplate('001_main.tpl');
$this->assertEquals('undefined = ', $this->smarty->fetch($tpl)); $this->assertEquals('undefined = ', $this->smarty->fetch($tpl));
$e2 = error_reporting(); $e2 = error_reporting();
@@ -60,12 +60,16 @@ class UndefinedTemplateVarTest extends PHPUnit_Smarty
/** /**
* Throw E_NOTICE message * Throw E_NOTICE message
*
* @expectedException PHPUnit_Framework_Error_Notice
* @expectedExceptionMessage Undefined index: foo
*/ */
public function testE_Notice() public function testE_Notice()
{ {
if (PHP_VERSION_ID >= 80000) {
$this->expectExceptionMessage("Undefined array key \"foo\"");
$this->expectException(PHPUnit_Framework_Error_Warning::class);
} else {
$this->expectExceptionMessage("Undefined index: foo");
$this->expectException(PHPUnit_Framework_Error_Notice::class);
}
$e1 = error_reporting(); $e1 = error_reporting();
$this->assertEquals('undefined = ', $this->smarty->fetch('001_main.tpl')); $this->assertEquals('undefined = ', $this->smarty->fetch('001_main.tpl'));
$e2 = error_reporting(); $e2 = error_reporting();

View File

@@ -27,7 +27,7 @@ class MuteExpectedErrorsTest extends PHPUnit_Smarty
{ {
$this->cleanDirs(); $this->cleanDirs();
} }
public function error_handler($errno, $errstr, $errfile, $errline, $errcontext) public function error_handler($errno, $errstr, $errfile, $errline, $errcontext = [])
{ {
$this->_errors[] = $errfile . ' line ' . $errline; $this->_errors[] = $errfile . ' line ' . $errline;
} }

View File

@@ -403,7 +403,11 @@ class ConfigVarTest extends PHPUnit_Smarty
$this->assertEquals("", $this->smarty->fetch('foo.tpl')); $this->assertEquals("", $this->smarty->fetch('foo.tpl'));
} }
catch (Exception $e) { catch (Exception $e) {
if (PHP_VERSION_ID >= 80000) {
$this->assertEquals('Undefined variable $foo', $e->getMessage());
} else {
$this->assertEquals('Undefined variable: foo', $e->getMessage()); $this->assertEquals('Undefined variable: foo', $e->getMessage());
} }
} }
}
} }

View File

@@ -33,7 +33,7 @@ class ClearAllAssignBCTest extends PHPUnit_Smarty
public function testSmarty2ClearAllAssignInSmarty() public function testSmarty2ClearAllAssignInSmarty()
{ {
error_reporting((error_reporting() & ~(E_NOTICE | E_USER_NOTICE))); error_reporting((error_reporting() & ~(E_NOTICE | E_WARNING | E_USER_NOTICE)));
$this->smartyBC->clear_all_assign(); $this->smartyBC->clear_all_assign();
$this->assertEquals('barblar', $this->smartyBC->fetch($this->_tplBC)); $this->assertEquals('barblar', $this->smartyBC->fetch($this->_tplBC));
} }

View File

@@ -46,7 +46,7 @@ class ClearAllAssignTest extends PHPUnit_Smarty
*/ */
public function testClearAllAssignInTemplate() public function testClearAllAssignInTemplate()
{ {
error_reporting((error_reporting() & ~(E_NOTICE | E_USER_NOTICE))); error_reporting((error_reporting() & ~(E_NOTICE | E_USER_NOTICE | E_WARNING)));
$this->_tpl->clearAllAssign(); $this->_tpl->clearAllAssign();
$this->assertEquals('foobar', $this->smarty->fetch($this->_tpl)); $this->assertEquals('foobar', $this->smarty->fetch($this->_tpl));
} }
@@ -56,7 +56,7 @@ class ClearAllAssignTest extends PHPUnit_Smarty
*/ */
public function testClearAllAssignInData() public function testClearAllAssignInData()
{ {
error_reporting((error_reporting() & ~(E_NOTICE | E_USER_NOTICE))); error_reporting((error_reporting() & ~(E_NOTICE | E_USER_NOTICE | E_WARNING)));
$this->_data->clearAllAssign(); $this->_data->clearAllAssign();
$this->assertEquals('fooblar', $this->smarty->fetch($this->_tpl)); $this->assertEquals('fooblar', $this->smarty->fetch($this->_tpl));
} }
@@ -66,7 +66,7 @@ class ClearAllAssignTest extends PHPUnit_Smarty
*/ */
public function testClearAllAssignInSmarty() public function testClearAllAssignInSmarty()
{ {
error_reporting((error_reporting() & ~(E_NOTICE | E_USER_NOTICE))); error_reporting((error_reporting() & ~(E_NOTICE | E_USER_NOTICE | E_WARNING)));
$this->smarty->clearAllAssign(); $this->smarty->clearAllAssign();
$this->assertEquals('barblar', $this->smarty->fetch($this->_tpl)); $this->assertEquals('barblar', $this->smarty->fetch($this->_tpl));
} }

View File

@@ -33,14 +33,14 @@ class ClearAssignBCTest extends PHPUnit_Smarty
} }
public function testSmarty2ClearAssign() public function testSmarty2ClearAssign()
{ {
$this->smartyBC->setErrorReporting(error_reporting() & ~(E_NOTICE | E_USER_NOTICE)); $this->smartyBC->setErrorReporting(error_reporting() & ~(E_NOTICE | E_USER_NOTICE | E_WARNING));
$this->smartyBC->clear_assign('blar'); $this->smartyBC->clear_assign('blar');
$this->assertEquals('foobar', $this->smartyBC->fetch('eval:{$foo}{$bar}{$blar}')); $this->assertEquals('foobar', $this->smartyBC->fetch('eval:{$foo}{$bar}{$blar}'));
} }
public function testSmarty2ArrayClearAssign() public function testSmarty2ArrayClearAssign()
{ {
$this->smartyBC->setErrorReporting(error_reporting() & ~(E_NOTICE | E_USER_NOTICE)); $this->smartyBC->setErrorReporting(error_reporting() & ~(E_NOTICE | E_USER_NOTICE | E_WARNING));
$this->smartyBC->clear_assign(array('blar', 'foo')); $this->smartyBC->clear_assign(array('blar', 'foo'));
$this->assertEquals('bar', $this->smartyBC->fetch('eval:{$foo}{$bar}{$blar}')); $this->assertEquals('bar', $this->smartyBC->fetch('eval:{$foo}{$bar}{$blar}'));
} }

View File

@@ -36,7 +36,7 @@ class ClearAssignTest extends PHPUnit_Smarty
*/ */
public function testClearAssign() public function testClearAssign()
{ {
$this->smarty->setErrorReporting(error_reporting() & ~(E_NOTICE | E_USER_NOTICE)); $this->smarty->setErrorReporting(error_reporting() & ~(E_NOTICE | E_USER_NOTICE | E_WARNING));
$this->smarty->clearAssign('blar'); $this->smarty->clearAssign('blar');
$this->assertEquals('foobar', $this->smarty->fetch('eval:{$foo}{$bar}{$blar}')); $this->assertEquals('foobar', $this->smarty->fetch('eval:{$foo}{$bar}{$blar}'));
} }
@@ -46,7 +46,7 @@ class ClearAssignTest extends PHPUnit_Smarty
*/ */
public function testArrayClearAssign() public function testArrayClearAssign()
{ {
$this->smarty->setErrorReporting(error_reporting() & ~(E_NOTICE | E_USER_NOTICE)); $this->smarty->setErrorReporting(error_reporting() & ~(E_NOTICE | E_USER_NOTICE | E_WARNING));
$this->smarty->clearAssign(array('blar', 'foo')); $this->smarty->clearAssign(array('blar', 'foo'));
$this->assertEquals('bar', $this->smarty->fetch('eval:{$foo}{$bar}{$blar}')); $this->assertEquals('bar', $this->smarty->fetch('eval:{$foo}{$bar}{$blar}'));
} }

View File

@@ -44,7 +44,7 @@ class CompileForeachTest extends PHPUnit_Smarty
$this->smarty->assign('foo', $foo); $this->smarty->assign('foo', $foo);
} else { } else {
// unassigned $from parameter // unassigned $from parameter
$this->smarty->setErrorReporting(error_reporting() & ~(E_NOTICE | E_USER_NOTICE)); $this->smarty->setErrorReporting(error_reporting() & ~(E_NOTICE | E_USER_NOTICE | E_WARNING));
} }
$this->assertEquals($result, $this->smarty->fetch($file), "testForeach - {$code} - {$testName}"); $this->assertEquals($result, $this->smarty->fetch($file), "testForeach - {$code} - {$testName}");

View File

@@ -275,7 +275,7 @@ class PluginFunctionHtmlCheckboxesTest extends PHPUnit_Smarty
protected $_errors = array(); protected $_errors = array();
public function error_handler($errno, $errstr, $errfile, $errline, $errcontext) public function error_handler($errno, $errstr, $errfile, $errline, $errcontext = [])
{ {
$this->_errors[] = $errstr; $this->_errors[] = $errstr;
} }

View File

@@ -369,7 +369,7 @@ class PluginFunctionHtmlOptionsTest extends PHPUnit_Smarty
protected $_errors = array(); protected $_errors = array();
public function error_handler($errno, $errstr, $errfile, $errline, $errcontext) public function error_handler($errno, $errstr, $errfile, $errline, $errcontext = [])
{ {
$this->_errors[] = $errstr; $this->_errors[] = $errstr;
} }

View File

@@ -275,7 +275,7 @@ class PluginFunctionHtmlRadiosTest extends PHPUnit_Smarty
protected $_errors = array(); protected $_errors = array();
public function error_handler($errno, $errstr, $errfile, $errline, $errcontext) public function error_handler($errno, $errstr, $errfile, $errline, $errcontext = [])
{ {
$this->_errors[] = $errstr; $this->_errors[] = $errstr;
} }

View File

@@ -78,11 +78,13 @@ class ConstantsTest extends PHPUnit_Smarty
} }
public function testConstantsUndefined() public function testConstantsUndefined()
{ {
$this->smarty->setErrorReporting(E_ALL & ~E_WARNING & ~E_NOTICE);
$tpl = $this->smarty->createTemplate('string:{$smarty.const.MYCONSTANT2}'); $tpl = $this->smarty->createTemplate('string:{$smarty.const.MYCONSTANT2}');
$this->assertEquals("", $this->smarty->fetch($tpl)); $this->assertEquals("", $this->smarty->fetch($tpl));
} }
public function testConstantsUndefined2() public function testConstantsUndefined2()
{ {
$this->smarty->setErrorReporting(E_ALL & ~E_WARNING & ~E_NOTICE);
$tpl = $this->smarty->createTemplate('eval:{$foo = MYCONSTANT2}{$foo}'); $tpl = $this->smarty->createTemplate('eval:{$foo = MYCONSTANT2}{$foo}');
$this->assertEquals("MYCONSTANT2", $this->smarty->fetch($tpl)); $this->assertEquals("MYCONSTANT2", $this->smarty->fetch($tpl));
} }