<?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) 
       ); 
    }  
} 
 
 |