suyuan/vendor/clagiordano/weblibs-configmanager/tests/FileConverterTest.php

149 lines
5.1 KiB
PHP

<?php
namespace clagiordano\weblibs\configmanager\tests;
use clagiordano\weblibs\configmanager\ArrayConfigManager;
use clagiordano\weblibs\configmanager\FileConverter;
use clagiordano\weblibs\configmanager\YamlConfigManager;
use PHPUnit\Framework\TestCase;
/**
* Class FileConverterTest
* @package clagiordano\weblibs\configmanager\tests
*/
class FileConverterTest extends TestCase
{
/**
* @return array
*/
public function configDataProvider()
{
return [
[
__DIR__ . '/../testsdata/sample_config_data.php',
'\clagiordano\weblibs\configmanager\ArrayConfigManager',
__DIR__ . '/../testsdata/sample_config_data.php.converted.yml',
'\clagiordano\weblibs\configmanager\YamlConfigManager',
],
[
__DIR__ . '/../testsdata/sample_config_data.php',
'\clagiordano\weblibs\configmanager\ArrayConfigManager',
__DIR__ . '/../testsdata/sample_config_data.php.converted.json',
'\clagiordano\weblibs\configmanager\JsonConfigManager',
],
[
__DIR__ . '/../testsdata/sample_config_data.yml',
'\clagiordano\weblibs\configmanager\YamlConfigManager',
__DIR__ . '/../testsdata/sample_config_data.yml.converted.json',
'\clagiordano\weblibs\configmanager\JsonConfigManager',
],
[
__DIR__ . '/../testsdata/sample_config_data.yml',
'\clagiordano\weblibs\configmanager\YamlConfigManager',
__DIR__ . '/../testsdata/sample_config_data.yml.converted.php',
'\clagiordano\weblibs\configmanager\ArrayConfigManager',
],
[
__DIR__ . '/../testsdata/sample_config_data.json',
'\clagiordano\weblibs\configmanager\JsonConfigManager',
__DIR__ . '/../testsdata/sample_config_data.json.converted.yml',
'\clagiordano\weblibs\configmanager\YamlConfigManager',
],
[
__DIR__ . '/../testsdata/sample_config_data.json',
'\clagiordano\weblibs\configmanager\JsonConfigManager',
__DIR__ . '/../testsdata/sample_config_data.json.converted.php',
'\clagiordano\weblibs\configmanager\ArrayConfigManager',
],
];
}
/**
* @test
* @dataProvider configDataProvider
* @param mixed $sourceConfig
* @param mixed $sourceInstance
* @param mixed $targetConfig
* @param mixed $targetInstance
*/
public function canConvertOneFormatToAnother($sourceConfig, $sourceInstance, $targetConfig, $targetInstance)
{
if (file_exists($targetConfig)) {
/**
* Drop target file if already existing
*/
unlink($targetConfig);
}
$source = new $sourceInstance($sourceConfig);
self::assertInstanceOf($sourceInstance, $source);
$target = new $targetInstance($targetConfig);
self::assertInstanceOf($targetInstance, $target);
$converted = FileConverter::convert($source, $target);
self::assertInstanceOf($targetInstance, $converted);
$converted = FileConverter::convertAndSave($source, $target);
self::assertInstanceOf($targetInstance, $converted);
self::assertFileExists($targetConfig);
}
/**
* @test
*/
public function canSuccessConversionOnInvalidSource()
{
$source = new ArrayConfigManager();
$target = new YamlConfigManager(__DIR__ . '/../testsdata/sample_config_data.empty.converted.yml');
$converted = FileConverter::convert($source, $target);
self::assertInstanceOf('\clagiordano\weblibs\configmanager\YamlConfigManager', $converted);
self::assertSame($target, $converted);
}
/**
* @test
*/
public function canSuccessConversionAndSaveOnInvalidSource()
{
$source = new ArrayConfigManager();
$target = new YamlConfigManager(__DIR__ . '/../testsdata/sample_config_data.empty.converted.yml');
$converted = FileConverter::convertAndSave($source, $target);
self::assertInstanceOf('\clagiordano\weblibs\configmanager\YamlConfigManager', $converted);
self::assertSame($target, $converted);
}
/**
* @test
*/
public function cannotFailConversionOnInvalidTarget()
{
$source = new ArrayConfigManager(__DIR__ . '/../testsdata/sample_config_data.php');
$target = new YamlConfigManager();
$converted = FileConverter::convert($source, $target);
self::assertInstanceOf('\clagiordano\weblibs\configmanager\YamlConfigManager', $converted);
}
/**
* @test
*/
public function canFailConversionAndSaveOnInvalidTarget()
{
self::setExpectedException('\RuntimeException');
$source = new ArrayConfigManager(__DIR__ . '/../testsdata/sample_config_data.php');
$target = new YamlConfigManager();
$converted = FileConverter::convertAndSave($source, $target);
self::assertInstanceOf('\clagiordano\weblibs\configmanager\YamlConfigManager', $converted);
}
}