92 lines
3.1 KiB
PHP
92 lines
3.1 KiB
PHP
<?php
|
|
namespace Consolidation\Config\Util;
|
|
|
|
use Consolidation\Config\Config;
|
|
|
|
class ConfigGroupTest extends \PHPUnit_Framework_TestCase
|
|
{
|
|
protected $config;
|
|
|
|
protected function setUp()
|
|
{
|
|
$data = [
|
|
// Define some configuration settings for the options for
|
|
// the commands my:foo and my:bar.
|
|
'command' => [
|
|
'my' => [
|
|
// commands.my.options.* apply to all my:* commands.
|
|
'options' => [
|
|
'path' => '/etc/common',
|
|
'priority' => 'normal',
|
|
],
|
|
'foo' => [
|
|
// commands.my.foo.options.* apply only to the my:foo command.
|
|
'options' => [
|
|
'name' => 'baz',
|
|
],
|
|
],
|
|
'bar' => [
|
|
// Similarly, commands.my.bar.options is for the my:bar command.
|
|
'options' => [
|
|
'priority' => 'high',
|
|
],
|
|
],
|
|
],
|
|
],
|
|
// Define some configuration settings for the configuration
|
|
// of some task \My\Tasks\Operations\Frobulate.
|
|
'task' => [
|
|
'Operations' => [
|
|
// task.Operations.settings apply to all tasks in
|
|
// any *.Tass.Operations namespace.
|
|
'settings' => [
|
|
'dir' => '/base/dir',
|
|
],
|
|
'Frobulate' => [
|
|
// task.Operations.Frobulate.settings applies only
|
|
// the Frobulate task.
|
|
'settings' => [
|
|
'object' => 'fire truck',
|
|
],
|
|
],
|
|
],
|
|
],
|
|
];
|
|
|
|
$this->config = new Config($data);
|
|
}
|
|
|
|
public function testDotNotation()
|
|
{
|
|
// Test the test
|
|
$this->assertEquals('baz', $this->config->get('command.my.foo.options.name'));
|
|
}
|
|
|
|
public function testFallback()
|
|
{
|
|
$fooFallback = new ConfigFallback($this->config, 'my.foo', 'command.', '.options.');
|
|
$barFallback = new ConfigFallback($this->config, 'my.bar', 'command.', '.options.');
|
|
|
|
$this->assertEquals(null, $barFallback->get('name'));
|
|
$this->assertEquals('baz', $fooFallback->get('name'));
|
|
$this->assertEquals('high', $barFallback->get('priority'));
|
|
|
|
$this->assertEquals('normal', $fooFallback->get('priority'));
|
|
$this->assertEquals('/etc/common', $barFallback->get('path'));
|
|
$this->assertEquals('/etc/common', $fooFallback->get('path'));
|
|
}
|
|
|
|
public function testMerge()
|
|
{
|
|
$frobulateMerge = new ConfigMerge($this->config, 'Operations.Frobulate', 'task.');
|
|
|
|
$settings = $frobulateMerge->get('settings');
|
|
$this->assertEquals('fire truck', $settings['object']);
|
|
$this->assertEquals('/base/dir', $settings['dir']);
|
|
$keys = array_keys($settings);
|
|
sort($keys);
|
|
$this->assertEquals('dir,object', implode(',', $keys));
|
|
}
|
|
}
|
|
|