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