annotate vendor/nikic/php-parser/test/PhpParser/Builder/ParamTest.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children 5fb285c0d0e3
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace PhpParser\Builder;
Chris@0 4
Chris@0 5 use PhpParser\Node;
Chris@0 6 use PhpParser\Node\Expr;
Chris@0 7 use PhpParser\Node\Scalar;
Chris@0 8
Chris@0 9 class ParamTest extends \PHPUnit_Framework_TestCase
Chris@0 10 {
Chris@0 11 public function createParamBuilder($name) {
Chris@0 12 return new Param($name);
Chris@0 13 }
Chris@0 14
Chris@0 15 /**
Chris@0 16 * @dataProvider provideTestDefaultValues
Chris@0 17 */
Chris@0 18 public function testDefaultValues($value, $expectedValueNode) {
Chris@0 19 $node = $this->createParamBuilder('test')
Chris@0 20 ->setDefault($value)
Chris@0 21 ->getNode()
Chris@0 22 ;
Chris@0 23
Chris@0 24 $this->assertEquals($expectedValueNode, $node->default);
Chris@0 25 }
Chris@0 26
Chris@0 27 public function provideTestDefaultValues() {
Chris@0 28 return array(
Chris@0 29 array(
Chris@0 30 null,
Chris@0 31 new Expr\ConstFetch(new Node\Name('null'))
Chris@0 32 ),
Chris@0 33 array(
Chris@0 34 true,
Chris@0 35 new Expr\ConstFetch(new Node\Name('true'))
Chris@0 36 ),
Chris@0 37 array(
Chris@0 38 false,
Chris@0 39 new Expr\ConstFetch(new Node\Name('false'))
Chris@0 40 ),
Chris@0 41 array(
Chris@0 42 31415,
Chris@0 43 new Scalar\LNumber(31415)
Chris@0 44 ),
Chris@0 45 array(
Chris@0 46 3.1415,
Chris@0 47 new Scalar\DNumber(3.1415)
Chris@0 48 ),
Chris@0 49 array(
Chris@0 50 'Hallo World',
Chris@0 51 new Scalar\String_('Hallo World')
Chris@0 52 ),
Chris@0 53 array(
Chris@0 54 array(1, 2, 3),
Chris@0 55 new Expr\Array_(array(
Chris@0 56 new Expr\ArrayItem(new Scalar\LNumber(1)),
Chris@0 57 new Expr\ArrayItem(new Scalar\LNumber(2)),
Chris@0 58 new Expr\ArrayItem(new Scalar\LNumber(3)),
Chris@0 59 ))
Chris@0 60 ),
Chris@0 61 array(
Chris@0 62 array('foo' => 'bar', 'bar' => 'foo'),
Chris@0 63 new Expr\Array_(array(
Chris@0 64 new Expr\ArrayItem(
Chris@0 65 new Scalar\String_('bar'),
Chris@0 66 new Scalar\String_('foo')
Chris@0 67 ),
Chris@0 68 new Expr\ArrayItem(
Chris@0 69 new Scalar\String_('foo'),
Chris@0 70 new Scalar\String_('bar')
Chris@0 71 ),
Chris@0 72 ))
Chris@0 73 ),
Chris@0 74 array(
Chris@0 75 new Scalar\MagicConst\Dir,
Chris@0 76 new Scalar\MagicConst\Dir
Chris@0 77 )
Chris@0 78 );
Chris@0 79 }
Chris@0 80
Chris@0 81 /**
Chris@0 82 * @dataProvider provideTestTypeHints
Chris@0 83 */
Chris@0 84 public function testTypeHints($typeHint, $expectedType) {
Chris@0 85 $node = $this->createParamBuilder('test')
Chris@0 86 ->setTypeHint($typeHint)
Chris@0 87 ->getNode()
Chris@0 88 ;
Chris@0 89 $type = $node->type;
Chris@0 90
Chris@0 91 /* Manually implement comparison to avoid __toString stupidity */
Chris@0 92 if ($expectedType instanceof Node\NullableType) {
Chris@0 93 $this->assertInstanceOf(get_class($expectedType), $type);
Chris@0 94 $expectedType = $expectedType->type;
Chris@0 95 $type = $type->type;
Chris@0 96 }
Chris@0 97
Chris@0 98 if ($expectedType instanceof Node\Name) {
Chris@0 99 $this->assertInstanceOf(get_class($expectedType), $type);
Chris@0 100 $this->assertEquals($expectedType, $type);
Chris@0 101 } else {
Chris@0 102 $this->assertSame($expectedType, $type);
Chris@0 103 }
Chris@0 104 }
Chris@0 105
Chris@0 106 public function provideTestTypeHints() {
Chris@0 107 return array(
Chris@0 108 array('array', 'array'),
Chris@0 109 array('callable', 'callable'),
Chris@0 110 array('bool', 'bool'),
Chris@0 111 array('int', 'int'),
Chris@0 112 array('float', 'float'),
Chris@0 113 array('string', 'string'),
Chris@0 114 array('iterable', 'iterable'),
Chris@0 115 array('object', 'object'),
Chris@0 116 array('Array', 'array'),
Chris@0 117 array('CALLABLE', 'callable'),
Chris@0 118 array('Some\Class', new Node\Name('Some\Class')),
Chris@0 119 array('\Foo', new Node\Name\FullyQualified('Foo')),
Chris@0 120 array('self', new Node\Name('self')),
Chris@0 121 array('?array', new Node\NullableType('array')),
Chris@0 122 array('?Some\Class', new Node\NullableType(new Node\Name('Some\Class'))),
Chris@0 123 array(new Node\Name('Some\Class'), new Node\Name('Some\Class')),
Chris@0 124 array(new Node\NullableType('int'), new Node\NullableType('int')),
Chris@0 125 array(
Chris@0 126 new Node\NullableType(new Node\Name('Some\Class')),
Chris@0 127 new Node\NullableType(new Node\Name('Some\Class'))
Chris@0 128 ),
Chris@0 129 );
Chris@0 130 }
Chris@0 131
Chris@0 132 /**
Chris@0 133 * @expectedException \LogicException
Chris@0 134 * @expectedExceptionMessage Parameter type cannot be void
Chris@0 135 */
Chris@0 136 public function testVoidTypeError() {
Chris@0 137 $this->createParamBuilder('test')->setTypeHint('void');
Chris@0 138 }
Chris@0 139
Chris@0 140 /**
Chris@0 141 * @expectedException \LogicException
Chris@0 142 * @expectedExceptionMessage Type must be a string, or an instance of Name or NullableType
Chris@0 143 */
Chris@0 144 public function testInvalidTypeError() {
Chris@0 145 $this->createParamBuilder('test')->setTypeHint(new \stdClass);
Chris@0 146 }
Chris@0 147
Chris@0 148 public function testByRef() {
Chris@0 149 $node = $this->createParamBuilder('test')
Chris@0 150 ->makeByRef()
Chris@0 151 ->getNode()
Chris@0 152 ;
Chris@0 153
Chris@0 154 $this->assertEquals(
Chris@0 155 new Node\Param('test', null, null, true),
Chris@0 156 $node
Chris@0 157 );
Chris@0 158 }
Chris@0 159
Chris@0 160 public function testVariadic() {
Chris@0 161 $node = $this->createParamBuilder('test')
Chris@0 162 ->makeVariadic()
Chris@0 163 ->getNode()
Chris@0 164 ;
Chris@0 165
Chris@0 166 $this->assertEquals(
Chris@0 167 new Node\Param('test', null, null, false, true),
Chris@0 168 $node
Chris@0 169 );
Chris@0 170 }
Chris@0 171 }