PropertyTest.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. <?php declare(strict_types=1);
  2. namespace PhpParser\Builder;
  3. use PhpParser\Comment;
  4. use PhpParser\Node\Expr;
  5. use PhpParser\Node\Name;
  6. use PhpParser\Node\Scalar;
  7. use PhpParser\Node\Stmt;
  8. use PHPUnit\Framework\TestCase;
  9. class PropertyTest extends TestCase
  10. {
  11. public function createPropertyBuilder($name) {
  12. return new Property($name);
  13. }
  14. public function testModifiers() {
  15. $node = $this->createPropertyBuilder('test')
  16. ->makePrivate()
  17. ->makeStatic()
  18. ->getNode()
  19. ;
  20. $this->assertEquals(
  21. new Stmt\Property(
  22. Stmt\Class_::MODIFIER_PRIVATE
  23. | Stmt\Class_::MODIFIER_STATIC,
  24. [
  25. new Stmt\PropertyProperty('test')
  26. ]
  27. ),
  28. $node
  29. );
  30. $node = $this->createPropertyBuilder('test')
  31. ->makeProtected()
  32. ->getNode()
  33. ;
  34. $this->assertEquals(
  35. new Stmt\Property(
  36. Stmt\Class_::MODIFIER_PROTECTED,
  37. [
  38. new Stmt\PropertyProperty('test')
  39. ]
  40. ),
  41. $node
  42. );
  43. $node = $this->createPropertyBuilder('test')
  44. ->makePublic()
  45. ->getNode()
  46. ;
  47. $this->assertEquals(
  48. new Stmt\Property(
  49. Stmt\Class_::MODIFIER_PUBLIC,
  50. [
  51. new Stmt\PropertyProperty('test')
  52. ]
  53. ),
  54. $node
  55. );
  56. }
  57. public function testDocComment() {
  58. $node = $this->createPropertyBuilder('test')
  59. ->setDocComment('/** Test */')
  60. ->getNode();
  61. $this->assertEquals(new Stmt\Property(
  62. Stmt\Class_::MODIFIER_PUBLIC,
  63. [
  64. new Stmt\PropertyProperty('test')
  65. ],
  66. [
  67. 'comments' => [new Comment\Doc('/** Test */')]
  68. ]
  69. ), $node);
  70. }
  71. /**
  72. * @dataProvider provideTestDefaultValues
  73. */
  74. public function testDefaultValues($value, $expectedValueNode) {
  75. $node = $this->createPropertyBuilder('test')
  76. ->setDefault($value)
  77. ->getNode()
  78. ;
  79. $this->assertEquals($expectedValueNode, $node->props[0]->default);
  80. }
  81. public function provideTestDefaultValues() {
  82. return [
  83. [
  84. null,
  85. new Expr\ConstFetch(new Name('null'))
  86. ],
  87. [
  88. true,
  89. new Expr\ConstFetch(new Name('true'))
  90. ],
  91. [
  92. false,
  93. new Expr\ConstFetch(new Name('false'))
  94. ],
  95. [
  96. 31415,
  97. new Scalar\LNumber(31415)
  98. ],
  99. [
  100. 3.1415,
  101. new Scalar\DNumber(3.1415)
  102. ],
  103. [
  104. 'Hallo World',
  105. new Scalar\String_('Hallo World')
  106. ],
  107. [
  108. [1, 2, 3],
  109. new Expr\Array_([
  110. new Expr\ArrayItem(new Scalar\LNumber(1)),
  111. new Expr\ArrayItem(new Scalar\LNumber(2)),
  112. new Expr\ArrayItem(new Scalar\LNumber(3)),
  113. ])
  114. ],
  115. [
  116. ['foo' => 'bar', 'bar' => 'foo'],
  117. new Expr\Array_([
  118. new Expr\ArrayItem(
  119. new Scalar\String_('bar'),
  120. new Scalar\String_('foo')
  121. ),
  122. new Expr\ArrayItem(
  123. new Scalar\String_('foo'),
  124. new Scalar\String_('bar')
  125. ),
  126. ])
  127. ],
  128. [
  129. new Scalar\MagicConst\Dir,
  130. new Scalar\MagicConst\Dir
  131. ]
  132. ];
  133. }
  134. }