Annotation of embedaddon/php/ext/phar/tests/phar_extract.phpt, revision 1.1.1.1

1.1       misho       1: --TEST--
                      2: Phar: Phar::extractTo()
                      3: --SKIPIF--
                      4: <?php if (!extension_loaded("phar")) die("skip"); ?>
                      5: --INI--
                      6: phar.readonly=0
                      7: --FILE--
                      8: <?php
                      9: 
                     10: $fname = dirname(__FILE__) . '/tempmanifest1.phar.php';
                     11: $pname = 'phar://' . $fname;
                     12: 
                     13: $a = new Phar($fname);
                     14: $a['file1.txt'] = 'hi';
                     15: $a['file2.txt'] = 'hi2';
                     16: $a['subdir/ectory/file.txt'] = 'hi3';
                     17: $a->mount($pname . '/mount', __FILE__);
                     18: $a->addEmptyDir('one/level');
                     19: 
                     20: $a->extractTo(dirname(__FILE__) . '/extract', 'mount');
                     21: $a->extractTo(dirname(__FILE__) . '/extract');
                     22: 
                     23: $out = array();
                     24: 
                     25: foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator(dirname(__FILE__) . '/extract', 0x00003000), RecursiveIteratorIterator::CHILD_FIRST) as $p => $b) {
                     26:        $out[] = $p;
                     27: }
                     28: 
                     29: sort($out);
                     30: 
                     31: foreach ($out as $b) {
                     32:        echo "$b\n";
                     33: }
                     34: 
                     35: $a->extractTo(dirname(__FILE__) . '/extract1', 'file1.txt');
                     36: var_dump(file_get_contents(dirname(__FILE__) . '/extract1/file1.txt'));
                     37: 
                     38: $a->extractTo(dirname(__FILE__) . '/extract1', 'subdir/ectory/file.txt');
                     39: var_dump(file_get_contents(dirname(__FILE__) . '/extract1/subdir/ectory/file.txt'));
                     40: 
                     41: $a->extractTo(dirname(__FILE__) . '/extract2', array('file2.txt', 'one/level'));
                     42: var_dump(file_get_contents(dirname(__FILE__) . '/extract2/file2.txt'));
                     43: var_dump(is_dir(dirname(__FILE__) . '/extract2/one/level'));
                     44: 
                     45: try {
                     46:        $a->extractTo(dirname(__FILE__) . '/whatever', 134);
                     47: } catch (Exception $e) {
                     48:        echo $e->getMessage(), "\n";
                     49: }
                     50: 
                     51: $a->extractTo(array());
                     52: 
                     53: try {
                     54:        $a->extractTo('');
                     55: } catch (Exception $e) {
                     56:        echo $e->getMessage(), "\n";
                     57: }
                     58: 
                     59: file_put_contents(dirname(__FILE__) . '/oops', 'I is file');
                     60: 
                     61: try {
                     62:        $a->extractTo(dirname(__FILE__) . '/oops', 'file1.txt');
                     63: } catch (Exception $e) {
                     64:        echo $e->getMessage(), "\n";
                     65: }
                     66: 
                     67: try {
                     68:        $a->extractTo(dirname(__FILE__) . '/oops1', array(array(), 'file1.txt'));
                     69: } catch (Exception $e) {
                     70:        echo $e->getMessage(), "\n";
                     71: }
                     72: 
                     73: try {
                     74:        $a->extractTo(dirname(__FILE__) . '/extract', 'file1.txt');
                     75: } catch (Exception $e) {
                     76:        echo $e->getMessage(), "\n";
                     77: }
                     78: 
                     79: file_put_contents(dirname(__FILE__) . '/extract/file1.txt', 'first');
                     80: var_dump(file_get_contents(dirname(__FILE__) . '/extract/file1.txt'));
                     81: 
                     82: $a->extractTo(dirname(__FILE__) . '/extract', 'file1.txt', true);
                     83: var_dump(file_get_contents(dirname(__FILE__) . '/extract/file1.txt'));
                     84: 
                     85: try {
                     86:        $a->extractTo(str_repeat('a', 20000), 'file1.txt');
                     87: } catch (Exception $e) {
                     88:        echo $e->getMessage(), "\n";
                     89: }
                     90: 
                     91: $a[str_repeat('a', 20000)] = 'long';
                     92: 
                     93: try {
                     94:        $a->extractTo(dirname(__FILE__) . '/extract', str_repeat('a', 20000));
                     95: } catch (Exception $e) {
                     96:        echo $e->getMessage(), "\n";
                     97: }
                     98: 
                     99: ?>
                    100: ===DONE===
                    101: --CLEAN--
                    102: <?php
                    103: @rmdir(dirname(__FILE__) . '/whatever');
                    104: @unlink(dirname(__FILE__) . '/oops');
                    105: @rmdir(dirname(__FILE__) . '/oops1');
                    106: @unlink(dirname(__FILE__) . '/tempmanifest1.phar.php');
                    107: $e = dirname(__FILE__) . '/extract/';
                    108: @unlink($e . 'file1.txt');
                    109: @unlink($e . 'file2.txt');
                    110: @unlink($e . 'subdir/ectory/file.txt');
                    111: @rmdir($e . 'subdir/ectory');
                    112: @rmdir($e . 'subdir');
                    113: @rmdir($e . 'one/level');
                    114: @rmdir($e . 'one');
                    115: @rmdir($e);
                    116: $e = dirname(__FILE__) . '/extract1/';
                    117: @unlink($e . 'file1.txt');
                    118: @unlink($e . 'subdir/ectory/file.txt');
                    119: @rmdir($e . 'subdir/ectory');
                    120: @rmdir($e . 'subdir');
                    121: @rmdir($e);
                    122: $e = dirname(__FILE__) . '/extract2/';
                    123: @unlink($e . 'file2.txt');
                    124: @rmdir($e . 'one/level');
                    125: @rmdir($e . 'one');
                    126: @rmdir($e);
                    127: ?>
                    128: --EXPECTF--
                    129: %sextract%cfile1.txt
                    130: %sextract%cfile2.txt
                    131: %sextract%cone
                    132: %sextract%csubdir
                    133: %sextract%csubdir%cectory
                    134: %sextract%csubdir%cectory%cfile.txt
                    135: string(2) "hi"
                    136: string(3) "hi3"
                    137: string(3) "hi2"
                    138: bool(false)
                    139: Invalid argument, expected a filename (string) or array of filenames
                    140: 
                    141: Warning: Phar::extractTo() expects parameter 1 to be %string, array given in %sphar_extract.php on line %d
                    142: Invalid argument, extraction path must be non-zero length
                    143: Unable to use path "%soops" for extraction, it is a file, must be a directory
                    144: Invalid argument, array of filenames to extract contains non-string value
                    145: Extraction from phar "%stempmanifest1.phar.php" failed: Cannot extract "file1.txt" to "%sextract/file1.txt", path already exists
                    146: string(5) "first"
                    147: string(2) "hi"
                    148: Cannot extract to "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...", destination directory is too long for filesystem
                    149: Extraction from phar "%stempmanifest1.phar.php" failed: Cannot extract "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..." to "%s...", extracted filename is too long for filesystem
                    150: ===DONE===

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>