Xml_GeneratorTest.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. <?php
  2. namespace Test\Unit\Xml;
  3. require_once dirname(__DIR__) . '/Setup.php';
  4. use Test\Setup;
  5. use Braintree;
  6. class GeneratorTest extends Setup
  7. {
  8. public function testSetsTypeAttributeForBooleans()
  9. {
  10. $expected = <<<XML
  11. <?xml version="1.0" encoding="UTF-8"?>
  12. <root>
  13. <yes type="boolean">true</yes>
  14. <no type="boolean">false</no>
  15. </root>
  16. XML;
  17. $xml = Braintree\Xml::buildXmlFromArray([
  18. 'root' => ['yes' => true, 'no' => false]
  19. ]);
  20. $this->assertEquals($expected, $xml);
  21. }
  22. public function testCreatesArrays()
  23. {
  24. $expected = <<<XML
  25. <?xml version="1.0" encoding="UTF-8"?>
  26. <root>
  27. <stuff type="array">
  28. <item>foo</item>
  29. <item>bar</item>
  30. </stuff>
  31. </root>
  32. XML;
  33. $xml = Braintree\Xml::buildXmlFromArray([
  34. 'root' => ['stuff' => ['foo', 'bar']]
  35. ]);
  36. $this->assertEquals($expected, $xml);
  37. }
  38. public function testCreatesWithDashes()
  39. {
  40. $expected = <<<XML
  41. <?xml version="1.0" encoding="UTF-8"?>
  42. <root>
  43. <some-stuff>
  44. <inner-foo type="integer">42</inner-foo>
  45. <bar-bar-bar type="integer">3</bar-bar-bar>
  46. </some-stuff>
  47. </root>
  48. XML;
  49. $xml = Braintree\Xml::buildXmlFromArray([
  50. 'root' => ['someStuff' => ['innerFoo' => 42, 'barBarBar' => 3]]
  51. ]);
  52. $this->assertEquals($expected, $xml);
  53. }
  54. public function testCreatesArraysWithBooleans()
  55. {
  56. $expected = <<<XML
  57. <?xml version="1.0" encoding="UTF-8"?>
  58. <root>
  59. <stuff type="array">
  60. <item>true</item>
  61. <item>false</item>
  62. </stuff>
  63. </root>
  64. XML;
  65. $xml = Braintree\Xml::buildXmlFromArray([
  66. 'root' => ['stuff' => [true, false]]
  67. ]);
  68. $this->assertEquals($expected, $xml);
  69. }
  70. public function testHandlesEmptyArrays()
  71. {
  72. $expected = <<<XML
  73. <?xml version="1.0" encoding="UTF-8"?>
  74. <root>
  75. <stuff type="array"/>
  76. </root>
  77. XML;
  78. $xml = Braintree\Xml::buildXmlFromArray([
  79. 'root' => ['stuff' => []]
  80. ]);
  81. $this->assertEquals($expected, $xml);
  82. }
  83. public function testEscapingSpecialChars()
  84. {
  85. $expected = <<<XML
  86. <?xml version="1.0" encoding="UTF-8"?>
  87. <root>
  88. <stuff>&lt;&gt;&amp;'&quot;</stuff>
  89. </root>
  90. XML;
  91. $xml = Braintree\Xml::buildXmlFromArray([
  92. 'root' => ['stuff' => '<>&\'"']
  93. ]);
  94. $this->assertEquals($expected, $xml);
  95. }
  96. public function testDoesNotModifyDateTime()
  97. {
  98. $date = new \DateTime();
  99. $date->setTimestamp(strtotime('2016-05-17T21:22:26Z'));
  100. $date->setTimezone(new \DateTimeZone('Europe/Paris'));
  101. $originalDate = clone $date;
  102. $expected = <<<XML
  103. <?xml version="1.0" encoding="UTF-8"?>
  104. <root>
  105. <stuff type="datetime">2016-05-17T21:22:26Z</stuff>
  106. </root>
  107. XML;
  108. $xml = Braintree\Xml::buildXmlFromArray([
  109. 'root' => ['stuff' => $date]
  110. ]);
  111. $this->assertEquals($originalDate, $date);
  112. $this->assertEquals($expected, $xml);
  113. }
  114. }