--- /dev/null
+<?php
+//
+// +----------------------------------------------------------------------+
+// | PHP Version 4 |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 1997-2003 The PHP Group |
+// +----------------------------------------------------------------------+
+// | This source file is subject to version 3.0 of the PHP license, |
+// | that is bundled with this package in the file LICENSE, and is |
+// | available through the world-wide-web at the following url: |
+// | http://www.php.net/license/3_0.txt. |
+// | If you did not receive a copy of the PHP license and are unable to |
+// | obtain it through the world-wide-web, please send a note to |
+// | license@php.net so we can mail you a copy immediately. |
+// +----------------------------------------------------------------------+
+// | Authors: Stig Bakken <ssb@php.net> |
+// | Tomas V.V.Cox <cox@idecnet.com> |
+// | Martin Jansen <mj@php.net> |
+// +----------------------------------------------------------------------+
+//
+// $Id$
+
+require_once 'PEAR/Common.php';
+require_once 'PEAR/Registry.php';
+require_once 'PEAR/Dependency.php';
+require_once 'PEAR/Remote.php';
+require_once 'System.php';
+
+/**
+ * Administration class used to download PEAR packages and maintain the
+ * installed package database.
+ *
+ * @since PEAR 1.4
+ * @author Greg Beaver <cellog@php.net>
+ */
+class PEAR_Downloader extends PEAR_Common
+{
+ /**
+ * @var PEAR_Config
+ * @access private
+ */
+ var $_config;
+
+ /**
+ * @var PEAR_Registry
+ * @access private
+ */
+ var $_registry;
+
+ /**
+ * @var PEAR_Remote
+ * @access private
+ */
+ var $_remote;
+
+ /**
+ * Preferred Installation State (snapshot, devel, alpha, beta, stable)
+ * @var string|null
+ * @access private
+ */
+ var $_preferredState;
+
+ /**
+ * Options from command-line passed to Install.
+ *
+ * Recognized options:<br />
+ * - onlyreqdeps : install all required dependencies as well
+ * - alldeps : install all dependencies, including optional
+ * - installroot : base relative path to install files in
+ * - force : force a download even if warnings would prevent it
+ * @see PEAR_Command_Install
+ * @access private
+ * @var array
+ */
+ var $_options;
+
+ /**
+ * Downloaded Packages after a call to download().
+ *
+ * Format of each entry:
+ *
+ * <code>
+ * array('pkg' => 'package_name', 'file' => '/path/to/local/file',
+ * 'info' => array() // parsed package.xml
+ * );
+ * </code>
+ * @access private
+ * @var array
+ */
+ var $_downloadedPackages = array();
+
+ /**
+ * Packages slated for download.
+ *
+ * This is used to prevent downloading a package more than once should it be a dependency
+ * for two packages to be installed.
+ * Format of each entry:
+ *
+ * <pre>
+ * array('package_name1' => parsed package.xml, 'package_name2' => parsed package.xml,
+ * );
+ * </pre>
+ * @access private
+ * @var array
+ */
+ var $_toDownload = array();
+
+ /**
+ * Array of every package installed, with names lower-cased.
+ *
+ * Format:
+ * <code>
+ * array('package1' => 0, 'package2' => 1, );
+ * </code>
+ * @var array
+ */
+ var $_installed = array();
+
+ /**
+ * @var array
+ * @access private
+ */
+ var $_errorStack = array();
+
+ // {{{ PEAR_Downloader()
+
+ function PEAR_Downloader(&$ui, $options, &$config)
+ {
+ $this->_options = $options;
+ $this->_config = &$config;
+ $this->_preferredState = $this->_config->get('preferred_state');
+ if (!$this->_preferredState) {
+ // don't inadvertantly use a non-set preferred_state
+ $this->_preferredState = null;
+ }
+
+ $php_dir = $this->_config->get('php_dir');
+ if (isset($this->_options['installroot'])) {
+ if (substr($this->_options['installroot'], -1) == DIRECTORY_SEPARATOR) {
+ $this->_options['installroot'] = substr($this->_options['installroot'], 0, -1);
+ }
+ $php_dir = $this->_prependPath($php_dir, $this->_options['installroot']);
+ }
+ $this->_registry = &new PEAR_Registry($php_dir);
+ $this->_remote = &new PEAR_Remote($config);
+
+ if (isset($this->_options['alldeps']) || isset($this->_options['onlyreqdeps'])) {
+ $this->_installed = $this->_registry->listPackages();
+ array_walk($this->_installed, create_function('&$v,$k','$v = strtolower($v);'));
+ $this->_installed = array_flip($this->_installed);
+ }
+ parent::PEAR_Common($ui);
+ }
+
+ // }}}
+ // {{{ configSet()
+ function configSet($key, $value, $layer = 'user')
+ {
+ $this->_config->set($key, $value, $layer);
+ $this->_preferredState = $this->_config->get('preferred_state');
+ if (!$this->_preferredState) {
+ // don't inadvertantly use a non-set preferred_state
+ $this->_preferredState = null;
+ }
+ }
+
+ // }}}
+ // {{{ setOptions()
+ function setOptions($options)
+ {
+ $this->_options = $options;
+ }
+
+ // }}}
+ // {{{ _downloadFile()
+ /**
+ * @param string filename to download
+ * @param string version/state
+ * @param string original value passed to command-line
+ * @param string|null preferred state (snapshot/devel/alpha/beta/stable)
+ * Defaults to configuration preferred state
+ * @return null|PEAR_Error|string
+ * @access private
+ */
+ function _downloadFile($pkgfile, $version, $origpkgfile, $state = null)
+ {
+ if (is_null($state)) {
+ $state = $this->_preferredState;
+ }
+ // {{{ check the package filename, and whether it's already installed
+ $need_download = false;
+ if (preg_match('#^(http|ftp)://#', $pkgfile)) {
+ $need_download = true;
+ } elseif (!@is_file($pkgfile)) {
+ if ($this->validPackageName($pkgfile)) {
+ if ($this->_registry->packageExists($pkgfile)) {
+ if (empty($this->_options['upgrade']) && empty($this->_options['force'])) {
+ $errors[] = "$pkgfile already installed";
+ return;
+ }
+ }
+ $pkgfile = $this->getPackageDownloadUrl($pkgfile, $version);
+ $need_download = true;
+ } else {
+ if (strlen($pkgfile)) {
+ $errors[] = "Could not open the package file: $pkgfile";
+ } else {
+ $errors[] = "No package file given";
+ }
+ return;
+ }
+ }
+ // }}}
+
+ // {{{ Download package -----------------------------------------------
+ if ($need_download) {
+ $downloaddir = $this->_config->get('download_dir');
+ if (empty($downloaddir)) {
+ if (PEAR::isError($downloaddir = System::mktemp('-d'))) {
+ return $downloaddir;
+ }
+ $this->log(3, '+ tmp dir created at ' . $downloaddir);
+ }
+ $callback = $this->ui ? array(&$this, '_downloadCallback') : null;
+ $this->pushErrorHandling(PEAR_ERROR_RETURN);
+ $file = $this->downloadHttp($pkgfile, $this->ui, $downloaddir, $callback);
+ $this->popErrorHandling();
+ if (PEAR::isError($file)) {
+ if ($this->validPackageName($origpkgfile)) {
+ if (!PEAR::isError($info = $this->_remote->call('package.info',
+ $origpkgfile))) {
+ if (!count($info['releases'])) {
+ return $this->raiseError('Package ' . $origpkgfile .
+ ' has no releases');
+ } else {
+ return $this->raiseError('No releases of preferred state "'
+ . $state . '" exist for package ' . $origpkgfile .
+ '. Use ' . $origpkgfile . '-state to install another' .
+ ' state (like ' . $origpkgfile .'-beta)',
+ PEAR_INSTALLER_ERROR_NO_PREF_STATE);
+ }
+ } else {
+ return $pkgfile;
+ }
+ } else {
+ return $this->raiseError($file);
+ }
+ }
+ $pkgfile = $file;
+ }
+ // }}}
+ return $pkgfile;
+ }
+ // }}}
+ // {{{ getPackageDownloadUrl()
+
+ function getPackageDownloadUrl($package, $version = null)
+ {
+ if ($version) {
+ $package .= "-$version";
+ }
+ if ($this === null || $this->_config === null) {
+ $package = "http://pear.php.net/get/$package";
+ } else {
+ $package = "http://" . $this->_config->get('master_server') .
+ "/get/$package";
+ }
+ if (!extension_loaded("zlib")) {
+ $package .= '?uncompress=yes';
+ }
+ return $package;
+ }
+
+ // }}}
+ // {{{ extractDownloadFileName($pkgfile, &$version)
+
+ function extractDownloadFileName($pkgfile, &$version)
+ {
+ if (@is_file($pkgfile)) {
+ return $pkgfile;
+ }
+ // regex defined in Common.php
+ if (preg_match(PEAR_COMMON_PACKAGE_DOWNLOAD_PREG, $pkgfile, $m)) {
+ $version = (isset($m[3])) ? $m[3] : null;
+ return $m[1];
+ }
+ $version = null;
+ return $pkgfile;
+ }
+
+ // }}}
+
+ // }}}
+ // {{{ getDownloadedPackages()
+
+ /**
+ * Retrieve a list of downloaded packages after a call to {@link download()}.
+ *
+ * Also resets the list of downloaded packages.
+ * @return array
+ */
+ function getDownloadedPackages()
+ {
+ $ret = $this->_downloadedPackages;
+ $this->_downloadedPackages = array();
+ $this->_toDownload = array();
+ return $ret;
+ }
+
+ // }}}
+ // {{{ download()
+
+ /**
+ * Download any files and their dependencies, if necessary
+ *
+ * BC-compatible method name
+ * @param array a mixed list of package names, local files, or package.xml
+ */
+ function download($packages)
+ {
+ return $this->doDownload($packages);
+ }
+
+ // }}}
+ // {{{ doDownload()
+
+ /**
+ * Download any files and their dependencies, if necessary
+ *
+ * @param array a mixed list of package names, local files, or package.xml
+ */
+ function doDownload($packages)
+ {
+ $mywillinstall = array();
+ $state = $this->_preferredState;
+
+ // {{{ download files in this list if necessary
+ foreach($packages as $pkgfile) {
+ $need_download = false;
+ if (!is_file($pkgfile)) {
+ if (preg_match('#^(http|ftp)://#', $pkgfile)) {
+ $need_download = true;
+ }
+ $pkgfile = $this->_downloadNonFile($pkgfile);
+ if (PEAR::isError($pkgfile)) {
+ return $pkgfile;
+ }
+ if ($pkgfile === false) {
+ continue;
+ }
+ } // end is_file()
+
+ $tempinfo = $this->infoFromAny($pkgfile);
+ if ($need_download) {
+ $this->_toDownload[] = $tempinfo['package'];
+ }
+ if (isset($this->_options['alldeps']) || isset($this->_options['onlyreqdeps'])) {
+ // ignore dependencies if there are any errors
+ if (!PEAR::isError($tempinfo)) {
+ $mywillinstall[strtolower($tempinfo['package'])] = @$tempinfo['release_deps'];
+ }
+ }
+ $this->_downloadedPackages[] = array('pkg' => $tempinfo['package'],
+ 'file' => $pkgfile, 'info' => $tempinfo);
+ } // end foreach($packages)
+ // }}}
+
+ // {{{ extract dependencies from downloaded files and then download
+ // them if necessary
+ if (isset($this->_options['alldeps']) || isset($this->_options['onlyreqdeps'])) {
+ $deppackages = array();
+ foreach ($mywillinstall as $package => $alldeps) {
+ if (!is_array($alldeps)) {
+ // there are no dependencies
+ continue;
+ }
+ foreach($alldeps as $info) {
+ if ($info['type'] != 'pkg') {
+ continue;
+ }
+ $ret = $this->_processDependency($package, $info, $mywillinstall);
+ if ($ret === false) {
+ continue;
+ }
+ if (PEAR::isError($ret)) {
+ return $ret;
+ }
+ $deppackages[] = $ret;
+ } // foreach($alldeps
+ }
+
+ if (count($deppackages)) {
+ $this->doDownload($deppackages);
+ }
+ } // }}} if --alldeps or --onlyreqdeps
+ }
+
+ // }}}
+ // {{{ _downloadNonFile($pkgfile)
+
+ /**
+ * @return false|PEAR_Error|string false if loop should be broken out of,
+ * string if the file was downloaded,
+ * PEAR_Error on exception
+ * @access private
+ */
+ function _downloadNonFile($pkgfile)
+ {
+ $origpkgfile = $pkgfile;
+ $state = null;
+ $pkgfile = $this->extractDownloadFileName($pkgfile, $version);
+ if (preg_match('#^(http|ftp)://#', $pkgfile)) {
+ return $this->_downloadFile($pkgfile, $version, $origpkgfile);
+ }
+ if (!$this->validPackageName($pkgfile)) {
+ return $this->raiseError("Package name '$pkgfile' not valid");
+ }
+ // ignore packages that are installed unless we are upgrading
+ $curinfo = $this->_registry->packageInfo($pkgfile);
+ if ($this->_registry->packageExists($pkgfile)
+ && empty($this->_options['upgrade']) && empty($this->_options['force'])) {
+ $this->log(0, "Package '{$curinfo['package']}' already installed, skipping");
+ return false;
+ }
+ if (in_array($pkgfile, $this->_toDownload)) {
+ return false;
+ }
+ $releases = $this->_remote->call('package.info', $pkgfile, 'releases');
+ if (!count($releases)) {
+ return $this->raiseError("No releases found for package '$pkgfile'");
+ }
+ // Want a specific version/state
+ if ($version !== null) {
+ // Passed Foo-1.2
+ if ($this->validPackageVersion($version)) {
+ if (!isset($releases[$version])) {
+ return $this->raiseError("No release with version '$version' found for '$pkgfile'");
+ }
+ // Passed Foo-alpha
+ } elseif (in_array($version, $this->getReleaseStates())) {
+ $state = $version;
+ $version = 0;
+ foreach ($releases as $ver => $inf) {
+ if ($inf['state'] == $state && version_compare("$version", "$ver") < 0) {
+ $version = $ver;
+ }
+ }
+ if ($version == 0) {
+ return $this->raiseError("No release with state '$state' found for '$pkgfile'");
+ }
+ // invalid postfix passed
+ } else {
+ return $this->raiseError("Invalid postfix '-$version', be sure to pass a valid PEAR ".
+ "version number or release state");
+ }
+ // Guess what to download
+ } else {
+ $states = $this->betterStates($this->_preferredState, true);
+ $possible = false;
+ $version = 0;
+ foreach ($releases as $ver => $inf) {
+ if (in_array($inf['state'], $states) && version_compare("$version", "$ver") < 0) {
+ $version = $ver;
+ }
+ }
+ if ($version == 0 && !isset($this->_options['force'])) {
+ return $this->raiseError('No release with state equal to: \'' . implode(', ', $states) .
+ "' found for '$pkgfile'");
+ } elseif ($version == 0) {
+ $this->log(0, "Warning: $pkgfile is state '$inf[state]' which is less stable " .
+ "than state '$this->_preferredState'");
+ }
+ }
+ // Check if we haven't already the version
+ if (empty($this->_options['force'])) {
+ if ($curinfo['version'] == $version) {
+ $this->log(0, "Package '{$curinfo['package']}-{$curinfo['version']}' already installed, skipping");
+ return false;
+ } elseif (version_compare("$version", "{$curinfo['version']}") < 0) {
+ $this->log(0, "Package '{$curinfo['package']}' version '{$curinfo['version']}' " .
+ " is installed and {$curinfo['version']} is > requested '$version', skipping");
+ return false;
+ }
+ }
+ $this->_toDownload[] = $pkgfile;
+ return $this->_downloadFile($pkgfile, $version, $origpkgfile, $state);
+ }
+
+ // }}}
+ // {{{ _processDependency($package, $info, $mywillinstall)
+
+ /**
+ * Process a dependency, download if necessary
+ * @param array dependency information from PEAR_Remote call
+ * @param array packages that will be installed in this iteration
+ * @return false|string|PEAR_Error
+ * @access private
+ * @todo Add test for relation 'lt'/'le' -> make sure that the dependency requested is
+ * in fact lower than the required value. This will be very important for BC dependencies
+ */
+ function _processDependency($package, $info, $mywillinstall)
+ {
+ $state = $this->_preferredState;
+ if (!isset($this->_options['alldeps']) && isset($info['optional']) &&
+ $info['optional'] == 'yes') {
+ // skip optional deps
+ $this->log(0, "skipping Package $package optional dependency $info[name]");
+ return false;
+ }
+ // {{{ get releases
+ $releases = $this->_remote->call('package.info', $info['name'], 'releases');
+ if (PEAR::isError($releases)) {
+ return $releases;
+ }
+ if (!count($releases)) {
+ if (!isset($this->_installed[strtolower($info['name'])])) {
+ $this->pushError("Package $package dependency $info[name] ".
+ "has no releases");
+ }
+ return false;
+ }
+ $found = false;
+ $save = $releases;
+ while(count($releases) && !$found) {
+ if (!empty($state) && $state != 'any') {
+ list($release_version, $release) = each($releases);
+ if ($state != $release['state'] &&
+ !in_array($release['state'], $this->betterStates($state)))
+ {
+ // drop this release - it ain't stable enough
+ array_shift($releases);
+ } else {
+ $found = true;
+ }
+ } else {
+ $found = true;
+ }
+ }
+ if (!count($releases) && !$found) {
+ $get = array();
+ foreach($save as $release) {
+ $get = array_merge($get,
+ $this->betterStates($release['state'], true));
+ }
+ $savestate = array_shift($get);
+ $this->pushError( "Release for $package dependency $info[name] " .
+ "has state '$savestate', requires $state");
+ return false;
+ }
+ if (in_array(strtolower($info['name']), $this->_toDownload) ||
+ isset($mywillinstall[strtolower($info['name'])])) {
+ // skip upgrade check for packages we will install
+ return false;
+ }
+ if (!isset($this->_installed[strtolower($info['name'])])) {
+ // check to see if we can install the specific version required
+ if ($info['rel'] == 'eq') {
+ return $info['name'] . '-' . $info['version'];
+ }
+ // skip upgrade check for packages we don't have installed
+ return $info['name'];
+ }
+ // }}}
+
+ // {{{ see if a dependency must be upgraded
+ $inst_version = $this->_registry->packageInfo($info['name'], 'version');
+ if (!isset($info['version'])) {
+ // this is a rel='has' dependency, check against latest
+ if (version_compare($release_version, $inst_version, 'le')) {
+ return false;
+ } else {
+ return $info['name'];
+ }
+ }
+ if (version_compare($info['version'], $inst_version, 'le')) {
+ // installed version is up-to-date
+ return false;
+ }
+ return $info['name'];
+ }
+
+ // }}}
+ // {{{ pushError($errmsg, $code)
+
+ /**
+ * @param string
+ * @param integer
+ */
+ function pushError($errmsg, $code = -1)
+ {
+ array_push($this->_errorStack, array($errmsg, $code));
+ }
+
+ // }}}
+ // {{{ getErrorMsgs()
+
+ function getErrorMsgs()
+ {
+ $msgs = array();
+ $errs = $this->_errorStack;
+ foreach ($errs as $err) {
+ $msgs[] = $err[0];
+ }
+ $this->_errorStack = array();
+ return $msgs;
+ }
+
+ // }}}
+}
+// }}}
+
+?>
--- /dev/null
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+ <!DOCTYPE package SYSTEM "http://pear.php.net/dtd/package-1.0">
+ <package version="1.0">
+ <name>pkg1</name>
+ <summary>required test for PEAR_Installer</summary>
+ <description>
+ fake package
+ </description>
+ <license>PHP License</license>
+ <maintainers>
+ <maintainer>
+ <user>fakeuser</user>
+ <name>Joe Shmoe</name>
+ <email>nobody@example.com</email>
+ <role>lead</role>
+ </maintainer>
+ </maintainers>
+ <release>
+ <version>1.1</version>
+ <date>2003-09-09</date>
+ <state>stable</state>
+ <notes>
+ required dependency test
+ </notes>
+ <deps>
+ <dep type="pkg" version="1.0" rel="ge">pkg2</dep>
+ </deps>
+ <filelist>
+ <dir name="/" baseinstalldir="grob" role="php">
+ <file>zoorb.php</file>
+ <dir name="goompness" role="php">
+ <file>oggbrzitzkee.php</file>
+ <file>Mopreeb.php</file>
+ </dir>
+ </dir>
+ </filelist>
+ </release>
+ </package>
--- /dev/null
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+ <!DOCTYPE package SYSTEM "http://pear.php.net/dtd/package-1.0">
+ <package version="1.0">
+ <name>pkg2</name>
+ <summary>required test for PEAR_Installer</summary>
+ <description>
+ fake package
+ </description>
+ <license>PHP License</license>
+ <maintainers>
+ <maintainer>
+ <user>fakeuser</user>
+ <name>Joe Shmoe</name>
+ <email>nobody@example.com</email>
+ <role>lead</role>
+ </maintainer>
+ </maintainers>
+ <release>
+ <version>1.1</version>
+ <date>2003-09-09</date>
+ <state>stable</state>
+ <notes>
+ required dependency test
+ </notes>
+ <deps>
+ <dep type="pkg" version="1.0" rel="ge">pkg3</dep>
+ <dep type="php" version="1.0" rel="ge" />
+ </deps>
+ <filelist>
+ <dir name="/" baseinstalldir="grob" role="php">
+ <file>zoorb.php</file>
+ <dir name="goompness" role="php">
+ <file>oggbrzitzkee.php</file>
+ <file>Mopreeb.php</file>
+ </dir>
+ </dir>
+ </filelist>
+ </release>
+ </package>
--- /dev/null
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+ <!DOCTYPE package SYSTEM "http://pear.php.net/dtd/package-1.0">
+ <package version="1.0">
+ <name>pkg3</name>
+ <summary>required test for PEAR_Installer</summary>
+ <description>
+ fake package
+ </description>
+ <license>PHP License</license>
+ <maintainers>
+ <maintainer>
+ <user>fakeuser</user>
+ <name>Joe Shmoe</name>
+ <email>nobody@example.com</email>
+ <role>lead</role>
+ </maintainer>
+ </maintainers>
+ <release>
+ <version>1.1</version>
+ <date>2003-09-09</date>
+ <state>stable</state>
+ <notes>
+ required dependency test
+ </notes>
+ <deps>
+ <dep type="pkg" version="1.0" rel="ge">pkg4</dep>
+ <dep type="pkg" version="1.0" rel="ge">pkg5</dep>
+ </deps>
+ <filelist>
+ <dir name="/" baseinstalldir="grob" role="php">
+ <file>zoorb.php</file>
+ <dir name="goompness" role="php">
+ <file>oggbrzitzkee.php</file>
+ <file>Mopreeb.php</file>
+ </dir>
+ </dir>
+ </filelist>
+ </release>
+ </package>
--- /dev/null
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+ <!DOCTYPE package SYSTEM "http://pear.php.net/dtd/package-1.0">
+ <package version="1.0">
+ <name>pkg4</name>
+ <summary>required test for PEAR_Installer</summary>
+ <description>
+ fake package
+ </description>
+ <license>PHP License</license>
+ <maintainers>
+ <maintainer>
+ <user>fakeuser</user>
+ <name>Joe Shmoe</name>
+ <email>nobody@example.com</email>
+ <role>lead</role>
+ </maintainer>
+ </maintainers>
+ <release>
+ <version>1.1</version>
+ <date>2003-09-09</date>
+ <state>stable</state>
+ <notes>
+ required dependency test
+ </notes>
+ <deps>
+ <dep type="pkg" version="1.0" rel="ge">pkg6</dep>
+ </deps>
+ <filelist>
+ <dir name="/" baseinstalldir="grob" role="php">
+ <file>zoorb.php</file>
+ <dir name="goompness" role="php">
+ <file>oggbrzitzkee.php</file>
+ <file>Mopreeb.php</file>
+ </dir>
+ </dir>
+ </filelist>
+ </release>
+ </package>
--- /dev/null
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+ <!DOCTYPE package SYSTEM "http://pear.php.net/dtd/package-1.0">
+ <package version="1.0">
+ <name>pkg5</name>
+ <summary>required test for PEAR_Installer</summary>
+ <description>
+ fake package
+ </description>
+ <license>PHP License</license>
+ <maintainers>
+ <maintainer>
+ <user>fakeuser</user>
+ <name>Joe Shmoe</name>
+ <email>nobody@example.com</email>
+ <role>lead</role>
+ </maintainer>
+ </maintainers>
+ <release>
+ <version>1.1</version>
+ <date>2003-09-09</date>
+ <state>stable</state>
+ <notes>
+ required dependency test
+ </notes>
+ <deps>
+ <dep type="pkg" version="1.0" rel="ge">pkg6</dep>
+ </deps>
+ <filelist>
+ <dir name="/" baseinstalldir="grob" role="php">
+ <file>zoorb.php</file>
+ <dir name="goompness" role="php">
+ <file>oggbrzitzkee.php</file>
+ <file>Mopreeb.php</file>
+ </dir>
+ </dir>
+ </filelist>
+ </release>
+ </package>
--- /dev/null
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+ <!DOCTYPE package SYSTEM "http://pear.php.net/dtd/package-1.0">
+ <package version="1.0">
+ <name>pkg6</name>
+ <summary>required test for PEAR_Installer</summary>
+ <description>
+ fake package
+ </description>
+ <license>PHP License</license>
+ <maintainers>
+ <maintainer>
+ <user>fakeuser</user>
+ <name>Joe Shmoe</name>
+ <email>nobody@example.com</email>
+ <role>lead</role>
+ </maintainer>
+ </maintainers>
+ <release>
+ <version>1.1</version>
+ <date>2003-09-09</date>
+ <state>stable</state>
+ <notes>
+ required dependency test
+ </notes>
+ <filelist>
+ <dir name="/" baseinstalldir="grob" role="php">
+ <file>zoorb.php</file>
+ <dir name="goompness" role="php">
+ <file>oggbrzitzkee.php</file>
+ <file>Mopreeb.php</file>
+ </dir>
+ </dir>
+ </filelist>
+ </release>
+ </package>
--- /dev/null
+--TEST--
+PEAR complete set/push/pop error-handling test (run from pear/tests dir)
+--SKIPIF--
+<?php
+if (!getenv('PHP_PEAR_RUNTESTS')) {
+ echo 'skip';
+}
+?>
+--FILE--
+<?php
+
+require_once "PEAR.php";
+
+class testErrorHandlingStatic {
+ function doSetErrorHandlingFunction()
+ {
+ print "testing in class setErrorHandling\n";
+ PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'get_error_mode');
+ echoPEARVars('_PEAR_default_error_mode', $GLOBALS['_PEAR_default_error_mode'],
+ '_PEAR_default_error_options', $GLOBALS['_PEAR_default_error_options']);
+ }
+
+ function doSetErrorHandlingStatic()
+ {
+ print "testing in class setErrorHandling array(obj, method)\n";
+ $obj = new testErrorHandlingPEAR;
+ PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, array(&$obj, 'fakeHandleError'));
+ echoPEARVars('_PEAR_default_error_mode', $GLOBALS['_PEAR_default_error_mode'],
+ '_PEAR_default_error_options', $GLOBALS['_PEAR_default_error_options']);
+ }
+
+ function doSetErrorHandlingObject()
+ {
+ print "testing in class setErrorHandling array(class, method)\n";
+ PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, array('testErrorHandlingStatic', 'fakeHandleError'));
+ echoPEARVars('_PEAR_default_error_mode', $GLOBALS['_PEAR_default_error_mode'],
+ '_PEAR_default_error_options', $GLOBALS['_PEAR_default_error_options']);
+ }
+
+ function doPushErrorHandlingFunction()
+ {
+ print "testing in class pushErrorHandling\n";
+ PEAR::pushErrorHandling(PEAR_ERROR_CALLBACK, 'get_error_mode');
+ echoPEARStack('_PEAR_error_handler_stack', $GLOBALS['_PEAR_error_handler_stack']);
+ }
+
+ function doPushErrorHandlingObject()
+ {
+ print "testing in class pushErrorHandling array(obj, method)\n";
+ $obj = new testErrorHandlingPEAR;
+ PEAR::pushErrorHandling(PEAR_ERROR_CALLBACK, array(&$obj, 'fakeHandleError'));
+ echoPEARStack('_PEAR_error_handler_stack', $GLOBALS['_PEAR_error_handler_stack']);
+ }
+
+ function doPushErrorHandlingStatic()
+ {
+ print "testing in class pushErrorHandling array(class, method)\n";
+ PEAR::pushErrorHandling(PEAR_ERROR_CALLBACK, array('testErrorHandlingStatic', 'fakeHandleError'));
+ echoPEARStack('_PEAR_error_handler_stack', $GLOBALS['_PEAR_error_handler_stack']);
+ }
+
+ function doPopErrorHandling()
+ {
+ print "testing in class popErrorHandling\n";
+ PEAR::popErrorHandling();
+ echoPEARStack('_PEAR_error_handler_stack', $GLOBALS['_PEAR_error_handler_stack']);
+ }
+
+ function fakeHandleError($err)
+ {
+ }
+}
+
+class testErrorHandlingPEAR extends PEAR {
+
+ function fakeHandleError($err)
+ {
+ }
+
+ function doSetErrorHandlingFunction()
+ {
+ print "testing in PEAR setErrorHandling\n";
+ PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'get_error_mode');
+ echoPEARVars('_PEAR_default_error_mode', $GLOBALS['_PEAR_default_error_mode'],
+ '_PEAR_default_error_options', $GLOBALS['_PEAR_default_error_options']);
+ echoPEARVars('$this->_default_error_mode', $this->_default_error_mode,
+ '$this->_default_error_options', $this->_default_error_options);
+ }
+
+ function doSetErrorHandlingStatic()
+ {
+ print "testing in PEAR setErrorHandling array(obj, method)\n";
+ $obj = new testErrorHandlingPEAR;
+ PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, array(&$obj, 'fakeHandleError'));
+ echoPEARVars('_PEAR_default_error_mode', $GLOBALS['_PEAR_default_error_mode'],
+ '_PEAR_default_error_options', $GLOBALS['_PEAR_default_error_options']);
+ echoPEARVars('$this->_default_error_mode', $this->_default_error_mode,
+ '$this->_default_error_options', $this->_default_error_options);
+ }
+
+ function doSetErrorHandlingObject()
+ {
+ print "testing in PEAR setErrorHandling array(class, method)\n";
+ PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, array('testErrorHandlingStatic', 'fakeHandleError'));
+ echoPEARVars('_PEAR_default_error_mode', $GLOBALS['_PEAR_default_error_mode'],
+ '_PEAR_default_error_options', $GLOBALS['_PEAR_default_error_options']);
+ echoPEARVars('$this->_default_error_mode', $this->_default_error_mode,
+ '$this->_default_error_options', $this->_default_error_options);
+ }
+
+ function doPushErrorHandlingFunction()
+ {
+ print "testing in PEAR pushErrorHandling\n";
+ PEAR::pushErrorHandling(PEAR_ERROR_CALLBACK, 'get_error_mode');
+ echoPEARStack('_PEAR_error_handler_stack', $GLOBALS['_PEAR_error_handler_stack']);
+ }
+
+ function doPushErrorHandlingObject()
+ {
+ print "testing in PEAR pushErrorHandling array(obj, method)\n";
+ $obj = new testErrorHandlingPEAR;
+ PEAR::pushErrorHandling(PEAR_ERROR_CALLBACK, array(&$obj, 'fakeHandleError'));
+ echoPEARStack('_PEAR_error_handler_stack', $GLOBALS['_PEAR_error_handler_stack']);
+ }
+
+ function doPushErrorHandlingStatic()
+ {
+ print "testing in PEAR pushErrorHandling array(class, method)\n";
+ PEAR::pushErrorHandling(PEAR_ERROR_CALLBACK, array('testErrorHandlingStatic', 'fakeHandleError'));
+ echoPEARStack('_PEAR_error_handler_stack', $GLOBALS['_PEAR_error_handler_stack']);
+ }
+
+ function doPopErrorHandling()
+ {
+ print "testing in PEAR popErrorHandling\n";
+ PEAR::popErrorHandling();
+ echoPEARStack('_PEAR_error_handler_stack', $GLOBALS['_PEAR_error_handler_stack']);
+ }
+}
+
+function echoPEARVars($name1, $mode, $name2, $options, $indent = '')
+{
+ $levelMap =
+ array(
+ E_USER_NOTICE => 'E_USER_NOTICE',
+ E_USER_WARNING => 'E_USER_WARNING',
+ E_USER_ERROR => 'E_USER_ERROR',
+ );
+ $pearLevelMap =
+ array(
+ PEAR_ERROR_RETURN =>'PEAR_ERROR_RETURN',
+ PEAR_ERROR_PRINT =>'PEAR_ERROR_PRINT',
+ PEAR_ERROR_TRIGGER =>'PEAR_ERROR_TRIGGER',
+ PEAR_ERROR_DIE =>'PEAR_ERROR_DIE',
+ PEAR_ERROR_CALLBACK =>'PEAR_ERROR_CALLBACK',
+ PEAR_ERROR_EXCEPTION =>'PEAR_ERROR_EXCEPTION',
+ );
+ print $indent . "echoing PEAR error-handling Variables:\n";
+ print "$indent--------------------------------------\n";
+ print $indent . "$name1:\n";
+ $levels = get_error_mode($mode);
+ print $indent;
+ foreach($levels as $level) {
+ print $pearLevelMap[$level] . ',';
+ }
+ print "\n";
+ print $indent . "$name2:\n";
+ if (is_string($options)) {
+ print $indent . 'Callback: ' . $options. "()\n";
+ } elseif (is_array($options)) {
+ print $indent . 'Callback: ';
+ if (is_string($options[0])) {
+ print '(static) ' . $options[0] . '::';
+ } else {
+ print get_class($options[0]) . '->';
+ }
+ print $options[1] . "()\n";
+ } else {
+ print $indent . $levelMap[$options] . "\n";
+ }
+ print "$indent--------------------------------------\n";
+}
+
+function echoPEARStack($name, $stack)
+{
+ print "stack $name:\n";
+ foreach ($stack as $i => $item) {
+ print "Index $i:\n";
+ echoPEARVars('mode', $item[0], 'options', $item[1], ' ');
+ }
+}
+
+function get_error_mode($err)
+{
+ $ret = array();
+ $level = 0;
+ while($level < 7) {
+ $a = ($err >> $level++) & 1;
+ if ($a) {
+ $ret[] = 1 << ($level - 1);
+ }
+ }
+ return $ret;
+}
+print "testing static error-handling global code\n";
+echoPEARVars('_PEAR_default_error_mode', $GLOBALS['_PEAR_default_error_mode'],
+ '_PEAR_default_error_options', $GLOBALS['_PEAR_default_error_options']);
+print "testing setErrorHandling\n";
+PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'get_error_mode');
+echoPEARVars('_PEAR_default_error_mode', $GLOBALS['_PEAR_default_error_mode'],
+ '_PEAR_default_error_options', $GLOBALS['_PEAR_default_error_options']);
+print "testing setErrorHandling array(obj, method)\n";
+$obj = new testErrorHandlingPEAR;
+PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, array(&$obj, 'fakeHandleError'));
+echoPEARVars('_PEAR_default_error_mode', $GLOBALS['_PEAR_default_error_mode'],
+ '_PEAR_default_error_options', $GLOBALS['_PEAR_default_error_options']);
+print "testing setErrorHandling array(class, method)\n";
+PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, array('testErrorHandlingStatic', 'fakeHandleError'));
+echoPEARVars('_PEAR_default_error_mode', $GLOBALS['_PEAR_default_error_mode'],
+ '_PEAR_default_error_options', $GLOBALS['_PEAR_default_error_options']);
+
+
+print "testing pushErrorHandling\n";
+PEAR::pushErrorHandling(PEAR_ERROR_CALLBACK, 'get_error_mode');
+echoPEARStack('_PEAR_error_handler_stack', $GLOBALS['_PEAR_error_handler_stack']);
+print "testing pushErrorHandling array(obj, method)\n";
+$obj = new testErrorHandlingPEAR;
+PEAR::pushErrorHandling(PEAR_ERROR_CALLBACK, array(&$obj, 'fakeHandleError'));
+echoPEARStack('_PEAR_error_handler_stack', $GLOBALS['_PEAR_error_handler_stack']);
+print "testing pushErrorHandling array(class, method)\n";
+PEAR::pushErrorHandling(PEAR_ERROR_CALLBACK, array('testErrorHandlingStatic', 'fakeHandleError'));
+echoPEARStack('_PEAR_error_handler_stack', $GLOBALS['_PEAR_error_handler_stack']);
+
+
+print "testing popErrorHandling\n";
+PEAR::popErrorHandling();
+echoPEARStack('_PEAR_error_handler_stack', $GLOBALS['_PEAR_error_handler_stack']);
+print "testing popErrorHandling\n";
+$obj = new testErrorHandlingPEAR;
+PEAR::popErrorHandling();
+echoPEARStack('_PEAR_error_handler_stack', $GLOBALS['_PEAR_error_handler_stack']);
+print "testing popErrorHandling\n";
+PEAR::popErrorHandling();
+echoPEARStack('_PEAR_error_handler_stack', $GLOBALS['_PEAR_error_handler_stack']);
+print "*******************************************\n";
+print "testing static error-handling in-class code\n";
+print "*******************************************\n";
+PEAR::setErrorHandling(PEAR_ERROR_RETURN, E_USER_NOTICE);
+$obj = new testErrorHandlingStatic;
+$obj->doSetErrorHandlingFunction();
+$obj->doSetErrorHandlingStatic();
+$obj->doSetErrorHandlingObject();
+$obj->doPushErrorHandlingFunction();
+$obj->doPushErrorHandlingStatic();
+$obj->doPushErrorHandlingObject();
+$obj->doPopErrorHandling();
+$obj->doPopErrorHandling();
+$obj->doPopErrorHandling();
+print "*******************************************\n";
+print "testing non-static error-handling in-class code\n";
+print "*******************************************\n";
+PEAR::setErrorHandling(PEAR_ERROR_RETURN, E_USER_NOTICE);
+$obj = new testErrorHandlingPEAR;
+$obj->doSetErrorHandlingFunction();
+$obj->doSetErrorHandlingStatic();
+$obj->doSetErrorHandlingObject();
+$obj->doPushErrorHandlingFunction();
+$obj->doPushErrorHandlingStatic();
+$obj->doPushErrorHandlingObject();
+$obj->doPopErrorHandling();
+$obj->doPopErrorHandling();
+$obj->doPopErrorHandling();
+
+?>
+--GET--
+--POST--
+--EXPECT--
+testing static error-handling global code
+echoing PEAR error-handling Variables:
+--------------------------------------
+_PEAR_default_error_mode:
+PEAR_ERROR_RETURN,
+_PEAR_default_error_options:
+E_USER_NOTICE
+--------------------------------------
+testing setErrorHandling
+echoing PEAR error-handling Variables:
+--------------------------------------
+_PEAR_default_error_mode:
+PEAR_ERROR_CALLBACK,
+_PEAR_default_error_options:
+Callback: get_error_mode()
+--------------------------------------
+testing setErrorHandling array(obj, method)
+echoing PEAR error-handling Variables:
+--------------------------------------
+_PEAR_default_error_mode:
+PEAR_ERROR_CALLBACK,
+_PEAR_default_error_options:
+Callback: testerrorhandlingpear->fakeHandleError()
+--------------------------------------
+testing setErrorHandling array(class, method)
+echoing PEAR error-handling Variables:
+--------------------------------------
+_PEAR_default_error_mode:
+PEAR_ERROR_CALLBACK,
+_PEAR_default_error_options:
+Callback: (static) testErrorHandlingStatic::fakeHandleError()
+--------------------------------------
+testing pushErrorHandling
+stack _PEAR_error_handler_stack:
+Index 0:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: (static) testErrorHandlingStatic::fakeHandleError()
+ --------------------------------------
+Index 1:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: get_error_mode()
+ --------------------------------------
+testing pushErrorHandling array(obj, method)
+stack _PEAR_error_handler_stack:
+Index 0:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: (static) testErrorHandlingStatic::fakeHandleError()
+ --------------------------------------
+Index 1:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: get_error_mode()
+ --------------------------------------
+Index 2:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: get_error_mode()
+ --------------------------------------
+Index 3:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: testerrorhandlingpear->fakeHandleError()
+ --------------------------------------
+testing pushErrorHandling array(class, method)
+stack _PEAR_error_handler_stack:
+Index 0:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: (static) testErrorHandlingStatic::fakeHandleError()
+ --------------------------------------
+Index 1:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: get_error_mode()
+ --------------------------------------
+Index 2:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: get_error_mode()
+ --------------------------------------
+Index 3:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: testerrorhandlingpear->fakeHandleError()
+ --------------------------------------
+Index 4:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: testerrorhandlingpear->fakeHandleError()
+ --------------------------------------
+Index 5:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: (static) testErrorHandlingStatic::fakeHandleError()
+ --------------------------------------
+testing popErrorHandling
+stack _PEAR_error_handler_stack:
+Index 0:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: (static) testErrorHandlingStatic::fakeHandleError()
+ --------------------------------------
+Index 1:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: get_error_mode()
+ --------------------------------------
+Index 2:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: get_error_mode()
+ --------------------------------------
+Index 3:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: testerrorhandlingpear->fakeHandleError()
+ --------------------------------------
+testing popErrorHandling
+stack _PEAR_error_handler_stack:
+Index 0:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: (static) testErrorHandlingStatic::fakeHandleError()
+ --------------------------------------
+Index 1:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: get_error_mode()
+ --------------------------------------
+testing popErrorHandling
+stack _PEAR_error_handler_stack:
+*******************************************
+testing static error-handling in-class code
+*******************************************
+testing in class setErrorHandling
+echoing PEAR error-handling Variables:
+--------------------------------------
+_PEAR_default_error_mode:
+PEAR_ERROR_CALLBACK,
+_PEAR_default_error_options:
+Callback: get_error_mode()
+--------------------------------------
+testing in class setErrorHandling array(obj, method)
+echoing PEAR error-handling Variables:
+--------------------------------------
+_PEAR_default_error_mode:
+PEAR_ERROR_CALLBACK,
+_PEAR_default_error_options:
+Callback: testerrorhandlingpear->fakeHandleError()
+--------------------------------------
+testing in class setErrorHandling array(class, method)
+echoing PEAR error-handling Variables:
+--------------------------------------
+_PEAR_default_error_mode:
+PEAR_ERROR_CALLBACK,
+_PEAR_default_error_options:
+Callback: (static) testErrorHandlingStatic::fakeHandleError()
+--------------------------------------
+testing in class pushErrorHandling
+stack _PEAR_error_handler_stack:
+Index 0:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: (static) testErrorHandlingStatic::fakeHandleError()
+ --------------------------------------
+Index 1:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: get_error_mode()
+ --------------------------------------
+testing in class pushErrorHandling array(class, method)
+stack _PEAR_error_handler_stack:
+Index 0:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: (static) testErrorHandlingStatic::fakeHandleError()
+ --------------------------------------
+Index 1:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: get_error_mode()
+ --------------------------------------
+Index 2:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: get_error_mode()
+ --------------------------------------
+Index 3:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: (static) testErrorHandlingStatic::fakeHandleError()
+ --------------------------------------
+testing in class pushErrorHandling array(obj, method)
+stack _PEAR_error_handler_stack:
+Index 0:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: (static) testErrorHandlingStatic::fakeHandleError()
+ --------------------------------------
+Index 1:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: get_error_mode()
+ --------------------------------------
+Index 2:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: get_error_mode()
+ --------------------------------------
+Index 3:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: (static) testErrorHandlingStatic::fakeHandleError()
+ --------------------------------------
+Index 4:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: (static) testErrorHandlingStatic::fakeHandleError()
+ --------------------------------------
+Index 5:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: testerrorhandlingpear->fakeHandleError()
+ --------------------------------------
+testing in class popErrorHandling
+stack _PEAR_error_handler_stack:
+Index 0:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: (static) testErrorHandlingStatic::fakeHandleError()
+ --------------------------------------
+Index 1:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: get_error_mode()
+ --------------------------------------
+Index 2:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: get_error_mode()
+ --------------------------------------
+Index 3:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: (static) testErrorHandlingStatic::fakeHandleError()
+ --------------------------------------
+testing in class popErrorHandling
+stack _PEAR_error_handler_stack:
+Index 0:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: (static) testErrorHandlingStatic::fakeHandleError()
+ --------------------------------------
+Index 1:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: get_error_mode()
+ --------------------------------------
+testing in class popErrorHandling
+stack _PEAR_error_handler_stack:
+*******************************************
+testing non-static error-handling in-class code
+*******************************************
+testing in PEAR setErrorHandling
+echoing PEAR error-handling Variables:
+--------------------------------------
+_PEAR_default_error_mode:
+PEAR_ERROR_RETURN,
+_PEAR_default_error_options:
+E_USER_NOTICE
+--------------------------------------
+echoing PEAR error-handling Variables:
+--------------------------------------
+$this->_default_error_mode:
+PEAR_ERROR_CALLBACK,
+$this->_default_error_options:
+Callback: get_error_mode()
+--------------------------------------
+testing in PEAR setErrorHandling array(obj, method)
+echoing PEAR error-handling Variables:
+--------------------------------------
+_PEAR_default_error_mode:
+PEAR_ERROR_RETURN,
+_PEAR_default_error_options:
+E_USER_NOTICE
+--------------------------------------
+echoing PEAR error-handling Variables:
+--------------------------------------
+$this->_default_error_mode:
+PEAR_ERROR_CALLBACK,
+$this->_default_error_options:
+Callback: testerrorhandlingpear->fakeHandleError()
+--------------------------------------
+testing in PEAR setErrorHandling array(class, method)
+echoing PEAR error-handling Variables:
+--------------------------------------
+_PEAR_default_error_mode:
+PEAR_ERROR_RETURN,
+_PEAR_default_error_options:
+E_USER_NOTICE
+--------------------------------------
+echoing PEAR error-handling Variables:
+--------------------------------------
+$this->_default_error_mode:
+PEAR_ERROR_CALLBACK,
+$this->_default_error_options:
+Callback: (static) testErrorHandlingStatic::fakeHandleError()
+--------------------------------------
+testing in PEAR pushErrorHandling
+stack _PEAR_error_handler_stack:
+Index 0:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: (static) testErrorHandlingStatic::fakeHandleError()
+ --------------------------------------
+Index 1:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: get_error_mode()
+ --------------------------------------
+testing in PEAR pushErrorHandling array(class, method)
+stack _PEAR_error_handler_stack:
+Index 0:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: (static) testErrorHandlingStatic::fakeHandleError()
+ --------------------------------------
+Index 1:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: get_error_mode()
+ --------------------------------------
+Index 2:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: get_error_mode()
+ --------------------------------------
+Index 3:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: (static) testErrorHandlingStatic::fakeHandleError()
+ --------------------------------------
+testing in PEAR pushErrorHandling array(obj, method)
+stack _PEAR_error_handler_stack:
+Index 0:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: (static) testErrorHandlingStatic::fakeHandleError()
+ --------------------------------------
+Index 1:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: get_error_mode()
+ --------------------------------------
+Index 2:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: get_error_mode()
+ --------------------------------------
+Index 3:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: (static) testErrorHandlingStatic::fakeHandleError()
+ --------------------------------------
+Index 4:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: (static) testErrorHandlingStatic::fakeHandleError()
+ --------------------------------------
+Index 5:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: testerrorhandlingpear->fakeHandleError()
+ --------------------------------------
+testing in PEAR popErrorHandling
+stack _PEAR_error_handler_stack:
+Index 0:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: (static) testErrorHandlingStatic::fakeHandleError()
+ --------------------------------------
+Index 1:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: get_error_mode()
+ --------------------------------------
+Index 2:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: get_error_mode()
+ --------------------------------------
+Index 3:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: (static) testErrorHandlingStatic::fakeHandleError()
+ --------------------------------------
+testing in PEAR popErrorHandling
+stack _PEAR_error_handler_stack:
+Index 0:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: (static) testErrorHandlingStatic::fakeHandleError()
+ --------------------------------------
+Index 1:
+ echoing PEAR error-handling Variables:
+ --------------------------------------
+ mode:
+ PEAR_ERROR_CALLBACK,
+ options:
+ Callback: get_error_mode()
+ --------------------------------------
+testing in PEAR popErrorHandling
+stack _PEAR_error_handler_stack:
--- /dev/null
+--TEST--
+PEAR_Common::analyzeSourceCode test
+--SKIPIF--
+<?php
+if (!getenv('PHP_PEAR_RUNTESTS')) {
+ echo 'skip';
+}
+if (!function_exists('token_get_all')) {
+ echo 'skip';
+}
+?>
+--FILE--
+<?php
+
+require_once "PEAR/Common.php";
+
+$x = PEAR_Common::analyzeSourceCode('=+"\\//452');
+echo "first test: returns false with non-existing filename? ";
+echo $x ? "no\n" : "yes\n";
+
+$testdir = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'pear_common_analyzeSCtest';
+mkdir($testdir);
+
+$test1 = '
+<?php
+::error();
+?>
+';
+$fp = fopen($testdir . DIRECTORY_SEPARATOR . 'test1.php', 'w');
+fwrite($fp, $test1);
+fclose($fp);
+
+$ret = PEAR_Common::analyzeSourceCode($testdir . DIRECTORY_SEPARATOR . 'test1.php');
+echo "second test: returns false with invalid PHP? ";
+echo $ret ? "no\n" : "yes\n";
+unlink($testdir . DIRECTORY_SEPARATOR . 'test1.php');
+
+$test3 = '
+<?php
+class test
+{
+ class test2 {
+ }
+}
+?>
+';
+$fp = fopen($testdir . DIRECTORY_SEPARATOR . 'test3.php', 'w');
+fwrite($fp, $test3);
+fclose($fp);
+
+$ret = PEAR_Common::analyzeSourceCode($testdir . DIRECTORY_SEPARATOR . 'test3.php');
+echo "fourth test: returns false with invalid PHP? ";
+echo $ret ? "no\n" : "yes\n";
+unlink($testdir . DIRECTORY_SEPARATOR . 'test3.php');
+
+$test4 = '
+<?php
+function test()
+{
+ class test2 {
+ }
+}
+?>
+';
+$fp = fopen($testdir . DIRECTORY_SEPARATOR . 'test4.php', 'w');
+fwrite($fp, $test4);
+fclose($fp);
+
+$ret = PEAR_Common::analyzeSourceCode($testdir . DIRECTORY_SEPARATOR . 'test4.php');
+echo "fifth test: returns false with invalid PHP? ";
+echo $ret ? "no\n" : "yes\n";
+unlink($testdir . DIRECTORY_SEPARATOR . 'test4.php');
+
+$test5 = '
+<?php
+function test()
+{
+}
+
+if (trytofool) {
+ function fool()
+ {
+ }
+}
+class test2 {
+ function test2() {
+ parent::unused();
+ Greg::classes();
+ $a = new Pierre;
+ }
+}
+
+class blah extends test2 {
+ /**
+ * @nodep Stig
+ */
+ function blah()
+ {
+ Stig::rules();
+ }
+}
+?>
+';
+$fp = fopen($testdir . DIRECTORY_SEPARATOR . 'test5.php', 'w');
+fwrite($fp, $test5);
+fclose($fp);
+
+$ret = PEAR_Common::analyzeSourceCode($testdir . DIRECTORY_SEPARATOR . 'test5.php');
+echo "sixth test: returns false with valid PHP? ";
+echo $ret ? "no\n" : "yes\n";
+var_dump($ret);
+unlink($testdir . DIRECTORY_SEPARATOR . 'test5.php');
+
+rmdir($testdir);
+?>
+--GET--
+--POST--
+--EXPECT--
+first test: returns false with non-existing filename? yes
+second test: returns false with invalid PHP? yes
+fourth test: returns false with invalid PHP? yes
+fifth test: returns false with invalid PHP? yes
+sixth test: returns false with valid PHP? no
+array(5) {
+ ["declared_classes"]=>
+ array(2) {
+ [0]=>
+ string(5) "test2"
+ [1]=>
+ string(4) "blah"
+ }
+ ["declared_methods"]=>
+ array(2) {
+ ["test2"]=>
+ array(1) {
+ [0]=>
+ string(5) "test2"
+ }
+ ["blah"]=>
+ array(1) {
+ [0]=>
+ string(4) "blah"
+ }
+ }
+ ["declared_functions"]=>
+ array(2) {
+ [0]=>
+ string(4) "test"
+ [1]=>
+ string(4) "fool"
+ }
+ ["used_classes"]=>
+ array(2) {
+ [0]=>
+ string(4) "Greg"
+ [1]=>
+ string(6) "Pierre"
+ }
+ ["inheritance"]=>
+ array(1) {
+ ["blah"]=>
+ string(5) "test2"
+ }
+}
\ No newline at end of file
--- /dev/null
+--TEST--
+PEAR_Common::buildProvidesArray test
+--SKIPIF--
+<?php
+if (!getenv('PHP_PEAR_RUNTESTS')) {
+ echo 'skip';
+}
+if (!function_exists('token_get_all')) {
+ echo 'skip';
+}
+?>
+--FILE--
+<?php
+
+require_once "PEAR/Common.php";
+
+$testdir = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'pear_common_buildProvidesArraytest';
+mkdir($testdir);
+
+$test5 = '
+<?php
+function test()
+{
+}
+
+if (trytofool) {
+ function fool()
+ {
+ }
+}
+class test2 {
+ function test2() {
+ parent::unused();
+ Greg::classes();
+ $a = new Pierre;
+ }
+}
+
+class blah extends test2 {
+ /**
+ * @nodep Stig
+ */
+ function blah()
+ {
+ Stig::rules();
+ }
+}
+?>
+';
+$fp = fopen($testdir . DIRECTORY_SEPARATOR . 'test5.php', 'w');
+fwrite($fp, $test5);
+fclose($fp);
+
+$ret = PEAR_Common::analyzeSourceCode($testdir . DIRECTORY_SEPARATOR . 'test5.php');
+echo "pre-test: returns false with valid PHP? ";
+echo $ret ? "no\n" : "yes\n";
+var_dump($ret);
+unlink($testdir . DIRECTORY_SEPARATOR . 'test5.php');
+$common = new PEAR_Common;
+$common->buildProvidesArray($ret);
+var_dump($common->pkginfo);
+rmdir($testdir);
+?>
+--GET--
+--POST--
+--EXPECT--
+pre-test: returns false with valid PHP? no
+array(5) {
+ ["declared_classes"]=>
+ array(2) {
+ [0]=>
+ string(5) "test2"
+ [1]=>
+ string(4) "blah"
+ }
+ ["declared_methods"]=>
+ array(2) {
+ ["test2"]=>
+ array(1) {
+ [0]=>
+ string(5) "test2"
+ }
+ ["blah"]=>
+ array(1) {
+ [0]=>
+ string(4) "blah"
+ }
+ }
+ ["declared_functions"]=>
+ array(2) {
+ [0]=>
+ string(4) "test"
+ [1]=>
+ string(4) "fool"
+ }
+ ["used_classes"]=>
+ array(2) {
+ [0]=>
+ string(4) "Greg"
+ [1]=>
+ string(6) "Pierre"
+ }
+ ["inheritance"]=>
+ array(1) {
+ ["blah"]=>
+ string(5) "test2"
+ }
+}
+array(1) {
+ ["provides"]=>
+ array(4) {
+ ["class;test2"]=>
+ array(2) {
+ ["type"]=>
+ string(5) "class"
+ ["name"]=>
+ string(5) "test2"
+ }
+ ["class;blah"]=>
+ array(3) {
+ ["type"]=>
+ string(5) "class"
+ ["name"]=>
+ string(4) "blah"
+ ["extends"]=>
+ string(5) "test2"
+ }
+ ["function;test"]=>
+ array(2) {
+ ["type"]=>
+ string(8) "function"
+ ["name"]=>
+ string(4) "test"
+ }
+ ["function;fool"]=>
+ array(2) {
+ ["type"]=>
+ string(8) "function"
+ ["name"]=>
+ string(4) "fool"
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+--TEST--
+PEAR_Common::downloadHttp test
+--SKIPIF--
+<?php
+if (!getenv('PHP_PEAR_RUNTESTS')) {
+ echo 'skip';
+}
+$fp = @fsockopen('pear.php.net', 80);
+if (!$fp) {
+ echo 'skip';
+} else {
+ fclose($fp);
+}
+?>
+--FILE--
+<?php
+mkdir($temp_path = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'testDownloadHttp');
+// make the fake configuration - we'll use one of these and it should work
+$config = serialize(array('master_server' => 'pear.php.net',
+ 'php_dir' => $temp_path . DIRECTORY_SEPARATOR . 'php',
+ 'ext_dir' => $temp_path . DIRECTORY_SEPARATOR . 'ext',
+ 'data_dir' => $temp_path . DIRECTORY_SEPARATOR . 'data',
+ 'doc_dir' => $temp_path . DIRECTORY_SEPARATOR . 'doc',
+ 'test_dir' => $temp_path . DIRECTORY_SEPARATOR . 'test',
+ 'bin_dir' => $temp_path . DIRECTORY_SEPARATOR . 'bin',));
+touch($temp_path . DIRECTORY_SEPARATOR . 'pear.conf');
+$fp = fopen($temp_path . DIRECTORY_SEPARATOR . 'pear.conf', 'w');
+fwrite($fp, $config);
+fclose($fp);
+touch($temp_path . DIRECTORY_SEPARATOR . 'pear.ini');
+$fp = fopen($temp_path . DIRECTORY_SEPARATOR . 'pear.ini', 'w');
+fwrite($fp, $config);
+fclose($fp);
+
+putenv('PHP_PEAR_SYSCONF_DIR=' . $temp_path);
+$home = getenv('HOME');
+if (!empty($home)) {
+ // for PEAR_Config initialization
+ putenv('HOME="'.$temp_path);
+}
+
+require_once "PEAR/Common.php";
+
+$common = &new PEAR_Common;
+
+PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'catchit');
+
+function catchit($err)
+{
+ echo "Caught error: " . $err->getMessage() . "\n";
+}
+
+echo "Test static:\n";
+
+echo "Simple: ";
+PEAR_Common::downloadHttp('http://test.pear.php.net/testdownload.tgz', $ui, $temp_path);
+$firstone = implode('', file(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'testdownload.tgz'));
+$secondone = implode('', file($temp_path . DIRECTORY_SEPARATOR . 'testdownload.tgz'));
+echo ($firstone == $secondone) ? "passed\n" : "failed\n";
+
+echo "Simple fail:\n";
+PEAR_Common::downloadHttp('http://test.poop.php.net/stuff.tgz', $ui, $temp_path);
+
+echo "Test callback:\n";
+
+$ui = 'My UI';
+
+PEAR_Common::downloadHttp('http://test.pear.php.net/testdownload.tgz', $ui, $temp_path, 'myCallback');
+$firstone = implode('', file(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'testdownload.tgz'));
+$secondone = implode('', file($temp_path . DIRECTORY_SEPARATOR . 'testdownload.tgz'));
+echo "Working Callback: ";
+echo ($firstone == $secondone) ? "passed\n" : "failed\n";
+
+
+function myCallback($message, $payload)
+{
+ $stuff = serialize($payload);
+ echo "Callback Message: $message\n";
+ echo "Callback Payload: $stuff\n";
+}
+
+echo "Callback fail:\n";
+PEAR_Common::downloadHttp('http://test.poop.php.net/stuff.tgz', $ui, $temp_path, 'myCallback');
+
+cleanall($temp_path);
+
+// ------------------------------------------------------------------------- //
+
+function cleanall($dir)
+{
+ $dp = opendir($dir);
+ while ($ent = readdir($dp)) {
+ if ($ent == '.' || $ent == '..') {
+ continue;
+ }
+ if (is_dir($dir . DIRECTORY_SEPARATOR . $ent)) {
+ cleanall($dir . DIRECTORY_SEPARATOR . $ent);
+ } else {
+ unlink($dir . DIRECTORY_SEPARATOR . $ent);
+ }
+ }
+ closedir($dp);
+ rmdir($dir);
+}
+?>
+--GET--
+--POST--
+--EXPECT--
+Test static:
+Simple: passed
+Simple fail:
+Caught error: Connection to `test.poop.php.net:80' failed: The operation completed successfully.
+
+Test callback:
+Callback Message: setup
+Callback Payload: a:1:{i:0;s:5:"My UI";}
+Callback Message: message
+Callback Payload: s:35:"Using HTTP proxy test.pear.php.net:";
+Callback Message: saveas
+Callback Payload: s:16:"testdownload.tgz";
+Callback Message: start
+Callback Payload: a:2:{i:0;s:16:"testdownload.tgz";i:1;s:5:"41655";}
+Callback Message: bytesread
+Callback Payload: i:1024;
+Callback Message: bytesread
+Callback Payload: i:2048;
+Callback Message: bytesread
+Callback Payload: i:3072;
+Callback Message: bytesread
+Callback Payload: i:4096;
+Callback Message: bytesread
+Callback Payload: i:5120;
+Callback Message: bytesread
+Callback Payload: i:6144;
+Callback Message: bytesread
+Callback Payload: i:7168;
+Callback Message: bytesread
+Callback Payload: i:8192;
+Callback Message: bytesread
+Callback Payload: i:9216;
+Callback Message: bytesread
+Callback Payload: i:10240;
+Callback Message: bytesread
+Callback Payload: i:11264;
+Callback Message: bytesread
+Callback Payload: i:12288;
+Callback Message: bytesread
+Callback Payload: i:13312;
+Callback Message: bytesread
+Callback Payload: i:14336;
+Callback Message: bytesread
+Callback Payload: i:15360;
+Callback Message: bytesread
+Callback Payload: i:16384;
+Callback Message: bytesread
+Callback Payload: i:17408;
+Callback Message: bytesread
+Callback Payload: i:18432;
+Callback Message: bytesread
+Callback Payload: i:19456;
+Callback Message: bytesread
+Callback Payload: i:20480;
+Callback Message: bytesread
+Callback Payload: i:21504;
+Callback Message: bytesread
+Callback Payload: i:22528;
+Callback Message: bytesread
+Callback Payload: i:23552;
+Callback Message: bytesread
+Callback Payload: i:24576;
+Callback Message: bytesread
+Callback Payload: i:25600;
+Callback Message: bytesread
+Callback Payload: i:26624;
+Callback Message: bytesread
+Callback Payload: i:27648;
+Callback Message: bytesread
+Callback Payload: i:28672;
+Callback Message: bytesread
+Callback Payload: i:29696;
+Callback Message: bytesread
+Callback Payload: i:30720;
+Callback Message: bytesread
+Callback Payload: i:31744;
+Callback Message: bytesread
+Callback Payload: i:32768;
+Callback Message: bytesread
+Callback Payload: i:33792;
+Callback Message: bytesread
+Callback Payload: i:34816;
+Callback Message: bytesread
+Callback Payload: i:35840;
+Callback Message: bytesread
+Callback Payload: i:36864;
+Callback Message: bytesread
+Callback Payload: i:37888;
+Callback Message: bytesread
+Callback Payload: i:38912;
+Callback Message: bytesread
+Callback Payload: i:39936;
+Callback Message: bytesread
+Callback Payload: i:40960;
+Callback Message: bytesread
+Callback Payload: i:41655;
+Callback Message: done
+Callback Payload: i:41655;
+Working Callback: passed
+Callback fail:
+Callback Message: setup
+Callback Payload: a:1:{i:0;s:5:"My UI";}
+Callback Message: message
+Callback Payload: s:35:"Using HTTP proxy test.poop.php.net:";
+Callback Message: connfailed
+Callback Payload: a:4:{i:0;s:17:"test.poop.php.net";i:1;i:80;i:2;i:0;i:3;s:39:"The operation completed successfully.
+";}
+Caught error: Connection to `test.poop.php.net:80' failed: The operation completed successfully.
\ No newline at end of file
--- /dev/null
+--TEST--
+PEAR_Common::infoFromString test
+--SKIPIF--
+<?php
+if (!getenv('PHP_PEAR_RUNTESTS')) {
+ echo 'skip';
+}
+if (!function_exists('token_get_all')) {
+ echo 'skip';
+}
+?>
+--FILE--
+<?php
+putenv('PHP_PEAR_SYSCONF_DIR=' . dirname(__FILE__));
+
+require_once "PEAR/Common.php";
+
+$common = &new PEAR_Common;
+
+PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'catchit');
+
+function catchit($err)
+{
+ echo "Caught error: " . $err->getMessage() . "\n";
+}
+
+echo "Test invalid XML\n";
+
+$common->infoFromString('\\goober');
+
+echo "Test valid XML, not a package.xml\n";
+
+$common->infoFromString('<?xml version="1.0" encoding="ISO-8859-1" ?>' .
+ "\n<grobbage></grobbage>");
+
+echo "Test valid package.xml, invalid version number\n";
+
+$common->infoFromString('<?xml version="1.0" encoding="ISO-8859-1" ?>' .
+ '<package version="10000000"></package>');
+
+echo "Test empty package.xml\n";
+
+$ret = $common->infoFromString('<?xml version="1.0" encoding="ISO-8859-1" ?>' .
+ '<package version="1.0"></package>');
+
+var_dump($ret);
+
+echo "Test 1\n";
+
+$ret = $common->infoFromString('<?xml version="1.0" encoding="ISO-8859-1" ?>' .
+ '<package version="1.0"><name>test</name></package>');
+
+var_dump($ret);
+
+echo "Test 2\n";
+
+$ret = $common->infoFromString('<?xml version="1.0" encoding="ISO-8859-1" ?>' .
+ '<package version="1.0"><name>test</name><summary>PEAR test</summary>' .
+ '</package>');
+
+var_dump($ret);
+
+echo "Test 3\n";
+
+$ret = $common->infoFromString('<?xml version="1.0" encoding="ISO-8859-1" ?>' .
+ '<package version="1.0"><name>test</name><summary>PEAR test</summary>' .
+ '<description>The test</description></package>');
+
+var_dump($ret);
+
+echo "Test 4\n";
+
+$ret = $common->infoFromString('<?xml version="1.0" encoding="ISO-8859-1" ?>' .
+ '<package version="1.0"><name>test</name><summary>PEAR test</summary>' .
+ '<description>The test</description><license>PHP License</license></package>');
+
+var_dump($ret);
+
+echo "Test 5\n";
+
+$ret = $common->infoFromString('<?xml version="1.0" encoding="ISO-8859-1" ?>' .
+ '<package version="1.0"><name>test</name><summary>PEAR test</summary>' .
+ '<description>The test</description><license>PHP License</license> <maintainers>
+ <maintainer>
+ <user>test</user>
+ <role>lead</role>
+ <name>test tester</name>
+ <email>test@php.net</email>
+ </maintainer></maintainers>
+</package>');
+
+var_dump($ret);
+
+echo "Test 6\n";
+
+$ret = $common->infoFromString('<?xml version="1.0" encoding="ISO-8859-1" ?>' .
+ '<package version="1.0"><name>test</name><summary>PEAR test</summary>' .
+ '<description>The test</description><license>PHP License</license> <maintainers>
+ <maintainer>
+ <user>test</user>
+ <role>lead</role>
+ <name>test tester</name>
+ <email>test@php.net</email>
+ </maintainer></maintainers><release>
+ <version>1.3b4</version></release>
+</package>');
+
+var_dump($ret);
+
+echo "Test 7\n";
+
+$ret = $common->infoFromString('<?xml version="1.0" encoding="ISO-8859-1" ?>' .
+ '<package version="1.0"><name>test</name><summary>PEAR test</summary>' .
+ '<description>The test</description><license>PHP License</license> <maintainers>
+ <maintainer>
+ <user>test</user>
+ <role>lead</role>
+ <name>test tester</name>
+ <email>test@php.net</email>
+ </maintainer></maintainers><release>
+ <version>1.3b4</version>
+ <date>2003-11-17</date>
+ <state>beta</state>
+ <notes>test</notes></release>
+</package>');
+
+var_dump($ret);
+
+echo "Test 8\n";
+
+$ret = $common->infoFromString('<?xml version="1.0" encoding="ISO-8859-1" ?>' .
+ '<package version="1.0"><name>test</name><summary>PEAR test</summary>' .
+ '<description>The test</description><license>PHP License</license> <maintainers>
+ <maintainer>
+ <user>test</user>
+ <role>lead</role>
+ <name>test tester</name>
+ <email>test@php.net</email>
+ </maintainer></maintainers><release>
+ <version>1.3b4</version>
+ <date>2003-11-17</date>
+ <state>beta</state>
+ <notes>test</notes>
+ <provides type="class" name="furngy" /></release>
+</package>');
+
+var_dump($ret);
+
+echo "Test 9\n";
+
+$ret = $common->infoFromString('<?xml version="1.0" encoding="ISO-8859-1" ?>' .
+ '<package version="1.0"><name>test</name><summary>PEAR test</summary>' .
+ '<description>The test</description><license>PHP License</license> <maintainers>
+ <maintainer>
+ <user>test</user>
+ <role>lead</role>
+ <name>test tester</name>
+ <email>test@php.net</email>
+ </maintainer></maintainers><release>
+ <version>1.3b4</version>
+ <date>2003-11-17</date>
+ <state>beta</state>
+ <notes>test</notes>
+ <provides type="class" name="furngy" />
+ <deps>
+ <dep type="ext" rel="has" optional="yes">xmlrpc</dep>
+ </deps>
+</release>
+</package>');
+
+var_dump($ret);
+
+echo "Test 10\n";
+
+$ret = $common->infoFromString('<?xml version="1.0" encoding="ISO-8859-1" ?>' .
+ '<package version="1.0"><name>test</name><summary>PEAR test</summary>' .
+ '<description>The test</description><license>PHP License</license> <maintainers>
+ <maintainer>
+ <user>test</user>
+ <role>lead</role>
+ <name>test tester</name>
+ <email>test@php.net</email>
+ </maintainer></maintainers><release>
+ <version>1.3b4</version>
+ <date>2003-11-17</date>
+ <state>beta</state>
+ <notes>test</notes>
+ <provides type="class" name="furngy" />
+ <deps>
+ <dep type="ext" rel="has" optional="yes">xmlrpc</dep>
+ </deps>
+ <filelist>
+ <file role="data" name="package.dtd"/>
+ <file role="data" name="template.spec"/>
+ <file role="php" name="PEAR.php"/>
+ <file role="php" name="System.php"/>
+ <dir name="PEAR">
+ <file role="php" name="Autoloader.php"/>
+ <file role="php" name="Command.php"/>
+ <dir name="Command">
+ <file role="php" name="Auth.php"/>
+ <file role="php" name="Build.php"/>
+ <file role="php" name="Common.php"/>
+ <file role="php" name="Config.php"/>
+ <file role="php" name="Install.php"/>
+ <file role="php" name="Package.php"/>
+ <file role="php" name="Registry.php"/>
+ <file role="php" name="Remote.php"/>
+ <file role="php" name="Mirror.php"/>
+ </dir>
+ <file role="php" name="Common.php"/>
+ <file role="php" name="Config.php"/>
+ <file role="php" name="Dependency.php"/>
+ <dir name="Frontend">
+ <file role="php" name="CLI.php"/>
+ </dir>
+ <file role="php" name="Builder.php"/>
+ <file role="php" name="Installer.php"/>
+ <file role="php" name="Packager.php"/>
+ <file role="php" name="Registry.php"/>
+ <file role="php" name="Remote.php"/>
+ </dir>
+ <dir name="OS">
+ <file role="php" name="Guess.php"/>
+ </dir>
+ <dir name="scripts" baseinstalldir="/">
+ <file role="script" install-as="pear" name="pear.sh">
+ <replace from="@php_bin@" to="php_bin" type="pear-config"/>
+ <replace from="@php_dir@" to="php_dir" type="pear-config"/>
+ <replace from="@pear_version@" to="version" type="package-info"/>
+ <replace from="@include_path@" to="php_dir" type="pear-config"/>
+ </file>
+ <file role="script" platform="windows" install-as="pear.bat" name="pear.bat">
+ <replace from="@bin_dir@" to="bin_dir" type="pear-config"/>
+ <replace from="@php_bin@" to="php_bin" type="pear-config"/>
+ <replace from="@include_path@" to="php_dir" type="pear-config"/>
+ </file>
+ <file role="php" install-as="pearcmd.php" name="pearcmd.php">
+ <replace from="@php_bin@" to="php_bin" type="pear-config"/>
+ <replace from="@php_dir@" to="php_dir" type="pear-config"/>
+ <replace from="@pear_version@" to="version" type="package-info"/>
+ <replace from="@include_path@" to="php_dir" type="pear-config"/>
+ </file>
+ </dir>
+ </filelist>
+
+</release>
+</package>');
+
+var_dump($ret);
+
+echo "Test 11\n";
+
+$ret = $common->infoFromString('<?xml version="1.0" encoding="ISO-8859-1" ?>' .
+ '<package version="1.0"><name>test</name><summary>PEAR test</summary>' .
+ '<description>The test</description><license>PHP License</license> <maintainers>
+ <maintainer>
+ <user>test</user>
+ <role>lead</role>
+ <name>test tester</name>
+ <email>test@php.net</email>
+ </maintainer></maintainers><release>
+ <version>1.3b4</version>
+ <date>2003-11-17</date>
+ <state>beta</state>
+ <notes>test</notes>
+ <provides type="class" name="furngy" />
+ <deps>
+ <dep type="ext" rel="has" optional="yes">xmlrpc</dep>
+ </deps>
+ <filelist>
+ <file role="data" name="package.dtd"/>
+ <file role="data" name="template.spec"/>
+ <file role="php" name="PEAR.php"/>
+ <file role="php" name="System.php"/>
+ <dir name="PEAR">
+ <file role="php" name="Autoloader.php"/>
+ <file role="php" name="Command.php"/>
+ <dir name="Command">
+ <file role="php" name="Auth.php"/>
+ <file role="php" name="Build.php"/>
+ <file role="php" name="Common.php"/>
+ <file role="php" name="Config.php"/>
+ <file role="php" name="Install.php"/>
+ <file role="php" name="Package.php"/>
+ <file role="php" name="Registry.php"/>
+ <file role="php" name="Remote.php"/>
+ <file role="php" name="Mirror.php"/>
+ </dir>
+ <file role="php" name="Common.php"/>
+ <file role="php" name="Config.php"/>
+ <file role="php" name="Dependency.php"/>
+ <dir name="Frontend">
+ <file role="php" name="CLI.php"/>
+ </dir>
+ <file role="php" name="Builder.php"/>
+ <file role="php" name="Installer.php"/>
+ <file role="php" name="Packager.php"/>
+ <file role="php" name="Registry.php"/>
+ <file role="php" name="Remote.php"/>
+ </dir>
+ <dir name="OS">
+ <file role="php" name="Guess.php"/>
+ </dir>
+ <dir name="scripts" baseinstalldir="/">
+ <file role="script" install-as="pear" name="pear.sh">
+ <replace from="@php_bin@" to="php_bin" type="pear-config"/>
+ <replace from="@php_dir@" to="php_dir" type="pear-config"/>
+ <replace from="@pear_version@" to="version" type="package-info"/>
+ <replace from="@include_path@" to="php_dir" type="pear-config"/>
+ </file>
+ <file role="script" platform="windows" install-as="pear.bat" name="pear.bat">
+ <replace from="@bin_dir@" to="bin_dir" type="pear-config"/>
+ <replace from="@php_bin@" to="php_bin" type="pear-config"/>
+ <replace from="@include_path@" to="php_dir" type="pear-config"/>
+ </file>
+ <file role="php" install-as="pearcmd.php" name="pearcmd.php">
+ <replace from="@php_bin@" to="php_bin" type="pear-config"/>
+ <replace from="@php_dir@" to="php_dir" type="pear-config"/>
+ <replace from="@pear_version@" to="version" type="package-info"/>
+ <replace from="@include_path@" to="php_dir" type="pear-config"/>
+ </file>
+ </dir>
+ </filelist>
+ <configureoptions>
+ <configureoption name="test" prompt="The prompt test" default="foo" />
+ </configureoptions>
+</release>
+</package>');
+
+var_dump($ret);
+
+echo "Test 12\n";
+
+$ret = $common->infoFromString('<?xml version="1.0" encoding="ISO-8859-1" ?>' .
+ '<package version="1.0"><name>test</name><summary>PEAR test</summary>' .
+ '<description>The test</description><license>PHP License</license> <maintainers>
+ <maintainer>
+ <user>test</user>
+ <role>lead</role>
+ <name>test tester</name>
+ <email>test@php.net</email>
+ </maintainer></maintainers><release>
+ <version>1.3b4</version>
+ <date>2003-11-17</date>
+ <state>beta</state>
+ <notes>test</notes>
+ <provides type="class" name="furngy" />
+ <deps>
+ <dep type="ext" rel="has" optional="yes">xmlrpc</dep>
+ </deps>
+ <filelist>
+ <file role="data" name="package.dtd"/>
+ <file role="data" name="template.spec"/>
+ <file role="php" name="PEAR.php"/>
+ <file role="php" name="System.php"/>
+ <dir name="PEAR">
+ <file role="php" name="Autoloader.php"/>
+ <file role="php" name="Command.php"/>
+ <dir name="Command">
+ <file role="php" name="Auth.php"/>
+ <file role="php" name="Build.php"/>
+ <file role="php" name="Common.php"/>
+ <file role="php" name="Config.php"/>
+ <file role="php" name="Install.php"/>
+ <file role="php" name="Package.php"/>
+ <file role="php" name="Registry.php"/>
+ <file role="php" name="Remote.php"/>
+ <file role="php" name="Mirror.php"/>
+ </dir>
+ <file role="php" name="Common.php"/>
+ <file role="php" name="Config.php"/>
+ <file role="php" name="Dependency.php"/>
+ <dir name="Frontend">
+ <file role="php" name="CLI.php"/>
+ </dir>
+ <file role="php" name="Builder.php"/>
+ <file role="php" name="Installer.php"/>
+ <file role="php" name="Packager.php"/>
+ <file role="php" name="Registry.php"/>
+ <file role="php" name="Remote.php"/>
+ </dir>
+ <dir name="OS">
+ <file role="php" name="Guess.php"/>
+ </dir>
+ <dir name="scripts" baseinstalldir="/">
+ <file role="script" install-as="pear" name="pear.sh">
+ <replace from="@php_bin@" to="php_bin" type="pear-config"/>
+ <replace from="@php_dir@" to="php_dir" type="pear-config"/>
+ <replace from="@pear_version@" to="version" type="package-info"/>
+ <replace from="@include_path@" to="php_dir" type="pear-config"/>
+ </file>
+ <file role="script" platform="windows" install-as="pear.bat" name="pear.bat">
+ <replace from="@bin_dir@" to="bin_dir" type="pear-config"/>
+ <replace from="@php_bin@" to="php_bin" type="pear-config"/>
+ <replace from="@include_path@" to="php_dir" type="pear-config"/>
+ </file>
+ <file role="php" install-as="pearcmd.php" name="pearcmd.php">
+ <replace from="@php_bin@" to="php_bin" type="pear-config"/>
+ <replace from="@php_dir@" to="php_dir" type="pear-config"/>
+ <replace from="@pear_version@" to="version" type="package-info"/>
+ <replace from="@include_path@" to="php_dir" type="pear-config"/>
+ </file>
+ </dir>
+ </filelist>
+ <configureoptions>
+ <configureoption name="test" prompt="The prompt test" default="foo" />
+ </configureoptions>
+</release>
+ <changelog>
+ <release>
+ <version>0.1</version>
+ <date>2003-07-21</date>
+ <license>PHP License</license>
+ <state>alpha</state>
+ <notes>First release of test</notes>
+ </release>
+ <release>
+ <version>0.2</version>
+ <date>2003-07-21</date>
+ <license>PHP License</license>
+ <state>alpha</state>
+ <notes>Generation of package.xml from scratch is now supported. In addition,
+generation of <provides> is supported and so is addition of
+maintainers and configure options
+
+- Fixed a bug in <release> generation
+- Added _addProvides() to generate a <provides> section</notes>
+ </release>
+ </changelog>
+</package>');
+
+var_dump($ret);
+
+?>
+--GET--
+--POST--
+--EXPECT--
+Test invalid XML
+Caught error: XML error: not well-formed (invalid token) at line 1
+Test valid XML, not a package.xml
+Caught error: Invalid Package File, no <package> tag
+Test valid package.xml, invalid version number
+Caught error: No handlers for package.xml version 10000000
+Test empty package.xml
+array(2) {
+ ["provides"]=>
+ array(0) {
+ }
+ ["filelist"]=>
+ &array(0) {
+ }
+}
+Test 1
+array(3) {
+ ["provides"]=>
+ array(0) {
+ }
+ ["filelist"]=>
+ &array(0) {
+ }
+ ["package"]=>
+ string(4) "test"
+}
+Test 2
+array(4) {
+ ["provides"]=>
+ array(0) {
+ }
+ ["filelist"]=>
+ &array(0) {
+ }
+ ["package"]=>
+ string(4) "test"
+ ["summary"]=>
+ string(9) "PEAR test"
+}
+Test 3
+array(5) {
+ ["provides"]=>
+ array(0) {
+ }
+ ["filelist"]=>
+ &array(0) {
+ }
+ ["package"]=>
+ string(4) "test"
+ ["summary"]=>
+ string(9) "PEAR test"
+ ["description"]=>
+ string(8) "The test"
+}
+Test 4
+array(6) {
+ ["provides"]=>
+ array(0) {
+ }
+ ["filelist"]=>
+ &array(0) {
+ }
+ ["package"]=>
+ string(4) "test"
+ ["summary"]=>
+ string(9) "PEAR test"
+ ["description"]=>
+ string(8) "The test"
+ ["release_license"]=>
+ string(11) "PHP License"
+}
+Test 5
+array(7) {
+ ["provides"]=>
+ array(0) {
+ }
+ ["filelist"]=>
+ &array(0) {
+ }
+ ["package"]=>
+ string(4) "test"
+ ["summary"]=>
+ string(9) "PEAR test"
+ ["description"]=>
+ string(8) "The test"
+ ["release_license"]=>
+ string(11) "PHP License"
+ ["maintainers"]=>
+ array(1) {
+ [0]=>
+ &array(4) {
+ ["handle"]=>
+ string(4) "test"
+ ["role"]=>
+ string(4) "lead"
+ ["name"]=>
+ string(11) "test tester"
+ ["email"]=>
+ string(12) "test@php.net"
+ }
+ }
+}
+Test 6
+array(8) {
+ ["provides"]=>
+ array(0) {
+ }
+ ["filelist"]=>
+ &array(0) {
+ }
+ ["package"]=>
+ string(4) "test"
+ ["summary"]=>
+ string(9) "PEAR test"
+ ["description"]=>
+ string(8) "The test"
+ ["release_license"]=>
+ string(11) "PHP License"
+ ["maintainers"]=>
+ array(1) {
+ [0]=>
+ &array(4) {
+ ["handle"]=>
+ string(4) "test"
+ ["role"]=>
+ string(4) "lead"
+ ["name"]=>
+ string(11) "test tester"
+ ["email"]=>
+ string(12) "test@php.net"
+ }
+ }
+ ["version"]=>
+ string(5) "1.3b4"
+}
+Test 7
+array(11) {
+ ["provides"]=>
+ array(0) {
+ }
+ ["filelist"]=>
+ &array(0) {
+ }
+ ["package"]=>
+ string(4) "test"
+ ["summary"]=>
+ string(9) "PEAR test"
+ ["description"]=>
+ string(8) "The test"
+ ["release_license"]=>
+ string(11) "PHP License"
+ ["maintainers"]=>
+ array(1) {
+ [0]=>
+ &array(4) {
+ ["handle"]=>
+ string(4) "test"
+ ["role"]=>
+ string(4) "lead"
+ ["name"]=>
+ string(11) "test tester"
+ ["email"]=>
+ string(12) "test@php.net"
+ }
+ }
+ ["version"]=>
+ string(5) "1.3b4"
+ ["release_date"]=>
+ string(10) "2003-11-17"
+ ["release_state"]=>
+ string(4) "beta"
+ ["release_notes"]=>
+ string(4) "test"
+}
+Test 8
+array(11) {
+ ["provides"]=>
+ array(1) {
+ ["class;furngy"]=>
+ array(3) {
+ ["type"]=>
+ string(5) "class"
+ ["name"]=>
+ string(6) "furngy"
+ ["explicit"]=>
+ bool(true)
+ }
+ }
+ ["filelist"]=>
+ &array(0) {
+ }
+ ["package"]=>
+ string(4) "test"
+ ["summary"]=>
+ string(9) "PEAR test"
+ ["description"]=>
+ string(8) "The test"
+ ["release_license"]=>
+ string(11) "PHP License"
+ ["maintainers"]=>
+ array(1) {
+ [0]=>
+ &array(4) {
+ ["handle"]=>
+ string(4) "test"
+ ["role"]=>
+ string(4) "lead"
+ ["name"]=>
+ string(11) "test tester"
+ ["email"]=>
+ string(12) "test@php.net"
+ }
+ }
+ ["version"]=>
+ string(5) "1.3b4"
+ ["release_date"]=>
+ string(10) "2003-11-17"
+ ["release_state"]=>
+ string(4) "beta"
+ ["release_notes"]=>
+ string(4) "test"
+}
+Test 9
+array(12) {
+ ["provides"]=>
+ array(1) {
+ ["class;furngy"]=>
+ array(3) {
+ ["type"]=>
+ string(5) "class"
+ ["name"]=>
+ string(6) "furngy"
+ ["explicit"]=>
+ bool(true)
+ }
+ }
+ ["filelist"]=>
+ &array(0) {
+ }
+ ["package"]=>
+ string(4) "test"
+ ["summary"]=>
+ string(9) "PEAR test"
+ ["description"]=>
+ string(8) "The test"
+ ["release_license"]=>
+ string(11) "PHP License"
+ ["maintainers"]=>
+ array(1) {
+ [0]=>
+ &array(4) {
+ ["handle"]=>
+ string(4) "test"
+ ["role"]=>
+ string(4) "lead"
+ ["name"]=>
+ string(11) "test tester"
+ ["email"]=>
+ string(12) "test@php.net"
+ }
+ }
+ ["version"]=>
+ string(5) "1.3b4"
+ ["release_date"]=>
+ string(10) "2003-11-17"
+ ["release_state"]=>
+ string(4) "beta"
+ ["release_notes"]=>
+ string(4) "test"
+ ["release_deps"]=>
+ array(1) {
+ [1]=>
+ array(4) {
+ ["type"]=>
+ string(3) "ext"
+ ["rel"]=>
+ string(3) "has"
+ ["optional"]=>
+ string(3) "yes"
+ ["name"]=>
+ string(6) "xmlrpc"
+ }
+ }
+}
+Test 10
+array(12) {
+ ["provides"]=>
+ array(1) {
+ ["class;furngy"]=>
+ array(3) {
+ ["type"]=>
+ string(5) "class"
+ ["name"]=>
+ string(6) "furngy"
+ ["explicit"]=>
+ bool(true)
+ }
+ }
+ ["filelist"]=>
+ &array(28) {
+ ["package.dtd"]=>
+ array(1) {
+ ["role"]=>
+ string(4) "data"
+ }
+ ["template.spec"]=>
+ array(1) {
+ ["role"]=>
+ string(4) "data"
+ }
+ ["PEAR.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["System.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Autoloader.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Command.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Command\Auth.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Command\Build.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Command\Common.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Command\Config.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Command\Install.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Command\Package.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Command\Registry.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Command\Remote.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Command\Mirror.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Common.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Config.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Dependency.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Frontend\CLI.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Builder.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Installer.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Packager.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Registry.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Remote.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["OS\Guess.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["scripts\pear.sh"]=>
+ array(4) {
+ ["role"]=>
+ string(6) "script"
+ ["install-as"]=>
+ string(4) "pear"
+ ["baseinstalldir"]=>
+ string(1) "/"
+ ["replacements"]=>
+ array(4) {
+ [0]=>
+ array(3) {
+ ["from"]=>
+ string(9) "@php_bin@"
+ ["to"]=>
+ string(7) "php_bin"
+ ["type"]=>
+ string(11) "pear-config"
+ }
+ [1]=>
+ array(3) {
+ ["from"]=>
+ string(9) "@php_dir@"
+ ["to"]=>
+ string(7) "php_dir"
+ ["type"]=>
+ string(11) "pear-config"
+ }
+ [2]=>
+ array(3) {
+ ["from"]=>
+ string(14) "@pear_version@"
+ ["to"]=>
+ string(7) "version"
+ ["type"]=>
+ string(12) "package-info"
+ }
+ [3]=>
+ array(3) {
+ ["from"]=>
+ string(14) "@include_path@"
+ ["to"]=>
+ string(7) "php_dir"
+ ["type"]=>
+ string(11) "pear-config"
+ }
+ }
+ }
+ ["scripts\pear.bat"]=>
+ array(5) {
+ ["role"]=>
+ string(6) "script"
+ ["platform"]=>
+ string(7) "windows"
+ ["install-as"]=>
+ string(8) "pear.bat"
+ ["baseinstalldir"]=>
+ string(1) "/"
+ ["replacements"]=>
+ array(3) {
+ [0]=>
+ array(3) {
+ ["from"]=>
+ string(9) "@bin_dir@"
+ ["to"]=>
+ string(7) "bin_dir"
+ ["type"]=>
+ string(11) "pear-config"
+ }
+ [1]=>
+ array(3) {
+ ["from"]=>
+ string(9) "@php_bin@"
+ ["to"]=>
+ string(7) "php_bin"
+ ["type"]=>
+ string(11) "pear-config"
+ }
+ [2]=>
+ array(3) {
+ ["from"]=>
+ string(14) "@include_path@"
+ ["to"]=>
+ string(7) "php_dir"
+ ["type"]=>
+ string(11) "pear-config"
+ }
+ }
+ }
+ ["scripts\pearcmd.php"]=>
+ array(4) {
+ ["role"]=>
+ string(3) "php"
+ ["install-as"]=>
+ string(11) "pearcmd.php"
+ ["baseinstalldir"]=>
+ string(1) "/"
+ ["replacements"]=>
+ array(4) {
+ [0]=>
+ array(3) {
+ ["from"]=>
+ string(9) "@php_bin@"
+ ["to"]=>
+ string(7) "php_bin"
+ ["type"]=>
+ string(11) "pear-config"
+ }
+ [1]=>
+ array(3) {
+ ["from"]=>
+ string(9) "@php_dir@"
+ ["to"]=>
+ string(7) "php_dir"
+ ["type"]=>
+ string(11) "pear-config"
+ }
+ [2]=>
+ array(3) {
+ ["from"]=>
+ string(14) "@pear_version@"
+ ["to"]=>
+ string(7) "version"
+ ["type"]=>
+ string(12) "package-info"
+ }
+ [3]=>
+ array(3) {
+ ["from"]=>
+ string(14) "@include_path@"
+ ["to"]=>
+ string(7) "php_dir"
+ ["type"]=>
+ string(11) "pear-config"
+ }
+ }
+ }
+ }
+ ["package"]=>
+ string(4) "test"
+ ["summary"]=>
+ string(9) "PEAR test"
+ ["description"]=>
+ string(8) "The test"
+ ["release_license"]=>
+ string(11) "PHP License"
+ ["maintainers"]=>
+ array(1) {
+ [0]=>
+ &array(4) {
+ ["handle"]=>
+ string(4) "test"
+ ["role"]=>
+ string(4) "lead"
+ ["name"]=>
+ string(11) "test tester"
+ ["email"]=>
+ string(12) "test@php.net"
+ }
+ }
+ ["version"]=>
+ string(5) "1.3b4"
+ ["release_date"]=>
+ string(10) "2003-11-17"
+ ["release_state"]=>
+ string(4) "beta"
+ ["release_notes"]=>
+ string(4) "test"
+ ["release_deps"]=>
+ array(1) {
+ [1]=>
+ array(4) {
+ ["type"]=>
+ string(3) "ext"
+ ["rel"]=>
+ string(3) "has"
+ ["optional"]=>
+ string(3) "yes"
+ ["name"]=>
+ string(6) "xmlrpc"
+ }
+ }
+}
+Test 11
+array(13) {
+ ["provides"]=>
+ array(1) {
+ ["class;furngy"]=>
+ array(3) {
+ ["type"]=>
+ string(5) "class"
+ ["name"]=>
+ string(6) "furngy"
+ ["explicit"]=>
+ bool(true)
+ }
+ }
+ ["filelist"]=>
+ &array(28) {
+ ["package.dtd"]=>
+ array(1) {
+ ["role"]=>
+ string(4) "data"
+ }
+ ["template.spec"]=>
+ array(1) {
+ ["role"]=>
+ string(4) "data"
+ }
+ ["PEAR.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["System.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Autoloader.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Command.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Command\Auth.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Command\Build.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Command\Common.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Command\Config.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Command\Install.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Command\Package.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Command\Registry.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Command\Remote.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Command\Mirror.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Common.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Config.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Dependency.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Frontend\CLI.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Builder.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Installer.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Packager.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Registry.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Remote.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["OS\Guess.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["scripts\pear.sh"]=>
+ array(4) {
+ ["role"]=>
+ string(6) "script"
+ ["install-as"]=>
+ string(4) "pear"
+ ["baseinstalldir"]=>
+ string(1) "/"
+ ["replacements"]=>
+ array(4) {
+ [0]=>
+ array(3) {
+ ["from"]=>
+ string(9) "@php_bin@"
+ ["to"]=>
+ string(7) "php_bin"
+ ["type"]=>
+ string(11) "pear-config"
+ }
+ [1]=>
+ array(3) {
+ ["from"]=>
+ string(9) "@php_dir@"
+ ["to"]=>
+ string(7) "php_dir"
+ ["type"]=>
+ string(11) "pear-config"
+ }
+ [2]=>
+ array(3) {
+ ["from"]=>
+ string(14) "@pear_version@"
+ ["to"]=>
+ string(7) "version"
+ ["type"]=>
+ string(12) "package-info"
+ }
+ [3]=>
+ array(3) {
+ ["from"]=>
+ string(14) "@include_path@"
+ ["to"]=>
+ string(7) "php_dir"
+ ["type"]=>
+ string(11) "pear-config"
+ }
+ }
+ }
+ ["scripts\pear.bat"]=>
+ array(5) {
+ ["role"]=>
+ string(6) "script"
+ ["platform"]=>
+ string(7) "windows"
+ ["install-as"]=>
+ string(8) "pear.bat"
+ ["baseinstalldir"]=>
+ string(1) "/"
+ ["replacements"]=>
+ array(3) {
+ [0]=>
+ array(3) {
+ ["from"]=>
+ string(9) "@bin_dir@"
+ ["to"]=>
+ string(7) "bin_dir"
+ ["type"]=>
+ string(11) "pear-config"
+ }
+ [1]=>
+ array(3) {
+ ["from"]=>
+ string(9) "@php_bin@"
+ ["to"]=>
+ string(7) "php_bin"
+ ["type"]=>
+ string(11) "pear-config"
+ }
+ [2]=>
+ array(3) {
+ ["from"]=>
+ string(14) "@include_path@"
+ ["to"]=>
+ string(7) "php_dir"
+ ["type"]=>
+ string(11) "pear-config"
+ }
+ }
+ }
+ ["scripts\pearcmd.php"]=>
+ array(4) {
+ ["role"]=>
+ string(3) "php"
+ ["install-as"]=>
+ string(11) "pearcmd.php"
+ ["baseinstalldir"]=>
+ string(1) "/"
+ ["replacements"]=>
+ array(4) {
+ [0]=>
+ array(3) {
+ ["from"]=>
+ string(9) "@php_bin@"
+ ["to"]=>
+ string(7) "php_bin"
+ ["type"]=>
+ string(11) "pear-config"
+ }
+ [1]=>
+ array(3) {
+ ["from"]=>
+ string(9) "@php_dir@"
+ ["to"]=>
+ string(7) "php_dir"
+ ["type"]=>
+ string(11) "pear-config"
+ }
+ [2]=>
+ array(3) {
+ ["from"]=>
+ string(14) "@pear_version@"
+ ["to"]=>
+ string(7) "version"
+ ["type"]=>
+ string(12) "package-info"
+ }
+ [3]=>
+ array(3) {
+ ["from"]=>
+ string(14) "@include_path@"
+ ["to"]=>
+ string(7) "php_dir"
+ ["type"]=>
+ string(11) "pear-config"
+ }
+ }
+ }
+ }
+ ["package"]=>
+ string(4) "test"
+ ["summary"]=>
+ string(9) "PEAR test"
+ ["description"]=>
+ string(8) "The test"
+ ["release_license"]=>
+ string(11) "PHP License"
+ ["maintainers"]=>
+ array(1) {
+ [0]=>
+ &array(4) {
+ ["handle"]=>
+ string(4) "test"
+ ["role"]=>
+ string(4) "lead"
+ ["name"]=>
+ string(11) "test tester"
+ ["email"]=>
+ string(12) "test@php.net"
+ }
+ }
+ ["version"]=>
+ string(5) "1.3b4"
+ ["release_date"]=>
+ string(10) "2003-11-17"
+ ["release_state"]=>
+ string(4) "beta"
+ ["release_notes"]=>
+ string(4) "test"
+ ["release_deps"]=>
+ array(1) {
+ [1]=>
+ array(4) {
+ ["type"]=>
+ string(3) "ext"
+ ["rel"]=>
+ string(3) "has"
+ ["optional"]=>
+ string(3) "yes"
+ ["name"]=>
+ string(6) "xmlrpc"
+ }
+ }
+ ["configure_options"]=>
+ array(1) {
+ [0]=>
+ array(3) {
+ ["name"]=>
+ string(4) "test"
+ ["prompt"]=>
+ string(15) "The prompt test"
+ ["default"]=>
+ string(3) "foo"
+ }
+ }
+}
+Test 12
+array(14) {
+ ["provides"]=>
+ array(1) {
+ ["class;furngy"]=>
+ array(3) {
+ ["type"]=>
+ string(5) "class"
+ ["name"]=>
+ string(6) "furngy"
+ ["explicit"]=>
+ bool(true)
+ }
+ }
+ ["filelist"]=>
+ &array(28) {
+ ["package.dtd"]=>
+ array(1) {
+ ["role"]=>
+ string(4) "data"
+ }
+ ["template.spec"]=>
+ array(1) {
+ ["role"]=>
+ string(4) "data"
+ }
+ ["PEAR.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["System.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Autoloader.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Command.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Command\Auth.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Command\Build.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Command\Common.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Command\Config.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Command\Install.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Command\Package.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Command\Registry.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Command\Remote.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Command\Mirror.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Common.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Config.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Dependency.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Frontend\CLI.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Builder.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Installer.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Packager.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Registry.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["PEAR\Remote.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["OS\Guess.php"]=>
+ array(1) {
+ ["role"]=>
+ string(3) "php"
+ }
+ ["scripts\pear.sh"]=>
+ array(4) {
+ ["role"]=>
+ string(6) "script"
+ ["install-as"]=>
+ string(4) "pear"
+ ["baseinstalldir"]=>
+ string(1) "/"
+ ["replacements"]=>
+ array(4) {
+ [0]=>
+ array(3) {
+ ["from"]=>
+ string(9) "@php_bin@"
+ ["to"]=>
+ string(7) "php_bin"
+ ["type"]=>
+ string(11) "pear-config"
+ }
+ [1]=>
+ array(3) {
+ ["from"]=>
+ string(9) "@php_dir@"
+ ["to"]=>
+ string(7) "php_dir"
+ ["type"]=>
+ string(11) "pear-config"
+ }
+ [2]=>
+ array(3) {
+ ["from"]=>
+ string(14) "@pear_version@"
+ ["to"]=>
+ string(7) "version"
+ ["type"]=>
+ string(12) "package-info"
+ }
+ [3]=>
+ array(3) {
+ ["from"]=>
+ string(14) "@include_path@"
+ ["to"]=>
+ string(7) "php_dir"
+ ["type"]=>
+ string(11) "pear-config"
+ }
+ }
+ }
+ ["scripts\pear.bat"]=>
+ array(5) {
+ ["role"]=>
+ string(6) "script"
+ ["platform"]=>
+ string(7) "windows"
+ ["install-as"]=>
+ string(8) "pear.bat"
+ ["baseinstalldir"]=>
+ string(1) "/"
+ ["replacements"]=>
+ array(3) {
+ [0]=>
+ array(3) {
+ ["from"]=>
+ string(9) "@bin_dir@"
+ ["to"]=>
+ string(7) "bin_dir"
+ ["type"]=>
+ string(11) "pear-config"
+ }
+ [1]=>
+ array(3) {
+ ["from"]=>
+ string(9) "@php_bin@"
+ ["to"]=>
+ string(7) "php_bin"
+ ["type"]=>
+ string(11) "pear-config"
+ }
+ [2]=>
+ array(3) {
+ ["from"]=>
+ string(14) "@include_path@"
+ ["to"]=>
+ string(7) "php_dir"
+ ["type"]=>
+ string(11) "pear-config"
+ }
+ }
+ }
+ ["scripts\pearcmd.php"]=>
+ array(4) {
+ ["role"]=>
+ string(3) "php"
+ ["install-as"]=>
+ string(11) "pearcmd.php"
+ ["baseinstalldir"]=>
+ string(1) "/"
+ ["replacements"]=>
+ array(4) {
+ [0]=>
+ array(3) {
+ ["from"]=>
+ string(9) "@php_bin@"
+ ["to"]=>
+ string(7) "php_bin"
+ ["type"]=>
+ string(11) "pear-config"
+ }
+ [1]=>
+ array(3) {
+ ["from"]=>
+ string(9) "@php_dir@"
+ ["to"]=>
+ string(7) "php_dir"
+ ["type"]=>
+ string(11) "pear-config"
+ }
+ [2]=>
+ array(3) {
+ ["from"]=>
+ string(14) "@pear_version@"
+ ["to"]=>
+ string(7) "version"
+ ["type"]=>
+ string(12) "package-info"
+ }
+ [3]=>
+ array(3) {
+ ["from"]=>
+ string(14) "@include_path@"
+ ["to"]=>
+ string(7) "php_dir"
+ ["type"]=>
+ string(11) "pear-config"
+ }
+ }
+ }
+ }
+ ["package"]=>
+ string(4) "test"
+ ["summary"]=>
+ string(9) "PEAR test"
+ ["description"]=>
+ string(8) "The test"
+ ["release_license"]=>
+ string(11) "PHP License"
+ ["maintainers"]=>
+ array(1) {
+ [0]=>
+ &array(4) {
+ ["handle"]=>
+ string(4) "test"
+ ["role"]=>
+ string(4) "lead"
+ ["name"]=>
+ string(11) "test tester"
+ ["email"]=>
+ string(12) "test@php.net"
+ }
+ }
+ ["version"]=>
+ string(5) "1.3b4"
+ ["release_date"]=>
+ string(10) "2003-11-17"
+ ["release_state"]=>
+ string(4) "beta"
+ ["release_notes"]=>
+ string(4) "test"
+ ["release_deps"]=>
+ array(1) {
+ [1]=>
+ array(4) {
+ ["type"]=>
+ string(3) "ext"
+ ["rel"]=>
+ string(3) "has"
+ ["optional"]=>
+ string(3) "yes"
+ ["name"]=>
+ string(6) "xmlrpc"
+ }
+ }
+ ["configure_options"]=>
+ array(1) {
+ [0]=>
+ array(3) {
+ ["name"]=>
+ string(4) "test"
+ ["prompt"]=>
+ string(15) "The prompt test"
+ ["default"]=>
+ string(3) "foo"
+ }
+ }
+ ["changelog"]=>
+ array(2) {
+ [0]=>
+ &array(5) {
+ ["version"]=>
+ string(3) "0.1"
+ ["release_date"]=>
+ string(10) "2003-07-21"
+ ["release_license"]=>
+ string(11) "PHP License"
+ ["release_state"]=>
+ string(5) "alpha"
+ ["release_notes"]=>
+ string(22) "First release of test
+"
+ }
+ [1]=>
+ &array(5) {
+ ["version"]=>
+ string(3) "0.2"
+ ["release_date"]=>
+ string(10) "2003-07-21"
+ ["release_license"]=>
+ string(11) "PHP License"
+ ["release_state"]=>
+ string(5) "alpha"
+ ["release_notes"]=>
+ string(260) "Generation of package.xml from scratch is now supported. In addition,
+generation of <provides> is supported and so is addition of
+maintainers and configure options
+
+- Fixed a bug in <release> generation
+- Added _addProvides() to generate a <provides> section
+"
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+--TEST--
+PEAR_Common::sortPkgDeps test
+--SKIPIF--
+<?php
+if (!getenv('PHP_PEAR_RUNTESTS')) {
+ echo 'skip';
+}
+?>
+--FILE--
+<?php
+$dir = getcwd();
+chdir(dirname(__FILE__));
+
+require_once 'PEAR/Common.php';
+
+$c = new PEAR_Common();
+
+$packages = array(
+'common_sortPkgDeps6_package.xml',
+'common_sortPkgDeps2_package.xml',
+'common_sortPkgDeps1_package.xml',
+'common_sortPkgDeps4_package.xml',
+'common_sortPkgDeps5_package.xml',
+'common_sortPkgDeps3_package.xml',
+);
+
+$uninstallpackages = array(
+$c->infoFromAny('common_sortPkgDeps6_package.xml'),
+$c->infoFromAny('common_sortPkgDeps2_package.xml'),
+$c->infoFromAny('common_sortPkgDeps1_package.xml'),
+$c->infoFromAny('common_sortPkgDeps4_package.xml'),
+$c->infoFromAny('common_sortPkgDeps5_package.xml'),
+$c->infoFromAny('common_sortPkgDeps3_package.xml'),
+);
+
+echo "Test Install Sort:\n";
+$c->sortPkgDeps($packages);
+dumpPacks($packages);
+
+echo "Test Uninstall Sort:\n";
+$c->sortPkgDeps($uninstallpackages, true);
+dumpPacks($uninstallpackages);
+
+chdir($dir);
+
+function dumpPacks($p)
+{
+ echo "Packages(\n";
+ foreach ($p as $inf) {
+ echo $inf['info']['package'] . ",\n";
+ }
+ echo ")\n";
+}
+?>
+--GET--
+--POST--
+--EXPECT--
+Test Install Sort:
+Packages(
+pkg6,
+pkg5,
+pkg4,
+pkg3,
+pkg2,
+pkg1,
+)
+Test Uninstall Sort:
+Packages(
+pkg1,
+pkg2,
+pkg3,
+pkg5,
+pkg4,
+pkg6,
+)
\ No newline at end of file
--- /dev/null
+--TEST--
+PEAR_Common::validPackageVersion test
+--SKIPIF--
+<?php
+if (!getenv('PHP_PEAR_RUNTESTS')) {
+ echo 'skip';
+}
+?>
+--FILE--
+<?php
+
+require_once 'PEAR/Common.php';
+
+// '\d+(?:\.\d+)*(?:[a-z]+\d*)?'
+
+echo "==Valid Tests==\n";
+$a = '1';
+echo "$a ";
+echo (PEAR_Common::validPackageVersion($a)) ? "valid\n" : "invalid\n";
+
+$a = '1.1';
+echo "$a ";
+echo (PEAR_Common::validPackageVersion($a)) ? "valid\n" : "invalid\n";
+
+$a = '1.1.1';
+echo "$a ";
+echo (PEAR_Common::validPackageVersion($a)) ? "valid\n" : "invalid\n";
+
+$a = '1.1.1.1';
+echo "$a ";
+echo (PEAR_Common::validPackageVersion($a)) ? "valid\n" : "invalid\n";
+
+$a = '1.1.1abc3';
+echo "$a ";
+echo (PEAR_Common::validPackageVersion($a)) ? "valid\n" : "invalid\n";
+
+$a = '1.234beta4';
+echo "$a ";
+echo (PEAR_Common::validPackageVersion($a)) ? "valid\n" : "invalid\n";
+
+$a = '1alpha3';
+echo "$a ";
+echo (PEAR_Common::validPackageVersion($a)) ? "valid\n" : "invalid\n";
+
+$a = '1alpha';
+echo "$a ";
+echo (PEAR_Common::validPackageVersion($a)) ? "valid\n" : "invalid\n";
+
+$a = '1.1a';
+echo "$a ";
+echo (PEAR_Common::validPackageVersion($a)) ? "valid\n" : "invalid\n";
+
+echo "==Invalid Tests==\n";
+
+$a = '1.0.0-alpha2';
+echo "$a ";
+echo (PEAR_Common::validPackageVersion($a)) ? "valid\n" : "invalid\n";
+
+$a = '1alpha.4';
+echo "$a ";
+echo (PEAR_Common::validPackageVersion($a)) ? "valid\n" : "invalid\n";
+
+$a = '1.1alpha.4';
+echo "$a ";
+echo (PEAR_Common::validPackageVersion($a)) ? "valid\n" : "invalid\n";
+?>
+--GET--
+--POST--
+--EXPECT--
+==Valid Tests==
+1 valid
+1.1 valid
+1.1.1 valid
+1.1.1.1 valid
+1.1.1abc3 valid
+1.234beta4 valid
+1alpha3 valid
+1alpha valid
+1.1a valid
+==Invalid Tests==
+1.0.0-alpha2 invalid
+1alpha.4 invalid
+1.1alpha.4 invalid
--- /dev/null
+--TEST--
+PEAR_Dependency::checkExtension() test
+--SKIPIF--
+<?php
+if (!getenv('PHP_PEAR_RUNTESTS')) {
+ echo 'skip';
+}
+if (!ini_get('enable_dl') || ini_get('safe_mode')) {
+ echo 'skip';
+}
+
+$dir = ini_get('extension_dir');
+if (OS_WINDOWS) {
+ $suffix = '.dll';
+} elseif (PHP_OS == 'HP-UX') {
+ $suffix = '.sl';
+} elseif (PHP_OS == 'AIX') {
+ $suffix = '.a';
+} elseif (PHP_OS == 'OSX') {
+ $suffix = '.bundle';
+} else {
+ $suffix = '.so';
+}
+
+// get a list of possible extensions
+$extensions = array();
+if ($handle = opendir($dir)) {
+ while (false !== ($file = readdir($handle))) {
+ if (strpos($file, $suffix) && substr($file, 0, 4) == 'php_') {
+ $extensions[] = $file;
+ }
+ }
+ closedir($handle);
+}
+
+$loaded = false;
+$notloaded = false;
+// choose an extension for this test
+foreach ($extensions as $ext) {
+ $ext = substr(substr($ext, 0, strlen($ext) - strlen($suffix)), 4);
+ if (!$loaded && extension_loaded($ext)) {
+ $loaded = $ext;
+ }
+ if (!$notloaded && !extension_loaded($ext)) {
+ // safe list for testing
+ if (in_array($ext, array('zip', 'bz2', 'sqlite', 'dbx'))) {
+ $notloaded = $ext;
+ }
+ }
+}
+if (!$notloaded || !$loaded) {
+ echo 'skip';
+}
+?>
+--FILE--
+<?php
+
+@mkdir(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'checkPackagetmp');
+require_once "PEAR/Registry.php";
+require_once "PEAR/Dependency.php";
+
+$dir = ini_get('extension_dir');
+if (OS_WINDOWS) {
+ $suffix = '.dll';
+} elseif (PHP_OS == 'HP-UX') {
+ $suffix = '.sl';
+} elseif (PHP_OS == 'AIX') {
+ $suffix = '.a';
+} elseif (PHP_OS == 'OSX') {
+ $suffix = '.bundle';
+} else {
+ $suffix = '.so';
+}
+
+// get a list of possible extensions
+$extensions = array();
+if ($handle = opendir($dir)) {
+ while (false !== ($file = readdir($handle))) {
+ if (strpos($file, $suffix) && substr($file, 0, 4) == 'php_') {
+ $extensions[] = $file;
+ }
+ }
+ closedir($handle);
+}
+
+$loaded = false;
+$notloaded = false;
+// choose an extension for this test
+foreach ($extensions as $ext) {
+ $ext = substr(substr($ext, 0, strlen($ext) - strlen($suffix)), 4);
+ if (!$loaded && extension_loaded($ext)) {
+ $loaded = $ext;
+ }
+ if (!$notloaded && !extension_loaded($ext)) {
+ // safe list for testing
+ if (in_array($ext, array('zip', 'bz2', 'sqlite', 'dbx'))) {
+ $notloaded = $ext;
+ }
+ }
+}
+
+$reg = new PEAR_Registry;
+$reg->statedir = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'checkPackagetmp';
+$dep = new PEAR_Dependency($reg);
+
+$msg = 'no error';
+$ret = $dep->checkExtension($msg, $loaded, null, 'has');
+echo 'extension 1 ok? ';
+echo $ret ? "no\n" : "yes\n";
+echo $msg . "\n";
+
+$msg = 'no error';
+$ret = $dep->checkExtension($msg, $notloaded, null, 'not');
+echo 'extension 2 ok? ';
+echo $ret ? "no\n" : "yes\n";
+echo $msg . "\n";
+
+$loadedver = phpversion($loaded);
+
+$msg = 'no error';
+$ret = $dep->checkExtension($msg, $loaded, $loadedver + 1, 'ge');
+echo 'extension 3 ok? ';
+echo $ret ? "no\n" : "yes\n";
+echo 'message : ' . ($msg == "'$loaded' PHP extension version >= " . ($loadedver + 1) .
+ " is required" ? "match\n" : "$msg\n" );
+
+$msg = 'no error';
+$ret = $dep->checkExtension($msg, $loaded, $loadedver + 1, 'ge', true);
+echo 'extension 3 optional ok? ';
+echo $ret ? "no\n" : "yes\n";
+echo 'message : ' . ($msg == "'$loaded' PHP extension version >= " . ($loadedver + 1) .
+ " is recommended to utilize some features" ? "match\n" : "$msg\n" );
+
+$msg = 'no error';
+$ret = $dep->checkExtension($msg, $loaded, $loadedver, 'ne');
+echo 'extension 4 ok? ';
+echo $ret ? "no\n" : "yes\n";
+echo 'message : ' . ($msg == "'$loaded' PHP extension version != " . $loadedver .
+ " is required" ? "match\n" : "$msg\n" );
+
+$msg = 'no error';
+$ret = $dep->checkExtension($msg, $loaded, $loadedver, 'gt');
+echo 'extension 5 ok? ';
+echo $ret ? "no\n" : "yes\n";
+echo 'message : ' . ($msg == "'$loaded' PHP extension version > " . $loadedver .
+ " is required" ? "match\n" : "$msg\n" );
+
+$msg = 'no error';
+$ret = $dep->checkExtension($msg, $loaded, $loadedver, 'gt', true);
+echo 'extension 5 optional ok? ';
+echo $ret ? "no\n" : "yes\n";
+echo 'message : ' . ($msg == "'$loaded' PHP extension version > " . $loadedver .
+ " is recommended to utilize some features" ? "match\n" : "$msg\n" );
+
+$msg = 'no error';
+$ret = $dep->checkExtension($msg, $loaded, $loadedver, 'lt');
+echo 'extension 6 ok? ';
+echo $ret ? "no\n" : "yes\n";
+echo 'message : ' . ($msg == "'$loaded' PHP extension version < " . $loadedver .
+ " is required" ? "match\n" : "$msg\n" );
+
+$msg = 'no error';
+$ret = $dep->checkExtension($msg, $loaded, $loadedver, 'lt', true);
+echo 'extension 6 optional ok? ';
+echo $ret ? "no\n" : "yes\n";
+echo 'message : ' . ($msg == "'$loaded' PHP extension version < " . $loadedver .
+ " is recommended to utilize some features" ? "match\n" : "$msg\n" );
+
+if ($loadedver == 0) {
+ echo "extension 7 ok? no\nmessage : match\n";
+ echo "extension 7 optional ok? no\nmessage : match\n";
+} else {
+ $msg = 'no error';
+ $ret = $dep->checkExtension($msg, $loaded, $loadedver - 1, 'le');
+ echo 'extension 7 ok? ';
+ echo $ret ? "no\n" : "yes\n";
+ echo 'message : ' . ($msg == "'$loaded' PHP extension version <= " . ($loadedver - 1).
+ " is required" ? "match\n" : "$msg\n");
+
+ $msg = 'no error';
+ $ret = $dep->checkExtension($msg, $loaded, $loadedver - 1, 'le', true);
+ echo 'extension 7 ok? ';
+ echo $ret ? "no\n" : "yes\n";
+ echo 'message : ' . ($msg == "'$loaded' PHP extension version <= " . ($loadedver - 1).
+ " is recommended to utilize some features" ? "match\n" : "$msg\n");
+}
+
+$msg = 'no error';
+$ret = $dep->checkExtension($msg, $loaded, $loadedver, 'eq');
+echo 'extension 8 ok? ';
+echo $ret ? "no\n" : "yes\n";
+echo $msg . "\n";
+
+$msg = 'no error';
+$ret = $dep->checkExtension($msg, $notloaded, $loadedver, 'ne');
+echo 'extension 9 ok? ';
+echo $ret ? "no\n" : "yes\n";
+echo $msg . "\n";
+
+$msg = 'no error';
+$ret = $dep->checkExtension($msg, $loaded, $loadedver + 1, 'eq');
+echo 'extension 10 ok? ';
+echo $ret ? "no\n" : "yes\n";
+echo 'message : ' . ($msg == "'$loaded' PHP extension version == " . ($loadedver + 1).
+ " is required" ? "match\n" : "$msg\n");
+
+$msg = 'no error';
+$ret = $dep->checkExtension($msg, $loaded, $loadedver + 1, 'eq', true);
+echo 'extension 10 optional ok? ';
+echo $ret ? "no\n" : "yes\n";
+echo 'message : ' . ($msg == "'$loaded' PHP extension version == " . ($loadedver + 1).
+ " is recommended to utilize some features" ? "match\n" : "$msg\n");
+
+cleanall();
+// ------------------------------------------------------------------------- //
+
+function cleanall()
+{
+ $dp = opendir(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'checkPackagetmp');
+ while ($ent = readdir($dp)) {
+ if (substr($ent, -4) == ".reg") {
+ unlink(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'checkPackagetmp' . DIRECTORY_SEPARATOR . $ent);
+ }
+ }
+ closedir($dp);
+ rmdir(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'checkPackagetmp');
+}
+
+?>
+--GET--
+--POST--
+--EXPECT--
+extension 1 ok? yes
+no error
+extension 2 ok? yes
+no error
+extension 3 ok? no
+message : match
+extension 3 optional ok? no
+message : match
+extension 4 ok? no
+message : match
+extension 5 ok? no
+message : match
+extension 5 optional ok? no
+message : match
+extension 6 ok? no
+message : match
+extension 6 optional ok? no
+message : match
+extension 7 ok? no
+message : match
+extension 7 optional ok? no
+message : match
+extension 8 ok? yes
+no error
+extension 9 ok? yes
+no error
+extension 10 ok? no
+message : match
+extension 10 optional ok? no
+message : match
--- /dev/null
+--TEST--
+PEAR_Dependency::checkPackage() test
+--SKIPIF--
+<?php
+if (!getenv('PHP_PEAR_RUNTESTS')) {
+ echo 'skip';
+}
+?>
+--FILE--
+<?php
+require_once "PEAR/Registry.php";
+require_once "PEAR/Dependency.php";
+
+mkdir(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'checkPackagetmp');
+// snarfed from pear_registry.phpt
+$reg = new PEAR_Registry;
+$reg->statedir = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'checkPackagetmp';
+
+$files1 = array(
+ "pkg1-1.php" => array(
+ "role" => "php",
+ ),
+ "pkg1-2.php" => array(
+ "role" => "php",
+ "baseinstalldir" => "pkg1",
+ ),
+ );
+$reg->addPackage("pkg1", array("name" => "pkg1", "version" => "1.0", "filelist" => $files1));
+
+$dep = new PEAR_Dependency($reg);
+$msg = 'no error';
+$ret = $dep->checkPackage($msg, 'pkg1');
+echo 'has works? ';
+echo $ret ? "no\n" : "yes\n";
+echo $msg . "\n";
+
+$msg = 'no error';
+$ret = $dep->checkPackage($msg, 'pkg1', '1.0', 'eq');
+echo 'eq 1.0 works? ';
+echo $ret ? "no\n" : "yes\n";
+echo $msg . "\n";
+
+$msg = 'no error';
+$ret = $dep->checkPackage($msg, 'pkg1', '1.0', 'le');
+echo 'le 1.0 works? ';
+echo $ret ? "no\n" : "yes\n";
+echo $msg . "\n";
+
+$msg = 'no error';
+$ret = $dep->checkPackage($msg, 'pkg1', '1.1', 'lt');
+echo 'lt 1.1 works? ';
+echo $ret ? "no\n" : "yes\n";
+echo $msg . "\n";
+
+$msg = 'no error';
+$ret = $dep->checkPackage($msg, 'pkg1', '1.1', 'ne');
+echo 'ne 1.1 works? ';
+echo $ret ? "no\n" : "yes\n";
+echo $msg . "\n";
+
+$msg = 'no error';
+$ret = $dep->checkPackage($msg, 'pkg1', '1.0', 'ge');
+echo 'ge 1.0 works? ';
+echo $ret ? "no\n" : "yes\n";
+echo $msg . "\n";
+
+$msg = 'no error';
+$ret = $dep->checkPackage($msg, 'pkg1', '0.9', 'gt');
+echo 'ge 0.9 works? ';
+echo $ret ? "no\n" : "yes\n";
+echo $msg . "\n";
+
+$msg = 'no error';
+$ret = $dep->checkPackage($msg, 'pkg2', null, 'not');
+echo 'not pkg2 works? ';
+echo $ret ? "no\n" : "yes\n";
+echo $msg . "\n";
+
+// error conditions
+
+$msg = 'no error';
+$ret = $dep->checkPackage($msg, 'pkg2', null, 'has');
+echo 'has pkg2 works? ';
+echo $ret ? "no\n" : "yes\n";
+echo '$ret is PEAR_DEPENDENCY_MISSING? ';
+echo ($ret == PEAR_DEPENDENCY_MISSING) ? "yes\n" : "no\n";
+echo $msg . "\n";
+
+$msg = 'no error';
+$ret = $dep->checkPackage($msg, 'pkg2', null, 'has', true);
+echo 'has optional pkg2 works? ';
+echo $ret ? "no\n" : "yes\n";
+echo '$ret is PEAR_DEPENDENCY_MISSING_OPTIONAL? ';
+echo ($ret == PEAR_DEPENDENCY_MISSING_OPTIONAL) ? "yes\n" : "no\n";
+echo $msg . "\n";
+
+$msg = 'no error';
+$ret = $dep->checkPackage($msg, 'pkg1', '0.9', 'le');
+echo 'le 0.9 works? ';
+echo $ret ? "no\n" : "yes\n";
+echo '$ret is PEAR_DEPENDENCY_CONFLICT? ';
+echo ($ret == PEAR_DEPENDENCY_CONFLICT) ? "yes\n" : "no\n";
+echo $msg . "\n";
+
+$msg = 'no error';
+$ret = $dep->checkPackage($msg, 'pkg1', '0.9', 'le', true);
+echo 'optional le 0.9 works? ';
+echo $ret ? "no\n" : "yes\n";
+echo '$ret is PEAR_DEPENDENCY_CONFLICT_OPTIONAL? ';
+echo ($ret == PEAR_DEPENDENCY_CONFLICT_OPTIONAL) ? "yes\n" : "no\n";
+echo $msg . "\n";
+
+$msg = 'no error';
+$ret = $dep->checkPackage($msg, 'pkg1', '1.0', 'ne');
+echo 'ne 1.0 works? ';
+echo $ret ? "no\n" : "yes\n";
+echo '$ret is PEAR_DEPENDENCY_CONFLICT? ';
+echo ($ret == PEAR_DEPENDENCY_CONFLICT) ? "yes\n" : "no\n";
+echo $msg . "\n";
+
+$msg = 'no error';
+$ret = $dep->checkPackage($msg, 'pkg1', '1.0', 'ne', true);
+echo 'optional ne 1.0 works? ';
+echo $ret ? "no\n" : "yes\n";
+echo '$ret is PEAR_DEPENDENCY_CONFLICT_OPTIONAL? ';
+echo ($ret == PEAR_DEPENDENCY_CONFLICT_OPTIONAL) ? "yes\n" : "no\n";
+echo $msg . "\n";
+
+$msg = 'no error';
+$ret = $dep->checkPackage($msg, 'pkg1', '1.1', 'ge');
+echo 'ge 1.1 works? ';
+echo $ret ? "no\n" : "yes\n";
+echo '$ret is PEAR_DEPENDENCY_UPGRADE_MINOR? ';
+echo ($ret == PEAR_DEPENDENCY_UPGRADE_MINOR) ? "yes\n" : "no\n";
+echo $msg . "\n";
+
+$msg = 'no error';
+$ret = $dep->checkPackage($msg, 'pkg1', '1.1', 'ge', true);
+echo 'optional ge 1.1 works? ';
+echo $ret ? "no\n" : "yes\n";
+echo '$ret is PEAR_DEPENDENCY_UPGRADE_MINOR_OPTIONAL? ';
+echo ($ret == PEAR_DEPENDENCY_UPGRADE_MINOR_OPTIONAL) ? "yes\n" : "no\n";
+echo $msg . "\n";
+
+$msg = 'no error';
+$ret = $dep->checkPackage($msg, 'pkg1', '2.0', 'ge');
+echo 'ge 2.0 works? ';
+echo $ret ? "no\n" : "yes\n";
+echo '$ret is PEAR_DEPENDENCY_UPGRADE_MAJOR? ';
+echo ($ret == PEAR_DEPENDENCY_UPGRADE_MAJOR) ? "yes\n" : "no\n";
+echo $msg . "\n";
+
+$msg = 'no error';
+$ret = $dep->checkPackage($msg, 'pkg1', '2.0', 'ge', true);
+echo 'optional ge 2.0 works? ';
+echo $ret ? "no\n" : "yes\n";
+echo '$ret is PEAR_DEPENDENCY_UPGRADE_MAJOR_OPTIONAL? ';
+echo ($ret == PEAR_DEPENDENCY_UPGRADE_MAJOR_OPTIONAL) ? "yes\n" : "no\n";
+echo $msg . "\n";
+
+$msg = 'no error';
+$ret = $dep->checkPackage($msg, 'pkg1', '1.0', 'gt');
+echo 'gt 1.0 works? ';
+echo $ret ? "no\n" : "yes\n";
+echo '$ret is PEAR_DEPENDENCY_UPGRADE_MINOR? ';
+echo ($ret == PEAR_DEPENDENCY_UPGRADE_MINOR) ? "yes\n" : "no\n";
+echo $msg . "\n";
+
+$msg = 'no error';
+$ret = $dep->checkPackage($msg, 'pkg1', '1.0', 'gt', true);
+echo 'optional gt 1.0 works? ';
+echo $ret ? "no\n" : "yes\n";
+echo '$ret is PEAR_DEPENDENCY_UPGRADE_MINOR_OPTIONAL? ';
+echo ($ret == PEAR_DEPENDENCY_UPGRADE_MINOR_OPTIONAL) ? "yes\n" : "no\n";
+echo $msg . "\n";
+
+$msg = 'no error';
+$ret = $dep->checkPackage($msg, 'pkg1', null, 'not');
+echo 'not pkg1 works? ';
+echo $ret ? "no\n" : "yes\n";
+echo '$ret is PEAR_DEPENDENCY_CONFLICT? ';
+echo ($ret == PEAR_DEPENDENCY_CONFLICT) ? "yes\n" : "no\n";
+echo $msg . "\n";
+
+$msg = 'no error';
+$ret = $dep->checkPackage($msg, 'pkg1', null, 'foobar');
+echo 'foobar pkg1 works? ';
+echo $ret ? "no\n" : "yes\n";
+echo '$ret is PEAR_DEPENDENCY_BAD_DEPENDENCY? ';
+echo ($ret == PEAR_DEPENDENCY_BAD_DEPENDENCY) ? "yes\n" : "no\n";
+echo $msg . "\n";
+cleanall();
+
+// ------------------------------------------------------------------------- //
+
+function cleanall()
+{
+ $dp = opendir(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'checkPackagetmp');
+ while ($ent = readdir($dp)) {
+ if (substr($ent, -4) == ".reg") {
+ unlink(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'checkPackagetmp' . DIRECTORY_SEPARATOR . $ent);
+ }
+ }
+ closedir($dp);
+ rmdir(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'checkPackagetmp');
+}
+
+?>
+--GET--
+--POST--
+--EXPECT--
+has works? yes
+no error
+eq 1.0 works? yes
+no error
+le 1.0 works? yes
+no error
+lt 1.1 works? yes
+no error
+ne 1.1 works? yes
+no error
+ge 1.0 works? yes
+no error
+ge 0.9 works? yes
+no error
+not pkg2 works? yes
+no error
+has pkg2 works? no
+$ret is PEAR_DEPENDENCY_MISSING? yes
+requires package `pkg2'
+has optional pkg2 works? no
+$ret is PEAR_DEPENDENCY_MISSING_OPTIONAL? yes
+package `pkg2' is recommended to utilize some features.
+le 0.9 works? no
+$ret is PEAR_DEPENDENCY_CONFLICT? yes
+requires package `pkg1' <= 0.9
+optional le 0.9 works? no
+$ret is PEAR_DEPENDENCY_CONFLICT_OPTIONAL? yes
+package `pkg1' version <= 0.9 is recommended to utilize some features. Installed version is 1.0
+ne 1.0 works? no
+$ret is PEAR_DEPENDENCY_CONFLICT? yes
+requires package `pkg1' != 1.0
+optional ne 1.0 works? no
+$ret is PEAR_DEPENDENCY_CONFLICT_OPTIONAL? yes
+package `pkg1' version != 1.0 is recommended to utilize some features. Installed version is 1.0
+ge 1.1 works? no
+$ret is PEAR_DEPENDENCY_UPGRADE_MINOR? yes
+requires package `pkg1' >= 1.1
+optional ge 1.1 works? no
+$ret is PEAR_DEPENDENCY_UPGRADE_MINOR_OPTIONAL? yes
+package `pkg1' version >= 1.1 is recommended to utilize some features. Installed version is 1.0
+ge 2.0 works? no
+$ret is PEAR_DEPENDENCY_UPGRADE_MAJOR? yes
+requires package `pkg1' >= 2.0
+optional ge 2.0 works? no
+$ret is PEAR_DEPENDENCY_UPGRADE_MAJOR_OPTIONAL? yes
+package `pkg1' version >= 2.0 is recommended to utilize some features. Installed version is 1.0
+gt 1.0 works? no
+$ret is PEAR_DEPENDENCY_UPGRADE_MINOR? yes
+requires package `pkg1' > 1.0
+optional gt 1.0 works? no
+$ret is PEAR_DEPENDENCY_UPGRADE_MINOR_OPTIONAL? yes
+package `pkg1' version > 1.0 is recommended to utilize some features. Installed version is 1.0
+not pkg1 works? no
+$ret is PEAR_DEPENDENCY_CONFLICT? yes
+conflicts with package `pkg1'
+foobar pkg1 works? no
+$ret is PEAR_DEPENDENCY_BAD_DEPENDENCY? yes
+relation 'foobar' with requirement '' is not supported (name=pkg1)
--- /dev/null
+--TEST--
+PEAR_Dependency::checkPackageUninstall() test
+--SKIPIF--
+<?php
+if (!getenv('PHP_PEAR_RUNTESTS')) {
+ echo 'skip';
+}
+?>
+--FILE--
+<?php
+
+require_once "PEAR/Registry.php";
+require_once "PEAR/Dependency.php";
+
+// snarfed from pear_registry.phpt
+$reg = new PEAR_Registry;
+@mkdir(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'checkPackagetmp');
+$reg->statedir = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'checkPackagetmp';
+
+$files1 = array(
+ "pkg1-1.php" => array(
+ "role" => "php",
+ ),
+ "pkg1-2.php" => array(
+ "role" => "php",
+ "baseinstalldir" => "pkg1",
+ ),
+ );
+$files2 = array(
+ "pkg2-1.php" => array(
+ "role" => "php",
+ ),
+ "pkg2-2.php" => array(
+ "role" => "php",
+ "baseinstalldir" => "pkg2",
+ ),
+ );
+$files3 = array(
+ "pkg3-1.php" => array(
+ "role" => "php",
+ ),
+ "pkg3-2.php" => array(
+ "role" => "php",
+ "baseinstalldir" => "pkg3",
+ ),
+ );
+
+$reg->addPackage("pkg2", array("name" => "pkg2", "version" => "2.0", "filelist" => $files2));
+$reg->addPackage("pkg3", array("name" => "pkg3", "version" => "3.0", "filelist" => $files3));
+
+$reg->addPackage("pkg1", array("name" => "pkg1", "version" => "1.0", "filelist" => $files1,
+ 'release_deps' => array(
+ array('type' => 'pkg', 'name' => 'pkg3', 'rel' => 'not')
+ )));
+
+$dep = new PEAR_Dependency($reg);
+$msg = '';
+$warn = '';
+$ret = $dep->checkPackageUninstall($msg, $warn, 'pkg1');
+echo 'uninstall ok? ';
+echo $ret ? "no\n" : "yes\n";
+echo $msg . "\n";
+echo $warn . "\n";
+
+cleanall();
+
+$reg->addPackage("pkg2", array("name" => "pkg2", "version" => "2.0", "filelist" => $files2));
+$reg->addPackage("pkg3", array("name" => "pkg3", "version" => "3.0", "filelist" => $files3));
+
+$reg->addPackage("pkg1", array("name" => "pkg1", "version" => "1.0", "filelist" => $files1,
+ 'release_deps' => array(
+ array('type' => 'pkg', 'name' => 'pkg2', 'rel' => 'ne', 'version' => '6.0')
+ )));
+
+$dep = new PEAR_Dependency($reg);
+$msg = '';
+$warn = '';
+$ret = $dep->checkPackageUninstall($msg, $warn, 'pkg2');
+echo 'uninstall ok? ';
+echo $ret ? "no\n" : "yes\n";
+echo $msg . "\n";
+echo $warn . "\n";
+
+cleanall();
+
+$reg->addPackage("pkg2", array("name" => "pkg2", "version" => "2.0", "filelist" => $files2));
+$reg->addPackage("pkg3", array("name" => "pkg3", "version" => "3.0", "filelist" => $files3));
+
+$reg->addPackage("pkg1", array("name" => "pkg1", "version" => "1.0", "filelist" => $files1,
+ 'release_deps' => array(
+ array('type' => 'pkg', 'name' => 'pkg2', 'rel' => 'has')
+ )));
+
+$dep = new PEAR_Dependency($reg);
+$msg = '';
+$warn = '';
+$ret = $dep->checkPackageUninstall($msg, $warn, 'pkg2');
+echo 'uninstall ok? ';
+echo $ret ? "no\n" : "yes\n";
+echo $msg . "\n";
+echo $warn . "\n";
+
+cleanall();
+
+$reg->addPackage("pkg2", array("name" => "pkg2", "version" => "2.0", "filelist" => $files2));
+$reg->addPackage("pkg3", array("name" => "pkg3", "version" => "3.0", "filelist" => $files3));
+
+$reg->addPackage("pkg1", array("name" => "pkg1", "version" => "1.0", "filelist" => $files1,
+ 'release_deps' => array(
+ array('type' => 'pkg', 'name' => 'pkg2', 'rel' => 'has', 'optional' => 'no')
+ )));
+
+$dep = new PEAR_Dependency($reg);
+$msg = '';
+$warn = '';
+$ret = $dep->checkPackageUninstall($msg, $warn, 'pkg2');
+echo 'uninstall ok? ';
+echo $ret ? "no\n" : "yes\n";
+echo $msg . "\n";
+echo $warn . "\n";
+
+cleanall();
+
+$reg->addPackage("pkg2", array("name" => "pkg2", "version" => "2.0", "filelist" => $files2));
+$reg->addPackage("pkg3", array("name" => "pkg3", "version" => "3.0", "filelist" => $files3));
+
+$reg->addPackage("pkg1", array("name" => "pkg1", "version" => "1.0", "filelist" => $files1,
+ 'release_deps' => array(
+ array('type' => 'pkg', 'name' => 'pkg2', 'rel' => 'has', 'optional' => 'yes')
+ )));
+
+$dep = new PEAR_Dependency($reg);
+$msg = '';
+$warn = '';
+$ret = $dep->checkPackageUninstall($msg, $warn, 'pkg2');
+echo 'uninstall ok? ';
+echo $ret ? "no\n" : "yes\n";
+echo $msg . "\n";
+echo $warn . "\n";
+
+cleanall();
+
+// ------------------------------------------------------------------------- //
+
+function cleanall()
+{
+ $dp = opendir(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'checkPackagetmp');
+ while ($ent = readdir($dp)) {
+ if (substr($ent, -4) == ".reg") {
+ unlink(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'checkPackagetmp' . DIRECTORY_SEPARATOR . $ent);
+ }
+ }
+ closedir($dp);
+ rmdir(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'checkPackagetmp');
+}
+
+?>
+--GET--
+--POST--
+--EXPECT--
+uninstall ok? yes
+
+
+uninstall ok? yes
+
+
+uninstall ok? no
+Package 'pkg1' depends on 'pkg2'
+
+
+uninstall ok? no
+Package 'pkg1' depends on 'pkg2'
+
+
+uninstall ok? yes
+
+
+Warning: Package 'pkg1' optionally depends on 'pkg2'
\ No newline at end of file
--- /dev/null
+--TEST--
+PEAR_Installer test #4: PEAR_Installer::install()
+--SKIPIF--
+<?php
+if (!getenv('PHP_PEAR_RUNTESTS')) {
+ echo 'skip';
+}
+?>
+--FILE--
+<?php
+$temp_path = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'testinstallertemp';
+if (!is_dir($temp_path)) {
+ mkdir($temp_path);
+}
+if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'php')) {
+ mkdir($temp_path . DIRECTORY_SEPARATOR . 'php');
+}
+if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'data')) {
+ mkdir($temp_path . DIRECTORY_SEPARATOR . 'data');
+}
+if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'doc')) {
+ mkdir($temp_path . DIRECTORY_SEPARATOR . 'doc');
+}
+if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'test')) {
+ mkdir($temp_path . DIRECTORY_SEPARATOR . 'test');
+}
+if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'ext')) {
+ mkdir($temp_path . DIRECTORY_SEPARATOR . 'ext');
+}
+if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'script')) {
+ mkdir($temp_path . DIRECTORY_SEPARATOR . 'script');
+}
+if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'tmp')) {
+ mkdir($temp_path . DIRECTORY_SEPARATOR . 'tmp');
+}
+if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'bin')) {
+ mkdir($temp_path . DIRECTORY_SEPARATOR . 'bin');
+}
+// make the fake configuration - we'll use one of these and it should work
+$config = serialize(array('master_server' => 'pear.php.net',
+ 'php_dir' => $temp_path . DIRECTORY_SEPARATOR . 'php',
+ 'ext_dir' => $temp_path . DIRECTORY_SEPARATOR . 'ext',
+ 'data_dir' => $temp_path . DIRECTORY_SEPARATOR . 'data',
+ 'doc_dir' => $temp_path . DIRECTORY_SEPARATOR . 'doc',
+ 'test_dir' => $temp_path . DIRECTORY_SEPARATOR . 'test',
+ 'bin_dir' => $temp_path . DIRECTORY_SEPARATOR . 'bin',));
+touch($temp_path . DIRECTORY_SEPARATOR . 'pear.conf');
+$fp = fopen($temp_path . DIRECTORY_SEPARATOR . 'pear.conf', 'w');
+fwrite($fp, $config);
+fclose($fp);
+touch($temp_path . DIRECTORY_SEPARATOR . 'pear.ini');
+$fp = fopen($temp_path . DIRECTORY_SEPARATOR . 'pear.ini', 'w');
+fwrite($fp, $config);
+fclose($fp);
+
+putenv('PHP_PEAR_SYSCONF_DIR='.$temp_path);
+$home = getenv('HOME');
+if (!empty($home)) {
+ // for PEAR_Config initialization
+ putenv('HOME="'.$temp_path);
+}
+require_once "PEAR/Installer.php";
+
+// no UI is needed for these tests
+$ui = false;
+$installer = new PEAR_Installer($ui);
+$curdir = getcwd();
+chdir(dirname(__FILE__));
+
+PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'catchit');
+
+$error_to_catch = false;
+function catchit($err)
+{
+ global $error_to_catch;
+ if ($error_to_catch) {
+ if ($err->getMessage() == $error_to_catch) {
+ $error_to_catch = false;
+ echo "Caught expected error\n";
+ return;
+ }
+ }
+ echo "Caught error: " . $err->getMessage() . "\n";
+}
+
+echo "Test package.xml direct install:\n";
+$installer->install(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test-pkg6' . DIRECTORY_SEPARATOR . 'package.xml');
+$reg = &new PEAR_Registry($temp_path . DIRECTORY_SEPARATOR . 'php');
+var_dump($reg->listPackages());
+echo "zoorb.php exists? ";
+echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php'
+ . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'zoorb.php')) ? "yes\n" : "no\n";
+echo "goompness/Mopreeb.php exists? ";
+echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php'
+ . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'goompness'
+ . DIRECTORY_SEPARATOR . 'Mopreeb.php')) ? "yes\n" : "no\n";
+echo "goompness/oggbrzitzkee.php exists? ";
+echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php'
+ . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'goompness'
+ . DIRECTORY_SEPARATOR . 'oggbrzitzkee.php')) ? "yes\n" : "no\n";
+echo "After uninstall:\n";
+$installer->uninstall('pkg6');
+var_dump($reg->listPackages());
+echo "zoorb.php exists? ";
+echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php'
+ . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'zoorb.php')) ? "yes\n" : "no\n";
+echo "goompness/Mopreeb.php exists? ";
+echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php'
+ . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'goompness'
+ . DIRECTORY_SEPARATOR . 'Mopreeb.php')) ? "yes\n" : "no\n";
+echo "goompness/oggbrzitzkee.php exists? ";
+echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php'
+ . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'goompness'
+ . DIRECTORY_SEPARATOR . 'oggbrzitzkee.php')) ? "yes\n" : "no\n";
+echo "goompness exists? ";
+echo (is_dir($temp_path . DIRECTORY_SEPARATOR . 'php'
+ . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'goompness'))
+ ? "yes\n" : "no\n";
+
+echo "Test .tgz install:\n";
+$installer->install(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test-pkg6' . DIRECTORY_SEPARATOR . 'pkg6-1.1.tgz');
+$reg = &new PEAR_Registry($temp_path . DIRECTORY_SEPARATOR . 'php');
+var_dump($reg->listPackages());
+echo "zoorb.php exists? ";
+echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php'
+ . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'zoorb.php')) ? "yes\n" : "no\n";
+echo "goompness/Mopreeb.php exists? ";
+echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php'
+ . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'goompness'
+ . DIRECTORY_SEPARATOR . 'Mopreeb.php')) ? "yes\n" : "no\n";
+echo "goompness/oggbrzitzkee.php exists? ";
+echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php'
+ . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'goompness'
+ . DIRECTORY_SEPARATOR . 'oggbrzitzkee.php')) ? "yes\n" : "no\n";
+echo "After uninstall:\n";
+$installer->uninstall('pkg6');
+var_dump($reg->listPackages());
+echo "zoorb.php exists? ";
+echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php'
+ . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'zoorb.php')) ? "yes\n" : "no\n";
+echo "goompness/Mopreeb.php exists? ";
+echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php'
+ . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'goompness'
+ . DIRECTORY_SEPARATOR . 'Mopreeb.php')) ? "yes\n" : "no\n";
+echo "goompness/oggbrzitzkee.php exists? ";
+echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php'
+ . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'goompness'
+ . DIRECTORY_SEPARATOR . 'oggbrzitzkee.php')) ? "yes\n" : "no\n";
+echo "goompness exists? ";
+echo (is_dir($temp_path . DIRECTORY_SEPARATOR . 'php'
+ . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'goompness'))
+ ? "yes\n" : "no\n";
+
+echo "Test invalid .tgz install:\n";
+$error_to_catch = 'unable to unpack ' . dirname(__FILE__) . DIRECTORY_SEPARATOR .
+ 'test-pkg6' . DIRECTORY_SEPARATOR . 'invalidtgz.tgz';
+$installer->install(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test-pkg6' . DIRECTORY_SEPARATOR . 'invalidtgz.tgz');
+$reg = &new PEAR_Registry($temp_path . DIRECTORY_SEPARATOR . 'php');
+var_dump($reg->listPackages());
+echo "zoorb.php exists? ";
+echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php'
+ . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'zoorb.php')) ? "yes\n" : "no\n";
+echo "goompness/Mopreeb.php exists? ";
+echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php'
+ . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'goompness'
+ . DIRECTORY_SEPARATOR . 'Mopreeb.php')) ? "yes\n" : "no\n";
+echo "goompness/oggbrzitzkee.php exists? ";
+echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php'
+ . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'goompness'
+ . DIRECTORY_SEPARATOR . 'oggbrzitzkee.php')) ? "yes\n" : "no\n";
+
+echo "Test missing package.xml in .tgz install:\n";
+$installer->install(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test-pkg6' . DIRECTORY_SEPARATOR . 'nopackagexml.tgz');
+$reg = &new PEAR_Registry($temp_path . DIRECTORY_SEPARATOR . 'php');
+var_dump($reg->listPackages());
+echo "zoorb.php exists? ";
+echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php'
+ . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'zoorb.php')) ? "yes\n" : "no\n";
+echo "goompness/Mopreeb.php exists? ";
+echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php'
+ . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'goompness'
+ . DIRECTORY_SEPARATOR . 'Mopreeb.php')) ? "yes\n" : "no\n";
+echo "goompness/oggbrzitzkee.php exists? ";
+echo (file_exists($temp_path . DIRECTORY_SEPARATOR . 'php'
+ . DIRECTORY_SEPARATOR . 'groob' . DIRECTORY_SEPARATOR . 'goompness'
+ . DIRECTORY_SEPARATOR . 'oggbrzitzkee.php')) ? "yes\n" : "no\n";
+
+chdir($curdir);
+cleanall($temp_path);
+
+// ------------------------------------------------------------------------- //
+
+function cleanall($dir)
+{
+ $dp = opendir($dir);
+ while ($ent = readdir($dp)) {
+ if ($ent == '.' || $ent == '..') {
+ continue;
+ }
+ if (is_dir($dir . DIRECTORY_SEPARATOR . $ent)) {
+ cleanall($dir . DIRECTORY_SEPARATOR . $ent);
+ } else {
+ unlink($dir . DIRECTORY_SEPARATOR . $ent);
+ }
+ }
+ closedir($dp);
+ rmdir($dir);
+}
+?>
+--GET--
+--POST--
+--EXPECT--
+Test package.xml direct install:
+array(1) {
+ [0]=>
+ string(4) "pkg6"
+}
+zoorb.php exists? yes
+goompness/Mopreeb.php exists? yes
+goompness/oggbrzitzkee.php exists? yes
+After uninstall:
+array(0) {
+}
+zoorb.php exists? no
+goompness/Mopreeb.php exists? no
+goompness/oggbrzitzkee.php exists? no
+goompness exists? no
+Test .tgz install:
+array(1) {
+ [0]=>
+ string(4) "pkg6"
+}
+zoorb.php exists? yes
+goompness/Mopreeb.php exists? yes
+goompness/oggbrzitzkee.php exists? yes
+After uninstall:
+array(0) {
+}
+zoorb.php exists? no
+goompness/Mopreeb.php exists? no
+goompness/oggbrzitzkee.php exists? no
+goompness exists? no
+Test invalid .tgz install:
+Caught error: Invalid checksum for file "<?xml version="1.0" encoding="ISO-8859-1" ?>
+ <!DOCTYPE package SYSTEM "http://pear.php.net/dtd/" : 37649 calculated, 0 expected
+Caught expected error
+array(0) {
+}
+zoorb.php exists? no
+goompness/Mopreeb.php exists? no
+goompness/oggbrzitzkee.php exists? no
+Test missing package.xml in .tgz install:
+warning : you are using an archive with an old format
+Caught error: no package.xml file after extracting the archive
+array(0) {
+}
+zoorb.php exists? no
+goompness/Mopreeb.php exists? no
+goompness/oggbrzitzkee.php exists? no
--- /dev/null
+<?php
+
+/**
+ *
+ *
+ * @version $Id$
+ * @copyright 2003
+ **/
+class test1{}
+
+?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/**
+ *
+ *
+ * @version $Id$
+ * @copyright 2003
+ **/
+class test1{}
+
+?>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="ISO-8859-1" ?>\r
+ <!DOCTYPE package SYSTEM "http://pear.php.net/dtd/package-1.0">\r
+ <package version="1.0">\r
+ <name>pkg6</name>\r
+ <summary>required test for PEAR_Installer</summary>\r
+ <description>\r
+ fake package\r
+ </description>\r
+ <license>PHP License</license>\r
+ <maintainers>\r
+ <maintainer>\r
+ <user>fakeuser</user>\r
+ <name>Joe Shmoe</name>\r
+ <email>nobody@example.com</email>\r
+ <role>lead</role>\r
+ </maintainer>\r
+ </maintainers>\r
+ <release>\r
+ <version>1.1</version>\r
+ <date>2003-09-09</date>\r
+ <state>stable</state>\r
+ <notes>\r
+ required dependency test\r
+ </notes>\r
+ <filelist>\r
+ <dir name="/" baseinstalldir="groob" role="php">\r
+ <file>zoorb.php</file>\r
+ <dir name="goompness" role="php">\r
+ <file>oggbrzitzkee.php</file>\r
+ <file>Mopreeb.php</file>\r
+ </dir>\r
+ </dir>\r
+ </filelist>\r
+ </release>\r
+ </package>\r
--- /dev/null
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+ <!DOCTYPE package SYSTEM "http://pear.php.net/dtd/package-1.0">
+ <package version="1.0">
+ <name>pkg6</name>
+ <summary>required test for PEAR_Installer</summary>
+ <description>
+ fake package
+ </description>
+ <license>PHP License</license>
+ <maintainers>
+ <maintainer>
+ <user>fakeuser</user>
+ <name>Joe Shmoe</name>
+ <email>nobody@example.com</email>
+ <role>lead</role>
+ </maintainer>
+ </maintainers>
+ <release>
+ <version>1.1</version>
+ <date>2003-09-09</date>
+ <state>stable</state>
+ <notes>
+ required dependency test
+ </notes>
+ <filelist>
+ <dir name="/" baseinstalldir="groob" role="php">
+ <file>zoorb.php</file>
+ <dir name="goompness" role="php">
+ <file>oggbrzitzkee.php</file>
+ <file>Mopreeb.php</file>
+ </dir>
+ </dir>
+ </filelist>
+ </release>
+ </package>
--- /dev/null
+<?php
+
+/**
+ *
+ *
+ * @version $Id$
+ * @copyright 2003
+ **/
+class test1{}
+
+?>
\ No newline at end of file