mirror of
https://github.com/composer/composer
synced 2025-05-08 16:17:37 +00:00

any tests that use the filesystem should have their own unique directory, as we run our test suite in parallel and cleanup of tests (removing directories) should not interfere with currently running tests
146 lines
5.3 KiB
PHP
146 lines
5.3 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of Composer.
|
|
*
|
|
* (c) Nils Adermann <naderman@naderman.de>
|
|
* Jordi Boggiano <j.boggiano@seld.be>
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace Composer\Test\Downloader;
|
|
|
|
use Composer\Downloader\PearPackageExtractor;
|
|
use Composer\TestCase;
|
|
|
|
class PearPackageExtractorTest extends TestCase
|
|
{
|
|
public function testShouldExtractPackage_1_0()
|
|
{
|
|
$state = libxml_disable_entity_loader(true);
|
|
|
|
$extractor = $this->getMockForAbstractClass('Composer\Downloader\PearPackageExtractor', array(), '', false);
|
|
$method = new \ReflectionMethod($extractor, 'buildCopyActions');
|
|
$method->setAccessible(true);
|
|
|
|
$fileActions = $method->invoke($extractor, __DIR__ . '/Fixtures/Package_v1.0', array('php' => '/'), array());
|
|
|
|
libxml_disable_entity_loader($state);
|
|
|
|
$expectedFileActions = array(
|
|
'Gtk.php' => array(
|
|
'from' => 'PEAR_Frontend_Gtk-0.4.0/Gtk.php',
|
|
'to' => 'PEAR/Frontend/Gtk.php',
|
|
'role' => 'php',
|
|
'tasks' => array(),
|
|
),
|
|
'Gtk/Config.php' => array(
|
|
'from' => 'PEAR_Frontend_Gtk-0.4.0/Gtk/Config.php',
|
|
'to' => 'PEAR/Frontend/Gtk/Config.php',
|
|
'role' => 'php',
|
|
'tasks' => array(),
|
|
),
|
|
'Gtk/xpm/black_close_icon.xpm' => array(
|
|
'from' => 'PEAR_Frontend_Gtk-0.4.0/Gtk/xpm/black_close_icon.xpm',
|
|
'to' => 'PEAR/Frontend/Gtk/xpm/black_close_icon.xpm',
|
|
'role' => 'php',
|
|
'tasks' => array(),
|
|
),
|
|
);
|
|
$this->assertSame($expectedFileActions, $fileActions);
|
|
}
|
|
|
|
public function testShouldExtractPackage_2_0()
|
|
{
|
|
$state = libxml_disable_entity_loader(true);
|
|
|
|
$extractor = $this->getMockForAbstractClass('Composer\Downloader\PearPackageExtractor', array(), '', false);
|
|
$method = new \ReflectionMethod($extractor, 'buildCopyActions');
|
|
$method->setAccessible(true);
|
|
|
|
$fileActions = $method->invoke($extractor, __DIR__ . '/Fixtures/Package_v2.0', array('php' => '/'), array());
|
|
|
|
libxml_disable_entity_loader($state);
|
|
|
|
$expectedFileActions = array(
|
|
'URL.php' => array(
|
|
'from' => 'Net_URL-1.0.15/URL.php',
|
|
'to' => 'Net/URL.php',
|
|
'role' => 'php',
|
|
'tasks' => array(),
|
|
),
|
|
);
|
|
$this->assertSame($expectedFileActions, $fileActions);
|
|
}
|
|
|
|
public function testShouldExtractPackage_2_1()
|
|
{
|
|
$state = libxml_disable_entity_loader(true);
|
|
|
|
$extractor = $this->getMockForAbstractClass('Composer\Downloader\PearPackageExtractor', array(), '', false);
|
|
$method = new \ReflectionMethod($extractor, 'buildCopyActions');
|
|
$method->setAccessible(true);
|
|
|
|
$fileActions = $method->invoke($extractor, __DIR__ . '/Fixtures/Package_v2.1', array('php' => '/', 'script' => '/bin'), array());
|
|
|
|
libxml_disable_entity_loader($state);
|
|
|
|
$expectedFileActions = array(
|
|
'php/Zend/Authentication/Storage/StorageInterface.php' => array(
|
|
'from' => 'Zend_Authentication-2.0.0beta4/php/Zend/Authentication/Storage/StorageInterface.php',
|
|
'to' => '/php/Zend/Authentication/Storage/StorageInterface.php',
|
|
'role' => 'php',
|
|
'tasks' => array(),
|
|
),
|
|
'php/Zend/Authentication/Result.php' => array(
|
|
'from' => 'Zend_Authentication-2.0.0beta4/php/Zend/Authentication/Result.php',
|
|
'to' => '/php/Zend/Authentication/Result.php',
|
|
'role' => 'php',
|
|
'tasks' => array(),
|
|
),
|
|
'php/Test.php' => array(
|
|
'from' => 'Zend_Authentication-2.0.0beta4/php/Test.php',
|
|
'to' => '/php/Test.php',
|
|
'role' => 'script',
|
|
'tasks' => array(
|
|
array(
|
|
'from' => '@version@',
|
|
'to' => 'version',
|
|
),
|
|
),
|
|
),
|
|
'renamedFile.php' => array(
|
|
'from' => 'Zend_Authentication-2.0.0beta4/renamedFile.php',
|
|
'to' => 'correctFile.php',
|
|
'role' => 'php',
|
|
'tasks' => array(),
|
|
),
|
|
);
|
|
$this->assertSame($expectedFileActions, $fileActions);
|
|
}
|
|
|
|
public function testShouldPerformReplacements()
|
|
{
|
|
$from = tempnam($this->getUniqueTmpDirectory(), 'pear-extract');
|
|
$to = $from.'-to';
|
|
|
|
$original = 'replaced: @placeholder@; not replaced: @another@; replaced again: @placeholder@';
|
|
$expected = 'replaced: value; not replaced: @another@; replaced again: value';
|
|
|
|
file_put_contents($from, $original);
|
|
|
|
$extractor = new PearPackageExtractor($from);
|
|
$method = new \ReflectionMethod($extractor, 'copyFile');
|
|
$method->setAccessible(true);
|
|
|
|
$method->invoke($extractor, $from, $to, array(array('from' => '@placeholder@', 'to' => 'variable')), array('variable' => 'value'));
|
|
$result = file_get_contents($to);
|
|
|
|
unlink($to);
|
|
unlink($from);
|
|
|
|
$this->assertEquals($expected, $result);
|
|
}
|
|
}
|