<?php
require_once 'PHPUnit/Framework/TestCase.php';
require_once 'FilePatternSplitter.php';
/**
* test case.
*/
class FilePatternSplitterTest extends PHPUnit_Framework_TestCase {
public $obj;
/**
* Prepares the environment before running a test.
*/
protected function setUp() {
parent::setUp ();
$this->obj = new FilePatternSplitter;
}
/**
* Cleans up the environment after running a test.
*/
protected function tearDown() {
parent::tearDown ();
$this->obj->cleanup(getcwd());
}
public function testGetPatternPositions() {
$s = 'xxabcxxbbcxxxx';
$p = array('/[^x]+/');
$expected = array(array('abc', 2, $p[0]), array('bbc', 7, $p[0]));
$method = $this->getMethod('getPatternPositions');
$actual = $method->invokeArgs($this->obj, array($s, $p));
$this->assertEquals($expected, $actual);
}
public function testGetFirstPattern(){
$s = 'xxabcxxbbcxxxx';
$p = array('/[^x]+/');
$expected = array('abc', 2, $p[0]);
$method = $this->getMethod('getPatternPositions');
$patternpositions = $method->invokeArgs($this->obj, array($s, $p));
$method = $this->getMethod('getFirstPattern');
$actual = $method->invokeArgs($this->obj, array($patternpositions));
$this->assertEquals($expected, $actual);
}
public function testGetPrefix(){
$expected = 'fps00006_';
$method = $this->getMethod('getPrefix');
$actual = $method->invokeArgs($this->obj, array(6));
$this->assertEquals($expected, $actual);
}
public function testGetFPSFiles(){
$cwd = getcwd();
$expected = array(
$cwd.DIRECTORY_SEPARATOR.'fps00001_test.txt',
$cwd.DIRECTORY_SEPARATOR.'fps00002_test.txt'
);
touch($expected[0]);
touch($expected[1]);
$method = $this->getMethod('getFPSFiles');
$actual = $method->invokeArgs($this->obj,array($cwd));
$this->assertEquals($expected, $actual);
unlink($expected[0]);
unlink($expected[1]);
}
/**
* @expectedException InvalidArgumentException
*/
public function testGetFPSFilesException(){
$method = $this->getMethod('getFPSFiles');
$actual = $method->invokeArgs($this->obj,array(''));
}
public function testGetOutFH(){
$filenum = 9;
$file = 'test__.txt';
$newfile = 'fps00009_'.$file;
//print "\n".$newfile."\n";
$this->assertFalse(file_exists($newfile), 'newfile does not exist');
$method = $this->getMethod('getOutFH');
$fh = $method->invokeArgs($this->obj,array($filenum, $file));
$this->assertTrue(file_exists($newfile), 'newfile exists');
$this->assertTrue(get_resource_type($fh) == 'stream', 'fh is a filehandle' );
fclose($fh);
unlink($newfile);
}
public function testMergeFile(){
$fcontents1 = "a\nb\nc\n";
$file1 = 'fps00001_test1__.txt';
file_put_contents($file1, $fcontents1);
$mergefile = $file1.'.merged';
$fh = fopen($mergefile, 'w');
$method = $this->getMethod('mergeFile');
$method->invokeArgs($this->obj,array($file1, $fh));
fclose($fh);
$fcontents2 = file_get_contents($mergefile);
unlink($file1);
unlink($mergefile);
$this->assertEquals($fcontents1, $fcontents2);
}
public function testMergeFiles(){
$fcontents1 = "a\nb\nc\n";
$file1 = 'fps00001_test1__.txt';
file_put_contents($file1, $fcontents1);
$fcontents2 = "d\ne\nf\n";
$file2 = 'fps00002_test1__.txt';
file_put_contents($file2, $fcontents2);
$mergefile = 'test1__.txt.merged';
$method = $this->getMethod('mergeFiles');
$method->invokeArgs($this->obj,array(array($file1, $file2)));
$mcontents = file_get_contents($mergefile);
unlink($file1);
unlink($file2);
unlink($mergefile);
$this->assertEquals($fcontents1.$fcontents2, $mcontents);
}
public function testMerge(){
$fcontents1 = "a\nb\nc\n";
$file1 = 'fps00001_test1__.txt';
file_put_contents($file1, $fcontents1);
$fcontents2 = "d\ne\nf\n";
$file2 = 'fps00002_test1__.txt';
file_put_contents($file2, $fcontents2);
$mergefile = 'test1__.txt.merged';
$this->obj->merge(getcwd());
$mcontents = file_get_contents($mergefile);
unlink($file1);
unlink($file2);
unlink($mergefile);
$this->assertEquals($fcontents1.$fcontents2, $mcontents);
}
/**
* @expectedException InvalidArgumentException
*/
public function testMergeException1(){
$this->obj->merge('whatever');
$this->assertTrue(false);
}
/**
* @expectedException RuntimeException
*/
public function testMergeException2(){
$this->obj->merge(getcwd());
$this->assertTrue(false);
}
public function testCheckLine(){
$line = 'aaaaa';
$method = $this->getMethod('checkLine');
$method->invokeArgs($this->obj,array($line, 1, ini_get('pcre.backtrack_limit')));
}
/**
* @expectedException RuntimeException
*/
public function testCheckLine2(){
$line='a';
for ($i=0; $i<100001; $i++){
$line .= 'a';
}
$method = $this->getMethod('checkLine');
$method->invokeArgs($this->obj,array($line, 1, ini_get('pcre.backtrack_limit')));
}
public function testSplit(){
$fcontents1 = "a\nb\nc\nd\ne\nc";
$file1 = 'test1__.txt';
file_put_contents($file1, $fcontents1);
$fps1 = 'fps00001_'.$file1;
$fps2 = 'fps00002_'.$file1;
$fps3 = 'fps00003_'.$file1;
$this->assertFalse(file_exists($fps1), 'fps1 does not exist');
$this->assertFalse(file_exists($fps2), 'fps2 does not exist');
$this->assertFalse(file_exists($fps3), 'fps3 does not exist');
$this->obj->split($file1, array('/b/'));
$this->assertTrue(file_exists($fps1), 'fps2 does exist');
$this->assertTrue(file_exists($fps2), 'fps2 does exist');
$this->assertFalse(file_exists($fps3), 'fps3 does not exist');
unlink($file1);
unlink($fps1);
unlink($fps2);
}
/**
* @expectedException InvalidArgumentException
*/
public function testSplitException1(){
$this->obj->split('nonexistent file', array());
$this->assertTrue(false);
}
/**
* @expectedException InvalidArgumentException
*/
public function testSplitException2(){
$this->obj->split('FilePatternSplitterTest.php', array());
$this->assertTrue(false);
}
/**
* @expectedException InvalidArgumentException
*/
public function testHandleArgvException(){
$this->obj->handleArgv(array());
}
/**
* @expectedException InvalidArgumentException
*/
public function testHandleArgvException1(){
$this->obj->handleArgv(array('', 'something'));
}
/**
* @expectedException InvalidArgumentException
*/
public function testHandleArgvSplit(){
$fcontents1 = "a\nb\nc\nd\ne\nc";
$file1 = 'test1__.txt';
file_put_contents($file1, $fcontents1);
$this->obj->handleArgv(array('', 'split', $file1));
unlink($file1);
}
public function testHandleArgvSplit1(){
$fcontents1 = "a\nb\nc\nd\ne\nc";
$file1 = 'test1__.txt';
file_put_contents($file1, $fcontents1);
$this->obj->handleArgv(array('', 'split', $file1, '/b/'));
unlink($file1);
}
public function testHandleArgvMerge(){
$fcontents1 = "a\nb\nc\n";
$file1 = 'fps00001_test1__.txt';
file_put_contents($file1, $fcontents1);
$this->obj->handleArgv(array('', 'merge', '.'));
unlink($file1);
unlink('test1__.txt.merged');
}
/**
* @expectedException InvalidArgumentException
*/
public function testHandleArgvMerge2(){
$this->obj->handleArgv(array('', 'merge'));
}
protected static function getMethod($name) {
$class = new ReflectionClass('FilePatternSplitter');
$method = $class->getMethod($name);
$method->setAccessible(true);
return $method;
}
public function testSplitAndMerge(){
$fcontents = "a\nb\nc\nd\ne\nc";
$file = 'test1__.txt';
file_put_contents($file, $fcontents);
$this->obj->handleArgv(array('', 'split', $file, '/b/'));
$this->obj->handleArgv(array('', 'merge', '.'));
$mergedfile = 'test1__.txt';
$mergedcontents = file_get_contents($mergedfile);
$this->assertEquals($fcontents, $mergedcontents);
unlink($file);
}
public function testSplitAndMergeWindowsLinebreaks(){
$fcontents = "a\r\nb\r\nc\r\nd\r\ne\r\nc";
$file = 'test1__.txt';
file_put_contents($file, $fcontents);
$this->obj->handleArgv(array('', 'split', $file, '/b/'));
$this->obj->handleArgv(array('', 'merge', '.'));
$mergedfile = 'test1__.txt';
$mergedcontents = file_get_contents($mergedfile);
$this->assertEquals($fcontents, $mergedcontents);
unlink($file);
}
public function testCleanup(){
$file1 = 'fps00001_test1__.txt';
$file2 = 'test1__.txt.merged';
touch($file1);
touch($file2);
$this->assertTrue(file_exists($file1), 'file1 does exist');
$this->assertTrue(file_exists($file2), 'file2 does exist');
$this->obj->handleArgv(array('', 'cleanup', '.'));
$this->assertFalse(file_exists($file1), 'file1 does not exist');
$this->assertFalse(file_exists($file2), 'file2 does not exist');
}
/**
* @expectedException InvalidArgumentException
*/
public function testCleanupException(){
$this->obj->cleanup('nonexistingdir');
}
}
|