mirror of
https://github.com/parsecsv/parsecsv-for-php.git
synced 2026-02-19 08:36:39 +00:00
Compare commits
12 Commits
master
...
Tests-for-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
02a8c1995d | ||
|
|
72a7c29ed6 | ||
|
|
c905c9abfd | ||
|
|
221c175217 | ||
|
|
4376cc8bd6 | ||
|
|
5c157efbc3 | ||
|
|
387a0f5761 | ||
|
|
7a9d55dd1e | ||
|
|
979e9ed0cd | ||
|
|
adcd258ea2 | ||
|
|
34d28f7435 | ||
|
|
5cdec32466 |
@@ -1,3 +1,23 @@
|
|||||||
|
ParseCsvForPhp 1.0.0-rc.1
|
||||||
|
-----------------------------------
|
||||||
|
Date: unreleased
|
||||||
|
|
||||||
|
- Renamed class from parseCSV to ParseCsvForPhp
|
||||||
|
|
||||||
|
- Added support for MS Excel's "sep=" to detect the
|
||||||
|
delimiter (Issue #60).
|
||||||
|
|
||||||
|
- MIME: output() sends correct MIME type to browser
|
||||||
|
if the separator is a tab tab (Issue #79)
|
||||||
|
|
||||||
|
- Added support for mb_convert_encoding() instead of
|
||||||
|
iconv() (Issue #109)
|
||||||
|
|
||||||
|
- A number of minor bug fixes - see GitHub issues
|
||||||
|
|
||||||
|
-----------------------------------
|
||||||
|
|
||||||
|
|
||||||
parseCSV 0.4.3 beta
|
parseCSV 0.4.3 beta
|
||||||
-----------------------------------
|
-----------------------------------
|
||||||
Date: 1-July-2008
|
Date: 1-July-2008
|
||||||
@@ -159,7 +179,7 @@ Date: 2-Jan-2007
|
|||||||
|
|
||||||
- Added auto() function to automatically detect
|
- Added auto() function to automatically detect
|
||||||
delimiter character.
|
delimiter character.
|
||||||
Useful for user upload incase delimiter is
|
Useful for user upload in case delimiter is
|
||||||
comma (,), tab, or semi-colon (;). Some
|
comma (,), tab, or semi-colon (;). Some
|
||||||
versions of MS Excel for Windows use
|
versions of MS Excel for Windows use
|
||||||
semi-colons instead of commas when saving to
|
semi-colons instead of commas when saving to
|
||||||
@@ -170,7 +190,7 @@ Date: 2-Jan-2007
|
|||||||
almost no matter what the delimiter is.
|
almost no matter what the delimiter is.
|
||||||
|
|
||||||
- Generally updated some of the core workings
|
- Generally updated some of the core workings
|
||||||
to increase performance, and offer better
|
to increase performance, and offer better
|
||||||
support for large (1MB and up) files.
|
support for large (1MB and up) files.
|
||||||
|
|
||||||
- Added code examples to header comment.
|
- Added code examples to header comment.
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
class parseCSV {
|
class ParseCsvForPhp {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Class: parseCSV v0.4.3 beta
|
Class: ParseCsvForPhp 1.0.0-rc.1
|
||||||
https://github.com/parsecsv/parsecsv-for-php
|
https://github.com/parsecsv/parsecsv-for-php
|
||||||
|
|
||||||
Fully conforms to the specifications lined out on Wikipedia:
|
Fully conforms to the specifications lined out on Wikipedia:
|
||||||
@@ -39,23 +39,23 @@ class parseCSV {
|
|||||||
Code Examples
|
Code Examples
|
||||||
----------------
|
----------------
|
||||||
# general usage
|
# general usage
|
||||||
$csv = new parseCSV('data.csv');
|
$csv = new ParseCsvForPhp('data.csv');
|
||||||
print_r($csv->data);
|
print_r($csv->data);
|
||||||
----------------
|
----------------
|
||||||
# tab delimited, and encoding conversion
|
# tab delimited, and encoding conversion
|
||||||
$csv = new parseCSV();
|
$csv = new ParseCsvForPhp();
|
||||||
$csv->encoding('UTF-16', 'UTF-8');
|
$csv->encoding('UTF-16', 'UTF-8');
|
||||||
$csv->delimiter = "\t";
|
$csv->delimiter = "\t";
|
||||||
$csv->parse('data.tsv');
|
$csv->parse('data.tsv');
|
||||||
print_r($csv->data);
|
print_r($csv->data);
|
||||||
----------------
|
----------------
|
||||||
# auto-detect delimiter character
|
# auto-detect delimiter character
|
||||||
$csv = new parseCSV();
|
$csv = new ParseCsvForPhp();
|
||||||
$csv->auto('data.csv');
|
$csv->auto('data.csv');
|
||||||
print_r($csv->data);
|
print_r($csv->data);
|
||||||
----------------
|
----------------
|
||||||
# modify data in a csv file
|
# modify data in a csv file
|
||||||
$csv = new parseCSV();
|
$csv = new ParseCsvForPhp();
|
||||||
$csv->sort_by = 'id';
|
$csv->sort_by = 'id';
|
||||||
$csv->parse('data.csv');
|
$csv->parse('data.csv');
|
||||||
# "4" is the value of the "id" column of the CSV row
|
# "4" is the value of the "id" column of the CSV row
|
||||||
@@ -64,12 +64,12 @@ class parseCSV {
|
|||||||
----------------
|
----------------
|
||||||
# add row/entry to end of CSV file
|
# add row/entry to end of CSV file
|
||||||
# - only recommended when you know the exact structure of the file
|
# - only recommended when you know the exact structure of the file
|
||||||
$csv = new parseCSV();
|
$csv = new ParseCsvForPhp();
|
||||||
$csv->save('data.csv', array(array('1986', 'Home', 'Nowhere', '')), true);
|
$csv->save('data.csv', array(array('1986', 'Home', 'Nowhere', '')), true);
|
||||||
----------------
|
----------------
|
||||||
# convert 2D array to csv data and send headers
|
# convert 2D array to csv data and send headers
|
||||||
# to browser to treat output as a file and download it
|
# to browser to treat output as a file and download it
|
||||||
$csv = new parseCSV();
|
$csv = new ParseCsvForPhp();
|
||||||
$csv->output('movies.csv', $array, array('field 1', 'field 2'), ',');
|
$csv->output('movies.csv', $array, array('field 1', 'field 2'), ',');
|
||||||
----------------
|
----------------
|
||||||
*/
|
*/
|
||||||
@@ -450,7 +450,10 @@ class parseCSV {
|
|||||||
$flat_string = $this->unparse($data, $fields, null, null, $delimiter);
|
$flat_string = $this->unparse($data, $fields, null, null, $delimiter);
|
||||||
|
|
||||||
if (!is_null($filename)) {
|
if (!is_null($filename)) {
|
||||||
header('Content-type: application/csv');
|
$mime = $delimiter === "\t" ?
|
||||||
|
'text/tab-separated-values' :
|
||||||
|
'application/csv';
|
||||||
|
header('Content-type: ' . $mime);
|
||||||
header('Content-Length: ' . strlen($flat_string));
|
header('Content-Length: ' . strlen($flat_string));
|
||||||
header('Cache-Control: no-cache, must-revalidate');
|
header('Cache-Control: no-cache, must-revalidate');
|
||||||
header('Pragma: no-cache');
|
header('Pragma: no-cache');
|
||||||
@@ -730,6 +733,9 @@ class parseCSV {
|
|||||||
|
|
||||||
$this->sort_reverse ? krsort($rows, $sort_type) : ksort($rows, $sort_type);
|
$this->sort_reverse ? krsort($rows, $sort_type) : ksort($rows, $sort_type);
|
||||||
|
|
||||||
|
// Avoid issues with mixing string and integer keys:
|
||||||
|
$rows = array_values($rows);
|
||||||
|
|
||||||
if ($this->offset !== null || $this->limit !== null) {
|
if ($this->offset !== null || $this->limit !== null) {
|
||||||
$rows = array_slice($rows, ($this->offset === null ? 0 : $this->offset), $this->limit, true);
|
$rows = array_slice($rows, ($this->offset === null ? 0 : $this->offset), $this->limit, true);
|
||||||
}
|
}
|
||||||
39
README.md
39
README.md
@@ -1,11 +1,11 @@
|
|||||||
# parseCSV
|
# ParseCsvForPhp
|
||||||
|
|
||||||
parseCSV is an easy to use PHP class that reads and writes CSV data properly. It
|
This is an easy-to-use PHP class that reads and writes CSV data properly. It
|
||||||
fully conforms to the specifications outlined on the on the
|
fully conforms to the specifications outlined on the on the
|
||||||
[Wikipedia article][CSV] (and thus RFC 4180). It has many advanced features which help make your
|
[Wikipedia article][CSV] (and thus RFC 4180). It has many advanced features which help make your
|
||||||
life easier when dealing with CSV data.
|
life easier when dealing with CSV data.
|
||||||
|
|
||||||
You may not need a library at all: before using parseCSV, please make sure if PHP's own `str_getcsv()`, ``fgetcvs()`` or `fputcsv()` meets your needs.
|
You may not need a library at all: before using ParseCsvForPhp, please make sure if PHP's own `str_getcsv()`, ``fgetcvs()`` or `fputcsv()` meets your needs.
|
||||||
|
|
||||||
This library was originally created in early 2007 by [jimeh](https://github.com/jimeh) due to the lack of built-in
|
This library was originally created in early 2007 by [jimeh](https://github.com/jimeh) due to the lack of built-in
|
||||||
and third-party support for handling CSV data in PHP.
|
and third-party support for handling CSV data in PHP.
|
||||||
@@ -15,18 +15,16 @@ and third-party support for handling CSV data in PHP.
|
|||||||
## Installation
|
## Installation
|
||||||
Installation is easy using Composer. Include the following in your composer.json
|
Installation is easy using Composer. Include the following in your composer.json
|
||||||
```
|
```
|
||||||
"parsecsv/php-parsecsv": "0.4.5"
|
"parsecsv/php-parsecsv": "1.0.0"
|
||||||
```
|
```
|
||||||
|
|
||||||
You may also manually include the parsecsv.lib.php file
|
You may also manually include the ParseCsvForPhp.php file
|
||||||
```php
|
```php
|
||||||
require_once 'parsecsv.lib.php';
|
require_once 'ParseCsvForPhp.php';
|
||||||
```
|
```
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
* parseCSV is the only complete and fully featured CSV solution for PHP (as
|
|
||||||
far as I know).
|
|
||||||
* Supports enclosed values, enclosed commas, double quotes and new lines.
|
* Supports enclosed values, enclosed commas, double quotes and new lines.
|
||||||
* Automatic delimiter character detection.
|
* Automatic delimiter character detection.
|
||||||
* Sort data by specific fields/columns.
|
* Sort data by specific fields/columns.
|
||||||
@@ -36,9 +34,10 @@ require_once 'parsecsv.lib.php';
|
|||||||
* Error detection for incorrectly formatted input. It attempts to be
|
* Error detection for incorrectly formatted input. It attempts to be
|
||||||
intelligent, but can not be trusted 100% due to the structure of CSV, and
|
intelligent, but can not be trusted 100% due to the structure of CSV, and
|
||||||
how different programs like Excel for example outputs CSV data.
|
how different programs like Excel for example outputs CSV data.
|
||||||
* Support for character encoding conversion using PHP's _iconv_ function
|
* Support for character encoding conversion using PHP's
|
||||||
(requires PHP 5).
|
`iconv()` and `mb_convert_encoding()` functions (requires PHP 5).
|
||||||
* Supports PHP 5.4 and higher. It certainly works with PHP 7.2
|
* Supports PHP 5.4 and higher.
|
||||||
|
It certainly works with PHP 7.2 and all versions in between.
|
||||||
|
|
||||||
|
|
||||||
## Example Usage
|
## Example Usage
|
||||||
@@ -46,14 +45,14 @@ require_once 'parsecsv.lib.php';
|
|||||||
**General**
|
**General**
|
||||||
|
|
||||||
```php
|
```php
|
||||||
$csv = new parseCSV('data.csv');
|
$csv = new ParseCsvForPhp('data.csv');
|
||||||
print_r($csv->data);
|
print_r($csv->data);
|
||||||
```
|
```
|
||||||
|
|
||||||
**Tab delimited, and encoding conversion**
|
**Tab delimited, and encoding conversion**
|
||||||
|
|
||||||
```php
|
```php
|
||||||
$csv = new parseCSV();
|
$csv = new ParseCsvForPhp();
|
||||||
$csv->encoding('UTF-16', 'UTF-8');
|
$csv->encoding('UTF-16', 'UTF-8');
|
||||||
$csv->delimiter = "\t";
|
$csv->delimiter = "\t";
|
||||||
$csv->parse('data.tsv');
|
$csv->parse('data.tsv');
|
||||||
@@ -63,7 +62,7 @@ print_r($csv->data);
|
|||||||
**Auto-detect delimiter character**
|
**Auto-detect delimiter character**
|
||||||
|
|
||||||
```php
|
```php
|
||||||
$csv = new parseCSV();
|
$csv = new ParseCsvForPhp();
|
||||||
$csv->auto('data.csv');
|
$csv->auto('data.csv');
|
||||||
print_r($csv->data);
|
print_r($csv->data);
|
||||||
```
|
```
|
||||||
@@ -71,7 +70,7 @@ print_r($csv->data);
|
|||||||
**Modify data in a CSV file**
|
**Modify data in a CSV file**
|
||||||
|
|
||||||
```php
|
```php
|
||||||
$csv = new parseCSV();
|
$csv = new ParseCsvForPhp();
|
||||||
$csv->sort_by = 'id';
|
$csv->sort_by = 'id';
|
||||||
$csv->parse('data.csv');
|
$csv->parse('data.csv');
|
||||||
# "4" is the value of the "id" column of the CSV row
|
# "4" is the value of the "id" column of the CSV row
|
||||||
@@ -82,7 +81,7 @@ $csv->save();
|
|||||||
**Replace field names or set ones if missing**
|
**Replace field names or set ones if missing**
|
||||||
|
|
||||||
```php
|
```php
|
||||||
$csv = new parseCSV();
|
$csv = new ParseCsvForPhp();
|
||||||
$csv->fields = ['id', 'name', 'category']
|
$csv->fields = ['id', 'name', 'category']
|
||||||
$csv->parse('data.csv');
|
$csv->parse('data.csv');
|
||||||
```
|
```
|
||||||
@@ -92,15 +91,15 @@ $csv->parse('data.csv');
|
|||||||
_Only recommended when you know the exact structure of the file._
|
_Only recommended when you know the exact structure of the file._
|
||||||
|
|
||||||
```php
|
```php
|
||||||
$csv = new parseCSV();
|
$csv = new ParseCsvForPhp();
|
||||||
$csv->save('data.csv', array(array('1986', 'Home', 'Nowhere', '')), true);
|
$csv->save('data.csv', array(array('1986', 'Home', 'Nowhere', '')), true);
|
||||||
```
|
```
|
||||||
|
|
||||||
**Convert 2D array to csv data and send headers to browser to treat output as
|
**Convert 2D array to CSV data and send headers to browser to treat output as
|
||||||
a file and download it**
|
a file and download it**
|
||||||
|
|
||||||
```php
|
```php
|
||||||
$csv = new parseCSV();
|
$csv = new ParseCsvForPhp();
|
||||||
$csv->output('movies.csv', $array, array('field 1', 'field 2'), ',');
|
$csv->output('movies.csv', $array, array('field 1', 'field 2'), ',');
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -108,7 +107,7 @@ For more complex examples, see the ``tests`` and `examples` directories.
|
|||||||
|
|
||||||
## Credits
|
## Credits
|
||||||
|
|
||||||
* parseCSV is based on the concept of [Ming Hong Ng][ming]'s [CsvFileParser][]
|
* ParseCsvForPhp is based on the concept of [Ming Hong Ng][ming]'s [CsvFileParser][]
|
||||||
class.
|
class.
|
||||||
|
|
||||||
[ming]: http://minghong.blogspot.com/
|
[ming]: http://minghong.blogspot.com/
|
||||||
|
|||||||
@@ -2,12 +2,12 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
|
||||||
# include parseCSV class.
|
# include ParseCsvForPhp class.
|
||||||
require_once('../parsecsv.lib.php');
|
require_once('../ParseCsvForPhp.php');
|
||||||
|
|
||||||
|
|
||||||
# create new parseCSV object.
|
# create new object.
|
||||||
$csv = new parseCSV();
|
$csv = new ParseCsvForPhp();
|
||||||
|
|
||||||
|
|
||||||
# Parse '_books.csv' using automatic delimiter detection...
|
# Parse '_books.csv' using automatic delimiter detection...
|
||||||
|
|||||||
@@ -2,12 +2,12 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
|
||||||
# include parseCSV class.
|
# include ParseCsvForPhp class.
|
||||||
require_once('../parsecsv.lib.php');
|
require_once('../ParseCsvForPhp.php');
|
||||||
|
|
||||||
|
|
||||||
# create new parseCSV object.
|
# create new object.
|
||||||
$csv = new parseCSV();
|
$csv = new ParseCsvForPhp();
|
||||||
|
|
||||||
|
|
||||||
# Example conditions:
|
# Example conditions:
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
|
||||||
# include parseCSV class.
|
# include ParseCsvForPhp class.
|
||||||
require_once('../parsecsv.lib.php');
|
require_once('../ParseCsvForPhp.php');
|
||||||
|
|
||||||
|
|
||||||
# create new parseCSV object.
|
# create new object.
|
||||||
$csv = new parseCSV();
|
$csv = new ParseCsvForPhp();
|
||||||
|
|
||||||
|
|
||||||
# Parse '_books.csv' using automatic delimiter detection...
|
# Parse '_books.csv' using automatic delimiter detection...
|
||||||
@@ -31,4 +31,4 @@ $csv->output('books.csv');
|
|||||||
# or is set to null, output will only return the generated CSV
|
# or is set to null, output will only return the generated CSV
|
||||||
# output data, and will not output to the browser itself.
|
# output data, and will not output to the browser itself.
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|||||||
@@ -2,12 +2,12 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
|
||||||
# include parseCSV class.
|
# include class.
|
||||||
require_once('../parsecsv.lib.php');
|
require_once('../ParseCsvForPhp.php');
|
||||||
|
|
||||||
|
|
||||||
# create new parseCSV object.
|
# create new object.
|
||||||
$csv = new parseCSV();
|
$csv = new ParseCsvForPhp();
|
||||||
|
|
||||||
|
|
||||||
# if sorting is enabled, the whole CSV file
|
# if sorting is enabled, the whole CSV file
|
||||||
|
|||||||
@@ -3,9 +3,11 @@
|
|||||||
$dir = realpath(__DIR__);
|
$dir = realpath(__DIR__);
|
||||||
defined('BASE') OR define('BASE', dirname($dir) . '/');
|
defined('BASE') OR define('BASE', dirname($dir) . '/');
|
||||||
|
|
||||||
require_once BASE . 'parsecsv.lib.php';
|
require_once BASE . 'ParseCsvForPhp.php';
|
||||||
|
|
||||||
if (!class_exists('PHPUnit\Framework\TestCase')) {
|
if (!class_exists('PHPUnit\Framework\TestCase')) {
|
||||||
// we run on an older PHPUnit version without namespaces.
|
// we run on an older PHPUnit version without namespaces.
|
||||||
require_once __DIR__ . '/PHPUnit_Framework_TestCase.inc.php';
|
require_once __DIR__ . '/PHPUnit_Framework_TestCase.inc.php';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
require_once BASE . 'tests/properties/BaseClass.php';
|
||||||
|
|||||||
@@ -3,66 +3,42 @@
|
|||||||
class ConstructTest extends PHPUnit\Framework\TestCase {
|
class ConstructTest extends PHPUnit\Framework\TestCase {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CSV
|
|
||||||
* The parseCSV object
|
|
||||||
*
|
|
||||||
* @access protected
|
* @access protected
|
||||||
* @var [parseCSV]
|
* @var ParseCsvForPhp object
|
||||||
*/
|
*/
|
||||||
protected $csv = null;
|
protected $csv = null;
|
||||||
|
|
||||||
/**
|
|
||||||
* Setup
|
|
||||||
* Setup our test environment objects
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
|
||||||
public function setUp() {
|
|
||||||
//setup parse CSV
|
|
||||||
#$this->csv = new parseCSV();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tear down
|
|
||||||
* Tear down our test environment objects
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
|
||||||
public function tearDown() {
|
|
||||||
$this->csv = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function test_offset_param() {
|
public function test_offset_param() {
|
||||||
$offset = 10;
|
$offset = 10;
|
||||||
$this->csv = new parseCSV(null, $offset);
|
$this->csv = new ParseCsvForPhp(null, $offset);
|
||||||
$this->assertTrue(is_numeric($this->csv->offset));
|
$this->assertTrue(is_numeric($this->csv->offset));
|
||||||
$this->assertEquals($offset, $this->csv->offset);
|
$this->assertEquals($offset, $this->csv->offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function test_limit_param() {
|
public function test_limit_param() {
|
||||||
$limit = 10;
|
$limit = 10;
|
||||||
$this->csv = new parseCSV(null, null, $limit);
|
$this->csv = new ParseCsvForPhp(null, null, $limit);
|
||||||
$this->assertTrue(is_numeric($this->csv->limit));
|
$this->assertTrue(is_numeric($this->csv->limit));
|
||||||
$this->assertEquals($limit, $this->csv->limit);
|
$this->assertEquals($limit, $this->csv->limit);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function test_conditions_param() {
|
public function test_conditions_param() {
|
||||||
$conditions = 'some column NOT value';
|
$conditions = 'some column NOT value';
|
||||||
$this->csv = new parseCSV(null, null, null, $conditions);
|
$this->csv = new ParseCsvForPhp(null, null, null, $conditions);
|
||||||
$this->assertTrue(is_string($this->csv->conditions));
|
$this->assertTrue(is_string($this->csv->conditions));
|
||||||
$this->assertEquals($conditions, $this->csv->conditions);
|
$this->assertEquals($conditions, $this->csv->conditions);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function test_keep_file_data_param() {
|
public function test_keep_file_data_param() {
|
||||||
$keep = true;
|
$keep = true;
|
||||||
$this->csv = new parseCSV(null, null, null, null, $keep);
|
$this->csv = new ParseCsvForPhp(null, null, null, null, $keep);
|
||||||
$this->assertTrue(is_bool($this->csv->keep_file_data));
|
$this->assertTrue(is_bool($this->csv->keep_file_data));
|
||||||
$this->assertEquals($keep, $this->csv->keep_file_data);
|
$this->assertEquals($keep, $this->csv->keep_file_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function test_input_param() {
|
public function test_input_param() {
|
||||||
$csv = "col1,col2,col3\r\nval1,val2,val3\r\nval1A,val2A,val3A\r\n";
|
$csv = "col1,col2,col3\r\nval1,val2,val3\r\nval1A,val2A,val3A\r\n";
|
||||||
$this->csv = new parseCSV($csv, null, null, null, true);
|
$this->csv = new ParseCsvForPhp($csv, null, null, null, true);
|
||||||
$this->assertTrue(is_string($this->csv->file_data));
|
$this->assertTrue(is_string($this->csv->file_data));
|
||||||
$this->assertEquals($csv, $this->csv->file_data);
|
$this->assertEquals($csv, $this->csv->file_data);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,11 +3,8 @@
|
|||||||
class ParseTest extends PHPUnit\Framework\TestCase {
|
class ParseTest extends PHPUnit\Framework\TestCase {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CSV
|
|
||||||
* The parseCSV object
|
|
||||||
*
|
|
||||||
* @access protected
|
* @access protected
|
||||||
* @var parseCSV
|
* @var ParseCsvForPhp
|
||||||
*/
|
*/
|
||||||
protected $csv;
|
protected $csv;
|
||||||
|
|
||||||
@@ -18,7 +15,7 @@ class ParseTest extends PHPUnit\Framework\TestCase {
|
|||||||
* @access public
|
* @access public
|
||||||
*/
|
*/
|
||||||
public function setUp() {
|
public function setUp() {
|
||||||
$this->csv = new parseCSV();
|
$this->csv = new ParseCsvForPhp();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function test_parse() {
|
public function test_parse() {
|
||||||
@@ -152,8 +149,8 @@ class ParseTest extends PHPUnit\Framework\TestCase {
|
|||||||
|
|
||||||
public function autoQuotesDataProvider() {
|
public function autoQuotesDataProvider() {
|
||||||
return array(
|
return array(
|
||||||
array('tests/methods/fixtures/auto-double-enclosure.csv', '"'),
|
array('auto-double-enclosure.csv', '"'),
|
||||||
array('tests/methods/fixtures/auto-single-enclosure.csv', "'"),
|
array('auto-single-enclosure.csv', "'"),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -164,8 +161,8 @@ class ParseTest extends PHPUnit\Framework\TestCase {
|
|||||||
* @param string $enclosure
|
* @param string $enclosure
|
||||||
*/
|
*/
|
||||||
public function testAutoQuotes($file, $enclosure) {
|
public function testAutoQuotes($file, $enclosure) {
|
||||||
$csv = new parseCSV();
|
$csv = new ParseCsvForPhp();
|
||||||
$csv->auto($file, true, null, null, $enclosure);
|
$csv->auto(__DIR__ . '/../example_files/' . $file, true, null, null, $enclosure);
|
||||||
$this->assertArrayHasKey('column1', $csv->data[0], 'Data parsed incorrectly with enclosure ' . $enclosure);
|
$this->assertArrayHasKey('column1', $csv->data[0], 'Data parsed incorrectly with enclosure ' . $enclosure);
|
||||||
$this->assertEquals('value1', $csv->data[0]['column1'], 'Data parsed incorrectly with enclosure ' . $enclosure);
|
$this->assertEquals('value1', $csv->data[0]['column1'], 'Data parsed incorrectly with enclosure ' . $enclosure);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
class SaveTest extends PHPUnit\Framework\TestCase {
|
class SaveTest extends PHPUnit\Framework\TestCase {
|
||||||
|
|
||||||
/** @var parseCSV */
|
/** @var ParseCsvForPhp */
|
||||||
private $csv;
|
private $csv;
|
||||||
|
|
||||||
private $temp_filename;
|
private $temp_filename;
|
||||||
@@ -11,7 +11,7 @@ class SaveTest extends PHPUnit\Framework\TestCase {
|
|||||||
* Setup our test environment objects; will be called before each test.
|
* Setup our test environment objects; will be called before each test.
|
||||||
*/
|
*/
|
||||||
public function setUp() {
|
public function setUp() {
|
||||||
$this->csv = new parseCSV();
|
$this->csv = new ParseCsvForPhp();
|
||||||
$this->csv->auto(__DIR__ . '/../example_files/single_column.csv');
|
$this->csv->auto(__DIR__ . '/../example_files/single_column.csv');
|
||||||
|
|
||||||
// Remove last 2 lines to simplify comparison
|
// Remove last 2 lines to simplify comparison
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
stopOnIncomplete="true"
|
stopOnIncomplete="true"
|
||||||
stopOnSkipped="false">
|
stopOnSkipped="false">
|
||||||
<testsuites>
|
<testsuites>
|
||||||
<testsuite name="parseCSV Test Suite">
|
<testsuite name="ParseCsvForPhp Test Suite">
|
||||||
<directory suffix="est.php">properties/</directory>
|
<directory suffix="est.php">properties/</directory>
|
||||||
<directory suffix="est.php">methods/</directory>
|
<directory suffix="est.php">methods/</directory>
|
||||||
</testsuite>
|
</testsuite>
|
||||||
|
|||||||
28
tests/properties/BaseClass.php
Normal file
28
tests/properties/BaseClass.php
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class BaseClass extends PHPUnit\Framework\TestCase {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @access protected
|
||||||
|
* @var ParseCsvForPhp object
|
||||||
|
*/
|
||||||
|
protected $csv;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setup
|
||||||
|
* Setup our test environment objects
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
public function setUp() {
|
||||||
|
$this->csv = new ParseCsvForPhp();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function _compareWithExpected($expected) {
|
||||||
|
$this->csv->auto(__DIR__ . '/../../examples/_books.csv');
|
||||||
|
$actual = array_map(function ($row) {
|
||||||
|
return $row['title'];
|
||||||
|
}, $this->csv->data);
|
||||||
|
$this->assertEquals($expected, $actual);
|
||||||
|
}
|
||||||
|
}
|
||||||
47
tests/properties/ConditionsTest.php
Normal file
47
tests/properties/ConditionsTest.php
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class ConditionsTest extends BaseClass {
|
||||||
|
|
||||||
|
public function testNotDanBrown() {
|
||||||
|
$this->csv->conditions = 'author does not contain dan brown';
|
||||||
|
|
||||||
|
$this->_compareWithExpected([
|
||||||
|
'The Killing Kind',
|
||||||
|
'The Third Secret',
|
||||||
|
'The Last Templar',
|
||||||
|
'The Traveller',
|
||||||
|
'Crisis Four',
|
||||||
|
'Prey',
|
||||||
|
'The Broker (Paperback)',
|
||||||
|
'Without Blood (Paperback)',
|
||||||
|
'State of Fear (Paperback)',
|
||||||
|
'The Rule of Four (Paperback)',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testRating() {
|
||||||
|
$this->csv->conditions = 'rating < 3';
|
||||||
|
$this->_compareWithExpected([
|
||||||
|
'The Killing Kind',
|
||||||
|
'The Third Secret',
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->csv->conditions = 'rating >= 5';
|
||||||
|
$this->_compareWithExpected([
|
||||||
|
'The Traveller',
|
||||||
|
'Prey',
|
||||||
|
'State of Fear (Paperback)',
|
||||||
|
'Digital Fortress : A Thriller (Mass Market Paperback)',
|
||||||
|
'Angels & Demons (Mass Market Paperback)',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testTitleContainsSecretOrCode() {
|
||||||
|
$this->csv->conditions = 'title contains code OR title contains SECRET';
|
||||||
|
|
||||||
|
$this->_compareWithExpected([
|
||||||
|
'The Third Secret',
|
||||||
|
'The Da Vinci Code (Hardcover)',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
58
tests/properties/SortByTest.php
Normal file
58
tests/properties/SortByTest.php
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class SortByTest extends BaseClass {
|
||||||
|
|
||||||
|
public function testSortByRating() {
|
||||||
|
$this->csv->sort_by = 'rating';
|
||||||
|
$this->csv->conditions = 'title does not contain Blood';
|
||||||
|
$this->_compareWithExpected([
|
||||||
|
// Rating 0
|
||||||
|
'The Killing Kind',
|
||||||
|
'The Third Secret',
|
||||||
|
|
||||||
|
// Rating 3
|
||||||
|
'The Last Templar',
|
||||||
|
'The Broker (Paperback)',
|
||||||
|
|
||||||
|
// Rating 4
|
||||||
|
'Deception Point (Paperback)',
|
||||||
|
'The Rule of Four (Paperback)',
|
||||||
|
'The Da Vinci Code (Hardcover)',
|
||||||
|
|
||||||
|
// Rating 5
|
||||||
|
'State of Fear (Paperback)',
|
||||||
|
'Prey',
|
||||||
|
'Digital Fortress : A Thriller (Mass Market Paperback)',
|
||||||
|
'Angels & Demons (Mass Market Paperback)',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testReverseSortByRating() {
|
||||||
|
$this->csv->sort_by = 'rating';
|
||||||
|
$this->csv->conditions =
|
||||||
|
'title does not contain Prey AND ' .
|
||||||
|
'title does not contain Fortress AND ' .
|
||||||
|
'title does not contain Blood AND ' .
|
||||||
|
'title does not contain Fear';
|
||||||
|
$this->csv->sort_reverse = true;
|
||||||
|
$this->_compareWithExpected([
|
||||||
|
|
||||||
|
// Rating 5
|
||||||
|
'Angels & Demons (Mass Market Paperback)',
|
||||||
|
'The Traveller',
|
||||||
|
|
||||||
|
// Rating 4
|
||||||
|
'The Da Vinci Code (Hardcover)',
|
||||||
|
'The Rule of Four (Paperback)',
|
||||||
|
'Deception Point (Paperback)',
|
||||||
|
|
||||||
|
// Rating 3
|
||||||
|
'The Broker (Paperback)',
|
||||||
|
'The Last Templar',
|
||||||
|
|
||||||
|
// Rating 0
|
||||||
|
'The Third Secret',
|
||||||
|
'The Killing Kind',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,11 +3,8 @@
|
|||||||
class default_values_properties_Test extends PHPUnit\Framework\TestCase {
|
class default_values_properties_Test extends PHPUnit\Framework\TestCase {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CSV
|
|
||||||
* The parseCSV object
|
|
||||||
*
|
|
||||||
* @access protected
|
* @access protected
|
||||||
* @var [parseCSV]
|
* @var ParseCsvForPhp object
|
||||||
*/
|
*/
|
||||||
protected $csv = null;
|
protected $csv = null;
|
||||||
|
|
||||||
@@ -19,17 +16,7 @@ class default_values_properties_Test extends PHPUnit\Framework\TestCase {
|
|||||||
*/
|
*/
|
||||||
public function setUp() {
|
public function setUp() {
|
||||||
//setup parse CSV
|
//setup parse CSV
|
||||||
$this->csv = new parseCSV();
|
$this->csv = new ParseCsvForPhp();
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tear down
|
|
||||||
* Tear down our test environment objects
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
|
||||||
public function tearDown() {
|
|
||||||
$this->csv = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function test_heading_default() {
|
public function test_heading_default() {
|
||||||
|
|||||||
@@ -3,11 +3,8 @@
|
|||||||
class worthless_properties_Test extends PHPUnit\Framework\TestCase {
|
class worthless_properties_Test extends PHPUnit\Framework\TestCase {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CSV
|
|
||||||
* The parseCSV object
|
|
||||||
*
|
|
||||||
* @access protected
|
* @access protected
|
||||||
* @var [parseCSV]
|
* @var ParseCsvForPhp
|
||||||
*/
|
*/
|
||||||
protected $csv = null;
|
protected $csv = null;
|
||||||
|
|
||||||
@@ -16,7 +13,7 @@ class worthless_properties_Test extends PHPUnit\Framework\TestCase {
|
|||||||
* The reflection class object
|
* The reflection class object
|
||||||
*
|
*
|
||||||
* @access protected
|
* @access protected
|
||||||
* @var [ReflectionClass]
|
* @var ReflectionClass
|
||||||
*/
|
*/
|
||||||
protected $reflection = null;
|
protected $reflection = null;
|
||||||
|
|
||||||
@@ -25,6 +22,7 @@ class worthless_properties_Test extends PHPUnit\Framework\TestCase {
|
|||||||
* The reflected class properties
|
* The reflected class properties
|
||||||
*
|
*
|
||||||
* @access protected
|
* @access protected
|
||||||
|
* @var ReflectionProperty[]
|
||||||
*/
|
*/
|
||||||
protected $properties = null;
|
protected $properties = null;
|
||||||
|
|
||||||
@@ -36,7 +34,7 @@ class worthless_properties_Test extends PHPUnit\Framework\TestCase {
|
|||||||
*/
|
*/
|
||||||
public function setUp() {
|
public function setUp() {
|
||||||
//setup parse CSV
|
//setup parse CSV
|
||||||
$this->csv = new parseCSV();
|
$this->csv = new ParseCsvForPhp();
|
||||||
|
|
||||||
//setup the reflection class
|
//setup the reflection class
|
||||||
$this->reflection = new ReflectionClass($this->csv);
|
$this->reflection = new ReflectionClass($this->csv);
|
||||||
@@ -107,7 +105,7 @@ class worthless_properties_Test extends PHPUnit\Framework\TestCase {
|
|||||||
'error',
|
'error',
|
||||||
'error_info',
|
'error_info',
|
||||||
'titles',
|
'titles',
|
||||||
'data'
|
'data',
|
||||||
);
|
);
|
||||||
|
|
||||||
// Find our real properties
|
// Find our real properties
|
||||||
@@ -129,7 +127,7 @@ class worthless_properties_Test extends PHPUnit\Framework\TestCase {
|
|||||||
public function test_count_public_properties() {
|
public function test_count_public_properties() {
|
||||||
$counter = 0;
|
$counter = 0;
|
||||||
|
|
||||||
for ($a = 0; $a < count($this->properties); $a++) {
|
for ($a = count($this->properties) - 1; $a >= 0; $a--) {
|
||||||
if ($this->properties[$a]->isPublic() === true) {
|
if ($this->properties[$a]->isPublic() === true) {
|
||||||
$counter++;
|
$counter++;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user