PropertyTest.php 5.0 KB

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