diff vendor/nikic/php-parser/test/PhpParser/Node/Stmt/ClassMethodTest.php @ 13:5fb285c0d0e3

Update Drupal core to 8.4.7 via Composer. Security update; I *think* we've been lucky to get away with this so far, as we don't support self-registration which seems to be used by the so-called "drupalgeddon 2" attack that 8.4.5 was vulnerable to.
author Chris Cannam
date Mon, 23 Apr 2018 09:33:26 +0100
parents 4c8ae668cc8c
children 129ea1e6d783
line wrap: on
line diff
--- a/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/ClassMethodTest.php	Fri Feb 23 15:52:07 2018 +0000
+++ b/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/ClassMethodTest.php	Mon Apr 23 09:33:26 2018 +0100
@@ -1,22 +1,27 @@
-<?php
+<?php declare(strict_types=1);
 
 namespace PhpParser\Node\Stmt;
 
-class ClassMethodTest extends \PHPUnit_Framework_TestCase
+use PhpParser\Node\Expr\Variable;
+use PhpParser\Node\Name;
+use PhpParser\Node\Param;
+use PHPUnit\Framework\TestCase;
+
+class ClassMethodTest extends TestCase
 {
     /**
      * @dataProvider provideModifiers
      */
     public function testModifiers($modifier) {
-        $node = new ClassMethod('foo', array(
+        $node = new ClassMethod('foo', [
             'type' => constant('PhpParser\Node\Stmt\Class_::MODIFIER_' . strtoupper($modifier))
-        ));
+        ]);
 
         $this->assertTrue($node->{'is' . $modifier}());
     }
 
     public function testNoModifiers() {
-        $node = new ClassMethod('foo', array('type' => 0));
+        $node = new ClassMethod('foo', ['type' => 0]);
 
         $this->assertTrue($node->isPublic());
         $this->assertFalse($node->isProtected());
@@ -24,17 +29,18 @@
         $this->assertFalse($node->isAbstract());
         $this->assertFalse($node->isFinal());
         $this->assertFalse($node->isStatic());
+        $this->assertFalse($node->isMagic());
     }
 
     public function provideModifiers() {
-        return array(
-            array('public'),
-            array('protected'),
-            array('private'),
-            array('abstract'),
-            array('final'),
-            array('static'),
-        );
+        return [
+            ['public'],
+            ['protected'],
+            ['private'],
+            ['abstract'],
+            ['final'],
+            ['static'],
+        ];
     }
 
     /**
@@ -42,22 +48,77 @@
      *
      * @dataProvider implicitPublicModifiers
      *
-     * @param integer $modifier Node type modifier
+     * @param string $modifier Node type modifier
      */
-    public function testImplicitPublic($modifier)
+    public function testImplicitPublic(string $modifier)
     {
-        $node = new ClassMethod('foo', array(
+        $node = new ClassMethod('foo', [
             'type' => constant('PhpParser\Node\Stmt\Class_::MODIFIER_' . strtoupper($modifier))
-        ));
+        ]);
 
         $this->assertTrue($node->isPublic(), 'Node should be implicitly public');
     }
 
     public function implicitPublicModifiers() {
-        return array(
-            array('abstract'),
-            array('final'),
-            array('static'),
-        );
+        return [
+            ['abstract'],
+            ['final'],
+            ['static'],
+        ];
+    }
+
+    /**
+     * @dataProvider provideMagics
+     *
+     * @param string $name Node name
+     */
+    public function testMagic(string $name) {
+        $node = new ClassMethod($name);
+        $this->assertTrue($node->isMagic(), 'Method should be magic');
+    }
+
+    public function provideMagics() {
+        return [
+             ['__construct'],
+             ['__DESTRUCT'],
+             ['__caLL'],
+             ['__callstatic'],
+             ['__get'],
+             ['__set'],
+             ['__isset'],
+             ['__unset'],
+             ['__sleep'],
+             ['__wakeup'],
+             ['__tostring'],
+             ['__set_state'],
+             ['__clone'],
+             ['__invoke'],
+             ['__debuginfo'],
+        ];
+    }
+
+    public function testFunctionLike() {
+        $param = new Param(new Variable('a'));
+        $type = new Name('Foo');
+        $return = new Return_(new Variable('a'));
+        $method = new ClassMethod('test', [
+            'byRef' => false,
+            'params' => [$param],
+            'returnType' => $type,
+            'stmts' => [$return],
+        ]);
+
+        $this->assertFalse($method->returnsByRef());
+        $this->assertSame([$param], $method->getParams());
+        $this->assertSame($type, $method->getReturnType());
+        $this->assertSame([$return], $method->getStmts());
+
+        $method = new ClassMethod('test', [
+            'byRef' => true,
+            'stmts' => null,
+        ]);
+
+        $this->assertTrue($method->returnsByRef());
+        $this->assertNull($method->getStmts());
     }
 }