mirror of
https://github.com/retailcrm/PHPExcel.git
synced 2024-11-22 05:16:06 +03:00
PSR2 Fixes
This commit is contained in:
parent
09352e3e80
commit
576effef30
File diff suppressed because it is too large
Load Diff
@ -557,9 +557,9 @@ class PHPExcel_Reader_OOCalc extends PHPExcel_Reader_Abstract implements PHPExce
|
||||
}
|
||||
break;
|
||||
case 'boolean':
|
||||
$type = PHPExcel_Cell_DataType::TYPE_BOOL;
|
||||
$dataValue = ($allCellDataText == 'TRUE') ? true : false;
|
||||
break;
|
||||
$type = PHPExcel_Cell_DataType::TYPE_BOOL;
|
||||
$dataValue = ($allCellDataText == 'TRUE') ? true : false;
|
||||
break;
|
||||
case 'percentage':
|
||||
$type = PHPExcel_Cell_DataType::TYPE_NUMERIC;
|
||||
$dataValue = (float) $cellDataOfficeAttributes['value'];
|
||||
|
@ -198,10 +198,14 @@ class PHPExcel_Shared_JAMA_Matrix
|
||||
case 'integer,integer,integer,integer':
|
||||
list($i0, $iF, $j0, $jF) = $args;
|
||||
if (($iF > $i0) && ($this->m >= $iF) && ($i0 >= 0)) {
|
||||
$m = $iF - $i0; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentBoundsException);
|
||||
$m = $iF - $i0;
|
||||
} else {
|
||||
throw new PHPExcel_Calculation_Exception(self::ArgumentBoundsException);
|
||||
}
|
||||
if (($jF > $j0) && ($this->n >= $jF) && ($j0 >= 0)) {
|
||||
$n = $jF - $j0; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentBoundsException);
|
||||
$n = $jF - $j0;
|
||||
} else {
|
||||
throw new PHPExcel_Calculation_Exception(self::ArgumentBoundsException);
|
||||
}
|
||||
$R = new PHPExcel_Shared_JAMA_Matrix($m+1, $n+1);
|
||||
for ($i = $i0; $i <= $iF; ++$i) {
|
||||
|
@ -17,21 +17,21 @@ date_default_timezone_set('Europe/London');
|
||||
|
||||
// Define path to application directory
|
||||
defined('APPLICATION_PATH')
|
||||
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../Classes'));
|
||||
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../Classes'));
|
||||
|
||||
// Define path to application tests directory
|
||||
defined('APPLICATION_TESTS_PATH')
|
||||
|| define('APPLICATION_TESTS_PATH', realpath(dirname(__FILE__) ));
|
||||
|| define('APPLICATION_TESTS_PATH', realpath(dirname(__FILE__)));
|
||||
|
||||
// Define application environment
|
||||
defined('APPLICATION_ENV') || define('APPLICATION_ENV', 'ci');
|
||||
|
||||
// Ensure library/ is on include_path
|
||||
set_include_path(implode(PATH_SEPARATOR, array(
|
||||
realpath(APPLICATION_PATH . '/../Classes'),
|
||||
'./',
|
||||
dirname(__FILE__),
|
||||
get_include_path(),
|
||||
realpath(APPLICATION_PATH . '/../Classes'),
|
||||
'./',
|
||||
dirname(__FILE__),
|
||||
get_include_path(),
|
||||
)));
|
||||
|
||||
|
||||
@ -41,9 +41,9 @@ set_include_path(implode(PATH_SEPARATOR, array(
|
||||
*/
|
||||
echo "PHPExcel tests beginning\n";
|
||||
|
||||
if(extension_loaded('xdebug')) {
|
||||
echo "Xdebug extension loaded and running\n";
|
||||
xdebug_enable();
|
||||
if (extension_loaded('xdebug')) {
|
||||
echo "Xdebug extension loaded and running\n";
|
||||
xdebug_enable();
|
||||
} else {
|
||||
echo 'Xdebug not found, you should run the following at the command line: echo "zend_extension=/usr/lib64/php/modules/xdebug.so" > /etc/php.d/xdebug.ini' . "\n";
|
||||
echo 'Xdebug not found, you should run the following at the command line: echo "zend_extension=/usr/lib64/php/modules/xdebug.so" > /etc/php.d/xdebug.ini' . "\n";
|
||||
}
|
||||
|
@ -1,114 +1,115 @@
|
||||
<?php
|
||||
|
||||
class Complex {
|
||||
|
||||
private $realPart = 0;
|
||||
private $imaginaryPart = 0;
|
||||
private $suffix = NULL;
|
||||
|
||||
public static function _parseComplex($complexNumber)
|
||||
{
|
||||
// Test for real number, with no imaginary part
|
||||
if (is_numeric($complexNumber))
|
||||
return array( $complexNumber, 0, NULL );
|
||||
|
||||
// Fix silly human errors
|
||||
if (strpos($complexNumber,'+-') !== FALSE)
|
||||
$complexNumber = str_replace('+-','-',$complexNumber);
|
||||
if (strpos($complexNumber,'++') !== FALSE)
|
||||
$complexNumber = str_replace('++','+',$complexNumber);
|
||||
if (strpos($complexNumber,'--') !== FALSE)
|
||||
$complexNumber = str_replace('--','-',$complexNumber);
|
||||
|
||||
// Basic validation of string, to parse out real and imaginary parts, and any suffix
|
||||
$validComplex = preg_match('/^([\-\+]?(\d+\.?\d*|\d*\.?\d+)([Ee][\-\+]?[0-2]?\d{1,3})?)([\-\+]?(\d+\.?\d*|\d*\.?\d+)([Ee][\-\+]?[0-2]?\d{1,3})?)?(([\-\+]?)([ij]?))$/ui',$complexNumber,$complexParts);
|
||||
|
||||
if (!$validComplex) {
|
||||
// Neither real nor imaginary part, so test to see if we actually have a suffix
|
||||
$validComplex = preg_match('/^([\-\+]?)([ij])$/ui',$complexNumber,$complexParts);
|
||||
if (!$validComplex) {
|
||||
throw new Exception('COMPLEX: Invalid complex number');
|
||||
}
|
||||
// We have a suffix, so set the real to 0, the imaginary to either 1 or -1 (as defined by the sign)
|
||||
$imaginary = 1;
|
||||
if ($complexParts[1] === '-') {
|
||||
$imaginary = 0 - $imaginary;
|
||||
}
|
||||
return array(0, $imaginary, $complexParts[2]);
|
||||
}
|
||||
|
||||
// If we don't have an imaginary part, identify whether it should be +1 or -1...
|
||||
if (($complexParts[4] === '') && ($complexParts[9] !== '')) {
|
||||
if ($complexParts[7] !== $complexParts[9]) {
|
||||
$complexParts[4] = 1;
|
||||
if ($complexParts[8] === '-') {
|
||||
$complexParts[4] = -1;
|
||||
}
|
||||
// ... or if we have only the real and no imaginary part (in which case our real should be the imaginary)
|
||||
} else {
|
||||
$complexParts[4] = $complexParts[1];
|
||||
$complexParts[1] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Return real and imaginary parts and suffix as an array, and set a default suffix if user input lazily
|
||||
return array( $complexParts[1],
|
||||
$complexParts[4],
|
||||
!empty($complexParts[9]) ? $complexParts[9] : 'i'
|
||||
);
|
||||
} // function _parseComplex()
|
||||
|
||||
|
||||
public function __construct($realPart, $imaginaryPart = null, $suffix = 'i')
|
||||
{
|
||||
if ($imaginaryPart === null) {
|
||||
if (is_array($realPart)) {
|
||||
// We have an array of (potentially) real and imaginary parts, and any suffix
|
||||
list ($realPart, $imaginaryPart, $suffix) = array_values($realPart) + array(0.0, 0.0, 'i');
|
||||
} elseif((is_string($realPart)) || (is_numeric($realPart))) {
|
||||
// We've been given a string to parse to extract the real and imaginary parts, and any suffix
|
||||
list ($realPart, $imaginaryPart, $suffix) = self::_parseComplex($realPart);
|
||||
}
|
||||
}
|
||||
|
||||
// Set parsed values in our properties
|
||||
$this->realPart = (float) $realPart;
|
||||
$this->imaginaryPart = (float) $imaginaryPart;
|
||||
$this->suffix = strtolower($suffix);
|
||||
}
|
||||
|
||||
public function getReal()
|
||||
{
|
||||
return $this->realPart;
|
||||
}
|
||||
|
||||
public function getImaginary()
|
||||
{
|
||||
return $this->imaginaryPart;
|
||||
}
|
||||
|
||||
public function getSuffix()
|
||||
{
|
||||
return $this->suffix;
|
||||
}
|
||||
|
||||
public function __toString() {
|
||||
$str = "";
|
||||
if ($this->imaginaryPart != 0.0) {
|
||||
if (abs($this->imaginaryPart) != 1.0) {
|
||||
$str .= $this->imaginaryPart . $this->suffix;
|
||||
} else {
|
||||
$str .= (($this->imaginaryPart < 0.0) ? '-' : ''). $this->suffix;
|
||||
}
|
||||
}
|
||||
if ($this->realPart != 0.0) {
|
||||
if (($str) && ($this->imaginaryPart > 0.0))
|
||||
$str = "+" . $str;
|
||||
$str = $this->realPart . $str;
|
||||
}
|
||||
if (!$str)
|
||||
$str = "0.0";
|
||||
return $str;
|
||||
}
|
||||
|
||||
}
|
||||
<?php
|
||||
|
||||
class Complex
|
||||
{
|
||||
private $realPart = 0;
|
||||
private $imaginaryPart = 0;
|
||||
private $suffix = null;
|
||||
|
||||
public static function _parseComplex($complexNumber)
|
||||
{
|
||||
// Test for real number, with no imaginary part
|
||||
if (is_numeric($complexNumber)) {
|
||||
return array($complexNumber, 0, null);
|
||||
}
|
||||
|
||||
// Fix silly human errors
|
||||
if (strpos($complexNumber, '+-') !== false) {
|
||||
$complexNumber = str_replace('+-', '-', $complexNumber);
|
||||
}
|
||||
if (strpos($complexNumber, '++') !== false) {
|
||||
$complexNumber = str_replace('++', '+', $complexNumber);
|
||||
}
|
||||
if (strpos($complexNumber, '--') !== false) {
|
||||
$complexNumber = str_replace('--', '-', $complexNumber);
|
||||
}
|
||||
|
||||
// Basic validation of string, to parse out real and imaginary parts, and any suffix
|
||||
$validComplex = preg_match('/^([\-\+]?(\d+\.?\d*|\d*\.?\d+)([Ee][\-\+]?[0-2]?\d{1,3})?)([\-\+]?(\d+\.?\d*|\d*\.?\d+)([Ee][\-\+]?[0-2]?\d{1,3})?)?(([\-\+]?)([ij]?))$/ui', $complexNumber, $complexParts);
|
||||
|
||||
if (!$validComplex) {
|
||||
// Neither real nor imaginary part, so test to see if we actually have a suffix
|
||||
$validComplex = preg_match('/^([\-\+]?)([ij])$/ui', $complexNumber, $complexParts);
|
||||
if (!$validComplex) {
|
||||
throw new Exception('COMPLEX: Invalid complex number');
|
||||
}
|
||||
// We have a suffix, so set the real to 0, the imaginary to either 1 or -1 (as defined by the sign)
|
||||
$imaginary = 1;
|
||||
if ($complexParts[1] === '-') {
|
||||
$imaginary = 0 - $imaginary;
|
||||
}
|
||||
return array(0, $imaginary, $complexParts[2]);
|
||||
}
|
||||
|
||||
// If we don't have an imaginary part, identify whether it should be +1 or -1...
|
||||
if (($complexParts[4] === '') && ($complexParts[9] !== '')) {
|
||||
if ($complexParts[7] !== $complexParts[9]) {
|
||||
$complexParts[4] = 1;
|
||||
if ($complexParts[8] === '-') {
|
||||
$complexParts[4] = -1;
|
||||
}
|
||||
// ... or if we have only the real and no imaginary part (in which case our real should be the imaginary)
|
||||
} else {
|
||||
$complexParts[4] = $complexParts[1];
|
||||
$complexParts[1] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Return real and imaginary parts and suffix as an array, and set a default suffix if user input lazily
|
||||
return array($complexParts[1], $complexParts[4], !empty($complexParts[9]) ? $complexParts[9] : 'i');
|
||||
} // function _parseComplex()
|
||||
|
||||
|
||||
public function __construct($realPart, $imaginaryPart = null, $suffix = 'i')
|
||||
{
|
||||
if ($imaginaryPart === null) {
|
||||
if (is_array($realPart)) {
|
||||
// We have an array of (potentially) real and imaginary parts, and any suffix
|
||||
list ($realPart, $imaginaryPart, $suffix) = array_values($realPart) + array(0.0, 0.0, 'i');
|
||||
} elseif((is_string($realPart)) || (is_numeric($realPart))) {
|
||||
// We've been given a string to parse to extract the real and imaginary parts, and any suffix
|
||||
list ($realPart, $imaginaryPart, $suffix) = self::_parseComplex($realPart);
|
||||
}
|
||||
}
|
||||
|
||||
// Set parsed values in our properties
|
||||
$this->realPart = (float) $realPart;
|
||||
$this->imaginaryPart = (float) $imaginaryPart;
|
||||
$this->suffix = strtolower($suffix);
|
||||
}
|
||||
|
||||
public function getReal()
|
||||
{
|
||||
return $this->realPart;
|
||||
}
|
||||
|
||||
public function getImaginary()
|
||||
{
|
||||
return $this->imaginaryPart;
|
||||
}
|
||||
|
||||
public function getSuffix()
|
||||
{
|
||||
return $this->suffix;
|
||||
}
|
||||
|
||||
public function __toString() {
|
||||
$str = "";
|
||||
if ($this->imaginaryPart != 0.0) {
|
||||
if (abs($this->imaginaryPart) != 1.0) {
|
||||
$str .= $this->imaginaryPart . $this->suffix;
|
||||
} else {
|
||||
$str .= (($this->imaginaryPart < 0.0) ? '-' : ''). $this->suffix;
|
||||
}
|
||||
}
|
||||
if ($this->realPart != 0.0) {
|
||||
if (($str) && ($this->imaginaryPart > 0.0))
|
||||
$str = "+" . $str;
|
||||
$str = $this->realPart . $str;
|
||||
}
|
||||
if (!$str)
|
||||
$str = "0.0";
|
||||
return $str;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,62 +1,55 @@
|
||||
<?php
|
||||
|
||||
include_once dirname(__FILE__).'/Complex.php';
|
||||
|
||||
|
||||
class complexAssert {
|
||||
|
||||
private $_errorMessage = '';
|
||||
|
||||
public function assertComplexEquals($expected, $actual, $delta = 0)
|
||||
{
|
||||
if ($expected{0} === '#') {
|
||||
// Expecting an error, so we do a straight string comparison
|
||||
if ($expected === $actual) {
|
||||
return TRUE;
|
||||
}
|
||||
$this->_errorMessage = 'Expected Error: ' .
|
||||
$actual . ' !== ' . $expected;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
$expectedComplex = new Complex($expected);
|
||||
$actualComplex = new Complex($actual);
|
||||
|
||||
if (!is_numeric($actualComplex->getReal()) || !is_numeric($expectedComplex->getReal())) {
|
||||
if ($actualComplex->getReal() !== $expectedComplex->getReal()) {
|
||||
$this->_errorMessage = 'Mismatched String: ' .
|
||||
$actualComplex->getReal() . ' !== ' . $expectedComplex->getReal();
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if ($actualComplex->getReal() < ($expectedComplex->getReal() - $delta) ||
|
||||
$actualComplex->getReal() > ($expectedComplex->getReal() + $delta)) {
|
||||
$this->_errorMessage = 'Mismatched Real part: ' .
|
||||
$actualComplex->getReal() . ' != ' . $expectedComplex->getReal();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if ($actualComplex->getImaginary() < ($expectedComplex->getImaginary() - $delta) ||
|
||||
$actualComplex->getImaginary() > ($expectedComplex->getImaginary() + $delta)) {
|
||||
$this->_errorMessage = 'Mismatched Imaginary part: ' .
|
||||
$actualComplex->getImaginary() . ' != ' . $expectedComplex->getImaginary();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if ($actualComplex->getSuffix() !== $actualComplex->getSuffix()) {
|
||||
$this->_errorMessage = 'Mismatched Suffix: ' .
|
||||
$actualComplex->getSuffix() . ' != ' . $expectedComplex->getSuffix();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
public function getErrorMessage() {
|
||||
return $this->_errorMessage;
|
||||
}
|
||||
|
||||
}
|
||||
<?php
|
||||
|
||||
include_once dirname(__FILE__).'/Complex.php';
|
||||
|
||||
class complexAssert
|
||||
{
|
||||
private $_errorMessage = '';
|
||||
|
||||
public function assertComplexEquals($expected, $actual, $delta = 0)
|
||||
{
|
||||
if ($expected{0} === '#') {
|
||||
// Expecting an error, so we do a straight string comparison
|
||||
if ($expected === $actual) {
|
||||
return true;
|
||||
}
|
||||
$this->_errorMessage = 'Expected Error: ' . $actual . ' !== ' . $expected;
|
||||
return false;
|
||||
}
|
||||
|
||||
$expectedComplex = new Complex($expected);
|
||||
$actualComplex = new Complex($actual);
|
||||
|
||||
if (!is_numeric($actualComplex->getReal()) || !is_numeric($expectedComplex->getReal())) {
|
||||
if ($actualComplex->getReal() !== $expectedComplex->getReal()) {
|
||||
$this->_errorMessage = 'Mismatched String: ' . $actualComplex->getReal() . ' !== ' . $expectedComplex->getReal();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
if ($actualComplex->getReal() < ($expectedComplex->getReal() - $delta) ||
|
||||
$actualComplex->getReal() > ($expectedComplex->getReal() + $delta)) {
|
||||
$this->_errorMessage = 'Mismatched Real part: ' . $actualComplex->getReal() . ' != ' . $expectedComplex->getReal();
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($actualComplex->getImaginary() < ($expectedComplex->getImaginary() - $delta) ||
|
||||
$actualComplex->getImaginary() > ($expectedComplex->getImaginary() + $delta)) {
|
||||
$this->_errorMessage = 'Mismatched Imaginary part: ' . $actualComplex->getImaginary() . ' != ' . $expectedComplex->getImaginary();
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($actualComplex->getSuffix() !== $actualComplex->getSuffix()) {
|
||||
$this->_errorMessage = 'Mismatched Suffix: ' . $actualComplex->getSuffix() . ' != ' . $expectedComplex->getSuffix();
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function getErrorMessage()
|
||||
{
|
||||
return $this->_errorMessage;
|
||||
}
|
||||
}
|
||||
|
@ -1,137 +1,136 @@
|
||||
<?php
|
||||
|
||||
class testDataFileIterator implements Iterator
|
||||
{
|
||||
|
||||
protected $file;
|
||||
protected $key = 0;
|
||||
protected $current;
|
||||
|
||||
public function __construct($file)
|
||||
{
|
||||
$this->file = fopen($file, 'r');
|
||||
}
|
||||
|
||||
public function __destruct()
|
||||
{
|
||||
fclose($this->file);
|
||||
}
|
||||
|
||||
public function rewind()
|
||||
{
|
||||
rewind($this->file);
|
||||
$this->current = $this->_parseNextDataset();
|
||||
$this->key = 0;
|
||||
}
|
||||
|
||||
public function valid()
|
||||
{
|
||||
return !feof($this->file);
|
||||
}
|
||||
|
||||
public function key()
|
||||
{
|
||||
return $this->key;
|
||||
}
|
||||
|
||||
public function current()
|
||||
{
|
||||
return $this->current;
|
||||
}
|
||||
|
||||
public function next()
|
||||
{
|
||||
$this->current = $this->_parseNextDataset();
|
||||
$this->key++;
|
||||
}
|
||||
|
||||
private function _parseNextDataset()
|
||||
{
|
||||
// Read a line of test data from the file
|
||||
do {
|
||||
// Only take lines that contain test data and that aren't commented out
|
||||
$testDataRow = trim(fgets($this->file));
|
||||
} while (($testDataRow > '') && ($testDataRow{0} === '#'));
|
||||
|
||||
// Discard any comments at the end of the line
|
||||
list($testData) = explode('//', $testDataRow);
|
||||
|
||||
// Split data into an array of individual values and a result
|
||||
$dataSet = $this->_getcsv($testData, ',', "'");
|
||||
foreach ($dataSet as &$dataValue) {
|
||||
$dataValue = $this->_parseDataValue($dataValue);
|
||||
}
|
||||
unset($dataValue);
|
||||
|
||||
return $dataSet;
|
||||
}
|
||||
|
||||
private function _getcsv($input, $delimiter, $enclosure)
|
||||
{
|
||||
if (function_exists('str_getcsv')) {
|
||||
return str_getcsv($input, $delimiter, $enclosure);
|
||||
}
|
||||
|
||||
$temp = fopen('php://memory', 'rw');
|
||||
fwrite($temp, $input);
|
||||
rewind($temp);
|
||||
$data = fgetcsv($temp, strlen($input), $delimiter, $enclosure);
|
||||
fclose($temp);
|
||||
|
||||
if ($data === false) {
|
||||
$data = array(null);
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
private function _parseDataValue($dataValue)
|
||||
{
|
||||
// discard any white space
|
||||
$dataValue = trim($dataValue);
|
||||
// test for the required datatype and convert accordingly
|
||||
if (!is_numeric($dataValue)) {
|
||||
if($dataValue == '') {
|
||||
$dataValue = null;
|
||||
} elseif($dataValue == '""') {
|
||||
$dataValue = '';
|
||||
} elseif(($dataValue[0] == '"') && ($dataValue[strlen($dataValue)-1] == '"')) {
|
||||
$dataValue = substr($dataValue,1,-1);
|
||||
} elseif(($dataValue[0] == '{') && ($dataValue[strlen($dataValue)-1] == '}')) {
|
||||
$dataValue = explode(';',substr($dataValue,1,-1));
|
||||
foreach ($dataValue as &$dataRow) {
|
||||
if (strpos($dataRow,'|') !== false) {
|
||||
$dataRow = explode('|',$dataRow);
|
||||
foreach ($dataRow as &$dataCell) {
|
||||
$dataCell = $this->_parseDataValue($dataCell);
|
||||
}
|
||||
unset($dataCell);
|
||||
} else {
|
||||
$dataRow = $this->_parseDataValue($dataRow);
|
||||
}
|
||||
}
|
||||
unset($dataRow);
|
||||
} else {
|
||||
switch (strtoupper($dataValue)) {
|
||||
case 'NULL':
|
||||
$dataValue = null;
|
||||
break;
|
||||
case 'TRUE':
|
||||
$dataValue = true;
|
||||
break;
|
||||
case 'FALSE':
|
||||
$dataValue = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (strpos($dataValue,'.') !== false) {
|
||||
$dataValue = (float) $dataValue;
|
||||
} else {
|
||||
$dataValue = (int) $dataValue;
|
||||
}
|
||||
}
|
||||
|
||||
return $dataValue;
|
||||
}
|
||||
}
|
||||
<?php
|
||||
|
||||
class testDataFileIterator implements Iterator
|
||||
{
|
||||
protected $file;
|
||||
protected $key = 0;
|
||||
protected $current;
|
||||
|
||||
public function __construct($file)
|
||||
{
|
||||
$this->file = fopen($file, 'r');
|
||||
}
|
||||
|
||||
public function __destruct()
|
||||
{
|
||||
fclose($this->file);
|
||||
}
|
||||
|
||||
public function rewind()
|
||||
{
|
||||
rewind($this->file);
|
||||
$this->current = $this->_parseNextDataset();
|
||||
$this->key = 0;
|
||||
}
|
||||
|
||||
public function valid()
|
||||
{
|
||||
return !feof($this->file);
|
||||
}
|
||||
|
||||
public function key()
|
||||
{
|
||||
return $this->key;
|
||||
}
|
||||
|
||||
public function current()
|
||||
{
|
||||
return $this->current;
|
||||
}
|
||||
|
||||
public function next()
|
||||
{
|
||||
$this->current = $this->_parseNextDataset();
|
||||
$this->key++;
|
||||
}
|
||||
|
||||
private function _parseNextDataset()
|
||||
{
|
||||
// Read a line of test data from the file
|
||||
do {
|
||||
// Only take lines that contain test data and that aren't commented out
|
||||
$testDataRow = trim(fgets($this->file));
|
||||
} while (($testDataRow > '') && ($testDataRow{0} === '#'));
|
||||
|
||||
// Discard any comments at the end of the line
|
||||
list($testData) = explode('//', $testDataRow);
|
||||
|
||||
// Split data into an array of individual values and a result
|
||||
$dataSet = $this->_getcsv($testData, ',', "'");
|
||||
foreach ($dataSet as &$dataValue) {
|
||||
$dataValue = $this->_parseDataValue($dataValue);
|
||||
}
|
||||
unset($dataValue);
|
||||
|
||||
return $dataSet;
|
||||
}
|
||||
|
||||
private function _getcsv($input, $delimiter, $enclosure)
|
||||
{
|
||||
if (function_exists('str_getcsv')) {
|
||||
return str_getcsv($input, $delimiter, $enclosure);
|
||||
}
|
||||
|
||||
$temp = fopen('php://memory', 'rw');
|
||||
fwrite($temp, $input);
|
||||
rewind($temp);
|
||||
$data = fgetcsv($temp, strlen($input), $delimiter, $enclosure);
|
||||
fclose($temp);
|
||||
|
||||
if ($data === false) {
|
||||
$data = array(null);
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
private function _parseDataValue($dataValue)
|
||||
{
|
||||
// discard any white space
|
||||
$dataValue = trim($dataValue);
|
||||
// test for the required datatype and convert accordingly
|
||||
if (!is_numeric($dataValue)) {
|
||||
if($dataValue == '') {
|
||||
$dataValue = null;
|
||||
} elseif($dataValue == '""') {
|
||||
$dataValue = '';
|
||||
} elseif(($dataValue[0] == '"') && ($dataValue[strlen($dataValue)-1] == '"')) {
|
||||
$dataValue = substr($dataValue,1,-1);
|
||||
} elseif(($dataValue[0] == '{') && ($dataValue[strlen($dataValue)-1] == '}')) {
|
||||
$dataValue = explode(';',substr($dataValue,1,-1));
|
||||
foreach ($dataValue as &$dataRow) {
|
||||
if (strpos($dataRow,'|') !== false) {
|
||||
$dataRow = explode('|',$dataRow);
|
||||
foreach ($dataRow as &$dataCell) {
|
||||
$dataCell = $this->_parseDataValue($dataCell);
|
||||
}
|
||||
unset($dataCell);
|
||||
} else {
|
||||
$dataRow = $this->_parseDataValue($dataRow);
|
||||
}
|
||||
}
|
||||
unset($dataRow);
|
||||
} else {
|
||||
switch (strtoupper($dataValue)) {
|
||||
case 'NULL':
|
||||
$dataValue = null;
|
||||
break;
|
||||
case 'TRUE':
|
||||
$dataValue = true;
|
||||
break;
|
||||
case 'FALSE':
|
||||
$dataValue = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (strpos($dataValue,'.') !== false) {
|
||||
$dataValue = (float) $dataValue;
|
||||
} else {
|
||||
$dataValue = (int) $dataValue;
|
||||
}
|
||||
}
|
||||
|
||||
return $dataValue;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user