Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Grasmash\YamlExpander\Tests\Command;
|
Chris@0
|
4
|
Chris@0
|
5 use Dflydev\DotAccessData\Data;
|
Chris@0
|
6 use Grasmash\YamlExpander\Expander;
|
Chris@0
|
7 use Grasmash\YamlExpander\Tests\TestBase;
|
Chris@0
|
8 use Symfony\Component\Yaml\Yaml;
|
Chris@0
|
9
|
Chris@0
|
10 class ExpanderTest extends \PHPUnit_Framework_TestCase
|
Chris@0
|
11 {
|
Chris@0
|
12
|
Chris@0
|
13 /**
|
Chris@0
|
14 * Tests Expander::expandArrayProperties().
|
Chris@0
|
15 *
|
Chris@0
|
16 * @param string $filename
|
Chris@0
|
17 * @param array $reference_array
|
Chris@0
|
18 *
|
Chris@0
|
19 * @dataProvider providerYaml
|
Chris@0
|
20 */
|
Chris@0
|
21 public function testExpandArrayProperties($filename, $reference_array)
|
Chris@0
|
22 {
|
Chris@0
|
23 $array = Yaml::parse(file_get_contents(__DIR__ . "/../resources/$filename"));
|
Chris@0
|
24 putenv("test=gomjabbar");
|
Chris@0
|
25 $expanded = Expander::expandArrayProperties($array);
|
Chris@0
|
26 $this->assertEquals('gomjabbar', $expanded['env-test']);
|
Chris@0
|
27 $this->assertEquals('Frank Herbert 1965', $expanded['book']['copyright']);
|
Chris@0
|
28 $this->assertEquals('Paul Atreides', $expanded['book']['protaganist']);
|
Chris@0
|
29 $this->assertEquals('Dune by Frank Herbert', $expanded['summary']);
|
Chris@0
|
30 $this->assertEquals('${book.media.1}, hardcover', $expanded['available-products']);
|
Chris@0
|
31 $this->assertEquals('Dune', $expanded['product-name']);
|
Chris@0
|
32 $this->assertEquals(Yaml::dump($array['inline-array'], 0), $expanded['expand-array']);
|
Chris@0
|
33
|
Chris@0
|
34 $expanded = Expander::expandArrayProperties($array, $reference_array);
|
Chris@0
|
35 $this->assertEquals('Dune Messiah, and others.', $expanded['sequels']);
|
Chris@0
|
36 $this->assertEquals('Dune Messiah', $expanded['book']['nested-reference']);
|
Chris@0
|
37 }
|
Chris@0
|
38
|
Chris@0
|
39 /**
|
Chris@0
|
40 * Tests Expander::parse().
|
Chris@0
|
41 *
|
Chris@0
|
42 * @param string $filename
|
Chris@0
|
43 * @param array $reference_array
|
Chris@0
|
44 *
|
Chris@0
|
45 * @dataProvider providerYaml
|
Chris@0
|
46 */
|
Chris@0
|
47 public function testParse($filename, $reference_array)
|
Chris@0
|
48 {
|
Chris@0
|
49 $yaml_string = file_get_contents(__DIR__ . "/../resources/$filename");
|
Chris@0
|
50 $expanded = Expander::parse($yaml_string);
|
Chris@0
|
51 $this->assertEquals('Frank Herbert 1965', $expanded['book']['copyright']);
|
Chris@0
|
52 $this->assertEquals('Paul Atreides', $expanded['book']['protaganist']);
|
Chris@0
|
53 $this->assertEquals('Dune by Frank Herbert', $expanded['summary']);
|
Chris@0
|
54 $this->assertEquals('${book.media.1}, hardcover', $expanded['available-products']);
|
Chris@0
|
55
|
Chris@0
|
56 $expanded = Expander::parse($yaml_string, $reference_array);
|
Chris@0
|
57 $this->assertEquals('Dune Messiah, and others.', $expanded['sequels']);
|
Chris@0
|
58 $this->assertEquals('Dune Messiah', $expanded['book']['nested-reference']);
|
Chris@0
|
59 }
|
Chris@0
|
60
|
Chris@0
|
61 /**
|
Chris@0
|
62 * @return array
|
Chris@0
|
63 * An array of values to test.
|
Chris@0
|
64 */
|
Chris@0
|
65 public function providerYaml()
|
Chris@0
|
66 {
|
Chris@0
|
67 return [
|
Chris@0
|
68 ['valid.yml', [
|
Chris@0
|
69 'book' => [
|
Chris@0
|
70 'sequel' => 'Dune Messiah'
|
Chris@0
|
71 ]
|
Chris@0
|
72 ]],
|
Chris@0
|
73 ];
|
Chris@0
|
74 }
|
Chris@0
|
75
|
Chris@0
|
76 /**
|
Chris@0
|
77 * Tests Expander::expandProperty().
|
Chris@0
|
78 *
|
Chris@0
|
79 * @dataProvider providerTestExpandProperty
|
Chris@0
|
80 */
|
Chris@0
|
81 public function testExpandProperty($array, $property_name, $unexpanded_string, $expected)
|
Chris@0
|
82 {
|
Chris@0
|
83 $data = new Data($array);
|
Chris@0
|
84 $expanded_value = Expander::expandProperty($property_name, $unexpanded_string, $data);
|
Chris@0
|
85
|
Chris@0
|
86 $this->assertEquals($expected, $expanded_value);
|
Chris@0
|
87 }
|
Chris@0
|
88
|
Chris@0
|
89 /**
|
Chris@0
|
90 * @return array
|
Chris@0
|
91 */
|
Chris@0
|
92 public function providerTestExpandProperty()
|
Chris@0
|
93 {
|
Chris@0
|
94 return [
|
Chris@0
|
95 [ ['author' => 'Frank Herbert'], 'author', '${author}', 'Frank Herbert' ],
|
Chris@0
|
96 [ ['book' => ['author' => 'Frank Herbert' ]], 'book.author', '${book.author}', 'Frank Herbert' ],
|
Chris@0
|
97 ];
|
Chris@0
|
98 }
|
Chris@0
|
99 }
|