Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / vendor / consolidation / config / tests / ConfigTest.php
1 <?php
2 namespace Consolidation\Config;
3
4 use Consolidation\Config\Loader\ConfigProcessor;
5 use Consolidation\Config\Loader\YamlConfigLoader;
6
7 class ConfigTest extends \PHPUnit_Framework_TestCase
8 {
9     public function testSetters()
10     {
11         // Pointless tests just to ensure everything is covered.
12         $config = new Config();
13         $config->set('foo', 'bar');
14         $data = $config->export();
15         $this->assertEquals('{"foo":"bar"}', json_encode($data));
16     }
17
18     public function testCombine()
19     {
20         // Pointless tests just to ensure everything is covered.
21         $config = new Config();
22         $config->set('foo', 'bar');
23         $config->set('baz', 'boz');
24         $config2 = new Config();
25         $config2->set('foo', 'fu');
26         $config2->set('new', 'blue');
27         $config->combine($config2->export());
28         $this->assertEquals('fu', $config->get('foo'));
29         $this->assertEquals('boz', $config->get('baz'));
30         $this->assertEquals('blue', $config->get('new'));
31     }
32
33     public function testDefault()
34     {
35         $data = [
36             'a' => 'foo',
37             'b' => 'bar',
38             'c' => 'boz',
39         ];
40
41         $foo = ["foo" => "bar"];
42
43         $config = new Config($data);
44
45         $config->setDefault('c', 'other');
46         $config->setDefault('d', 'other');
47         $config->setDefault('f', $foo);
48
49         $this->assertEquals('foo', $config->get('a'));
50         $this->assertEquals('boz', $config->get('c'));
51         $this->assertEquals('other', $config->get('d'));
52         $this->assertEquals('other', $config->getDefault('c'));
53         $this->assertEquals('', $config->get('e'));
54         $this->assertEquals('bar', $config->get('f.foo'));
55         $this->assertEquals('{"foo":"bar"}', json_encode($config->get('f')));
56     }
57
58     public function testDefaultsArray()
59     {
60         $data = ['a' => 'foo', 'b' => 'bar', 'c' => 'boz',];
61         $defaults = ['d' => 'foo', 'e' => 'bar', 'f' => 'boz',];
62
63         // Create reflection class to test private methods
64         $configClass = new \ReflectionClass("Consolidation\Config\Config");
65
66         // $defaults
67         $defaultsProperty = $configClass->getProperty("defaults");
68         $defaultsProperty->setAccessible(true);
69
70         // $getDefaults
71         $getDefaultsMethod = $configClass->getMethod("getDefaults");
72         $getDefaultsMethod->setAccessible(true);
73
74         // Test the config class
75         $config = new Config($data);
76
77         // Set $config::defaults to an array to test getter and setter
78         $defaultsProperty->setValue($config, $defaults);
79         $this->assertTrue(is_array($defaultsProperty->getValue($config)));
80         $this->assertInstanceOf('Dflydev\DotAccessData\Data',
81             $getDefaultsMethod->invoke($config));
82
83         // Set $config::defaults to a string to test exception
84         $defaultsProperty->setValue($config, "foo.bar");
85         $this->setExpectedException("Exception");
86         $getDefaultsMethod->invoke($config);
87     }
88
89     public function testConfigurationWithCrossFileReferences()
90     {
91         $config = new Config();
92         $processor = new ConfigProcessor();
93         $loader = new YamlConfigLoader();
94         $processor->extend($loader->load(__DIR__ . '/data/config-1.yml'));
95         $processor->extend($loader->load(__DIR__ . '/data/config-2.yml'));
96         $processor->extend($loader->load(__DIR__ . '/data/config-3.yml'));
97
98         // Does not fail if configuration file cannot be found
99         $processor->extend($loader->load(__DIR__ . '/data/no-such-file.yml'));
100
101         // We must capture the sources before exporting, as export
102         // dumps this information.
103         $sources = $processor->sources();
104
105         $config->import($processor->export());
106
107         $this->assertEquals(implode(',', $config->get('m')), '3');
108         $this->assertEquals($config->get('a'), 'foobarbaz');
109
110         $this->assertEquals($sources['a'], __DIR__ . '/data/config-3.yml');
111         $this->assertEquals($sources['b'], __DIR__ . '/data/config-2.yml');
112         $this->assertEquals($sources['c'], __DIR__ . '/data/config-1.yml');
113     }
114
115     public function testConfigurationWithReverseOrderCrossFileReferences()
116     {
117         $config = new Config();
118         $processor = new ConfigProcessor();
119         $loader = new YamlConfigLoader();
120         $processor->extend($loader->load(__DIR__ . '/data/config-3.yml'));
121         $processor->extend($loader->load(__DIR__ . '/data/config-2.yml'));
122         $processor->extend($loader->load(__DIR__ . '/data/config-1.yml'));
123
124         $sources = $processor->sources();
125         $config->import($processor->export());
126
127         $this->assertEquals(implode(',', $config->get('m')), '1');
128
129         if (strpos($config->get('a'), '$') !== false) {
130             throw new \PHPUnit_Framework_SkippedTestError(
131                 'Evaluation of cross-file references in reverse order not supported.'
132             );
133         }
134         $this->assertEquals($config->get('a'), 'foobarbaz');
135
136         $this->assertEquals($sources['a'], __DIR__ . '/data/config-3.yml');
137         $this->assertEquals($sources['b'], __DIR__ . '/data/config-2.yml');
138         $this->assertEquals($sources['c'], __DIR__ . '/data/config-1.yml');
139     }
140 }