public function testMerge() { $segmentsDirectory = new Directory\Filesystem(__DIR__ . '/_source/_files'); $outputDirectory = new Directory\Filesystem(__DIR__ . '/_files'); $segmentsList = array('_0', '_1', '_2', '_3', '_4'); $segmentMerger = new Index\SegmentMerger($outputDirectory, 'mergedSegment'); foreach ($segmentsList as $segmentName) { $segmentMerger->addSource(new Index\SegmentInfo($segmentsDirectory, $segmentName, 2)); } $mergedSegment = $segmentMerger->merge(); $this->assertTrue($mergedSegment instanceof Index\SegmentInfo); unset($mergedSegment); $mergedFile = $outputDirectory->getFileObject('mergedSegment.cfs'); $mergedFileData = $mergedFile->readBytes($outputDirectory->fileLength('mergedSegment.cfs')); $sampleFile = $outputDirectory->getFileObject('mergedSegment.cfs.sample'); $sampleFileData = $sampleFile->readBytes($outputDirectory->fileLength('mergedSegment.cfs.sample')); $this->assertEquals($mergedFileData, $sampleFileData); $outputDirectory->deleteFile('mergedSegment.cfs'); }
/** * Merge specified segments * * $segments is an array of SegmentInfo objects * * @param array $segments */ private function _mergeSegments($segments) { $newName = $this->_newSegmentName(); $merger = new SegmentMerger($this->_directory, $newName); foreach ($segments as $segmentInfo) { $merger->addSource($segmentInfo); $this->_segmentsToDelete[$segmentInfo->getName()] = $segmentInfo->getName(); } $newSegment = $merger->merge(); if ($newSegment !== null) { $this->_newSegments[$newSegment->getName()] = $newSegment; } $this->commit(); }