Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / vendor / consolidation / config / tests / ConfigTest.php
diff --git a/vendor/consolidation/config/tests/ConfigTest.php b/vendor/consolidation/config/tests/ConfigTest.php
new file mode 100644 (file)
index 0000000..f2ace0c
--- /dev/null
@@ -0,0 +1,140 @@
+<?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');
+    }
+}