+++ /dev/null
-<?php
-namespace Consolidation\Config;
-
-use Consolidation\Config\Loader\ConfigProcessor;
-use Consolidation\Config\Loader\YamlConfigLoader;
-
-class ConfigTest extends \PHPUnit_Framework_TestCase
-{
- public function testSetters()
- {
- // Pointless tests just to ensure everything is covered.
- $config = new Config();
- $config->set('foo', 'bar');
- $data = $config->export();
- $this->assertEquals('{"foo":"bar"}', json_encode($data));
- }
-
- public function testCombine()
- {
- // Pointless tests just to ensure everything is covered.
- $config = new Config();
- $config->set('foo', 'bar');
- $config->set('baz', 'boz');
- $config2 = new Config();
- $config2->set('foo', 'fu');
- $config2->set('new', 'blue');
- $config->combine($config2->export());
- $this->assertEquals('fu', $config->get('foo'));
- $this->assertEquals('boz', $config->get('baz'));
- $this->assertEquals('blue', $config->get('new'));
- }
-
- public function testDefault()
- {
- $data = [
- 'a' => 'foo',
- 'b' => 'bar',
- 'c' => 'boz',
- ];
-
- $foo = ["foo" => "bar"];
-
- $config = new Config($data);
-
- $config->setDefault('c', 'other');
- $config->setDefault('d', 'other');
- $config->setDefault('f', $foo);
-
- $this->assertEquals('foo', $config->get('a'));
- $this->assertEquals('boz', $config->get('c'));
- $this->assertEquals('other', $config->get('d'));
- $this->assertEquals('other', $config->getDefault('c'));
- $this->assertEquals('', $config->get('e'));
- $this->assertEquals('bar', $config->get('f.foo'));
- $this->assertEquals('{"foo":"bar"}', json_encode($config->get('f')));
- }
-
- public function testDefaultsArray()
- {
- $data = ['a' => 'foo', 'b' => 'bar', 'c' => 'boz',];
- $defaults = ['d' => 'foo', 'e' => 'bar', 'f' => 'boz',];
-
- // Create reflection class to test private methods
- $configClass = new \ReflectionClass("Consolidation\Config\Config");
-
- // $defaults
- $defaultsProperty = $configClass->getProperty("defaults");
- $defaultsProperty->setAccessible(true);
-
- // $getDefaults
- $getDefaultsMethod = $configClass->getMethod("getDefaults");
- $getDefaultsMethod->setAccessible(true);
-
- // Test the config class
- $config = new Config($data);
-
- // Set $config::defaults to an array to test getter and setter
- $defaultsProperty->setValue($config, $defaults);
- $this->assertTrue(is_array($defaultsProperty->getValue($config)));
- $this->assertInstanceOf('Dflydev\DotAccessData\Data',
- $getDefaultsMethod->invoke($config));
-
- // Set $config::defaults to a string to test exception
- $defaultsProperty->setValue($config, "foo.bar");
- $this->setExpectedException("Exception");
- $getDefaultsMethod->invoke($config);
- }
-
- public function testConfigurationWithCrossFileReferences()
- {
- $config = new Config();
- $processor = new ConfigProcessor();
- $loader = new YamlConfigLoader();
- $processor->extend($loader->load(__DIR__ . '/data/config-1.yml'));
- $processor->extend($loader->load(__DIR__ . '/data/config-2.yml'));
- $processor->extend($loader->load(__DIR__ . '/data/config-3.yml'));
-
- // Does not fail if configuration file cannot be found
- $processor->extend($loader->load(__DIR__ . '/data/no-such-file.yml'));
-
- // We must capture the sources before exporting, as export
- // dumps this information.
- $sources = $processor->sources();
-
- $config->import($processor->export());
-
- $this->assertEquals(implode(',', $config->get('m')), '3');
- $this->assertEquals($config->get('a'), 'foobarbaz');
-
- $this->assertEquals($sources['a'], __DIR__ . '/data/config-3.yml');
- $this->assertEquals($sources['b'], __DIR__ . '/data/config-2.yml');
- $this->assertEquals($sources['c'], __DIR__ . '/data/config-1.yml');
- }
-
- public function testConfigurationWithReverseOrderCrossFileReferences()
- {
- $config = new Config();
- $processor = new ConfigProcessor();
- $loader = new YamlConfigLoader();
- $processor->extend($loader->load(__DIR__ . '/data/config-3.yml'));
- $processor->extend($loader->load(__DIR__ . '/data/config-2.yml'));
- $processor->extend($loader->load(__DIR__ . '/data/config-1.yml'));
-
- $sources = $processor->sources();
- $config->import($processor->export());
-
- $this->assertEquals(implode(',', $config->get('m')), '1');
-
- if (strpos($config->get('a'), '$') !== false) {
- throw new \PHPUnit_Framework_SkippedTestError(
- 'Evaluation of cross-file references in reverse order not supported.'
- );
- }
- $this->assertEquals($config->get('a'), 'foobarbaz');
-
- $this->assertEquals($sources['a'], __DIR__ . '/data/config-3.yml');
- $this->assertEquals($sources['b'], __DIR__ . '/data/config-2.yml');
- $this->assertEquals($sources['c'], __DIR__ . '/data/config-1.yml');
- }
-}