Current File : //opt/RZphp73/includes/test/PEAR_Frontend_Gtk2/tests/PackageTest.php
<?php
require_once 'PHPUnit2/Framework/TestCase.php';
require_once 'PEAR/Frontend/Gtk2/Packages.php';
require_once dirname(__FILE__) . '/TimeDiff.php';

class PEAR_Frontend_Gtk2_Tests_PackageTest extends PHPUnit2_Framework_TestCase
{
    protected $nCallbackCount = 0;



    public function testPearCache()
    {
        $config     = PEAR_Config::singleton();
        $cachedir   = $config->get('cache_dir');
        $this->assertTrue(is_writable($cachedir), 'PEAR cache directory is NOT writable! ' . $cachedir);
    }//public function testPearCache()



    public function testGetRemotePackages()
    {
        //first, check without extra information
        $arPacks = PEAR_Frontend_Gtk2_Packages::getRemotePackages('gnope.org', false);

        $this->assertTrue(count($arPacks) > 0);
        $inspector = self::findPackage($arPacks, 'Dev_Inspector');
        $this->assertNotNull($inspector);
        $this->assertEquals('Dev_Inspector', $inspector->getName());
        $this->assertNull($inspector->getSummary());
        $this->assertNull($inspector->getDescription());
        $this->assertNull($inspector->getCategory());
        $this->assertEquals('gnope.org', $inspector->getChannel());


        //Now, with extra information loaded
        $arPacks = PEAR_Frontend_Gtk2_Packages::getRemotePackages('gnope.org', true);

        $this->assertTrue(count($arPacks) > 0);
        $inspector = self::findPackage($arPacks, 'Dev_Inspector');
        $this->assertNotNull($inspector);
        $this->assertEquals('Dev_Inspector', $inspector->getName());
        $this->assertNotNull($inspector->getSummary());
        $this->assertNotNull($inspector->getDescription());
        $this->assertNotNull($inspector->getCategory());
        $this->assertEquals('gnope.org', $inspector->getChannel());
    }//public function testGetRemotePackages()



    public function testGetLocalPackages()
    {
        $arPacks = PEAR_Frontend_Gtk2_Packages::getLocalPackages('pear');
        $this->assertTrue(count($arPacks) > 0);
        $this->assertNotNull($arPacks['PHPUnit']);
        $this->assertNotNull($arPacks['PEAR']);
    }//public function testGetLocalPackages()



    public function testMergePackageData()
    {
        $arPacks = PEAR_Frontend_Gtk2_Packages::getLocalPackages('pear');
        $arLocalPackIds = array();
        foreach ($arPacks as $strName => $objPack) {
            $arLocalPackIds[$strName] = $strName;
            $this->assertNotNull($objPack->getInstalledVersion());
            $this->assertNull($objPack->getLatestVersion());
        }
        $nCount = count($arPacks);

        $this->nCallbackCount = 0;
        $arAllPacks = PEAR_Frontend_Gtk2_Packages::getRemotePackages('pear', true, array($this, 'packageCallback'));
        $this->assertTrue(count($arAllPacks) >= $nCount);
        $this->assertEquals(count($arAllPacks), $this->nCallbackCount);

        foreach ($arLocalPackIds as $strName) {
            $this->assertTrue(isset($arAllPacks[$strName]));
            $this->assertNotNull($arPacks[$strName]->getInstalledVersion());
        }

        foreach ($arAllPacks as $strName => $package) {
            $this->assertNotNull($package->getLatestVersion());
        }
    }//public function testMergePackageData()



    public function testGuessCategory()
    {
        $this->assertEquals('Dev'   , PEAR_Frontend_Gtk2_Package::guessCategory('Dev_Inspector'));
        $this->assertEquals('PEAR'  , PEAR_Frontend_Gtk2_Package::guessCategory('PEAR_Frontend_Gtk'));
        $this->assertEquals(''      , PEAR_Frontend_Gtk2_Package::guessCategory('DevInspector'));
    }//public function testGuessCategory()



    public function testGetCategories()
    {
        $pcks         = new PEAR_Frontend_Gtk2_Packages('pear');
        $arCategories = $pcks->getCategories();
        $arPackages   = $pcks->getPackages();
        $this->assertTrue(count($arPackages) > 0);
        foreach ($arPackages as $package) {
            $this->assertTrue(isset($arCategories[$package->getCategory()]));
        }
    }//public function testGetCategories()



    public function packageCallback($nPackageCount, $nCurrentPackage)
    {
        if ($nPackageCount !== true) {
            $this->nCallbackCount++;
        }
//        echo $nCurrentPackage . '/' . $nPackageCount . "\r\n";
    }//public function packageCallback($nPackageCount, $nCurrentPackage)



    protected static function findPackage($arPackages, $strPackageName)
    {
        foreach ($arPackages as $nId => $package) {
            if ($package->getName() == 'Dev_Inspector') {
                break;
            }
        }
        if ($arPackages[$nId]->getName() !== $strPackageName) {
            return null;
        } else {
            return $arPackages[$nId];
        }
    }//protected static function findPackage($arPackages, $strPackageName)

}//class PEAR_Frontend_Gtk2_Tests_PackageTest extends PHPUnit_TestCase

?>