<?php
/**
* Rule Test
*
* @link https://github.com/picamator/SplitCSV
* @license http://opensource.org/licenses/BSD-3-Clause New BSD License
*/
namespace SplitCSV\Rule;
class RuleTest extends \SplitCSV\BaseTest
{
/**
* @dataProvider providerFileSize
* @param array $options
* @param string $source_path
* @param integer $expected_parts
*/
public function testFileSize(array $options, $source_path, $exptected_parts)
{
$file = fopen($this->getDataPath($source_path), 'r');
// create and decorate rule
$rule = new FileSize($options);
// run and let check where it should be split
$actual_parts = $this->splitBy($rule, $file);
// asserts
$this->assertEquals($exptected_parts, $actual_parts);
}
/**
* @dataProvider providerNumberRow
* @param array $options
* @param string $source_path
* @param integer $expected_parts
*/
public function testNumberRow(array $options, $source_path, $exptected_parts)
{
$file = fopen($this->getDataPath($source_path), 'r');
// create and decorate rule
$rule = new NumberRow($options);
// run and let check where it should be split
$actual_parts = $this->splitBy($rule, $file);
// asserts
$this->assertEquals($exptected_parts, $actual_parts);
}
/**
* Split By Rule
*
* @param \SplitCSV\Rule\RuleInterface $rule
* @param source $file
* @return integer - number of files that is going to br created
*/
protected function splitBy(\SplitCSV\Rule\RuleInterface $rule, $file)
{
// run and let check where it should be split
$result = 0;
$i = 0;
while (($row = fgetcsv($file, null, ';', '"')) !== FALSE) {
$i++;
if($i == 1) {
// skip first row
continue;
}
if ($rule->isSplit($row)) {
// new split file should be created
$result++;
}
}
return ++$result;
}
public function providerFileSize()
{
return array(
array(array('size' => '100kb'), 'test-10000-rows-357kb.csv', 4),
array(array('size' => '150Kb'), 'test-10000-rows-357kb.csv', 3),
array(array('size' => '300kB'), 'test-10000-rows-357kb.csv', 2),
array(array('size' => '1Mb'), 'test-10000-rows-357kb.csv', 1)
);
}
public function providerNumberRow()
{
return array(
array(array('number_row' => 10), 'test-10000-rows-357kb.csv', 1001),
array(array('number_row' => 20), 'test-10000-rows-357kb.csv', 501),
array(array('number_row' => 50), 'test-10000-rows-357kb.csv', 201),
array(array('number_row' => 120), 'test-10000-rows-357kb.csv', 84)
);
}
}
|