Fix for XML settings, together with unit tests

This commit is contained in:
MarkBaker 2016-06-05 16:45:50 +01:00
parent 8af620f97b
commit b2029564e5
3 changed files with 47 additions and 7 deletions

View File

@ -353,34 +353,36 @@ class PHPExcel_Settings
} }
/** /**
* Set default options for libxml loader * Set options for libxml loader
* *
* @param int $options Default options for libxml loader * @param int $options Options for libxml loader
*/ */
public static function setLibXmlLoaderOptions($options = null) public static function setLibXmlLoaderOptions($options = null)
{ {
if (is_null($options) && defined(LIBXML_DTDLOAD)) { if (is_null($options) && defined('LIBXML_DTDLOAD')) {
$options = LIBXML_DTDLOAD | LIBXML_DTDATTR; $options = LIBXML_DTDLOAD | LIBXML_DTDATTR;
} }
if (version_compare(PHP_VERSION, '5.2.11') >= 0) { if (version_compare(PHP_VERSION, '5.2.11') >= 0) {
@libxml_disable_entity_loader($options == (LIBXML_DTDLOAD | LIBXML_DTDATTR)); @libxml_disable_entity_loader((bool) $options);
} }
self::$libXmlLoaderOptions = $options; self::$libXmlLoaderOptions = $options;
} }
/** /**
* Get default options for libxml loader. * Get defined options for libxml loader.
* Defaults to LIBXML_DTDLOAD | LIBXML_DTDATTR when not set explicitly. * Defaults to LIBXML_DTDLOAD | LIBXML_DTDATTR when not set explicitly.
* *
* @return int Default options for libxml loader * @return int Default options for libxml loader
*/ */
public static function getLibXmlLoaderOptions() public static function getLibXmlLoaderOptions()
{ {
if (is_null(self::$libXmlLoaderOptions) && defined(LIBXML_DTDLOAD)) { if (is_null(self::$libXmlLoaderOptions) && defined('LIBXML_DTDLOAD')) {
self::setLibXmlLoaderOptions(LIBXML_DTDLOAD | LIBXML_DTDATTR); self::setLibXmlLoaderOptions(LIBXML_DTDLOAD | LIBXML_DTDATTR);
} elseif (is_null(self::$libXmlLoaderOptions)) {
self::$libXmlLoaderOptions = true;
} }
if (version_compare(PHP_VERSION, '5.2.11') >= 0) { if (version_compare(PHP_VERSION, '5.2.11') >= 0) {
@libxml_disable_entity_loader(self::$libXmlLoaderOptions == (LIBXML_DTDLOAD | LIBXML_DTDATTR)); @libxml_disable_entity_loader((bool) self::$libXmlLoaderOptions);
} }
return self::$libXmlLoaderOptions; return self::$libXmlLoaderOptions;
} }

View File

@ -37,6 +37,12 @@ define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />');
require_once dirname(__FILE__) . '/../Classes/PHPExcel.php'; require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
$count = 39;
$columnLetter = PHPExcel_Cell::stringFromColumnIndex($count);
var_dump($columnLetter);
die();
// Create new PHPExcel object // Create new PHPExcel object
echo date('H:i:s') , " Create new PHPExcel object" , EOL; echo date('H:i:s') , " Create new PHPExcel object" , EOL;
$objPHPExcel = new PHPExcel(); $objPHPExcel = new PHPExcel();

View File

@ -0,0 +1,32 @@
<?php
class SettingsTest extends PHPUnit_Framework_TestCase
{
public function setUp()
{
if (!defined('PHPEXCEL_ROOT')) {
define('PHPEXCEL_ROOT', APPLICATION_PATH . '/');
}
require_once(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
}
/**
*/
public function testGetXMLSettings()
{
$result = call_user_func(array('PHPExcel_Settings','getLibXmlLoaderOptions'));
$this->assertTrue((bool) ((LIBXML_DTDLOAD | LIBXML_DTDATTR) & $result));
}
/**
*/
public function testSetXMLSettings()
{
call_user_func_array(array('PHPExcel_Settings','setLibXmlLoaderOptions'), [LIBXML_DTDLOAD | LIBXML_DTDATTR | LIBXML_DTDVALID]);
$result = call_user_func(array('PHPExcel_Settings','getLibXmlLoaderOptions'));
$this->assertTrue((bool) ((LIBXML_DTDLOAD | LIBXML_DTDATTR | LIBXML_DTDVALID) & $result));
}
}