ac645a286279b53a48e8d4fc0f1c4f93f897a879
[yaffs-website] / vendor / consolidation / config / tests / ConfigProcessorTest.php
1 <?php
2 namespace Consolidation\Config\Loader;
3
4 use Consolidation\TestUtils\TestLoader;
5
6 class ConfigProcessorTest extends \PHPUnit_Framework_TestCase
7 {
8     public function testConfigProcessorAdd()
9     {
10         $config1 = [
11             'c' => 'foo',
12             'm' => [1],
13         ];
14         $config2 = [
15             'b' => '${c}bar',
16             'm' => [2],
17         ];
18         $config3 = [
19             'a' => '${b}baz',
20             'm' => [3],
21         ];
22
23         $processor = new ConfigProcessor();
24         $processor->add($config1);
25         $processor->add($config2);
26         $processor->add($config3);
27
28         $data = $processor->export();
29         $this->assertEquals('foo', $data['c']);
30         $this->assertEquals('foobar', $data['b']);
31         $this->assertEquals('foobarbaz', $data['a']);
32     }
33
34     public function processorForConfigMergeTest($provideSourceNames)
35     {
36         $config1 = [
37             'm' => [
38                 'x' => 'x-1',
39                 'y' => [
40                     'r' => 'r-1',
41                     's' => 's-1',
42                     't' => 't-1',
43                 ],
44                 'z' => 'z-1',
45             ],
46         ];
47         $config2 = [
48             'm' => [
49                 'w' => 'w-2',
50                 'y' => [
51                     'q' => 'q-2',
52                     's' => 's-2',
53                 ],
54                 'z' => 'z-2',
55             ],
56         ];
57         $config3 = [
58             'm' => [
59                 'v' => 'v-3',
60                 'y' => [
61                     't' => 't-3',
62                     'u' => 'u-3',
63                 ],
64                 'z' => 'z-3',
65             ],
66         ];
67
68         $processor = new ConfigProcessor();
69         $testLoader = new TestLoader();
70
71         $testLoader->set($config1);
72         $testLoader->setSourceName($provideSourceNames ? 'c-1' : '');
73         $processor->extend($testLoader);
74
75         $testLoader->set($config2);
76         $testLoader->setSourceName($provideSourceNames ? 'c-2' : '');
77         $processor->extend($testLoader);
78
79         $testLoader->set($config3);
80         $testLoader->setSourceName($provideSourceNames ? 'c-3' : '');
81         $processor->extend($testLoader);
82
83         return $processor;
84     }
85
86     public function testConfigProcessorMergeAssociative()
87     {
88         $processor = $this->processorForConfigMergeTest(false);
89         $data = $processor->export();
90         $this->assertEquals('{"m":{"x":"x-1","y":{"r":"r-1","s":"s-2","t":"t-3","q":"q-2","u":"u-3"},"z":"z-3","w":"w-2","v":"v-3"}}', json_encode($data));
91     }
92
93     public function testConfigProcessorMergeAssociativeWithSourceNames()
94     {
95         $processor = $this->processorForConfigMergeTest(true);
96         $sources = $processor->sources();
97         $data = $processor->export();
98         $this->assertEquals('{"m":{"x":"x-1","y":{"r":"r-1","s":"s-2","t":"t-3","q":"q-2","u":"u-3"},"z":"z-3","w":"w-2","v":"v-3"}}', json_encode($data));
99         $this->assertEquals('c-1', $sources['m']['x']);
100         $this->assertEquals('c-1', $sources['m']['y']['r']);
101         $this->assertEquals('c-2', $sources['m']['w']);
102         $this->assertEquals('c-2', $sources['m']['y']['s']);
103         $this->assertEquals('c-3', $sources['m']['z']);
104         $this->assertEquals('c-3', $sources['m']['y']['u']);
105     }
106
107     public function testConfiProcessorSources()
108     {
109         $processor = new ConfigProcessor();
110         $loader = new YamlConfigLoader();
111         $processor->extend($loader->load(__DIR__ . '/data/config-1.yml'));
112         $processor->extend($loader->load(__DIR__ . '/data/config-2.yml'));
113         $processor->extend($loader->load(__DIR__ . '/data/config-3.yml'));
114
115         $sources = $processor->sources();
116
117         $data = $processor->export();
118         $this->assertEquals('foo', $data['c']);
119         $this->assertEquals('foobar', $data['b']);
120         $this->assertEquals('foobarbaz', $data['a']);
121
122         $this->assertEquals('3', $data['m'][0]);
123
124         $this->assertEquals( __DIR__ . '/data/config-3.yml', $sources['a']);
125         $this->assertEquals( __DIR__ . '/data/config-2.yml', $sources['b']);
126         $this->assertEquals( __DIR__ . '/data/config-1.yml', $sources['c']);
127         $this->assertEquals( __DIR__ . '/data/config-3.yml', $sources['m']);
128     }
129
130     public function testConfiProcessorSourcesLoadInReverseOrder()
131     {
132         $processor = new ConfigProcessor();
133         $loader = new YamlConfigLoader();
134         $processor->extend($loader->load(__DIR__ . '/data/config-3.yml'));
135         $processor->extend($loader->load(__DIR__ . '/data/config-2.yml'));
136         $processor->extend($loader->load(__DIR__ . '/data/config-1.yml'));
137
138         $sources = $processor->sources();
139
140         $data = $processor->export();
141         $this->assertEquals('foo', $data['c']);
142         $this->assertEquals('foobar', $data['b']);
143         $this->assertEquals('foobarbaz', $data['a']);
144
145         $this->assertEquals('1', $data['m'][0]);
146
147         $this->assertEquals( __DIR__ . '/data/config-3.yml', $sources['a']);
148         $this->assertEquals( __DIR__ . '/data/config-2.yml', $sources['b']);
149         $this->assertEquals( __DIR__ . '/data/config-1.yml', $sources['c']);
150         $this->assertEquals( __DIR__ . '/data/config-1.yml', $sources['m']);
151     }
152 }