Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/php-static-scanner-instrumentalization.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/nikic/php-parser/test/PhpParser/Builder/ParamTest.php')
-rw-r--r--vendor/nikic/php-parser/test/PhpParser/Builder/ParamTest.php158
1 files changed, 158 insertions, 0 deletions
diff --git a/vendor/nikic/php-parser/test/PhpParser/Builder/ParamTest.php b/vendor/nikic/php-parser/test/PhpParser/Builder/ParamTest.php
new file mode 100644
index 0000000..9b87c2f
--- /dev/null
+++ b/vendor/nikic/php-parser/test/PhpParser/Builder/ParamTest.php
@@ -0,0 +1,158 @@
+<?php
+
+namespace PhpParser\Builder;
+
+use PhpParser\Node;
+use PhpParser\Node\Expr;
+use PhpParser\Node\Scalar;
+
+class ParamTest extends \PHPUnit_Framework_TestCase
+{
+ public function createParamBuilder($name) {
+ return new Param($name);
+ }
+
+ /**
+ * @dataProvider provideTestDefaultValues
+ */
+ public function testDefaultValues($value, $expectedValueNode) {
+ $node = $this->createParamBuilder('test')
+ ->setDefault($value)
+ ->getNode()
+ ;
+
+ $this->assertEquals($expectedValueNode, $node->default);
+ }
+
+ public function provideTestDefaultValues() {
+ return array(
+ array(
+ null,
+ new Expr\ConstFetch(new Node\Name('null'))
+ ),
+ array(
+ true,
+ new Expr\ConstFetch(new Node\Name('true'))
+ ),
+ array(
+ false,
+ new Expr\ConstFetch(new Node\Name('false'))
+ ),
+ array(
+ 31415,
+ new Scalar\LNumber(31415)
+ ),
+ array(
+ 3.1415,
+ new Scalar\DNumber(3.1415)
+ ),
+ array(
+ 'Hallo World',
+ new Scalar\String_('Hallo World')
+ ),
+ array(
+ array(1, 2, 3),
+ new Expr\Array_(array(
+ new Expr\ArrayItem(new Scalar\LNumber(1)),
+ new Expr\ArrayItem(new Scalar\LNumber(2)),
+ new Expr\ArrayItem(new Scalar\LNumber(3)),
+ ))
+ ),
+ array(
+ array('foo' => 'bar', 'bar' => 'foo'),
+ new Expr\Array_(array(
+ new Expr\ArrayItem(
+ new Scalar\String_('bar'),
+ new Scalar\String_('foo')
+ ),
+ new Expr\ArrayItem(
+ new Scalar\String_('foo'),
+ new Scalar\String_('bar')
+ ),
+ ))
+ ),
+ array(
+ new Scalar\MagicConst\Dir,
+ new Scalar\MagicConst\Dir
+ )
+ );
+ }
+
+ /**
+ * @dataProvider provideTestTypeHints
+ */
+ public function testTypeHints($typeHint, $expectedType) {
+ $node = $this->createParamBuilder('test')
+ ->setTypeHint($typeHint)
+ ->getNode()
+ ;
+ $type = $node->type;
+
+ /* Manually implement comparison to avoid __toString stupidity */
+ if ($expectedType instanceof Node\NullableType) {
+ $this->assertInstanceOf(get_class($expectedType), $type);
+ $expectedType = $expectedType->type;
+ $type = $type->type;
+ }
+
+ if ($expectedType instanceof Node\Name) {
+ $this->assertInstanceOf(get_class($expectedType), $type);
+ $this->assertEquals($expectedType, $type);
+ } else {
+ $this->assertSame($expectedType, $type);
+ }
+ }
+
+ public function provideTestTypeHints() {
+ return array(
+ array('array', 'array'),
+ array('callable', 'callable'),
+ array('bool', 'bool'),
+ array('int', 'int'),
+ array('float', 'float'),
+ array('string', 'string'),
+ array('iterable', 'iterable'),
+ array('Array', 'array'),
+ array('CALLABLE', 'callable'),
+ array('Some\Class', new Node\Name('Some\Class')),
+ array('\Foo', new Node\Name\FullyQualified('Foo')),
+ array('self', new Node\Name('self')),
+ array('?array', new Node\NullableType('array')),
+ array('?Some\Class', new Node\NullableType(new Node\Name('Some\Class'))),
+ array(new Node\Name('Some\Class'), new Node\Name('Some\Class')),
+ array(new Node\NullableType('int'), new Node\NullableType('int')),
+ array(
+ new Node\NullableType(new Node\Name('Some\Class')),
+ new Node\NullableType(new Node\Name('Some\Class'))
+ ),
+ );
+ }
+
+ /**
+ * @expectedException \LogicException
+ * @expectedExceptionMessage Parameter type cannot be void
+ */
+ public function testVoidTypeError() {
+ $this->createParamBuilder('test')->setTypeHint('void');
+ }
+
+ /**
+ * @expectedException \LogicException
+ * @expectedExceptionMessage Type must be a string, or an instance of Name or NullableType
+ */
+ public function testInvalidTypeError() {
+ $this->createParamBuilder('test')->setTypeHint(new \stdClass);
+ }
+
+ public function testByRef() {
+ $node = $this->createParamBuilder('test')
+ ->makeByRef()
+ ->getNode()
+ ;
+
+ $this->assertEquals(
+ new Node\Param('test', null, null, true),
+ $node
+ );
+ }
+}