--- /dev/null
+<?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));
+ }
+}
+