diff --git a/src/Scanner/MethodScanner.php b/src/Scanner/MethodScanner.php index 05c67412..8fa85183 100644 --- a/src/Scanner/MethodScanner.php +++ b/src/Scanner/MethodScanner.php @@ -279,11 +279,11 @@ public function setName($name) * * @param int $visibility T_PUBLIC | T_PRIVATE | T_PROTECTED * @return self - * @throws \Zend\Code\Exception + * @throws \Zend\Code\Exception\InvalidArgumentException */ public function setVisibility($visibility) { - switch (strtolower($visibility)) { + switch ($visibility) { case T_PUBLIC: $this->isPublic = true; $this->isPrivate = false; @@ -303,7 +303,7 @@ public function setVisibility($visibility) break; default: - throw new Exception('Invalid visibility argument passed to setVisibility.'); + throw new Exception\InvalidArgumentException('Invalid visibility argument passed to setVisibility.'); } return $this; diff --git a/test/Scanner/MethodScannerTest.php b/test/Scanner/MethodScannerTest.php index 9facabcf..07c4ddab 100644 --- a/test/Scanner/MethodScannerTest.php +++ b/test/Scanner/MethodScannerTest.php @@ -12,6 +12,7 @@ use PHPUnit\Framework\TestCase; use Zend\Code\Scanner\FileScanner; use Zend\Code\Scanner\ParameterScanner; +use Zend\Code\Scanner\MethodScanner; use ZendTest\Code\TestAsset\AbstractClass; use ZendTest\Code\TestAsset\BarClass; use ZendTest\Code\TestAsset\FooClass; @@ -110,4 +111,24 @@ public function testMethodScannerWorksWithSingleAbstractFunction() self::assertTrue($method->isAbstract()); } + + public function testMethodScannerSetVisibilityThrowsInvalidArgumentException() + { + $methodScanner = new MethodScanner([]); + + // make sure test argument is invalid + $invalidArgument = max(T_PUBLIC, T_PROTECTED, T_PRIVATE) + 1; + + $this->expectException('\Zend\Code\Exception\InvalidArgumentException'); + $methodScanner->setVisibility($invalidArgument); + } + + public function testMethodScannerSetVisibilityAcceptsIntegerTokens() + { + $methodScanner = new MethodScanner([]); + + $this->assertSame($methodScanner->setVisibility(T_PUBLIC), $methodScanner); + $this->assertSame($methodScanner->setVisibility(T_PROTECTED), $methodScanner); + $this->assertSame($methodScanner->setVisibility(T_PRIVATE), $methodScanner); + } }