Merge remote-tracking branch 'alcohol/unique-test-directories'
commit
783e0aec8a
|
@ -12,14 +12,15 @@
|
||||||
|
|
||||||
namespace Composer\Test;
|
namespace Composer\Test;
|
||||||
|
|
||||||
use Symfony\Component\Process\Process;
|
use Composer\TestCase;
|
||||||
use Composer\Util\Filesystem;
|
use Composer\Util\Filesystem;
|
||||||
use Symfony\Component\Finder\Finder;
|
use Symfony\Component\Finder\Finder;
|
||||||
|
use Symfony\Component\Process\Process;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @group slow
|
* @group slow
|
||||||
*/
|
*/
|
||||||
class AllFunctionalTest extends \PHPUnit_Framework_TestCase
|
class AllFunctionalTest extends TestCase
|
||||||
{
|
{
|
||||||
protected $oldcwd;
|
protected $oldcwd;
|
||||||
protected $oldenv;
|
protected $oldenv;
|
||||||
|
@ -29,17 +30,21 @@ class AllFunctionalTest extends \PHPUnit_Framework_TestCase
|
||||||
public function setUp()
|
public function setUp()
|
||||||
{
|
{
|
||||||
$this->oldcwd = getcwd();
|
$this->oldcwd = getcwd();
|
||||||
|
|
||||||
chdir(__DIR__.'/Fixtures/functional');
|
chdir(__DIR__.'/Fixtures/functional');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function tearDown()
|
public function tearDown()
|
||||||
{
|
{
|
||||||
chdir($this->oldcwd);
|
chdir($this->oldcwd);
|
||||||
|
|
||||||
$fs = new Filesystem;
|
$fs = new Filesystem;
|
||||||
|
|
||||||
if ($this->testDir) {
|
if ($this->testDir) {
|
||||||
$fs->removeDirectory($this->testDir);
|
$fs->removeDirectory($this->testDir);
|
||||||
$this->testDir = null;
|
$this->testDir = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->oldenv) {
|
if ($this->oldenv) {
|
||||||
$fs->removeDirectory(getenv('COMPOSER_HOME'));
|
$fs->removeDirectory(getenv('COMPOSER_HOME'));
|
||||||
$_SERVER['COMPOSER_HOME'] = $this->oldenv;
|
$_SERVER['COMPOSER_HOME'] = $this->oldenv;
|
||||||
|
@ -50,7 +55,7 @@ class AllFunctionalTest extends \PHPUnit_Framework_TestCase
|
||||||
|
|
||||||
public static function setUpBeforeClass()
|
public static function setUpBeforeClass()
|
||||||
{
|
{
|
||||||
self::$pharPath = sys_get_temp_dir().'/composer-phar-test/composer.phar';
|
self::$pharPath = self::getUniqueTmpDirectory() . '/composer.phar';
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function tearDownAfterClass()
|
public static function tearDownAfterClass()
|
||||||
|
@ -66,9 +71,7 @@ class AllFunctionalTest extends \PHPUnit_Framework_TestCase
|
||||||
}
|
}
|
||||||
|
|
||||||
$target = dirname(self::$pharPath);
|
$target = dirname(self::$pharPath);
|
||||||
$fs = new Filesystem;
|
$fs = new Filesystem();
|
||||||
$fs->removeDirectory($target);
|
|
||||||
$fs->ensureDirectoryExists($target);
|
|
||||||
chdir($target);
|
chdir($target);
|
||||||
|
|
||||||
$it = new \RecursiveDirectoryIterator(__DIR__.'/../../../', \RecursiveDirectoryIterator::SKIP_DOTS);
|
$it = new \RecursiveDirectoryIterator(__DIR__.'/../../../', \RecursiveDirectoryIterator::SKIP_DOTS);
|
||||||
|
@ -85,9 +88,11 @@ class AllFunctionalTest extends \PHPUnit_Framework_TestCase
|
||||||
|
|
||||||
$proc = new Process('php '.escapeshellarg('./bin/compile'), $target);
|
$proc = new Process('php '.escapeshellarg('./bin/compile'), $target);
|
||||||
$exitcode = $proc->run();
|
$exitcode = $proc->run();
|
||||||
|
|
||||||
if ($exitcode !== 0 || trim($proc->getOutput())) {
|
if ($exitcode !== 0 || trim($proc->getOutput())) {
|
||||||
$this->fail($proc->getOutput());
|
$this->fail($proc->getOutput());
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->assertTrue(file_exists(self::$pharPath));
|
$this->assertTrue(file_exists(self::$pharPath));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -140,7 +145,7 @@ class AllFunctionalTest extends \PHPUnit_Framework_TestCase
|
||||||
$data = array();
|
$data = array();
|
||||||
$section = null;
|
$section = null;
|
||||||
|
|
||||||
$testDir = sys_get_temp_dir().'/composer_functional_test'.uniqid(mt_rand(), true);
|
$testDir = self::getUniqueTmpDirectory();
|
||||||
$this->testDir = $testDir;
|
$this->testDir = $testDir;
|
||||||
$varRegex = '#%([a-zA-Z_-]+)%#';
|
$varRegex = '#%([a-zA-Z_-]+)%#';
|
||||||
$variableReplacer = function ($match) use (&$data, $testDir) {
|
$variableReplacer = function ($match) use (&$data, $testDir) {
|
||||||
|
|
|
@ -88,8 +88,7 @@ class AutoloadGeneratorTest extends TestCase
|
||||||
$this->fs = new Filesystem;
|
$this->fs = new Filesystem;
|
||||||
$that = $this;
|
$that = $this;
|
||||||
|
|
||||||
$this->workingDir = realpath(sys_get_temp_dir()).DIRECTORY_SEPARATOR.'cmptest-'.md5(uniqid('', true));
|
$this->workingDir = $this->getUniqueTmpDirectory();
|
||||||
$this->fs->ensureDirectoryExists($this->workingDir);
|
|
||||||
$this->vendorDir = $this->workingDir.DIRECTORY_SEPARATOR.'composer-test-autoload';
|
$this->vendorDir = $this->workingDir.DIRECTORY_SEPARATOR.'composer-test-autoload';
|
||||||
$this->ensureDirectoryExistsAndClear($this->vendorDir);
|
$this->ensureDirectoryExistsAndClear($this->vendorDir);
|
||||||
|
|
||||||
|
@ -144,6 +143,7 @@ class AutoloadGeneratorTest extends TestCase
|
||||||
if (is_dir($this->workingDir)) {
|
if (is_dir($this->workingDir)) {
|
||||||
$this->fs->removeDirectory($this->workingDir);
|
$this->fs->removeDirectory($this->workingDir);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_dir($this->vendorDir)) {
|
if (is_dir($this->vendorDir)) {
|
||||||
$this->fs->removeDirectory($this->vendorDir);
|
$this->fs->removeDirectory($this->vendorDir);
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,10 +19,11 @@
|
||||||
namespace Composer\Test\Autoload;
|
namespace Composer\Test\Autoload;
|
||||||
|
|
||||||
use Composer\Autoload\ClassMapGenerator;
|
use Composer\Autoload\ClassMapGenerator;
|
||||||
|
use Composer\TestCase;
|
||||||
use Symfony\Component\Finder\Finder;
|
use Symfony\Component\Finder\Finder;
|
||||||
use Composer\Util\Filesystem;
|
use Composer\Util\Filesystem;
|
||||||
|
|
||||||
class ClassMapGeneratorTest extends \PHPUnit_Framework_TestCase
|
class ClassMapGeneratorTest extends TestCase
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @dataProvider getTestCreateMapTests
|
* @dataProvider getTestCreateMapTests
|
||||||
|
@ -127,10 +128,8 @@ class ClassMapGeneratorTest extends \PHPUnit_Framework_TestCase
|
||||||
{
|
{
|
||||||
$this->checkIfFinderIsAvailable();
|
$this->checkIfFinderIsAvailable();
|
||||||
|
|
||||||
$tempDir = sys_get_temp_dir().'/ComposerTestAmbiguousRefs';
|
$tempDir = $this->getUniqueTmpDirectory();
|
||||||
if (!is_dir($tempDir.'/other')) {
|
$this->ensureDirectoryExistsAndClear($tempDir.'/other');
|
||||||
mkdir($tempDir.'/other', 0777, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
$finder = new Finder();
|
$finder = new Finder();
|
||||||
$finder->files()->in($tempDir);
|
$finder->files()->in($tempDir);
|
||||||
|
@ -171,13 +170,9 @@ class ClassMapGeneratorTest extends \PHPUnit_Framework_TestCase
|
||||||
*/
|
*/
|
||||||
public function testUnambiguousReference()
|
public function testUnambiguousReference()
|
||||||
{
|
{
|
||||||
$tempDir = sys_get_temp_dir().'/ComposerTestUnambiguousRefs';
|
$tempDir = $this->getUniqueTmpDirectory();
|
||||||
if (!is_dir($tempDir)) {
|
|
||||||
mkdir($tempDir, 0777, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
file_put_contents($tempDir.'/A.php', "<?php\nclass A {}");
|
file_put_contents($tempDir.'/A.php', "<?php\nclass A {}");
|
||||||
|
|
||||||
file_put_contents(
|
file_put_contents(
|
||||||
$tempDir.'/B.php',
|
$tempDir.'/B.php',
|
||||||
"<?php
|
"<?php
|
||||||
|
|
|
@ -25,15 +25,15 @@ class CacheTest extends TestCase
|
||||||
$this->markTestSkipped('Test causes intermittent failures on Travis');
|
$this->markTestSkipped('Test causes intermittent failures on Travis');
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->root = sys_get_temp_dir() . '/composer_testdir';
|
$this->root = $this->getUniqueTmpDirectory();
|
||||||
$this->ensureDirectoryExistsAndClear($this->root);
|
|
||||||
|
|
||||||
$this->files = array();
|
$this->files = array();
|
||||||
$zeros = str_repeat('0', 1000);
|
$zeros = str_repeat('0', 1000);
|
||||||
|
|
||||||
for ($i = 0; $i < 4; $i++) {
|
for ($i = 0; $i < 4; $i++) {
|
||||||
file_put_contents("{$this->root}/cached.file{$i}.zip", $zeros);
|
file_put_contents("{$this->root}/cached.file{$i}.zip", $zeros);
|
||||||
$this->files[] = new \SplFileInfo("{$this->root}/cached.file{$i}.zip");
|
$this->files[] = new \SplFileInfo("{$this->root}/cached.file{$i}.zip");
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->finder = $this->getMockBuilder('Symfony\Component\Finder\Finder')->disableOriginalConstructor()->getMock();
|
$this->finder = $this->getMockBuilder('Symfony\Component\Finder\Finder')->disableOriginalConstructor()->getMock();
|
||||||
|
|
||||||
$io = $this->getMock('Composer\IO\IOInterface');
|
$io = $this->getMock('Composer\IO\IOInterface');
|
||||||
|
|
|
@ -14,9 +14,10 @@ namespace Composer\Test\Json;
|
||||||
|
|
||||||
use Composer\Config\JsonConfigSource;
|
use Composer\Config\JsonConfigSource;
|
||||||
use Composer\Json\JsonFile;
|
use Composer\Json\JsonFile;
|
||||||
|
use Composer\TestCase;
|
||||||
use Composer\Util\Filesystem;
|
use Composer\Util\Filesystem;
|
||||||
|
|
||||||
class JsonConfigSourceTest extends \PHPUnit_Framework_TestCase
|
class JsonConfigSourceTest extends TestCase
|
||||||
{
|
{
|
||||||
/** @var Filesystem */
|
/** @var Filesystem */
|
||||||
private $fs;
|
private $fs;
|
||||||
|
@ -31,8 +32,7 @@ class JsonConfigSourceTest extends \PHPUnit_Framework_TestCase
|
||||||
protected function setUp()
|
protected function setUp()
|
||||||
{
|
{
|
||||||
$this->fs = new Filesystem;
|
$this->fs = new Filesystem;
|
||||||
$this->workingDir = realpath(sys_get_temp_dir()).DIRECTORY_SEPARATOR.'cmptest';
|
$this->workingDir = $this->getUniqueTmpDirectory();
|
||||||
$this->fs->ensureDirectoryExists($this->workingDir);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function tearDown()
|
protected function tearDown()
|
||||||
|
|
|
@ -13,9 +13,10 @@
|
||||||
namespace Composer\Test\Downloader;
|
namespace Composer\Test\Downloader;
|
||||||
|
|
||||||
use Composer\Downloader\FileDownloader;
|
use Composer\Downloader\FileDownloader;
|
||||||
|
use Composer\TestCase;
|
||||||
use Composer\Util\Filesystem;
|
use Composer\Util\Filesystem;
|
||||||
|
|
||||||
class FileDownloaderTest extends \PHPUnit_Framework_TestCase
|
class FileDownloaderTest extends TestCase
|
||||||
{
|
{
|
||||||
protected function getDownloader($io = null, $config = null, $eventDispatcher = null, $cache = null, $rfs = null, $filesystem = null)
|
protected function getDownloader($io = null, $config = null, $eventDispatcher = null, $cache = null, $rfs = null, $filesystem = null)
|
||||||
{
|
{
|
||||||
|
@ -53,9 +54,9 @@ class FileDownloaderTest extends \PHPUnit_Framework_TestCase
|
||||||
->will($this->returnValue(array('url')))
|
->will($this->returnValue(array('url')))
|
||||||
;
|
;
|
||||||
|
|
||||||
$path = tempnam(sys_get_temp_dir(), 'c');
|
$path = tempnam($this->getUniqueTmpDirectory(), 'c');
|
||||||
|
|
||||||
$downloader = $this->getDownloader();
|
$downloader = $this->getDownloader();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$downloader->download($packageMock, $path);
|
$downloader->download($packageMock, $path);
|
||||||
$this->fail();
|
$this->fail();
|
||||||
|
@ -102,10 +103,7 @@ class FileDownloaderTest extends \PHPUnit_Framework_TestCase
|
||||||
->will($this->returnValue(array()))
|
->will($this->returnValue(array()))
|
||||||
;
|
;
|
||||||
|
|
||||||
do {
|
$path = $this->getUniqueTmpDirectory();
|
||||||
$path = sys_get_temp_dir().'/'.md5(time().mt_rand());
|
|
||||||
} while (file_exists($path));
|
|
||||||
|
|
||||||
$ioMock = $this->getMock('Composer\IO\IOInterface');
|
$ioMock = $this->getMock('Composer\IO\IOInterface');
|
||||||
$ioMock->expects($this->any())
|
$ioMock->expects($this->any())
|
||||||
->method('write')
|
->method('write')
|
||||||
|
@ -187,14 +185,9 @@ class FileDownloaderTest extends \PHPUnit_Framework_TestCase
|
||||||
;
|
;
|
||||||
$filesystem = $this->getMock('Composer\Util\Filesystem');
|
$filesystem = $this->getMock('Composer\Util\Filesystem');
|
||||||
|
|
||||||
do {
|
$path = $this->getUniqueTmpDirectory();
|
||||||
$path = sys_get_temp_dir().'/'.md5(time().mt_rand());
|
|
||||||
} while (file_exists($path));
|
|
||||||
|
|
||||||
$downloader = $this->getDownloader(null, null, null, null, null, $filesystem);
|
$downloader = $this->getDownloader(null, null, null, null, null, $filesystem);
|
||||||
|
|
||||||
// make sure the file expected to be downloaded is on disk already
|
// make sure the file expected to be downloaded is on disk already
|
||||||
mkdir($path, 0777, true);
|
|
||||||
touch($path.'/script.js');
|
touch($path.'/script.js');
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -14,9 +14,10 @@ namespace Composer\Test\Downloader;
|
||||||
|
|
||||||
use Composer\Downloader\GitDownloader;
|
use Composer\Downloader\GitDownloader;
|
||||||
use Composer\Config;
|
use Composer\Config;
|
||||||
|
use Composer\TestCase;
|
||||||
use Composer\Util\Filesystem;
|
use Composer\Util\Filesystem;
|
||||||
|
|
||||||
class GitDownloaderTest extends \PHPUnit_Framework_TestCase
|
class GitDownloaderTest extends TestCase
|
||||||
{
|
{
|
||||||
/** @var Filesystem */
|
/** @var Filesystem */
|
||||||
private $fs;
|
private $fs;
|
||||||
|
@ -26,7 +27,7 @@ class GitDownloaderTest extends \PHPUnit_Framework_TestCase
|
||||||
protected function setUp()
|
protected function setUp()
|
||||||
{
|
{
|
||||||
$this->fs = new Filesystem;
|
$this->fs = new Filesystem;
|
||||||
$this->workingDir = realpath(sys_get_temp_dir()).DIRECTORY_SEPARATOR.'cmptest-'.md5(uniqid('', true));
|
$this->workingDir = $this->getUniqueTmpDirectory();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function tearDown()
|
protected function tearDown()
|
||||||
|
|
|
@ -13,16 +13,17 @@
|
||||||
namespace Composer\Test\Downloader;
|
namespace Composer\Test\Downloader;
|
||||||
|
|
||||||
use Composer\Downloader\HgDownloader;
|
use Composer\Downloader\HgDownloader;
|
||||||
|
use Composer\TestCase;
|
||||||
use Composer\Util\Filesystem;
|
use Composer\Util\Filesystem;
|
||||||
|
|
||||||
class HgDownloaderTest extends \PHPUnit_Framework_TestCase
|
class HgDownloaderTest extends TestCase
|
||||||
{
|
{
|
||||||
/** @var string */
|
/** @var string */
|
||||||
private $workingDir;
|
private $workingDir;
|
||||||
|
|
||||||
protected function setUp()
|
protected function setUp()
|
||||||
{
|
{
|
||||||
$this->workingDir = realpath(sys_get_temp_dir()).DIRECTORY_SEPARATOR.'cmptest-'.md5(uniqid('', true));
|
$this->workingDir = $this->getUniqueTmpDirectory();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function tearDown()
|
protected function tearDown()
|
||||||
|
|
|
@ -13,8 +13,9 @@
|
||||||
namespace Composer\Test\Downloader;
|
namespace Composer\Test\Downloader;
|
||||||
|
|
||||||
use Composer\Downloader\PearPackageExtractor;
|
use Composer\Downloader\PearPackageExtractor;
|
||||||
|
use Composer\TestCase;
|
||||||
|
|
||||||
class PearPackageExtractorTest extends \PHPUnit_Framework_TestCase
|
class PearPackageExtractorTest extends TestCase
|
||||||
{
|
{
|
||||||
public function testShouldExtractPackage_1_0()
|
public function testShouldExtractPackage_1_0()
|
||||||
{
|
{
|
||||||
|
@ -122,7 +123,7 @@ class PearPackageExtractorTest extends \PHPUnit_Framework_TestCase
|
||||||
|
|
||||||
public function testShouldPerformReplacements()
|
public function testShouldPerformReplacements()
|
||||||
{
|
{
|
||||||
$from = tempnam(sys_get_temp_dir(), 'pear-extract');
|
$from = tempnam($this->getUniqueTmpDirectory(), 'pear-extract');
|
||||||
$to = $from.'-to';
|
$to = $from.'-to';
|
||||||
|
|
||||||
$original = 'replaced: @placeholder@; not replaced: @another@; replaced again: @placeholder@';
|
$original = 'replaced: @placeholder@; not replaced: @another@; replaced again: @placeholder@';
|
||||||
|
|
|
@ -16,12 +16,13 @@ use Composer\Downloader\PerforceDownloader;
|
||||||
use Composer\Config;
|
use Composer\Config;
|
||||||
use Composer\Repository\VcsRepository;
|
use Composer\Repository\VcsRepository;
|
||||||
use Composer\IO\IOInterface;
|
use Composer\IO\IOInterface;
|
||||||
|
use Composer\TestCase;
|
||||||
use Composer\Util\Filesystem;
|
use Composer\Util\Filesystem;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Matt Whittom <Matt.Whittom@veteransunited.com>
|
* @author Matt Whittom <Matt.Whittom@veteransunited.com>
|
||||||
*/
|
*/
|
||||||
class PerforceDownloaderTest extends \PHPUnit_Framework_TestCase
|
class PerforceDownloaderTest extends TestCase
|
||||||
{
|
{
|
||||||
protected $config;
|
protected $config;
|
||||||
protected $downloader;
|
protected $downloader;
|
||||||
|
@ -34,7 +35,7 @@ class PerforceDownloaderTest extends \PHPUnit_Framework_TestCase
|
||||||
|
|
||||||
protected function setUp()
|
protected function setUp()
|
||||||
{
|
{
|
||||||
$this->testPath = sys_get_temp_dir() . '/composer-test';
|
$this->testPath = $this->getUniqueTmpDirectory();
|
||||||
$this->repoConfig = $this->getRepoConfig();
|
$this->repoConfig = $this->getRepoConfig();
|
||||||
$this->config = $this->getConfig();
|
$this->config = $this->getConfig();
|
||||||
$this->io = $this->getMockIoInterface();
|
$this->io = $this->getMockIoInterface();
|
||||||
|
|
|
@ -13,10 +13,11 @@
|
||||||
namespace Composer\Test\Downloader;
|
namespace Composer\Test\Downloader;
|
||||||
|
|
||||||
use Composer\Downloader\XzDownloader;
|
use Composer\Downloader\XzDownloader;
|
||||||
|
use Composer\TestCase;
|
||||||
use Composer\Util\Filesystem;
|
use Composer\Util\Filesystem;
|
||||||
use Composer\Util\RemoteFilesystem;
|
use Composer\Util\RemoteFilesystem;
|
||||||
|
|
||||||
class XzDownloaderTest extends \PHPUnit_Framework_TestCase
|
class XzDownloaderTest extends TestCase
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @var Filesystem
|
* @var Filesystem
|
||||||
|
@ -33,7 +34,7 @@ class XzDownloaderTest extends \PHPUnit_Framework_TestCase
|
||||||
if (defined('PHP_WINDOWS_VERSION_BUILD')) {
|
if (defined('PHP_WINDOWS_VERSION_BUILD')) {
|
||||||
$this->markTestSkipped('Skip test on Windows');
|
$this->markTestSkipped('Skip test on Windows');
|
||||||
}
|
}
|
||||||
$this->testDir = sys_get_temp_dir().'/composer-xz-test-vendor';
|
$this->testDir = $this->getUniqueTmpDirectory();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function tearDown()
|
public function tearDown()
|
||||||
|
@ -67,7 +68,7 @@ class XzDownloaderTest extends \PHPUnit_Framework_TestCase
|
||||||
$downloader = new XzDownloader($io, $config, null, null, null, new RemoteFilesystem($io));
|
$downloader = new XzDownloader($io, $config, null, null, null, new RemoteFilesystem($io));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$downloader->download($packageMock, sys_get_temp_dir().'/composer-xz-test');
|
$downloader->download($packageMock, $this->getUniqueTmpDirectory());
|
||||||
$this->fail('Download of invalid tarball should throw an exception');
|
$this->fail('Download of invalid tarball should throw an exception');
|
||||||
} catch (\RuntimeException $e) {
|
} catch (\RuntimeException $e) {
|
||||||
$this->assertContains('File format not recognized', $e->getMessage());
|
$this->assertContains('File format not recognized', $e->getMessage());
|
||||||
|
|
|
@ -13,9 +13,10 @@
|
||||||
namespace Composer\Test\Downloader;
|
namespace Composer\Test\Downloader;
|
||||||
|
|
||||||
use Composer\Downloader\ZipDownloader;
|
use Composer\Downloader\ZipDownloader;
|
||||||
|
use Composer\TestCase;
|
||||||
use Composer\Util\Filesystem;
|
use Composer\Util\Filesystem;
|
||||||
|
|
||||||
class ZipDownloaderTest extends \PHPUnit_Framework_TestCase
|
class ZipDownloaderTest extends TestCase
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -28,7 +29,8 @@ class ZipDownloaderTest extends \PHPUnit_Framework_TestCase
|
||||||
if (!class_exists('ZipArchive')) {
|
if (!class_exists('ZipArchive')) {
|
||||||
$this->markTestSkipped('zip extension missing');
|
$this->markTestSkipped('zip extension missing');
|
||||||
}
|
}
|
||||||
$this->testDir = sys_get_temp_dir().'/composer-zip-test-vendor';
|
|
||||||
|
$this->testDir = $this->getUniqueTmpDirectory();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function tearDown()
|
public function tearDown()
|
||||||
|
|
|
@ -22,6 +22,7 @@ class LibraryInstallerTest extends TestCase
|
||||||
{
|
{
|
||||||
protected $composer;
|
protected $composer;
|
||||||
protected $config;
|
protected $config;
|
||||||
|
protected $rootDir;
|
||||||
protected $vendorDir;
|
protected $vendorDir;
|
||||||
protected $binDir;
|
protected $binDir;
|
||||||
protected $dm;
|
protected $dm;
|
||||||
|
@ -37,10 +38,11 @@ class LibraryInstallerTest extends TestCase
|
||||||
$this->config = new Config();
|
$this->config = new Config();
|
||||||
$this->composer->setConfig($this->config);
|
$this->composer->setConfig($this->config);
|
||||||
|
|
||||||
$this->vendorDir = realpath(sys_get_temp_dir()).DIRECTORY_SEPARATOR.'composer-test-vendor';
|
$this->rootDir = $this->getUniqueTmpDirectory();
|
||||||
|
$this->vendorDir = $this->rootDir.DIRECTORY_SEPARATOR.'vendor';
|
||||||
$this->ensureDirectoryExistsAndClear($this->vendorDir);
|
$this->ensureDirectoryExistsAndClear($this->vendorDir);
|
||||||
|
|
||||||
$this->binDir = realpath(sys_get_temp_dir()).DIRECTORY_SEPARATOR.'composer-test-bin';
|
$this->binDir = $this->rootDir.DIRECTORY_SEPARATOR.'bin';
|
||||||
$this->ensureDirectoryExistsAndClear($this->binDir);
|
$this->ensureDirectoryExistsAndClear($this->binDir);
|
||||||
|
|
||||||
$this->config->merge(array(
|
$this->config->merge(array(
|
||||||
|
@ -61,8 +63,7 @@ class LibraryInstallerTest extends TestCase
|
||||||
|
|
||||||
protected function tearDown()
|
protected function tearDown()
|
||||||
{
|
{
|
||||||
$this->fs->removeDirectory($this->vendorDir);
|
$this->fs->removeDirectory($this->rootDir);
|
||||||
$this->fs->removeDirectory($this->binDir);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testInstallerCreationShouldNotCreateVendorDirectory()
|
public function testInstallerCreationShouldNotCreateVendorDirectory()
|
||||||
|
|
|
@ -13,11 +13,12 @@
|
||||||
namespace Composer\Test\Package\Archiver;
|
namespace Composer\Test\Package\Archiver;
|
||||||
|
|
||||||
use Composer\Package\Archiver\ArchivableFilesFinder;
|
use Composer\Package\Archiver\ArchivableFilesFinder;
|
||||||
|
use Composer\TestCase;
|
||||||
use Composer\Util\Filesystem;
|
use Composer\Util\Filesystem;
|
||||||
use Symfony\Component\Process\Process;
|
use Symfony\Component\Process\Process;
|
||||||
use Symfony\Component\Process\ExecutableFinder;
|
use Symfony\Component\Process\ExecutableFinder;
|
||||||
|
|
||||||
class ArchivableFilesFinderTest extends \PHPUnit_Framework_TestCase
|
class ArchivableFilesFinderTest extends TestCase
|
||||||
{
|
{
|
||||||
protected $sources;
|
protected $sources;
|
||||||
protected $finder;
|
protected $finder;
|
||||||
|
@ -29,7 +30,7 @@ class ArchivableFilesFinderTest extends \PHPUnit_Framework_TestCase
|
||||||
$this->fs = $fs;
|
$this->fs = $fs;
|
||||||
|
|
||||||
$this->sources = $fs->normalizePath(
|
$this->sources = $fs->normalizePath(
|
||||||
realpath(sys_get_temp_dir()).'/composer_archiver_test'.uniqid(mt_rand(), true)
|
$this->getUniqueTmpDirectory()
|
||||||
);
|
);
|
||||||
|
|
||||||
$fileTree = array(
|
$fileTree = array(
|
||||||
|
|
|
@ -12,11 +12,12 @@
|
||||||
|
|
||||||
namespace Composer\Test\Package\Archiver;
|
namespace Composer\Test\Package\Archiver;
|
||||||
|
|
||||||
|
use Composer\TestCase;
|
||||||
use Composer\Util\Filesystem;
|
use Composer\Util\Filesystem;
|
||||||
use Composer\Util\ProcessExecutor;
|
use Composer\Util\ProcessExecutor;
|
||||||
use Composer\Package\Package;
|
use Composer\Package\Package;
|
||||||
|
|
||||||
abstract class ArchiverTest extends \PHPUnit_Framework_TestCase
|
abstract class ArchiverTest extends TestCase
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @var \Composer\Util\Filesystem
|
* @var \Composer\Util\Filesystem
|
||||||
|
@ -37,8 +38,7 @@ abstract class ArchiverTest extends \PHPUnit_Framework_TestCase
|
||||||
{
|
{
|
||||||
$this->filesystem = new Filesystem();
|
$this->filesystem = new Filesystem();
|
||||||
$this->process = new ProcessExecutor();
|
$this->process = new ProcessExecutor();
|
||||||
$this->testDir = sys_get_temp_dir().'/composer_archiver_test_'.mt_rand();
|
$this->testDir = $this->getUniqueTmpDirectory();
|
||||||
$this->filesystem->ensureDirectoryExists($this->testDir);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function tearDown()
|
public function tearDown()
|
||||||
|
|
|
@ -21,14 +21,14 @@ class PharArchiverTest extends ArchiverTest
|
||||||
// Set up repository
|
// Set up repository
|
||||||
$this->setupDummyRepo();
|
$this->setupDummyRepo();
|
||||||
$package = $this->setupPackage();
|
$package = $this->setupPackage();
|
||||||
$target = sys_get_temp_dir().'/composer_archiver_test.tar';
|
$target = $this->getUniqueTmpDirectory().'/composer_archiver_test.tar';
|
||||||
|
|
||||||
// Test archive
|
// Test archive
|
||||||
$archiver = new PharArchiver();
|
$archiver = new PharArchiver();
|
||||||
$archiver->archive($package->getSourceUrl(), $target, 'tar', array('foo/bar', 'baz', '!/foo/bar/baz'));
|
$archiver->archive($package->getSourceUrl(), $target, 'tar', array('foo/bar', 'baz', '!/foo/bar/baz'));
|
||||||
$this->assertFileExists($target);
|
$this->assertFileExists($target);
|
||||||
|
|
||||||
unlink($target);
|
$this->filesystem->removeDirectory(dirname($target));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testZipArchive()
|
public function testZipArchive()
|
||||||
|
@ -36,14 +36,14 @@ class PharArchiverTest extends ArchiverTest
|
||||||
// Set up repository
|
// Set up repository
|
||||||
$this->setupDummyRepo();
|
$this->setupDummyRepo();
|
||||||
$package = $this->setupPackage();
|
$package = $this->setupPackage();
|
||||||
$target = sys_get_temp_dir().'/composer_archiver_test.zip';
|
$target = $this->getUniqueTmpDirectory().'/composer_archiver_test.zip';
|
||||||
|
|
||||||
// Test archive
|
// Test archive
|
||||||
$archiver = new PharArchiver();
|
$archiver = new PharArchiver();
|
||||||
$archiver->archive($package->getSourceUrl(), $target, 'zip');
|
$archiver->archive($package->getSourceUrl(), $target, 'zip');
|
||||||
$this->assertFileExists($target);
|
$this->assertFileExists($target);
|
||||||
|
|
||||||
unlink($target);
|
$this->filesystem->removeDirectory(dirname($target));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -69,7 +69,7 @@ class PluginInstallerTest extends TestCase
|
||||||
{
|
{
|
||||||
$loader = new JsonLoader(new ArrayLoader());
|
$loader = new JsonLoader(new ArrayLoader());
|
||||||
$this->packages = array();
|
$this->packages = array();
|
||||||
$this->directory = sys_get_temp_dir() . '/' . uniqid();
|
$this->directory = $this->getUniqueTmpDirectory();
|
||||||
for ($i = 1; $i <= 7; $i++) {
|
for ($i = 1; $i <= 7; $i++) {
|
||||||
$filename = '/Fixtures/plugin-v'.$i.'/composer.json';
|
$filename = '/Fixtures/plugin-v'.$i.'/composer.json';
|
||||||
mkdir(dirname($this->directory . $filename), 0777, true);
|
mkdir(dirname($this->directory . $filename), 0777, true);
|
||||||
|
|
|
@ -42,7 +42,7 @@ class FilesystemRepositoryTest extends TestCase
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @expectedException Composer\Repository\InvalidRepositoryException
|
* @expectedException \Composer\Repository\InvalidRepositoryException
|
||||||
*/
|
*/
|
||||||
public function testCorruptedRepositoryFile()
|
public function testCorruptedRepositoryFile()
|
||||||
{
|
{
|
||||||
|
|
|
@ -14,19 +14,22 @@ namespace Composer\Test\Repository\Vcs;
|
||||||
|
|
||||||
use Composer\Downloader\TransportException;
|
use Composer\Downloader\TransportException;
|
||||||
use Composer\Repository\Vcs\GitHubDriver;
|
use Composer\Repository\Vcs\GitHubDriver;
|
||||||
|
use Composer\TestCase;
|
||||||
use Composer\Util\Filesystem;
|
use Composer\Util\Filesystem;
|
||||||
use Composer\Config;
|
use Composer\Config;
|
||||||
|
|
||||||
class GitHubDriverTest extends \PHPUnit_Framework_TestCase
|
class GitHubDriverTest extends TestCase
|
||||||
{
|
{
|
||||||
|
private $home;
|
||||||
private $config;
|
private $config;
|
||||||
|
|
||||||
public function setUp()
|
public function setUp()
|
||||||
{
|
{
|
||||||
|
$this->home = $this->getUniqueTmpDirectory();
|
||||||
$this->config = new Config();
|
$this->config = new Config();
|
||||||
$this->config->merge(array(
|
$this->config->merge(array(
|
||||||
'config' => array(
|
'config' => array(
|
||||||
'home' => sys_get_temp_dir() . '/composer-test',
|
'home' => $this->home,
|
||||||
),
|
),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
@ -34,7 +37,7 @@ class GitHubDriverTest extends \PHPUnit_Framework_TestCase
|
||||||
public function tearDown()
|
public function tearDown()
|
||||||
{
|
{
|
||||||
$fs = new Filesystem;
|
$fs = new Filesystem;
|
||||||
$fs->removeDirectory(sys_get_temp_dir() . '/composer-test');
|
$fs->removeDirectory($this->home);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testPrivateRepository()
|
public function testPrivateRepository()
|
||||||
|
|
|
@ -14,29 +14,42 @@ namespace Composer\Test\Repository\Vcs;
|
||||||
|
|
||||||
use Composer\Repository\Vcs\GitLabDriver;
|
use Composer\Repository\Vcs\GitLabDriver;
|
||||||
use Composer\Config;
|
use Composer\Config;
|
||||||
|
use Composer\TestCase;
|
||||||
|
use Composer\Util\Filesystem;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Jérôme Tamarelle <jerome@tamarelle.net>
|
* @author Jérôme Tamarelle <jerome@tamarelle.net>
|
||||||
*/
|
*/
|
||||||
class GitLabDriverTest extends \PHPUnit_Framework_TestCase
|
class GitLabDriverTest extends TestCase
|
||||||
{
|
{
|
||||||
|
private $home;
|
||||||
|
private $config;
|
||||||
|
private $io;
|
||||||
|
private $process;
|
||||||
|
private $remoteFilesystem;
|
||||||
|
|
||||||
public function setUp()
|
public function setUp()
|
||||||
{
|
{
|
||||||
|
$this->home = $this->getUniqueTmpDirectory();
|
||||||
$this->config = new Config();
|
$this->config = new Config();
|
||||||
$this->config->merge(array(
|
$this->config->merge(array(
|
||||||
'config' => array(
|
'config' => array(
|
||||||
'home' => sys_get_temp_dir().'/composer-test',
|
'home' => $this->home,
|
||||||
'gitlab-domains' => array('mycompany.com/gitlab', 'gitlab.com')
|
'gitlab-domains' => array('mycompany.com/gitlab', 'gitlab.com')
|
||||||
),
|
),
|
||||||
));
|
));
|
||||||
|
|
||||||
$this->io = $this->prophesize('Composer\IO\IOInterface');
|
$this->io = $this->prophesize('Composer\IO\IOInterface');
|
||||||
|
|
||||||
$this->process = $this->prophesize('Composer\Util\ProcessExecutor');
|
$this->process = $this->prophesize('Composer\Util\ProcessExecutor');
|
||||||
|
|
||||||
$this->remoteFilesystem = $this->prophesize('Composer\Util\RemoteFilesystem');
|
$this->remoteFilesystem = $this->prophesize('Composer\Util\RemoteFilesystem');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function tearDown()
|
||||||
|
{
|
||||||
|
$fs = new Filesystem();
|
||||||
|
$fs->removeDirectory($this->home);
|
||||||
|
}
|
||||||
|
|
||||||
public function getInitializeUrls()
|
public function getInitializeUrls()
|
||||||
{
|
{
|
||||||
return array(
|
return array(
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
namespace Composer\Test\Repository\Vcs;
|
namespace Composer\Test\Repository\Vcs;
|
||||||
|
|
||||||
use Composer\Repository\Vcs\PerforceDriver;
|
use Composer\Repository\Vcs\PerforceDriver;
|
||||||
|
use Composer\TestCase;
|
||||||
use Composer\Util\Filesystem;
|
use Composer\Util\Filesystem;
|
||||||
use Composer\Config;
|
use Composer\Config;
|
||||||
use Composer\Util\Perforce;
|
use Composer\Util\Perforce;
|
||||||
|
@ -20,7 +21,7 @@ use Composer\Util\Perforce;
|
||||||
/**
|
/**
|
||||||
* @author Matt Whittom <Matt.Whittom@veteransunited.com>
|
* @author Matt Whittom <Matt.Whittom@veteransunited.com>
|
||||||
*/
|
*/
|
||||||
class PerforceDriverTest extends \PHPUnit_Framework_TestCase
|
class PerforceDriverTest extends TestCase
|
||||||
{
|
{
|
||||||
protected $config;
|
protected $config;
|
||||||
protected $io;
|
protected $io;
|
||||||
|
@ -29,6 +30,7 @@ class PerforceDriverTest extends \PHPUnit_Framework_TestCase
|
||||||
protected $testPath;
|
protected $testPath;
|
||||||
protected $driver;
|
protected $driver;
|
||||||
protected $repoConfig;
|
protected $repoConfig;
|
||||||
|
protected $perforce;
|
||||||
|
|
||||||
const TEST_URL = 'TEST_PERFORCE_URL';
|
const TEST_URL = 'TEST_PERFORCE_URL';
|
||||||
const TEST_DEPOT = 'TEST_DEPOT_CONFIG';
|
const TEST_DEPOT = 'TEST_DEPOT_CONFIG';
|
||||||
|
@ -36,7 +38,7 @@ class PerforceDriverTest extends \PHPUnit_Framework_TestCase
|
||||||
|
|
||||||
protected function setUp()
|
protected function setUp()
|
||||||
{
|
{
|
||||||
$this->testPath = sys_get_temp_dir() . '/composer-test';
|
$this->testPath = $this->getUniqueTmpDirectory();
|
||||||
$this->config = $this->getTestConfig($this->testPath);
|
$this->config = $this->getTestConfig($this->testPath);
|
||||||
$this->repoConfig = $this->getTestRepoConfig();
|
$this->repoConfig = $this->getTestRepoConfig();
|
||||||
$this->io = $this->getMockIOInterface();
|
$this->io = $this->getMockIOInterface();
|
||||||
|
|
|
@ -14,9 +14,31 @@ namespace Composer\Test\Repository\Vcs;
|
||||||
|
|
||||||
use Composer\Repository\Vcs\SvnDriver;
|
use Composer\Repository\Vcs\SvnDriver;
|
||||||
use Composer\Config;
|
use Composer\Config;
|
||||||
|
use Composer\TestCase;
|
||||||
|
use Composer\Util\Filesystem;
|
||||||
|
|
||||||
class SvnDriverTest extends \PHPUnit_Framework_TestCase
|
class SvnDriverTest extends TestCase
|
||||||
{
|
{
|
||||||
|
protected $home;
|
||||||
|
protected $config;
|
||||||
|
|
||||||
|
public function setUp()
|
||||||
|
{
|
||||||
|
$this->home = $this->getUniqueTmpDirectory();
|
||||||
|
$this->config = new Config();
|
||||||
|
$this->config->merge(array(
|
||||||
|
'config' => array(
|
||||||
|
'home' => $this->home,
|
||||||
|
),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function tearDown()
|
||||||
|
{
|
||||||
|
$fs = new Filesystem();
|
||||||
|
$fs->removeDirectory($this->home);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @expectedException RuntimeException
|
* @expectedException RuntimeException
|
||||||
*/
|
*/
|
||||||
|
@ -39,17 +61,11 @@ class SvnDriverTest extends \PHPUnit_Framework_TestCase
|
||||||
->method('execute')
|
->method('execute')
|
||||||
->will($this->returnValue(0));
|
->will($this->returnValue(0));
|
||||||
|
|
||||||
$config = new Config();
|
|
||||||
$config->merge(array(
|
|
||||||
'config' => array(
|
|
||||||
'home' => sys_get_temp_dir() . '/composer-test',
|
|
||||||
),
|
|
||||||
));
|
|
||||||
$repoConfig = array(
|
$repoConfig = array(
|
||||||
'url' => 'http://till:secret@corp.svn.local/repo',
|
'url' => 'http://till:secret@corp.svn.local/repo',
|
||||||
);
|
);
|
||||||
|
|
||||||
$svn = new SvnDriver($repoConfig, $console, $config, $process);
|
$svn = new SvnDriver($repoConfig, $console, $this->config, $process);
|
||||||
$svn->initialize();
|
$svn->initialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
|
|
||||||
namespace Composer\Test\Repository;
|
namespace Composer\Test\Repository;
|
||||||
|
|
||||||
|
use Composer\TestCase;
|
||||||
use Symfony\Component\Process\ExecutableFinder;
|
use Symfony\Component\Process\ExecutableFinder;
|
||||||
use Composer\Package\Dumper\ArrayDumper;
|
use Composer\Package\Dumper\ArrayDumper;
|
||||||
use Composer\Repository\VcsRepository;
|
use Composer\Repository\VcsRepository;
|
||||||
|
@ -23,7 +24,7 @@ use Composer\Config;
|
||||||
/**
|
/**
|
||||||
* @group slow
|
* @group slow
|
||||||
*/
|
*/
|
||||||
class VcsRepositoryTest extends \PHPUnit_Framework_TestCase
|
class VcsRepositoryTest extends TestCase
|
||||||
{
|
{
|
||||||
private static $composerHome;
|
private static $composerHome;
|
||||||
private static $gitRepo;
|
private static $gitRepo;
|
||||||
|
@ -32,8 +33,8 @@ class VcsRepositoryTest extends \PHPUnit_Framework_TestCase
|
||||||
protected function initialize()
|
protected function initialize()
|
||||||
{
|
{
|
||||||
$oldCwd = getcwd();
|
$oldCwd = getcwd();
|
||||||
self::$composerHome = sys_get_temp_dir() . '/composer-home-'.mt_rand().'/';
|
self::$composerHome = $this->getUniqueTmpDirectory();
|
||||||
self::$gitRepo = sys_get_temp_dir() . '/composer-git-'.mt_rand().'/';
|
self::$gitRepo = $this->getUniqueTmpDirectory();
|
||||||
|
|
||||||
$locator = new ExecutableFinder();
|
$locator = new ExecutableFinder();
|
||||||
if (!$locator->find('git')) {
|
if (!$locator->find('git')) {
|
||||||
|
|
|
@ -44,8 +44,8 @@ class FilesystemTest extends TestCase
|
||||||
public function setUp()
|
public function setUp()
|
||||||
{
|
{
|
||||||
$this->fs = new Filesystem;
|
$this->fs = new Filesystem;
|
||||||
$this->workingDir = sys_get_temp_dir() . '/composer_testdir';
|
$this->workingDir = $this->getUniqueTmpDirectory();
|
||||||
$this->testFile = sys_get_temp_dir() . '/composer_test_file';
|
$this->testFile = $this->getUniqueTmpDirectory() . '/composer_test_file';
|
||||||
}
|
}
|
||||||
|
|
||||||
public function tearDown()
|
public function tearDown()
|
||||||
|
@ -54,7 +54,7 @@ class FilesystemTest extends TestCase
|
||||||
$this->fs->removeDirectory($this->workingDir);
|
$this->fs->removeDirectory($this->workingDir);
|
||||||
}
|
}
|
||||||
if (is_file($this->testFile)) {
|
if (is_file($this->testFile)) {
|
||||||
$this->fs->remove($this->testFile);
|
$this->fs->removeDirectory(dirname($this->testFile));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -56,12 +56,29 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase
|
||||||
return new AliasPackage($package, $normVersion, $version);
|
return new AliasPackage($package, $normVersion, $version);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function ensureDirectoryExistsAndClear($directory)
|
protected static function getUniqueTmpDirectory()
|
||||||
|
{
|
||||||
|
$attempts = 5;
|
||||||
|
$root = sys_get_temp_dir();
|
||||||
|
|
||||||
|
do {
|
||||||
|
$unique = $root . DIRECTORY_SEPARATOR . uniqid('composer-test-');
|
||||||
|
if (!file_exists($unique) && mkdir($unique, 0777)) {
|
||||||
|
return realpath($unique);
|
||||||
|
}
|
||||||
|
} while (--$attempts);
|
||||||
|
|
||||||
|
throw new \RuntimeException('Failed to create a unique temporary directory.');
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static function ensureDirectoryExistsAndClear($directory)
|
||||||
{
|
{
|
||||||
$fs = new Filesystem();
|
$fs = new Filesystem();
|
||||||
|
|
||||||
if (is_dir($directory)) {
|
if (is_dir($directory)) {
|
||||||
$fs->removeDirectory($directory);
|
$fs->removeDirectory($directory);
|
||||||
}
|
}
|
||||||
|
|
||||||
mkdir($directory, 0777, true);
|
mkdir($directory, 0777, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue