PropertyTest.php 5.0 KB

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