home *** CD-ROM | disk | FTP | other *** search
/ Enter 2004 June / ENTER.ISO / files / xampp-win32-1.4.5-installer.exe / xampp / PEAR_PackageFileManager_File_TestCase_setupDirs.php < prev    next >
Encoding:
PHP Script  |  2004-03-24  |  13.2 KB  |  301 lines

  1. <?php
  2.  
  3. /**
  4.  * API Unit tests for PEAR_PackageFileManager package.
  5.  * 
  6.  * @version    $Id: PEAR_PackageFileManager_File_TestCase_setupDirs.php,v 1.3 2004/02/07 06:13:27 cellog Exp $
  7.  * @author     Laurent Laville <pear@laurent-laville.org> portions from HTML_CSS
  8.  * @author     Greg Beaver
  9.  * @package    PEAR_PackageFileManager
  10.  */
  11.  
  12. /**
  13.  * @package PEAR_PackageFileManager
  14.  */
  15.  
  16. class PEAR_PackageFileManager_File_TestCase_setupDirs extends PHPUnit_TestCase
  17. {
  18.     /**
  19.      * A PEAR_PackageFileManager object
  20.      * @var        object
  21.      */
  22.     var $packagexml;
  23.  
  24.     function PEAR_PackageFileManager_File_TestCase_setupDirs($name)
  25.     {
  26.         $this->PHPUnit_TestCase($name);
  27.     }
  28.  
  29.     function setUp()
  30.     {
  31.         error_reporting(E_ALL);
  32.         $this->errorOccured = false;
  33.         set_error_handler(array(&$this, 'errorHandler'));
  34.  
  35.         $a = false;
  36.         $this->packagexml = new PEAR_PackageFileManager_File($a, array('lang' => 'en'));
  37.         PEAR::pushErrorHandling(PEAR_ERROR_CALLBACK, array(&$this, 'PEARerrorHandler'));
  38.         $this->errorThrown = false;
  39.         $this->_expectedMessage = 'NO ERROR TRIGGERED';
  40.         $this->_expectedCode = -1;
  41.         $this->_testMethod = 'unknown';
  42.     }
  43.  
  44.     function tearDown()
  45.     {
  46.         unset($this->packagexml);
  47.         PEAR::popErrorHandling();
  48.     }
  49.  
  50.     function errorCodeToString($code)
  51.     {
  52.         $codes = array_flip(array(
  53.             'OOPS' => -1,
  54.             'PEAR_PACKAGEFILEMANAGER_NOSTATE' => PEAR_PACKAGEFILEMANAGER_NOSTATE,
  55.             'PEAR_PACKAGEFILEMANAGER_NOVERSION' => PEAR_PACKAGEFILEMANAGER_NOVERSION,
  56.             'PEAR_PACKAGEFILEMANAGER_NOPKGDIR' => PEAR_PACKAGEFILEMANAGER_NOPKGDIR,
  57.             'PEAR_PACKAGEFILEMANAGER_NOBASEDIR' => PEAR_PACKAGEFILEMANAGER_NOBASEDIR,
  58.             'PEAR_PACKAGEFILEMANAGER_GENERATOR_NOTFOUND' => PEAR_PACKAGEFILEMANAGER_GENERATOR_NOTFOUND,
  59.             'PEAR_PACKAGEFILEMANAGER_GENERATOR_NOTFOUND_ANYWHERE' => PEAR_PACKAGEFILEMANAGER_GENERATOR_NOTFOUND_ANYWHERE,
  60.             'PEAR_PACKAGEFILEMANAGER_CANTWRITE_PKGFILE' => PEAR_PACKAGEFILEMANAGER_CANTWRITE_PKGFILE,
  61.             'PEAR_PACKAGEFILEMANAGER_DEST_UNWRITABLE' => PEAR_PACKAGEFILEMANAGER_DEST_UNWRITABLE,
  62.             'PEAR_PACKAGEFILEMANAGER_CANTCOPY_PKGFILE' => PEAR_PACKAGEFILEMANAGER_CANTCOPY_PKGFILE,
  63.             'PEAR_PACKAGEFILEMANAGER_CANTOPEN_TMPPKGFILE' => PEAR_PACKAGEFILEMANAGER_CANTOPEN_TMPPKGFILE,
  64.             'PEAR_PACKAGEFILEMANAGER_PATH_DOESNT_EXIST' => PEAR_PACKAGEFILEMANAGER_PATH_DOESNT_EXIST,
  65.             'PEAR_PACKAGEFILEMANAGER_NOCVSENTRIES' => PEAR_PACKAGEFILEMANAGER_NOCVSENTRIES,
  66.             'PEAR_PACKAGEFILEMANAGER_DIR_DOESNT_EXIST' => PEAR_PACKAGEFILEMANAGER_DIR_DOESNT_EXIST,
  67.             'PEAR_PACKAGEFILEMANAGER_RUN_SETOPTIONS' => PEAR_PACKAGEFILEMANAGER_RUN_SETOPTIONS,
  68.             'PEAR_PACKAGEFILEMANAGER_NOPACKAGE' => PEAR_PACKAGEFILEMANAGER_NOPACKAGE,
  69.             'PEAR_PACKAGEFILEMANAGER_WRONG_MROLE' => PEAR_PACKAGEFILEMANAGER_WRONG_MROLE,
  70.             'PEAR_PACKAGEFILEMANAGER_NOSUMMARY' => PEAR_PACKAGEFILEMANAGER_NOSUMMARY,
  71.             'PEAR_PACKAGEFILEMANAGER_NODESC' => PEAR_PACKAGEFILEMANAGER_NODESC,
  72.             'PEAR_PACKAGEFILEMANAGER_ADD_MAINTAINERS' => PEAR_PACKAGEFILEMANAGER_ADD_MAINTAINERS,
  73.             'PEAR_PACKAGEFILEMANAGER_NO_FILES' => PEAR_PACKAGEFILEMANAGER_NO_FILES,
  74.             'PEAR_PACKAGEFILEMANAGER_IGNORED_EVERYTHING' => PEAR_PACKAGEFILEMANAGER_IGNORED_EVERYTHING,
  75.             'PEAR_PACKAGEFILEMANAGER_INVALID_PACKAGE' => PEAR_PACKAGEFILEMANAGER_INVALID_PACKAGE,
  76.             'PEAR_PACKAGEFILEMANAGER_INVALID_REPLACETYPE' => PEAR_PACKAGEFILEMANAGER_INVALID_REPLACETYPE,
  77.             'PEAR_PACKAGEFILEMANAGER_INVALID_ROLE' => PEAR_PACKAGEFILEMANAGER_INVALID_ROLE,
  78.             'PEAR_PACKAGEFILEMANAGER_PHP_NOT_PACKAGE' => PEAR_PACKAGEFILEMANAGER_PHP_NOT_PACKAGE
  79.         ));
  80.         return $codes[$code];
  81.     }
  82.  
  83.     function _stripWhitespace($str)
  84.     {
  85.         return preg_replace('/\\s+/', '', $str);
  86.     }
  87.  
  88.     function _methodExists($name) 
  89.     {
  90.         if (in_array(strtolower($name), get_class_methods($this->packagexml))) {
  91.             return true;
  92.         }
  93.         $this->assertTrue(false, 'method '. $name . ' not implemented in ' . get_class($this->packagexml));
  94.         return false;
  95.     }
  96.  
  97.     function errorHandler($errno, $errstr, $errfile, $errline) {
  98.         //die("$errstr in $errfile at line $errline: $errstr");
  99.         $this->errorOccured = true;
  100.         $this->assertTrue(false, "$errstr at line $errline, $errfile");
  101.     }
  102.  
  103.     function PEARerrorHandler($error) {
  104.         $this->assertEquals($this->_expectedCode, $error->getCode(),
  105.             $this->_testMethod . ' ' . $this->errorCodeToString($this->_expectedCode)
  106.             . ' actual: ' . $this->errorCodeToString($error->getCode()));
  107.         $this->assertEquals($this->_expectedMessage, $error->getMessage(), $this->_testMethod);
  108.         $this->errorThrown = 'true';
  109.     }
  110.     
  111.     function expectPEARError($method, $msg, $code = null)
  112.     {
  113.         $this->_expectedMessage = $msg;
  114.         $this->_expectedCode = $code;
  115.         $this->_testMethod = $method;
  116.     }
  117.     
  118.     function test_concept()
  119.     {
  120.         if (!$this->_methodExists('_setupDirs')) {
  121.             return;
  122.         }
  123.         $this->packagexml->_options['addhiddenfiles'] = false;
  124.         $this->packagexml->_options['ignore'] =
  125.         $this->packagexml->_options['include'] = false;
  126.         $this->packagexml->_setupIgnore(false, 0);
  127.         $this->packagexml->_setupIgnore(false, 1);
  128.         $list = $this->packagexml->dirList($package_directory =
  129.             dirname(__FILE__) . DIRECTORY_SEPARATOR . 'footest');
  130.         $struc = array();
  131.         foreach($list as $file) {
  132.             $path = substr(dirname($file), strlen(str_replace(DIRECTORY_SEPARATOR, 
  133.                                                               '/',
  134.                                                               realpath($package_directory))) + 1);
  135.             if (!$path) {
  136.                 $path = '/';
  137.             }
  138.             $ext = array_pop(explode('.', $file));
  139.             if (strlen($ext) == strlen($file)) {
  140.                 $ext = '';
  141.             }
  142.             $struc[$path][] = array('file' => basename($file),
  143.                                     'ext' => $ext,
  144.                                     'path' => (($path == '/') ? basename($file) : $path . '/' . basename($file)),
  145.                                     'fullpath' => $file);
  146.         }
  147.         $this->assertEquals(
  148.             array(
  149.             'blarfoo' =>
  150.               array(
  151.                 array('file' => 'blartest.txt',
  152.                       'ext' => 'txt',
  153.                       'path' => 'blarfoo/blartest.txt',
  154.                       'fullpath' => dirname(__FILE__) . DIRECTORY_SEPARATOR . 'footest/blarfoo/blartest.txt')
  155.                    ),
  156.             'subfoo/subsubfoo' =>
  157.               array(
  158.                 array('file' => 'boo.txt',
  159.                       'ext' => 'txt',
  160.                       'path' => 'subfoo/subsubfoo/boo.txt',
  161.                       'fullpath' =>dirname(__FILE__) . DIRECTORY_SEPARATOR . 'footest/subfoo/subsubfoo/boo.txt')
  162.                    ),
  163.             'subfoo' =>
  164.               array(
  165.                 array('file' => 'test11.txt',
  166.                       'ext' => 'txt',
  167.                       'path' => 'subfoo/test11.txt',
  168.                       'fullpath' =>dirname(__FILE__) . DIRECTORY_SEPARATOR . 'footest/subfoo/test11.txt'),
  169.                 array('file' => 'test12.txt',
  170.                       'ext' => 'txt',
  171.                       'path' => 'subfoo/test12.txt',
  172.                       'fullpath' =>dirname(__FILE__) . DIRECTORY_SEPARATOR . 'footest/subfoo/test12.txt'),
  173.                    ),
  174.             '/' =>
  175.               array(
  176.                 array('file' => 'test1.txt',
  177.                       'ext' => 'txt',
  178.                       'path' => 'test1.txt',
  179.                       'fullpath' =>dirname(__FILE__) . DIRECTORY_SEPARATOR . 'footest/test1.txt'),
  180.                 array('file' => 'test2.txt',
  181.                       'ext' => 'txt',
  182.                       'path' => 'test2.txt',
  183.                       'fullpath' =>dirname(__FILE__) . DIRECTORY_SEPARATOR . 'footest/test2.txt'),
  184.                    ),
  185.             'testCVS' =>
  186.                 array(
  187.                     0 =>
  188.                         array(
  189.                             'file' => 'testEntries',
  190.                             'ext' => '',
  191.                             'path' => 'testCVS/testEntries',
  192.                             'fullpath' => dirname(__FILE__) . DIRECTORY_SEPARATOR . 'footest/testCVS/testEntries',
  193.                         ),
  194.                         array(
  195.                             'file' => 'testEntries.Extra',
  196.                             'ext' => 'Extra',
  197.                             'path' => 'testCVS/testEntries.Extra',
  198.                             'fullpath' => dirname(__FILE__) . DIRECTORY_SEPARATOR . 'footest/testCVS/testEntries.Extra',
  199.                         ),
  200.                     ),
  201.                       ), $struc, 'wrong basic structure');
  202.         $this->assertFalse($this->errorThrown, 'error thrown');
  203.         uksort($struc,'strnatcasecmp');
  204.         foreach($struc as $key => $ind) {
  205.             usort($ind, array($this->packagexml, 'sortfiles'));
  206.             $struc[$key] = $ind;
  207.         }
  208.         $this->assertEquals(
  209.             array(
  210.             'blarfoo' =>
  211.               array(
  212.                 array('file' => 'blartest.txt',
  213.                       'ext' => 'txt',
  214.                       'path' => 'blarfoo/blartest.txt',
  215.                       'fullpath' => dirname(__FILE__) . DIRECTORY_SEPARATOR . 'footest/blarfoo/blartest.txt')
  216.                    ),
  217.             'subfoo/subsubfoo' =>
  218.               array(
  219.                 array('file' => 'boo.txt',
  220.                       'ext' => 'txt',
  221.                       'path' => 'subfoo/subsubfoo/boo.txt',
  222.                       'fullpath' =>dirname(__FILE__) . DIRECTORY_SEPARATOR . 'footest/subfoo/subsubfoo/boo.txt')
  223.                    ),
  224.             'subfoo' =>
  225.               array(
  226.                 array('file' => 'test11.txt',
  227.                       'ext' => 'txt',
  228.                       'path' => 'subfoo/test11.txt',
  229.                       'fullpath' =>dirname(__FILE__) . DIRECTORY_SEPARATOR . 'footest/subfoo/test11.txt'),
  230.                 array('file' => 'test12.txt',
  231.                       'ext' => 'txt',
  232.                       'path' => 'subfoo/test12.txt',
  233.                       'fullpath' =>dirname(__FILE__) . DIRECTORY_SEPARATOR . 'footest/subfoo/test12.txt'),
  234.                    ),
  235.             '/' =>
  236.               array(
  237.                 array('file' => 'test1.txt',
  238.                       'ext' => 'txt',
  239.                       'path' => 'test1.txt',
  240.                       'fullpath' =>dirname(__FILE__) . DIRECTORY_SEPARATOR . 'footest/test1.txt'),
  241.                 array('file' => 'test2.txt',
  242.                       'ext' => 'txt',
  243.                       'path' => 'test2.txt',
  244.                       'fullpath' =>dirname(__FILE__) . DIRECTORY_SEPARATOR . 'footest/test2.txt'),
  245.                    ),
  246.             'testCVS' =>
  247.                 array(
  248.                     0 =>
  249.                         array(
  250.                             'file' => 'testEntries',
  251.                             'ext' => '',
  252.                             'path' => 'testCVS/testEntries',
  253.                             'fullpath' => dirname(__FILE__) . DIRECTORY_SEPARATOR . 'footest/testCVS/testEntries',
  254.                         ),
  255.                         array(
  256.                             'file' => 'testEntries.Extra',
  257.                             'ext' => 'Extra',
  258.                             'path' => 'testCVS/testEntries.Extra',
  259.                             'fullpath' => dirname(__FILE__) . DIRECTORY_SEPARATOR . 'footest/testCVS/testEntries.Extra',
  260.                         ),
  261.                     ),
  262.                       ), $struc, 'wrong sorted structure');
  263.         return $struc;
  264.     }
  265.     
  266.     function test_valid()
  267.     {
  268.         $this->packagexml->_options['addhiddenfiles'] = false;
  269.         $struc = $this->test_concept();
  270.         $test = $this->packagexml->_setupDirs($struc['/'], explode('/','subfoo/subsubfoo'), $struc['subfoo/subsubfoo']);
  271.         $this->assertEquals(
  272.             array(
  273.                 0 =>
  274.                array('file' => 'test1.txt',
  275.                       'ext' => 'txt',
  276.                       'path' => 'test1.txt',
  277.                       'fullpath' =>dirname(__FILE__) . DIRECTORY_SEPARATOR . 'footest/test1.txt'),
  278.                 1 =>
  279.                 array('file' => 'test2.txt',
  280.                       'ext' => 'txt',
  281.                       'path' => 'test2.txt',
  282.                       'fullpath' =>dirname(__FILE__) . DIRECTORY_SEPARATOR . 'footest/test2.txt'),
  283.                 'subfoo' =>
  284.                   array(
  285.                     'subsubfoo' =>
  286.                       array(
  287.                         array('file' => 'boo.txt',
  288.                               'ext' => 'txt',
  289.                               'path' => 'subfoo/subsubfoo/boo.txt',
  290.                               'fullpath' =>dirname(__FILE__) . DIRECTORY_SEPARATOR . 'footest/subfoo/subsubfoo/boo.txt')
  291.                         ),
  292.                       ),
  293.             ),
  294.             $test,
  295.             'incorrect parsing'
  296.         );
  297.     }
  298. }
  299.  
  300. ?>
  301.