ExpanderTest.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <?php
  2. namespace Grasmash\Expander\Tests\Command;
  3. use Dflydev\DotAccessData\Data;
  4. use Grasmash\Expander\Expander;
  5. use Grasmash\Expander\Stringifier;
  6. class ExpanderTest extends \PHPUnit_Framework_TestCase
  7. {
  8. /**
  9. * Tests Expander::expandArrayProperties().
  10. *
  11. * @param array $array
  12. * @param array $reference_array
  13. *
  14. * @dataProvider providerYaml
  15. */
  16. public function testExpandArrayProperties(array $array, array $reference_array)
  17. {
  18. $expander = new Expander();
  19. putenv("test=gomjabbar");
  20. $expanded = $expander->expandArrayProperties($array);
  21. $this->assertEquals('gomjabbar', $expanded['env-test']);
  22. $this->assertEquals('Frank Herbert 1965', $expanded['book']['copyright']);
  23. $this->assertEquals('Paul Atreides', $expanded['book']['protaganist']);
  24. $this->assertEquals('Dune by Frank Herbert', $expanded['summary']);
  25. $this->assertEquals('${book.media.1}, hardcover', $expanded['available-products']);
  26. $this->assertEquals('Dune', $expanded['product-name']);
  27. $this->assertEquals(Stringifier::stringifyArray($array['inline-array']), $expanded['expand-array']);
  28. $expanded = $expander->expandArrayProperties($array, $reference_array);
  29. $this->assertEquals('Dune Messiah, and others.', $expanded['sequels']);
  30. $this->assertEquals('Dune Messiah', $expanded['book']['nested-reference']);
  31. }
  32. /**
  33. * @return array
  34. * An array of values to test.
  35. */
  36. public function providerYaml()
  37. {
  38. return [
  39. [
  40. [
  41. 'type' => 'book',
  42. 'book' => [
  43. 'title' => 'Dune',
  44. 'author' => 'Frank Herbert',
  45. 'copyright' => '${book.author} 1965',
  46. 'protaganist' => '${characters.0.name}',
  47. 'media' => [
  48. 0 => 'hardcover',
  49. ],
  50. 'nested-reference' => '${book.sequel}',
  51. ],
  52. 'characters' => [
  53. 0 => [
  54. 'name' => 'Paul Atreides',
  55. 'occupation' => 'Kwisatz Haderach',
  56. 'aliases' => [
  57. 0 => 'Usul',
  58. 1 => "Muad'Dib",
  59. 2 => 'The Preacher',
  60. ],
  61. ],
  62. 1 => [
  63. 'name' => 'Duncan Idaho',
  64. 'occupation' => 'Swordmaster',
  65. ],
  66. ],
  67. 'summary' => '${book.title} by ${book.author}',
  68. 'publisher' => '${not.real.property}',
  69. 'sequels' => '${book.sequel}, and others.',
  70. 'available-products' => '${book.media.1}, ${book.media.0}',
  71. 'product-name' => '${${type}.title}',
  72. 'boolean-value' => true,
  73. 'null-value' => null,
  74. 'inline-array' => [
  75. 0 => 'one',
  76. 1 => 'two',
  77. 2 => 'three',
  78. ],
  79. 'expand-array' => '${inline-array}',
  80. 'env-test' => '${env.test}',
  81. ],
  82. [
  83. 'book' => [
  84. 'sequel' => 'Dune Messiah'
  85. ]
  86. ]
  87. ],
  88. ];
  89. }
  90. /**
  91. * Tests Expander::expandProperty().
  92. *
  93. * @dataProvider providerTestExpandProperty
  94. */
  95. public function testExpandProperty(array $array, $property_name, $unexpanded_string, $expected)
  96. {
  97. $data = new Data($array);
  98. $expander = new Expander();
  99. $expanded_value = $expander->expandProperty($property_name, $unexpanded_string, $data);
  100. $this->assertEquals($expected, $expanded_value);
  101. }
  102. /**
  103. * @return array
  104. */
  105. public function providerTestExpandProperty()
  106. {
  107. return [
  108. [ ['author' => 'Frank Herbert'], 'author', '${author}', 'Frank Herbert' ],
  109. [ ['book' => ['author' => 'Frank Herbert' ]], 'book.author', '${book.author}', 'Frank Herbert' ],
  110. ];
  111. }
  112. }