init without trunk
This commit is contained in:
parent
ed24ac4994
commit
bb809e7233
14652 changed files with 177862 additions and 94817 deletions
179
vendor/incenteev/composer-parameter-handler/Tests/ProcessorTest.php
vendored
Normal file
179
vendor/incenteev/composer-parameter-handler/Tests/ProcessorTest.php
vendored
Normal file
|
|
@ -0,0 +1,179 @@
|
|||
<?php
|
||||
|
||||
namespace Incenteev\ParameterHandler\Tests;
|
||||
|
||||
use Incenteev\ParameterHandler\Processor;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Filesystem\Filesystem;
|
||||
use Symfony\Component\Yaml\Yaml;
|
||||
|
||||
class ProcessorTest extends TestCase
|
||||
{
|
||||
private $io;
|
||||
private $environmentBackup = array();
|
||||
|
||||
/**
|
||||
* @var Processor
|
||||
*/
|
||||
private $processor;
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$this->io = $this->prophesize('Composer\IO\IOInterface');
|
||||
$this->processor = new Processor($this->io->reveal());
|
||||
}
|
||||
|
||||
protected function tearDown()
|
||||
{
|
||||
parent::tearDown();
|
||||
|
||||
foreach ($this->environmentBackup as $var => $value) {
|
||||
if (false === $value) {
|
||||
putenv($var);
|
||||
} else {
|
||||
putenv($var.'='.$value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider provideInvalidConfiguration
|
||||
*/
|
||||
public function testInvalidConfiguration(array $config, $exceptionMessage)
|
||||
{
|
||||
chdir(__DIR__);
|
||||
|
||||
if (method_exists($this, 'expectException')) {
|
||||
$this->expectException('InvalidArgumentException');
|
||||
$this->expectExceptionMessage($exceptionMessage);
|
||||
} else {
|
||||
$this->setExpectedException('InvalidArgumentException', $exceptionMessage);
|
||||
}
|
||||
|
||||
$this->processor->processFile($config);
|
||||
}
|
||||
|
||||
public function provideInvalidConfiguration()
|
||||
{
|
||||
return array(
|
||||
'no file' => array(
|
||||
array(),
|
||||
'The extra.incenteev-parameters.file setting is required to use this script handler.',
|
||||
),
|
||||
'missing default dist file' => array(
|
||||
array(
|
||||
'file' => 'fixtures/invalid/missing.yml',
|
||||
),
|
||||
'The dist file "fixtures/invalid/missing.yml.dist" does not exist. Check your dist-file config or create it.',
|
||||
),
|
||||
'missing custom dist file' => array(
|
||||
array(
|
||||
'file' => 'fixtures/invalid/missing.yml',
|
||||
'dist-file' => 'fixtures/invalid/non-existent.dist.yml',
|
||||
),
|
||||
'The dist file "fixtures/invalid/non-existent.dist.yml" does not exist. Check your dist-file config or create it.',
|
||||
),
|
||||
'missing top level key in dist file' => array(
|
||||
array(
|
||||
'file' => 'fixtures/invalid/missing_top_level.yml',
|
||||
),
|
||||
'The top-level key parameters is missing.',
|
||||
),
|
||||
'invalid values in the existing file' => array(
|
||||
array(
|
||||
'file' => 'fixtures/invalid/invalid_existing_values.yml',
|
||||
),
|
||||
'The existing "fixtures/invalid/invalid_existing_values.yml" file does not contain an array',
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider provideParameterHandlingTestCases
|
||||
*/
|
||||
public function testParameterHandling($testCaseName)
|
||||
{
|
||||
$dataDir = __DIR__.'/fixtures/testcases/'.$testCaseName;
|
||||
|
||||
$testCase = array_replace_recursive(
|
||||
array(
|
||||
'title' => 'unknown test',
|
||||
'config' => array(
|
||||
'file' => 'parameters.yml',
|
||||
),
|
||||
'dist-file' => 'parameters.yml.dist',
|
||||
'environment' => array(),
|
||||
'interactive' => false,
|
||||
),
|
||||
(array) Yaml::parse(file_get_contents($dataDir.'/setup.yml'))
|
||||
);
|
||||
|
||||
$workingDir = sys_get_temp_dir() . '/incenteev_parameter_handler';
|
||||
$exists = $this->initializeTestCase($testCase, $dataDir, $workingDir);
|
||||
|
||||
$message = sprintf('<info>%s the "%s" file</info>', $exists ? 'Updating' : 'Creating', $testCase['config']['file']);
|
||||
$this->io->write($message)->shouldBeCalled();
|
||||
|
||||
$this->setInteractionExpectations($testCase);
|
||||
|
||||
$this->processor->processFile($testCase['config']);
|
||||
|
||||
$this->assertFileEquals($dataDir.'/expected.yml', $workingDir.'/'.$testCase['config']['file'], $testCase['title']);
|
||||
}
|
||||
|
||||
private function initializeTestCase(array $testCase, $dataDir, $workingDir)
|
||||
{
|
||||
$fs = new Filesystem();
|
||||
|
||||
if (is_dir($workingDir)) {
|
||||
$fs->remove($workingDir);
|
||||
}
|
||||
|
||||
$fs->copy($dataDir.'/dist.yml', $workingDir.'/'. $testCase['dist-file']);
|
||||
|
||||
if ($exists = file_exists($dataDir.'/existing.yml')) {
|
||||
$fs->copy($dataDir.'/existing.yml', $workingDir.'/'.$testCase['config']['file']);
|
||||
}
|
||||
|
||||
foreach ($testCase['environment'] as $var => $value) {
|
||||
$this->environmentBackup[$var] = getenv($var);
|
||||
putenv($var.'='.$value);
|
||||
};
|
||||
|
||||
chdir($workingDir);
|
||||
|
||||
return $exists;
|
||||
}
|
||||
|
||||
private function setInteractionExpectations(array $testCase)
|
||||
{
|
||||
$this->io->isInteractive()->willReturn($testCase['interactive']);
|
||||
|
||||
if (!$testCase['interactive']) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!empty($testCase['requested_params'])) {
|
||||
$this->io->write('<comment>Some parameters are missing. Please provide them.</comment>')->shouldBeCalledTimes(1);
|
||||
}
|
||||
|
||||
foreach ($testCase['requested_params'] as $param => $settings) {
|
||||
$this->io->ask(sprintf('<question>%s</question> (<comment>%s</comment>): ', $param, $settings['default']), $settings['default'])
|
||||
->willReturn($settings['input'])
|
||||
->shouldBeCalled();
|
||||
}
|
||||
}
|
||||
|
||||
public function provideParameterHandlingTestCases()
|
||||
{
|
||||
$tests = array();
|
||||
|
||||
foreach (glob(__DIR__.'/fixtures/testcases/*/') as $folder) {
|
||||
$tests[] = array(basename($folder));
|
||||
}
|
||||
|
||||
return $tests;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue