tarFormat = "posix"; $this->tarMimeFormat = ezcArchive::TAR_PAX; $this->canWrite = false; $this->createTempDir("ezcArchive_"); $this->file = $this->createTempFile("tar_pax_2_textfiles.tar"); $blockFile = new ezcArchiveBlockFile( $this->file ); $this->archive = new ezcArchivePaxTar( $blockFile ); $this->complexFile = $this->createTempFile("tar_pax_file_dir_symlink_link.tar"); $blockFile = new ezcArchiveBlockFile( $this->complexFile ); $this->complexArchive = new ezcArchivePaxTar( $blockFile ); } protected function tearDown() { unset( $this->archive ); unset( $this->file ); unset( $this->complexArchive ) ; unset( $this->complexFile ); $this->removeTempDir(); } // Skip character device. It is most probably the same as in Ustar. public function testExtractCharacterDevice() { } // Skip fifo. It is most probably the same as in Ustar. public function testExtractFifo() { } public function testReallyLongFileName () { $dir = $this->getTempDir(); if ( $this->isWindows() ) { $dirname = "aaaaabbbbbaaaaabbbbbaaaaabbbbb"; // 30 char. max paths shorter in Windows $filename = "cccccdddddcccccdddddcccccddddd"; // 30 char. max paths shorter in Windows mkdir( "$dir\\$dirname\\$dirname\\$dirname", 0777, true ); touch ( "$dir\\$dirname\\$dirname\\$dirname\\$filename" ); } else { $dirname = "aaaaaaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbb"; // 60 char. $filename = "ccccccccccddddddddddccccccccccddddddddddccccccccccdddddddddd"; // 60 char. mkdir( "$dir/$dirname/$dirname/$dirname", 0777, true ); touch ( "$dir/$dirname/$dirname/$dirname/$filename" ); } exec("tar -cf $dir/gnutar.tar --format=".$this->tarFormat." -C $dir $dirname"); unlink("$dir/$dirname/$dirname/$dirname/$filename" ); rmdir( "$dir/$dirname/$dirname/$dirname" ); rmdir( "$dir/$dirname/$dirname" ); rmdir( "$dir/$dirname" ); // Extract it. $bf = new ezcArchiveBlockFile( "$dir/gnutar.tar" ); $archive = ezcArchive::getTarInstance( $bf, $this->tarMimeFormat ); foreach ($archive as $entry ) { $archive->extractCurrent( $dir ); } $this->assertTrue( file_exists( "$dir/$dirname/$dirname/$dirname/$filename" ) ); unset($bf); } public function testExtractLongLinkName() { $dir = $this->getTempDir(); if ( $this->isWindows() ) { $dirname = "aaaaabbbbbaaaaabbbbbaaaaabbbbb"; // 30 char. max paths shorter in Windows $filename = "cccccdddddcccccdddddcccccddddd"; // 30 char. max paths shorter in Windows mkdir( "$dir\\$dirname\\$dirname\\$dirname", 0777, true ); touch ( "$dir\\$dirname\\$dirname\\$dirname\\$filename" ); copy( "$dir\\$dirname\\$dirname\\$dirname\\$filename", "$dir/mylink" ); } else { $dirname = "aaaaaaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbb"; // 60 char. mkdir( "$dir/$dirname/$dirname/$dirname", 0777, true ); $filename = "ccccccccccddddddddddccccccccccddddddddddccccccccccdddddddddd"; // 60 char. touch ( "$dir/$dirname/$dirname/$dirname/$filename" ); symlink( "$dirname/$dirname/$dirname/$filename", "$dir/mylink" ); } exec("tar -cf $dir/gnutar.tar --format=".$this->tarFormat." -C $dir mylink"); unlink("$dir/$dirname/$dirname/$dirname/$filename" ); rmdir( "$dir/$dirname/$dirname/$dirname" ); rmdir( "$dir/$dirname/$dirname" ); rmdir( "$dir/$dirname" ); // Extract it. $bf = new ezcArchiveBlockFile( "$dir/gnutar.tar" ); $archive = ezcArchive::getTarInstance( $bf, $this->tarMimeFormat ); foreach ($archive as $entry ) { $archive->extractCurrent( $dir ); } $this->assertTrue( is_link( "$dir/mylink" ) ); $this->assertEquals( "$dirname/$dirname/$dirname/$filename", readlink("$dir/mylink") ); unset( $bf ); } public function testExtractHugeFile() { // TODO. } public static function suite() { return new PHPUnit_Framework_TestSuite("ezcArchivePaxTarTest"); } } ?>