From 261a88fc3a16c0b3b42fdbca98ac139f0329dbae Mon Sep 17 00:00:00 2001 From: Steve Seear Date: Thu, 3 Jan 2008 09:07:56 +0000 Subject: [PATCH] Adding PHPT tests for the ReflectionMethod class. --- .../tests/ReflectionMethod_basic1.phpt | 300 ++++++++++++++++ .../tests/ReflectionMethod_basic2.phpt | 323 ++++++++++++++++++ .../tests/ReflectionMethod_basic3.phpt | 282 +++++++++++++++ .../tests/ReflectionMethod_basic4.phpt | 285 ++++++++++++++++ .../ReflectionMethod_constructor_basic.phpt | 121 +++++++ ...lectionMethod_getDeclaringClass_basic.phpt | 40 +++ .../ReflectionMethod_getDocComment_basic.phpt | 163 +++++++++ .../ReflectionMethod_getDocComment_error.phpt | 19 ++ .../ReflectionMethod_getModifiers_basic.phpt | 244 +++++++++++++ ...ectionMethod_getStaticVariables_basic.phpt | 89 +++++ .../ReflectionMethod_invokeArgs_basic.phpt | 98 ++++++ .../ReflectionMethod_invokeArgs_error1.phpt | 38 +++ .../ReflectionMethod_invokeArgs_error2.phpt | 29 ++ .../ReflectionMethod_invokeArgs_error3.phpt | 159 +++++++++ .../tests/ReflectionMethod_invoke_basic.phpt | 148 ++++++++ .../tests/ReflectionMethod_invoke_error1.phpt | 85 +++++ .../tests/ReflectionMethod_invoke_error2.phpt | 34 ++ ...flectionMethod_returnsReference_basic.phpt | 25 ++ 18 files changed, 2482 insertions(+) create mode 100644 ext/reflection/tests/ReflectionMethod_basic1.phpt create mode 100644 ext/reflection/tests/ReflectionMethod_basic2.phpt create mode 100644 ext/reflection/tests/ReflectionMethod_basic3.phpt create mode 100644 ext/reflection/tests/ReflectionMethod_basic4.phpt create mode 100644 ext/reflection/tests/ReflectionMethod_constructor_basic.phpt create mode 100644 ext/reflection/tests/ReflectionMethod_getDeclaringClass_basic.phpt create mode 100644 ext/reflection/tests/ReflectionMethod_getDocComment_basic.phpt create mode 100644 ext/reflection/tests/ReflectionMethod_getDocComment_error.phpt create mode 100644 ext/reflection/tests/ReflectionMethod_getModifiers_basic.phpt create mode 100644 ext/reflection/tests/ReflectionMethod_getStaticVariables_basic.phpt create mode 100644 ext/reflection/tests/ReflectionMethod_invokeArgs_basic.phpt create mode 100644 ext/reflection/tests/ReflectionMethod_invokeArgs_error1.phpt create mode 100644 ext/reflection/tests/ReflectionMethod_invokeArgs_error2.phpt create mode 100644 ext/reflection/tests/ReflectionMethod_invokeArgs_error3.phpt create mode 100644 ext/reflection/tests/ReflectionMethod_invoke_basic.phpt create mode 100644 ext/reflection/tests/ReflectionMethod_invoke_error1.phpt create mode 100644 ext/reflection/tests/ReflectionMethod_invoke_error2.phpt create mode 100644 ext/reflection/tests/ReflectionMethod_returnsReference_basic.phpt diff --git a/ext/reflection/tests/ReflectionMethod_basic1.phpt b/ext/reflection/tests/ReflectionMethod_basic1.phpt new file mode 100644 index 0000000000..8671c5acb7 --- /dev/null +++ b/ext/reflection/tests/ReflectionMethod_basic1.phpt @@ -0,0 +1,300 @@ +--TEST-- +ReflectionMethod class - various methods +--SKIPIF-- + +--FILE-- +isFinal()); + echo "\nisAbstract():\n"; + var_dump($methodInfo->isAbstract()); + echo "\nisPublic():\n"; + var_dump($methodInfo->isPublic()); + echo "\nisPrivate():\n"; + var_dump($methodInfo->isPrivate()); + echo "\nisProtected():\n"; + var_dump($methodInfo->isProtected()); + echo "\nisStatic():\n"; + var_dump($methodInfo->isStatic()); + echo "\nisConstructor():\n"; + var_dump($methodInfo->isConstructor()); + echo "\nisDestructor():\n"; + var_dump($methodInfo->isDestructor()); + echo "\n**********************************\n"; +} + +class TestClass +{ + public function foo() { + echo "Called foo()\n"; + } + + static function stat() { + echo "Called stat()\n"; + } + + private function priv() { + echo "Called priv()\n"; + } + + protected function prot() {} + + public function __destruct() {} +} + +class DerivedClass extends TestClass {} + +interface TestInterface { + public function int(); +} + +reflectMethod("DerivedClass", "foo"); +reflectMethod("TestClass", "stat"); +reflectMethod("TestClass", "priv"); +reflectMethod("TestClass", "prot"); +reflectMethod("DerivedClass", "prot"); +reflectMethod("TestInterface", "int"); +reflectMethod("ReflectionProperty", "__construct"); +reflectMethod("TestClass", "__destruct"); + +?> +--EXPECT-- +********************************** +Reflecting on method DerivedClass::foo() + + +isFinal(): +bool(false) + +isAbstract(): +bool(false) + +isPublic(): +bool(true) + +isPrivate(): +bool(false) + +isProtected(): +bool(false) + +isStatic(): +bool(false) + +isConstructor(): +bool(false) + +isDestructor(): +bool(false) + +********************************** +********************************** +Reflecting on method TestClass::stat() + + +isFinal(): +bool(false) + +isAbstract(): +bool(false) + +isPublic(): +bool(true) + +isPrivate(): +bool(false) + +isProtected(): +bool(false) + +isStatic(): +bool(true) + +isConstructor(): +bool(false) + +isDestructor(): +bool(false) + +********************************** +********************************** +Reflecting on method TestClass::priv() + + +isFinal(): +bool(false) + +isAbstract(): +bool(false) + +isPublic(): +bool(false) + +isPrivate(): +bool(true) + +isProtected(): +bool(false) + +isStatic(): +bool(false) + +isConstructor(): +bool(false) + +isDestructor(): +bool(false) + +********************************** +********************************** +Reflecting on method TestClass::prot() + + +isFinal(): +bool(false) + +isAbstract(): +bool(false) + +isPublic(): +bool(false) + +isPrivate(): +bool(false) + +isProtected(): +bool(true) + +isStatic(): +bool(false) + +isConstructor(): +bool(false) + +isDestructor(): +bool(false) + +********************************** +********************************** +Reflecting on method DerivedClass::prot() + + +isFinal(): +bool(false) + +isAbstract(): +bool(false) + +isPublic(): +bool(false) + +isPrivate(): +bool(false) + +isProtected(): +bool(true) + +isStatic(): +bool(false) + +isConstructor(): +bool(false) + +isDestructor(): +bool(false) + +********************************** +********************************** +Reflecting on method TestInterface::int() + + +isFinal(): +bool(false) + +isAbstract(): +bool(true) + +isPublic(): +bool(true) + +isPrivate(): +bool(false) + +isProtected(): +bool(false) + +isStatic(): +bool(false) + +isConstructor(): +bool(false) + +isDestructor(): +bool(false) + +********************************** +********************************** +Reflecting on method ReflectionProperty::__construct() + + +isFinal(): +bool(false) + +isAbstract(): +bool(false) + +isPublic(): +bool(true) + +isPrivate(): +bool(false) + +isProtected(): +bool(false) + +isStatic(): +bool(false) + +isConstructor(): +bool(true) + +isDestructor(): +bool(false) + +********************************** +********************************** +Reflecting on method TestClass::__destruct() + + +isFinal(): +bool(false) + +isAbstract(): +bool(false) + +isPublic(): +bool(true) + +isPrivate(): +bool(false) + +isProtected(): +bool(false) + +isStatic(): +bool(false) + +isConstructor(): +bool(false) + +isDestructor(): +bool(true) + +********************************** + + diff --git a/ext/reflection/tests/ReflectionMethod_basic2.phpt b/ext/reflection/tests/ReflectionMethod_basic2.phpt new file mode 100644 index 0000000000..75869186d3 --- /dev/null +++ b/ext/reflection/tests/ReflectionMethod_basic2.phpt @@ -0,0 +1,323 @@ +--TEST-- +ReflectionMethod class __toString() and export() methods +--SKIPIF-- + +--FILE-- +__toString()); + echo "\nexport():\n"; + var_dump(ReflectionMethod::export($class, $method, true)); + echo "\n**********************************\n"; +} + +class TestClass +{ + public function foo() { + echo "Called foo()\n"; + } + + static function stat() { + echo "Called stat()\n"; + } + + private function priv() { + echo "Called priv()\n"; + } + + protected function prot() {} + + public function __destruct() {} +} + +class DerivedClass extends TestClass {} + +interface TestInterface { + public function int(); +} + +reflectMethod("DerivedClass", "foo"); +reflectMethod("TestClass", "stat"); +reflectMethod("TestClass", "priv"); +reflectMethod("TestClass", "prot"); +reflectMethod("DerivedClass", "prot"); +reflectMethod("TestInterface", "int"); +reflectMethod("ReflectionProperty", "__construct"); +reflectMethod("TestClass", "__destruct"); + +?> +--EXPECTF-- +********************************** +Reflecting on method DerivedClass::foo() + +__toString(): +string(%d) "Method [ public method foo ] { + @@ %s 16 - 18 +} +" + +export(): +string(%d) "Method [ public method foo ] { + @@ %s 16 - 18 +} +" + +********************************** +********************************** +Reflecting on method TestClass::stat() + +__toString(): +string(%d) "Method [ static public method stat ] { + @@ %s 20 - 22 +} +" + +export(): +string(%d) "Method [ static public method stat ] { + @@ %s 20 - 22 +} +" + +********************************** +********************************** +Reflecting on method TestClass::priv() + +__toString(): +string(%d) "Method [ private method priv ] { + @@ %s 24 - 26 +} +" + +export(): +string(%d) "Method [ private method priv ] { + @@ %s 24 - 26 +} +" + +********************************** +********************************** +Reflecting on method TestClass::prot() + +__toString(): +string(%d) "Method [ protected method prot ] { + @@ %s 28 - 28 +} +" + +export(): +string(%d) "Method [ protected method prot ] { + @@ %s 28 - 28 +} +" + +********************************** +********************************** +Reflecting on method DerivedClass::prot() + +__toString(): +string(%d) "Method [ protected method prot ] { + @@ %s 28 - 28 +} +" + +export(): +string(%d) "Method [ protected method prot ] { + @@ %s 28 - 28 +} +" + +********************************** +********************************** +Reflecting on method TestInterface::int() + +__toString(): +string(%d) "Method [ abstract public method int ] { + @@ %s 36 - 36 +} +" + +export(): +string(%d) "Method [ abstract public method int ] { + @@ %s 36 - 36 +} +" + +********************************** +********************************** +Reflecting on method ReflectionProperty::__construct() + +__toString(): +string(%d) "Method [ public method __construct ] { + + - Parameters [1] { + Parameter #0 [ $argument ] + } +} +" + +export(): +string(%d) "Method [ public method __construct ] { + + - Parameters [1] { + Parameter #0 [ $argument ] + } +} +" + +********************************** +********************************** +Reflecting on method TestClass::__destruct() + +__toString(): +string(%d) "Method [ public method __destruct ] { + @@ %s 30 - 30 +} +" + +export(): +string(%d) "Method [ public method __destruct ] { + @@ %s 30 - 30 +} +" + +********************************** +--UEXPECTF-- +********************************** +Reflecting on method DerivedClass::foo() + +__toString(): +unicode(%d) "Method [ public method foo ] { + @@ %sReflectionMethod_basic2.php 16 - 18 +} +" + +export(): +unicode(%d) "Method [ public method foo ] { + @@ %sReflectionMethod_basic2.php 16 - 18 +} +" + +********************************** +********************************** +Reflecting on method TestClass::stat() + +__toString(): +unicode(%d) "Method [ static public method stat ] { + @@ %sReflectionMethod_basic2.php 20 - 22 +} +" + +export(): +unicode(%d) "Method [ static public method stat ] { + @@ %sReflectionMethod_basic2.php 20 - 22 +} +" + +********************************** +********************************** +Reflecting on method TestClass::priv() + +__toString(): +unicode(%d) "Method [ private method priv ] { + @@ %sReflectionMethod_basic2.php 24 - 26 +} +" + +export(): +unicode(%d) "Method [ private method priv ] { + @@ %sReflectionMethod_basic2.php 24 - 26 +} +" + +********************************** +********************************** +Reflecting on method TestClass::prot() + +__toString(): +unicode(%d) "Method [ protected method prot ] { + @@ %sReflectionMethod_basic2.php 28 - 28 +} +" + +export(): +unicode(%d) "Method [ protected method prot ] { + @@ %sReflectionMethod_basic2.php 28 - 28 +} +" + +********************************** +********************************** +Reflecting on method DerivedClass::prot() + +__toString(): +unicode(%d) "Method [ protected method prot ] { + @@ %sReflectionMethod_basic2.php 28 - 28 +} +" + +export(): +unicode(%d) "Method [ protected method prot ] { + @@ %sReflectionMethod_basic2.php 28 - 28 +} +" + +********************************** +********************************** +Reflecting on method TestInterface::int() + +__toString(): +unicode(%d) "Method [ abstract public method int ] { + @@ %sReflectionMethod_basic2.php 36 - 36 +} +" + +export(): +unicode(%d) "Method [ abstract public method int ] { + @@ %sReflectionMethod_basic2.php 36 - 36 +} +" + +********************************** +********************************** +Reflecting on method ReflectionProperty::__construct() + +__toString(): +unicode(137) "Method [ public method __construct ] { + + - Parameters [1] { + Parameter #0 [ $argument ] + } +} +" + +export(): +unicode(137) "Method [ public method __construct ] { + + - Parameters [1] { + Parameter #0 [ $argument ] + } +} +" + +********************************** +********************************** +Reflecting on method TestClass::__destruct() + +__toString(): +unicode(%d) "Method [ public method __destruct ] { + @@ %sReflectionMethod_basic2.php 30 - 30 +} +" + +export(): +unicode(%d) "Method [ public method __destruct ] { + @@ %sReflectionMethod_basic2.php 30 - 30 +} +" + +********************************** diff --git a/ext/reflection/tests/ReflectionMethod_basic3.phpt b/ext/reflection/tests/ReflectionMethod_basic3.phpt new file mode 100644 index 0000000000..dce3babb89 --- /dev/null +++ b/ext/reflection/tests/ReflectionMethod_basic3.phpt @@ -0,0 +1,282 @@ +--TEST-- +ReflectionMethod class getName(), isInternal() and isUserDefined() methods +--SKIPIF-- + +--FILE-- +getName()); + echo "\nisInternal():\n"; + var_dump($methodInfo->isInternal()); + echo "\nisUserDefined():\n"; + var_dump($methodInfo->isUserDefined()); + echo "\n**********************************\n"; +} + +class TestClass +{ + public function foo() { + echo "Called foo()\n"; + } + + static function stat() { + echo "Called stat()\n"; + } + + private function priv() { + echo "Called priv()\n"; + } + + protected function prot() {} + + public function __destruct() {} +} + +class DerivedClass extends TestClass {} + +interface TestInterface { + public function int(); +} + +reflectMethod("DerivedClass", "foo"); +reflectMethod("TestClass", "stat"); +reflectMethod("TestClass", "priv"); +reflectMethod("TestClass", "prot"); +reflectMethod("DerivedClass", "prot"); +reflectMethod("TestInterface", "int"); +reflectMethod("ReflectionProperty", "__construct"); +reflectMethod("TestClass", "__destruct"); + + +?> +--EXPECT-- +********************************** +Reflecting on method DerivedClass::foo() + + +getName(): +string(3) "foo" + +isInternal(): +bool(false) + +isUserDefined(): +bool(true) + +********************************** +********************************** +Reflecting on method TestClass::stat() + + +getName(): +string(4) "stat" + +isInternal(): +bool(false) + +isUserDefined(): +bool(true) + +********************************** +********************************** +Reflecting on method TestClass::priv() + + +getName(): +string(4) "priv" + +isInternal(): +bool(false) + +isUserDefined(): +bool(true) + +********************************** +********************************** +Reflecting on method TestClass::prot() + + +getName(): +string(4) "prot" + +isInternal(): +bool(false) + +isUserDefined(): +bool(true) + +********************************** +********************************** +Reflecting on method DerivedClass::prot() + + +getName(): +string(4) "prot" + +isInternal(): +bool(false) + +isUserDefined(): +bool(true) + +********************************** +********************************** +Reflecting on method TestInterface::int() + + +getName(): +string(3) "int" + +isInternal(): +bool(false) + +isUserDefined(): +bool(true) + +********************************** +********************************** +Reflecting on method ReflectionProperty::__construct() + + +getName(): +string(11) "__construct" + +isInternal(): +bool(true) + +isUserDefined(): +bool(false) + +********************************** +********************************** +Reflecting on method TestClass::__destruct() + + +getName(): +string(10) "__destruct" + +isInternal(): +bool(false) + +isUserDefined(): +bool(true) + +********************************** +--UEXPECT-- +********************************** +Reflecting on method DerivedClass::foo() + + +getName(): +unicode(3) "foo" + +isInternal(): +bool(false) + +isUserDefined(): +bool(true) + +********************************** +********************************** +Reflecting on method TestClass::stat() + + +getName(): +unicode(4) "stat" + +isInternal(): +bool(false) + +isUserDefined(): +bool(true) + +********************************** +********************************** +Reflecting on method TestClass::priv() + + +getName(): +unicode(4) "priv" + +isInternal(): +bool(false) + +isUserDefined(): +bool(true) + +********************************** +********************************** +Reflecting on method TestClass::prot() + + +getName(): +unicode(4) "prot" + +isInternal(): +bool(false) + +isUserDefined(): +bool(true) + +********************************** +********************************** +Reflecting on method DerivedClass::prot() + + +getName(): +unicode(4) "prot" + +isInternal(): +bool(false) + +isUserDefined(): +bool(true) + +********************************** +********************************** +Reflecting on method TestInterface::int() + + +getName(): +unicode(3) "int" + +isInternal(): +bool(false) + +isUserDefined(): +bool(true) + +********************************** +********************************** +Reflecting on method ReflectionProperty::__construct() + + +getName(): +unicode(11) "__construct" + +isInternal(): +bool(true) + +isUserDefined(): +bool(false) + +********************************** +********************************** +Reflecting on method TestClass::__destruct() + + +getName(): +unicode(10) "__destruct" + +isInternal(): +bool(false) + +isUserDefined(): +bool(true) + +********************************** diff --git a/ext/reflection/tests/ReflectionMethod_basic4.phpt b/ext/reflection/tests/ReflectionMethod_basic4.phpt new file mode 100644 index 0000000000..1846845ecd --- /dev/null +++ b/ext/reflection/tests/ReflectionMethod_basic4.phpt @@ -0,0 +1,285 @@ +--TEST-- +ReflectionMethod class getFileName(), getStartLine() and getEndLine() methods +--SKIPIF-- + +--FILE-- +getFileName()); + echo "\ngetStartLine():\n"; + var_dump($methodInfo->getStartLine()); + echo "\ngetEndLine():\n"; + var_dump($methodInfo->getEndLine()); + echo "\n**********************************\n"; +} + +class TestClass +{ + public function foo() { + + + echo "Called foo()\n"; + + + } + + static function stat() { + echo "Called stat()\n"; + } + + private function priv() { + echo "Called priv()\n"; + } + + protected function prot() {} + + public function __destruct() {} +} + +class DerivedClass extends TestClass {} + +interface TestInterface { + public function int(); +} + +reflectMethod("DerivedClass", "foo"); +reflectMethod("TestClass", "stat"); +reflectMethod("TestClass", "priv"); +reflectMethod("TestClass", "prot"); +reflectMethod("DerivedClass", "prot"); +reflectMethod("TestInterface", "int"); +reflectMethod("ReflectionProperty", "__construct"); +reflectMethod("TestClass", "__destruct"); + +?> +--EXPECTF-- +********************************** +Reflecting on method DerivedClass::foo() + + +getFileName(): +string(%d) "%sReflectionMethod_basic4.php" + +getStartLine(): +int(18) + +getEndLine(): +int(24) + +********************************** +********************************** +Reflecting on method TestClass::stat() + + +getFileName(): +string(%d) "%sReflectionMethod_basic4.php" + +getStartLine(): +int(26) + +getEndLine(): +int(28) + +********************************** +********************************** +Reflecting on method TestClass::priv() + + +getFileName(): +string(%d) "%sReflectionMethod_basic4.php" + +getStartLine(): +int(30) + +getEndLine(): +int(32) + +********************************** +********************************** +Reflecting on method TestClass::prot() + + +getFileName(): +string(%d) "%sReflectionMethod_basic4.php" + +getStartLine(): +int(34) + +getEndLine(): +int(34) + +********************************** +********************************** +Reflecting on method DerivedClass::prot() + + +getFileName(): +string(%d) "%sReflectionMethod_basic4.php" + +getStartLine(): +int(34) + +getEndLine(): +int(34) + +********************************** +********************************** +Reflecting on method TestInterface::int() + + +getFileName(): +string(%d) "%sReflectionMethod_basic4.php" + +getStartLine(): +int(42) + +getEndLine(): +int(42) + +********************************** +********************************** +Reflecting on method ReflectionProperty::__construct() + + +getFileName(): +bool(false) + +getStartLine(): +bool(false) + +getEndLine(): +bool(false) + +********************************** +********************************** +Reflecting on method TestClass::__destruct() + + +getFileName(): +string(%d) "%sReflectionMethod_basic4.php" + +getStartLine(): +int(36) + +getEndLine(): +int(36) + +********************************** +--UEXPECTF-- +********************************** +Reflecting on method DerivedClass::foo() + + +getFileName(): +unicode(%d) "%sReflectionMethod_basic4.php" + +getStartLine(): +int(18) + +getEndLine(): +int(24) + +********************************** +********************************** +Reflecting on method TestClass::stat() + + +getFileName(): +unicode(%d) "%sReflectionMethod_basic4.php" + +getStartLine(): +int(26) + +getEndLine(): +int(28) + +********************************** +********************************** +Reflecting on method TestClass::priv() + + +getFileName(): +unicode(%d) "%sReflectionMethod_basic4.php" + +getStartLine(): +int(30) + +getEndLine(): +int(32) + +********************************** +********************************** +Reflecting on method TestClass::prot() + + +getFileName(): +unicode(%d) "%sReflectionMethod_basic4.php" + +getStartLine(): +int(34) + +getEndLine(): +int(34) + +********************************** +********************************** +Reflecting on method DerivedClass::prot() + + +getFileName(): +unicode(%d) "%sReflectionMethod_basic4.php" + +getStartLine(): +int(34) + +getEndLine(): +int(34) + +********************************** +********************************** +Reflecting on method TestInterface::int() + + +getFileName(): +unicode(%d) "%sReflectionMethod_basic4.php" + +getStartLine(): +int(42) + +getEndLine(): +int(42) + +********************************** +********************************** +Reflecting on method ReflectionProperty::__construct() + + +getFileName(): +bool(false) + +getStartLine(): +bool(false) + +getEndLine(): +bool(false) + +********************************** +********************************** +Reflecting on method TestClass::__destruct() + + +getFileName(): +unicode(%d) "%sReflectionMethod_basic4.php" + +getStartLine(): +int(36) + +getEndLine(): +int(36) + +********************************** diff --git a/ext/reflection/tests/ReflectionMethod_constructor_basic.phpt b/ext/reflection/tests/ReflectionMethod_constructor_basic.phpt new file mode 100644 index 0000000000..5655b0eeab --- /dev/null +++ b/ext/reflection/tests/ReflectionMethod_constructor_basic.phpt @@ -0,0 +1,121 @@ +--TEST-- +ReflectionMethod::isConstructor() +--SKIPIF-- + +--FILE-- +isConstructor()); + +class ExtendsNewCtor extends NewCtor { +} +echo "\nInherited new-style constructor\n"; +$methodInfo = new ReflectionMethod("ExtendsNewCtor::__construct"); +var_dump($methodInfo->isConstructor()); + +class OldCtor { + function OldCtor() { + echo "In " . __METHOD__ . "\n"; + } +} +echo "\nOld-style constructor:\n"; +$methodInfo = new ReflectionMethod("OldCtor::OldCtor"); +var_dump($methodInfo->isConstructor()); + +class ExtendsOldCtor extends OldCtor { +} +echo "\nInherited old-style constructor:\n"; +$methodInfo = new ReflectionMethod("ExtendsOldCtor::OldCtor"); +var_dump($methodInfo->isConstructor()); + +class X { + function Y() { + echo "In " . __METHOD__ . "\n"; + } +} +echo "\nNot a constructor:\n"; +$methodInfo = new ReflectionMethod("X::Y"); +var_dump($methodInfo->isConstructor()); + +class Y extends X { +} +echo "\nInherited method of the same name as the class:\n"; +$methodInfo = new ReflectionMethod("Y::Y"); +var_dump($methodInfo->isConstructor()); + +class OldAndNewCtor { + function OldAndNewCtor() { + echo "In " . __METHOD__ . "\n"; + } + + function __construct() { + echo "In " . __METHOD__ . "\n"; + } +} +echo "\nOld-style constructor:\n"; +$methodInfo = new ReflectionMethod("OldAndNewCtor::OldAndNewCtor"); +var_dump($methodInfo->isConstructor()); + +echo "\nRedefined constructor:\n"; +$methodInfo = new ReflectionMethod("OldAndNewCtor::__construct"); +var_dump($methodInfo->isConstructor()); + +class NewAndOldCtor { + function __construct() { + echo "In " . __METHOD__ . "\n"; + } + + function NewAndOldCtor() { + echo "In " . __METHOD__ . "\n"; + } +} +echo "\nNew-style constructor:\n"; +$methodInfo = new ReflectionMethod("NewAndOldCtor::__construct"); +var_dump($methodInfo->isConstructor()); + +echo "\nRedefined old-style constructor:\n"; +$methodInfo = new ReflectionMethod("NewAndOldCtor::NewAndOldCtor"); +var_dump($methodInfo->isConstructor()); + +?> +--EXPECTF-- +Strict Standards: Redefining already defined constructor for class OldAndNewCtor in %s on line %d + +Strict Standards: %s for class NewAndOldCtor in %s on line %d +New-style constructor: +bool(true) + +Inherited new-style constructor +bool(true) + +Old-style constructor: +bool(true) + +Inherited old-style constructor: +bool(true) + +Not a constructor: +bool(false) + +Inherited method of the same name as the class: +bool(false) + +Old-style constructor: +bool(false) + +Redefined constructor: +bool(true) + +New-style constructor: +bool(true) + +Redefined old-style constructor: +bool(false) diff --git a/ext/reflection/tests/ReflectionMethod_getDeclaringClass_basic.phpt b/ext/reflection/tests/ReflectionMethod_getDeclaringClass_basic.phpt new file mode 100644 index 0000000000..dca7b06303 --- /dev/null +++ b/ext/reflection/tests/ReflectionMethod_getDeclaringClass_basic.phpt @@ -0,0 +1,40 @@ +--TEST-- +ReflectionMethod::getDeclaringClass() +--SKIPIF-- + +--FILE-- +getDeclaringClass()); + +$methodInfo = new ReflectionMethod('B', 'bar'); +var_dump($methodInfo->getDeclaringClass()); + +?> +--EXPECTF-- +object(ReflectionClass)#%d (1) { + ["name"]=> + string(1) "A" +} +object(ReflectionClass)#%d (1) { + ["name"]=> + string(1) "B" +} +--UEXPECTF-- +object(ReflectionClass)#%d (1) { + [u"name"]=> + unicode(1) "A" +} +object(ReflectionClass)#%d (1) { + [u"name"]=> + unicode(1) "B" +} diff --git a/ext/reflection/tests/ReflectionMethod_getDocComment_basic.phpt b/ext/reflection/tests/ReflectionMethod_getDocComment_basic.phpt new file mode 100644 index 0000000000..bc2ac26931 --- /dev/null +++ b/ext/reflection/tests/ReflectionMethod_getDocComment_basic.phpt @@ -0,0 +1,163 @@ +--TEST-- +ReflectionMethod::getDocComment() +--SKIPIF-- + +--FILE-- +getMethods(); + foreach ($rms as $rm) { + echo "\n\n---> Doc comment for $class::" . $rm->getName() . "():\n"; + var_dump($rm->getDocComment()); + } +} +?> +--EXPECTF-- + + +---> Doc comment for A::f(): +string(%d) "/** + * My Doc Comment for A::f + */" + + +---> Doc comment for A::privf(): +string(%d) "/** + * My Doc Comment for A::privf + */" + + +---> Doc comment for A::protStatf(): +string(%d) "/** My Doc Comment for A::protStatf */" + + +---> Doc comment for A::finalStatPubf(): +string(%d) "/** + + * My Doc Comment for A::finalStatPubf + */" + + +---> Doc comment for B::f(): +bool(false) + + +---> Doc comment for B::privf(): +string(%d) "/** * + * My Doc Comment for B::privf + */" + + +---> Doc comment for B::protStatf(): +string(%d) "/** My Doc Comment for B::protStatf + + + + + */" + + +---> Doc comment for B::finalStatPubf(): +string(%d) "/** + + * My Doc Comment for A::finalStatPubf + */" +--UEXPECTF-- +---> Doc comment for A::f(): +unicode(%s) "/** + * My Doc Comment for A::f + */" + + +---> Doc comment for A::privf(): +unicode(%s) "/** + * My Doc Comment for A::privf + */" + + +---> Doc comment for A::protStatf(): +unicode(%s) "/** My Doc Comment for A::protStatf */" + + +---> Doc comment for A::finalStatPubf(): +unicode(%s) "/** + + * My Doc Comment for A::finalStatPubf + */" + + +---> Doc comment for B::f(): +bool(false) + + +---> Doc comment for B::privf(): +unicode(%s) "/** * + * My Doc Comment for B::privf + */" + + +---> Doc comment for B::protStatf(): +unicode(%s) "/** My Doc Comment for B::protStatf + + + + + */" + + +---> Doc comment for B::finalStatPubf(): +unicode(%s) "/** + + * My Doc Comment for A::finalStatPubf + */" diff --git a/ext/reflection/tests/ReflectionMethod_getDocComment_error.phpt b/ext/reflection/tests/ReflectionMethod_getDocComment_error.phpt new file mode 100644 index 0000000000..041d17ef32 --- /dev/null +++ b/ext/reflection/tests/ReflectionMethod_getDocComment_error.phpt @@ -0,0 +1,19 @@ +--TEST-- +ReflectionMethod::getDocComment() errors +--SKIPIF-- + +--FILE-- +getDocComment(null)); +var_dump($rc->getDocComment('X')); +?> +--EXPECTF-- + +Warning: Wrong parameter count for ReflectionFunctionAbstract::getDocComment() in %s on line %d +NULL + +Warning: Wrong parameter count for ReflectionFunctionAbstract::getDocComment() in %s on line %d +NULL + diff --git a/ext/reflection/tests/ReflectionMethod_getModifiers_basic.phpt b/ext/reflection/tests/ReflectionMethod_getModifiers_basic.phpt new file mode 100644 index 0000000000..74b96f8eef --- /dev/null +++ b/ext/reflection/tests/ReflectionMethod_getModifiers_basic.phpt @@ -0,0 +1,244 @@ +--TEST-- +ReflectionMethod::getModifiers() +--SKIPIF-- + +--FILE-- +getMethods(); + + foreach ($methodArray as $method) { + echo "Modifiers for method $method->class::$method->name():\n"; + var_dump($method->getModifiers()); + echo "\n\n"; + } +} + +class TestClass +{ + public function foo() { + echo "Called foo()\n"; + } + + static function stat() { + echo "Called stat()\n"; + } + + private function priv() { + echo "Called priv()\n"; + } + + protected function prot() {} + + public final function fin() {} + + public function __destruct() {} + + public function __call($a, $b) {} + + public function __clone() {} + + public function __get($a) {} + + public function __set($a, $b) {} + + public function __unset($a) {} + + public function __isset($a) {} + + public function __tostring() {} + + public function __sleep() {} + + public function __wakeup() {} + + public function __set_state() {} + + public function __autoload() {} +} + +class DerivedClass extends TestClass {} + +interface TestInterface { + public function int(); + public function __clone(); +} + +abstract class AbstractClass { + public abstract function foo(); +} + + + +reflectMethodModifiers("TestClass"); +reflectMethodModifiers("DerivedClass"); +reflectMethodModifiers("TestInterface"); +reflectMethodModifiers("AbstractClass"); + +echo "Wrong number of params:\n"; +$a = new ReflectionMethod('TestClass::foo'); +$a->getModifiers(1); + +$a = new ReflectionMethod('ReflectionMethod::getModifiers'); + +echo "\nReflectionMethod::getModifiers() modifiers:\n"; +var_dump($a->getModifiers()); + +?> +--EXPECTF-- +Modifiers for method TestClass::foo(): +int(65792) + + +Modifiers for method TestClass::stat(): +int(257) + + +Modifiers for method TestClass::priv(): +int(66560) + + +Modifiers for method TestClass::prot(): +int(66048) + + +Modifiers for method TestClass::fin(): +int(65796) + + +Modifiers for method TestClass::__destruct(): +int(16640) + + +Modifiers for method TestClass::__call(): +int(256) + + +Modifiers for method TestClass::__clone(): +int(33024) + + +Modifiers for method TestClass::__get(): +int(256) + + +Modifiers for method TestClass::__set(): +int(256) + + +Modifiers for method TestClass::__unset(): +int(256) + + +Modifiers for method TestClass::__isset(): +int(256) + + +Modifiers for method TestClass::__tostring(): +int(256) + + +Modifiers for method TestClass::__sleep(): +int(65792) + + +Modifiers for method TestClass::__wakeup(): +int(65792) + + +Modifiers for method TestClass::__set_state(): +int(65792) + + +Modifiers for method TestClass::__autoload(): +int(65792) + + +Modifiers for method DerivedClass::foo(): +int(65792) + + +Modifiers for method DerivedClass::stat(): +int(257) + + +Modifiers for method DerivedClass::priv(): +int(66560) + + +Modifiers for method DerivedClass::prot(): +int(66048) + + +Modifiers for method DerivedClass::fin(): +int(65796) + + +Modifiers for method DerivedClass::__destruct(): +int(16640) + + +Modifiers for method DerivedClass::__call(): +int(256) + + +Modifiers for method DerivedClass::__clone(): +int(33024) + + +Modifiers for method DerivedClass::__get(): +int(256) + + +Modifiers for method DerivedClass::__set(): +int(256) + + +Modifiers for method DerivedClass::__unset(): +int(256) + + +Modifiers for method DerivedClass::__isset(): +int(256) + + +Modifiers for method DerivedClass::__tostring(): +int(256) + + +Modifiers for method DerivedClass::__sleep(): +int(65792) + + +Modifiers for method DerivedClass::__wakeup(): +int(65792) + + +Modifiers for method DerivedClass::__set_state(): +int(65792) + + +Modifiers for method DerivedClass::__autoload(): +int(65792) + + +Modifiers for method TestInterface::int(): +int(258) + + +Modifiers for method TestInterface::__clone(): +int(258) + + +Modifiers for method AbstractClass::foo(): +int(65794) + + +Wrong number of params: + +Warning: Wrong parameter count for ReflectionMethod::getModifiers() in %s on line %d + +ReflectionMethod::getModifiers() modifiers: +int(256) diff --git a/ext/reflection/tests/ReflectionMethod_getStaticVariables_basic.phpt b/ext/reflection/tests/ReflectionMethod_getStaticVariables_basic.phpt new file mode 100644 index 0000000000..3631596c4c --- /dev/null +++ b/ext/reflection/tests/ReflectionMethod_getStaticVariables_basic.phpt @@ -0,0 +1,89 @@ +--TEST-- +ReflectionMethod::getStaticVariables() +--SKIPIF-- + +--FILE-- +getStaticVariables()); + +echo "\nPrivate method:\n"; +$methodInfo = new ReflectionMethod('TestClass::bar'); +var_dump($methodInfo->getStaticVariables()); + +echo "\nMethod with no static variables:\n"; +$methodInfo = new ReflectionMethod('TestClass::noStatics'); +var_dump($methodInfo->getStaticVariables()); + +echo "\nInternal Method:\n"; +$methodInfo = new ReflectionMethod('ReflectionClass::getName'); +var_dump($methodInfo->getStaticVariables()); + +?> +--EXPECT-- +Public method: +array(3) { + ["c"]=> + NULL + ["a"]=> + int(1) + ["b"]=> + string(5) "hello" +} + +Private method: +array(1) { + ["a"]=> + int(1) +} + +Method with no static variables: +array(0) { +} + +Internal Method: +array(0) { +} +--UEXPECT-- +Public method: +array(3) { + [u"c"]=> + NULL + [u"a"]=> + int(1) + [u"b"]=> + unicode(5) "hello" +} + +Private method: +array(1) { + [u"a"]=> + int(1) +} + +Method with no static variables: +array(0) { +} + +Internal Method: +array(0) { +} diff --git a/ext/reflection/tests/ReflectionMethod_invokeArgs_basic.phpt b/ext/reflection/tests/ReflectionMethod_invokeArgs_basic.phpt new file mode 100644 index 0000000000..7d7d43a010 --- /dev/null +++ b/ext/reflection/tests/ReflectionMethod_invokeArgs_basic.phpt @@ -0,0 +1,98 @@ +--TEST-- +ReflectionMethod::invokeArgs() +--SKIPIF-- + +--FILE-- +prop\n"; + var_dump($this); + return "Return Val"; + } + + public function willThrow() { + throw new Exception("Called willThrow()"); + } + + public function methodWithArgs($a, $b) { + echo "Called methodWithArgs($a, $b)\n"; + } +} + + +$testClassInstance = new TestClass(); +$testClassInstance->prop = "Hello"; + +$foo = new ReflectionMethod($testClassInstance, 'foo'); +$methodWithArgs = new ReflectionMethod('TestClass', 'methodWithArgs'); +$methodThatThrows = new ReflectionMethod("TestClass::willThrow"); + + +echo "Public method:\n"; + +var_dump($foo->invokeArgs($testClassInstance, array())); +var_dump($foo->invokeArgs($testClassInstance, array(true))); + +echo "\nMethod with args:\n"; + +var_dump($methodWithArgs->invokeArgs($testClassInstance, array(1, "arg2"))); +var_dump($methodWithArgs->invokeArgs($testClassInstance, array(1, "arg2", 3))); + +echo "\nMethod that throws an exception:\n"; +try { + $methodThatThrows->invokeArgs($testClassInstance, array()); +} catch (Exception $e) { + var_dump($e->getMessage()); +} + +?> +--EXPECTF-- +Public method: +Called foo(), property = Hello +object(TestClass)#%d (1) { + ["prop"]=> + string(5) "Hello" +} +string(10) "Return Val" +Called foo(), property = Hello +object(TestClass)#%d (1) { + ["prop"]=> + string(5) "Hello" +} +string(10) "Return Val" + +Method with args: +Called methodWithArgs(1, arg2) +NULL +Called methodWithArgs(1, arg2) +NULL + +Method that throws an exception: +string(18) "Called willThrow()" +--UEXPECTF-- +Public method: +Called foo(), property = Hello +object(TestClass)#%d (1) { + [u"prop"]=> + unicode(5) "Hello" +} +unicode(10) "Return Val" +Called foo(), property = Hello +object(TestClass)#%d (1) { + [u"prop"]=> + unicode(5) "Hello" +} +unicode(10) "Return Val" + +Method with args: +Called methodWithArgs(1, arg2) +NULL +Called methodWithArgs(1, arg2) +NULL + +Method that throws an exception: +unicode(18) "Called willThrow()" diff --git a/ext/reflection/tests/ReflectionMethod_invokeArgs_error1.phpt b/ext/reflection/tests/ReflectionMethod_invokeArgs_error1.phpt new file mode 100644 index 0000000000..19b7fe2885 --- /dev/null +++ b/ext/reflection/tests/ReflectionMethod_invokeArgs_error1.phpt @@ -0,0 +1,38 @@ +--TEST-- +ReflectionMethod:invokeArgs() errors +--SKIPIF-- + +--FILE-- +invokeArgs($testClassInstance, array())); + +?> +--EXPECTF-- +Method with args: + +Warning: Missing argument 1 for TestClass::methodWithArgs() in %s on line %d + +Warning: Missing argument 2 for TestClass::methodWithArgs() in %s on line %d + +Notice: Undefined variable: a in %s on line %d + +Notice: Undefined variable: b in %s on line %d +Called methodWithArgs(, ) +NULL diff --git a/ext/reflection/tests/ReflectionMethod_invokeArgs_error2.phpt b/ext/reflection/tests/ReflectionMethod_invokeArgs_error2.phpt new file mode 100644 index 0000000000..ebdf9730b0 --- /dev/null +++ b/ext/reflection/tests/ReflectionMethod_invokeArgs_error2.phpt @@ -0,0 +1,29 @@ +--TEST-- +ReflectionMethod::invokeArgs() further errors +--SKIPIF-- + +--FILE-- +invokeArgs($testClassInstance, true)); +} catch (Exception $e) { + var_dump($e->getMessage()); +} + +?> +--EXPECTF-- +Catchable fatal error: Argument 2 passed to ReflectionMethod::invokeArgs() must be an array, boolean given in %s on line %d diff --git a/ext/reflection/tests/ReflectionMethod_invokeArgs_error3.phpt b/ext/reflection/tests/ReflectionMethod_invokeArgs_error3.phpt new file mode 100644 index 0000000000..6e0cfe803b --- /dev/null +++ b/ext/reflection/tests/ReflectionMethod_invokeArgs_error3.phpt @@ -0,0 +1,159 @@ +--TEST-- +ReflectionMethod::invokeArgs() further errors +--SKIPIF-- + +--FILE-- +prop\n"; + var_dump($this); + return "Return Val"; + } + + public static function staticMethod() { + echo "Called staticMethod()\n"; + var_dump($this); + } + + private static function privateMethod() { + echo "Called privateMethod()\n"; + } +} + +abstract class AbstractClass { + abstract function foo(); +} + +$testClassInstance = new TestClass(); +$testClassInstance->prop = "Hello"; + +$foo = new ReflectionMethod($testClassInstance, 'foo'); +$staticMethod = new ReflectionMethod('TestClass::staticMethod'); +$privateMethod = new ReflectionMethod("TestClass::privateMethod"); + +echo "Wrong number of parameters:\n"; +var_dump($foo->invokeArgs()); +var_dump($foo->invokeArgs(true)); + +echo "\nNon-instance:\n"; +try { + var_dump($foo->invokeArgs(new stdClass(), array())); +} catch (ReflectionException $e) { + var_dump($e->getMessage()); +} + +echo "\nNon-object:\n"; +var_dump($foo->invokeArgs(true, array())); + +echo "\nStatic method:\n"; + +var_dump($staticMethod->invokeArgs()); +var_dump($staticMethod->invokeArgs(true)); +var_dump($staticMethod->invokeArgs(true, array())); +var_dump($staticMethod->invokeArgs(null, array())); + +echo "\nPrivate method:\n"; +try { + var_dump($privateMethod->invokeArgs($testClassInstance, array())); +} catch (ReflectionException $e) { + var_dump($e->getMessage()); +} + +echo "\nAbstract method:\n"; +$abstractMethod = new ReflectionMethod("AbstractClass::foo"); +try { + $abstractMethod->invokeArgs($testClassInstance, array()); +} catch (ReflectionException $e) { + var_dump($e->getMessage()); +} +try { + $abstractMethod->invokeArgs(true); +} catch (ReflectionException $e) { + var_dump($e->getMessage()); +} + +?> +--EXPECTF-- +Wrong number of parameters: + +Warning: ReflectionMethod::invokeArgs() expects exactly 2 parameters, 0 given in %s on line %d +NULL + +Warning: ReflectionMethod::invokeArgs() expects exactly 2 parameters, 1 given in %s on line %d +NULL + +Non-instance: +string(72) "Given object is not an instance of the class this method was declared in" + +Non-object: + +Warning: ReflectionMethod::invokeArgs() expects parameter 1 to be object, boolean given in %s on line %d +NULL + +Static method: + +Warning: ReflectionMethod::invokeArgs() expects exactly 2 parameters, 0 given in %s on line %d +NULL + +Warning: ReflectionMethod::invokeArgs() expects exactly 2 parameters, 1 given in %s on line %d +NULL + +Warning: ReflectionMethod::invokeArgs() expects parameter 1 to be object, boolean given in %s on line %d +NULL +Called staticMethod() + +Notice: Undefined variable: this in %s on line %d +NULL +NULL + +Private method: +string(84) "Trying to invoke private method TestClass::privateMethod from scope ReflectionMethod" + +Abstract method: +string(51) "Trying to invoke abstract method AbstractClass::foo" + +Warning: ReflectionMethod::invokeArgs() expects exactly 2 parameters, 1 given in %s on line %d +--UEXPECTF-- +Wrong number of parameters: + +Warning: ReflectionMethod::invokeArgs() expects exactly 2 parameters, 0 given in %sReflectionMethod_invokeArgs_error3.php on line %d +NULL + +Warning: ReflectionMethod::invokeArgs() expects exactly 2 parameters, 1 given in %sReflectionMethod_invokeArgs_error3.php on line %d +NULL + +Non-instance: +unicode(72) "Given object is not an instance of the class this method was declared in" + +Non-object: + +Warning: ReflectionMethod::invokeArgs() expects parameter 1 to be object, boolean given in %sReflectionMethod_invokeArgs_error3.php on line %d +NULL + +Static method: + +Warning: ReflectionMethod::invokeArgs() expects exactly 2 parameters, 0 given in %sReflectionMethod_invokeArgs_error3.php on line %d +NULL + +Warning: ReflectionMethod::invokeArgs() expects exactly 2 parameters, 1 given in %sReflectionMethod_invokeArgs_error3.php on line %d +NULL + +Warning: ReflectionMethod::invokeArgs() expects parameter 1 to be object, boolean given in %sReflectionMethod_invokeArgs_error3.php on line %d +NULL +Called staticMethod() + +Notice: Undefined variable: this in %sReflectionMethod_invokeArgs_error3.php on line %d +NULL +NULL + +Private method: +unicode(84) "Trying to invoke private method TestClass::privateMethod from scope ReflectionMethod" + +Abstract method: +unicode(51) "Trying to invoke abstract method AbstractClass::foo" + +Warning: ReflectionMethod::invokeArgs() expects exactly 2 parameters, 1 given in %sReflectionMethod_invokeArgs_error3.php on line %d diff --git a/ext/reflection/tests/ReflectionMethod_invoke_basic.phpt b/ext/reflection/tests/ReflectionMethod_invoke_basic.phpt new file mode 100644 index 0000000000..2746cfba3c --- /dev/null +++ b/ext/reflection/tests/ReflectionMethod_invoke_basic.phpt @@ -0,0 +1,148 @@ +--TEST-- +ReflectionMethod::invoke() +--SKIPIF-- + +--FILE-- +prop\n"; + var_dump($this); + return "Return Val"; + } + + public function willThrow() { + throw new Exception("Called willThrow()"); + } + + public function methodWithArgs($a, $b) { + echo "Called methodWithArgs($a, $b)\n"; + } + + public static function staticMethod() { + echo "Called staticMethod()\n"; + var_dump($this); + } + + private static function privateMethod() { + echo "Called privateMethod()\n"; + } +} + +abstract class AbstractClass { + abstract function foo(); +} + +$foo = new ReflectionMethod('TestClass', 'foo'); +$methodWithArgs = new ReflectionMethod('TestClass', 'methodWithArgs'); +$staticMethod = new ReflectionMethod('TestClass::staticMethod'); +$privateMethod = new ReflectionMethod("TestClass::privateMethod"); +$methodThatThrows = new ReflectionMethod("TestClass::willThrow"); + +$testClassInstance = new TestClass(); +$testClassInstance->prop = "Hello"; + +echo "Public method:\n"; + +var_dump($foo->invoke($testClassInstance)); + +var_dump($foo->invoke($testClassInstance, true)); + +echo "\nMethod with args:\n"; + +var_dump($methodWithArgs->invoke($testClassInstance, 1, "arg2")); +var_dump($methodWithArgs->invoke($testClassInstance, 1, "arg2", 3)); + +echo "\nStatic method:\n"; + +var_dump($staticMethod->invoke()); +var_dump($staticMethod->invoke(true)); +var_dump($staticMethod->invoke(new stdClass())); + +echo "\nMethod that throws an exception:\n"; +try { + var_dump($methodThatThrows->invoke($testClassInstance)); +} catch (Exception $exc) { + var_dump($exc->getMessage()); +} + +?> +--EXPECTF-- +Public method: +Called foo(), property = Hello +object(TestClass)#%d (1) { + ["prop"]=> + string(5) "Hello" +} +string(10) "Return Val" +Called foo(), property = Hello +object(TestClass)#%d (1) { + ["prop"]=> + string(5) "Hello" +} +string(10) "Return Val" + +Method with args: +Called methodWithArgs(1, arg2) +NULL +Called methodWithArgs(1, arg2) +NULL + +Static method: + +Warning: Invoke() expects at least one parameter, none given in %s on line %d +bool(false) +Called staticMethod() + +Notice: Undefined variable: this in %s on line %d +NULL +NULL +Called staticMethod() + +Notice: Undefined variable: this in %s on line %d +NULL +NULL + +Method that throws an exception: +string(18) "Called willThrow()" +--UEXPECTF-- +Public method: +Called foo(), property = Hello +object(TestClass)#%d (1) { + [u"prop"]=> + unicode(5) "Hello" +} +unicode(10) "Return Val" +Called foo(), property = Hello +object(TestClass)#%d (1) { + [u"prop"]=> + unicode(5) "Hello" +} +unicode(10) "Return Val" + +Method with args: +Called methodWithArgs(1, arg2) +NULL +Called methodWithArgs(1, arg2) +NULL + +Static method: + +Warning: Invoke() expects at least one parameter, none given in %sReflectionMethod_invoke_basic.php on line %d +bool(false) +Called staticMethod() + +Notice: Undefined variable: this in %sReflectionMethod_invoke_basic.php on line %d +NULL +NULL +Called staticMethod() + +Notice: Undefined variable: this in %sReflectionMethod_invoke_basic.php on line %d +NULL +NULL + +Method that throws an exception: +unicode(18) "Called willThrow()" diff --git a/ext/reflection/tests/ReflectionMethod_invoke_error1.phpt b/ext/reflection/tests/ReflectionMethod_invoke_error1.phpt new file mode 100644 index 0000000000..e1c492418b --- /dev/null +++ b/ext/reflection/tests/ReflectionMethod_invoke_error1.phpt @@ -0,0 +1,85 @@ +--TEST-- +ReflectionMethod::invoke() errors +--SKIPIF-- + +--FILE-- +prop\n"; + var_dump($this); + return "Return Val"; + } + + private static function privateMethod() { + echo "Called privateMethod()\n"; + } +} + +abstract class AbstractClass { + abstract function foo(); +} + +$foo = new ReflectionMethod('TestClass', 'foo'); +$privateMethod = new ReflectionMethod("TestClass::privateMethod"); + +$testClassInstance = new TestClass(); +$testClassInstance->prop = "Hello"; + +echo "invoke() on a non-object:\n"; +try { + var_dump($foo->invoke(true)); +} catch (ReflectionException $e) { + var_dump($e->getMessage()); +} + +echo "\ninvoke() on a non-instance:\n"; +try { + var_dump($foo->invoke(new stdClass())); +} catch (ReflectionException $e) { + var_dump($e->getMessage()); +} + +echo "\nPrivate method:\n"; +try { + var_dump($privateMethod->invoke($testClassInstance)); +} catch (ReflectionException $e) { + var_dump($e->getMessage()); +} + +echo "\nAbstract method:\n"; +$abstractMethod = new ReflectionMethod("AbstractClass::foo"); +try { + $abstractMethod->invoke(true); +} catch (ReflectionException $e) { + var_dump($e->getMessage()); +} + +?> +--EXPECT-- +invoke() on a non-object: +string(29) "Non-object passed to Invoke()" + +invoke() on a non-instance: +string(72) "Given object is not an instance of the class this method was declared in" + +Private method: +string(86) "Trying to invoke private method TestClass::privateMethod() from scope ReflectionMethod" + +Abstract method: +string(53) "Trying to invoke abstract method AbstractClass::foo()" +--UEXPECT-- +invoke() on a non-object: +unicode(29) "Non-object passed to Invoke()" + +invoke() on a non-instance: +unicode(72) "Given object is not an instance of the class this method was declared in" + +Private method: +unicode(86) "Trying to invoke private method TestClass::privateMethod() from scope ReflectionMethod" + +Abstract method: +unicode(53) "Trying to invoke abstract method AbstractClass::foo()" diff --git a/ext/reflection/tests/ReflectionMethod_invoke_error2.phpt b/ext/reflection/tests/ReflectionMethod_invoke_error2.phpt new file mode 100644 index 0000000000..cb3b1c2d2a --- /dev/null +++ b/ext/reflection/tests/ReflectionMethod_invoke_error2.phpt @@ -0,0 +1,34 @@ +--TEST-- +ReflectionMethod::invoke() further errors +--SKIPIF-- + +--FILE-- +invoke($testClassInstance)); + +?> +--EXPECTF-- +Method with args: + +Warning: Missing argument 1 for TestClass::methodWithArgs() in %s on line %d + +Warning: Missing argument 2 for TestClass::methodWithArgs() in %s on line %d + +Notice: Undefined variable: a in %s on line %d + +Notice: Undefined variable: b in %s on line %d +Called methodWithArgs(, ) +NULL diff --git a/ext/reflection/tests/ReflectionMethod_returnsReference_basic.phpt b/ext/reflection/tests/ReflectionMethod_returnsReference_basic.phpt new file mode 100644 index 0000000000..b3a1f8c00c --- /dev/null +++ b/ext/reflection/tests/ReflectionMethod_returnsReference_basic.phpt @@ -0,0 +1,25 @@ +--TEST-- +ReflectionMethod::returnsReference() +--SKIPIF-- + +--FILE-- +returnsReference()); + +$methodInfo = new ReflectionMethod('TestClass::bar'); +var_dump($methodInfo->returnsReference()); + +?> +--EXPECT-- +bool(true) +bool(false) -- 2.40.0