public static function getExpectedException($className, $methodName)
{
$reflector = new ReflectionMethod($className, $methodName);
$docComment = $reflector->getDocComment();
$docComment = substr($docComment, 3, -2);
if (preg_match(self::REGEX_EXPECTED_EXCEPTION, $docComment, $matches)) {
$annotations = self::parseTestMethodAnnotations($className, $methodName);
$class = $matches[1];
$code = null;
$message = '';
$messageRegExp = '';
if (isset($matches[2])) {
$message = trim($matches[2]);
} elseif (isset($annotations['method']['expectedExceptionMessage'])) {
$message = self::parseAnnotationContent($annotations['method']['expectedExceptionMessage'][0]);
}
if (isset($annotations['method']['expectedExceptionMessageRegExp'])) {
$messageRegExp = self::parseAnnotationContent($annotations['method']['expectedExceptionMessageRegExp'][0]);
}
if (isset($matches[3])) {
$code = $matches[3];
} elseif (isset($annotations['method']['expectedExceptionCode'])) {
$code = self::parseAnnotationContent($annotations['method']['expectedExceptionCode'][0]);
}
if (is_numeric($code)) {
$code = (int) $code;
} elseif (is_string($code) && defined($code)) {
$code = (int) constant($code);
}
return ['class' => $class, 'code' => $code, 'message' => $message, 'message_regex' => $messageRegExp];
}
return false;
}
public function testGetExpectedException() { $this->assertEquals(array('class' => 'FooBarBaz', 'code' => 0, 'message' => ''), PHPUnit_Util_Test::getExpectedException('ExceptionTest', 'testOne')); $this->assertEquals(array('class' => 'Foo_Bar_Baz', 'code' => 0, 'message' => ''), PHPUnit_Util_Test::getExpectedException('ExceptionTest', 'testTwo')); $this->assertEquals(array('class' => 'Foo\\Bar\\Baz', 'code' => 0, 'message' => ''), PHPUnit_Util_Test::getExpectedException('ExceptionTest', 'testThree')); $this->assertEquals(array('class' => 'ほげ', 'code' => 0, 'message' => ''), PHPUnit_Util_Test::getExpectedException('ExceptionTest', 'testFour')); $this->assertEquals(array('class' => 'Class', 'code' => 1234, 'message' => 'Message'), PHPUnit_Util_Test::getExpectedException('ExceptionTest', 'testFive')); $this->assertEquals(array('class' => 'Class', 'code' => 1234, 'message' => 'Message'), PHPUnit_Util_Test::getExpectedException('ExceptionTest', 'testSix')); }