ExpanderTest.php 3.4 KB

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