]> granicus.if.org Git - php/commitdiff
Add new tests for class/object functions and features.
authorRobin Fernandes <robinf@php.net>
Thu, 6 Mar 2008 10:56:07 +0000 (10:56 +0000)
committerRobin Fernandes <robinf@php.net>
Thu, 6 Mar 2008 10:56:07 +0000 (10:56 +0000)
49 files changed:
ext/standard/tests/class_object/class_exists_basic_001.phpt [new file with mode: 0644]
ext/standard/tests/class_object/class_exists_error_001.phpt [new file with mode: 0644]
ext/standard/tests/class_object/class_exists_variation_001.phpt [new file with mode: 0644]
ext/standard/tests/class_object/class_exists_variation_002.phpt [new file with mode: 0644]
ext/standard/tests/class_object/class_exists_variation_003.phpt [new file with mode: 0644]
ext/standard/tests/class_object/get_class_error_001.phpt [new file with mode: 0644]
ext/standard/tests/class_object/get_class_methods_basic_001.phpt [new file with mode: 0644]
ext/standard/tests/class_object/get_class_methods_basic_002.phpt [new file with mode: 0644]
ext/standard/tests/class_object/get_class_methods_basic_003.phpt [new file with mode: 0644]
ext/standard/tests/class_object/get_class_methods_error_001.phpt [new file with mode: 0644]
ext/standard/tests/class_object/get_class_methods_variation_001.phpt [new file with mode: 0644]
ext/standard/tests/class_object/get_class_methods_variation_002.phpt [new file with mode: 0644]
ext/standard/tests/class_object/get_class_variation_001.phpt [new file with mode: 0644]
ext/standard/tests/class_object/get_class_variation_002.phpt [new file with mode: 0644]
ext/standard/tests/class_object/get_declared_classes_basic_001.phpt [new file with mode: 0644]
ext/standard/tests/class_object/get_declared_classes_error_001.phpt [new file with mode: 0644]
ext/standard/tests/class_object/get_declared_interfaces_basic_001.phpt [new file with mode: 0644]
ext/standard/tests/class_object/get_declared_interfaces_error_001.phpt [new file with mode: 0644]
ext/standard/tests/class_object/get_object_vars_basic_001.phpt [new file with mode: 0644]
ext/standard/tests/class_object/get_object_vars_basic_002.phpt [new file with mode: 0644]
ext/standard/tests/class_object/get_object_vars_error_001.phpt [new file with mode: 0644]
ext/standard/tests/class_object/get_object_vars_variation_001.phpt [new file with mode: 0644]
ext/standard/tests/class_object/get_object_vars_variation_002.phpt [new file with mode: 0644]
ext/standard/tests/class_object/get_object_vars_variation_003.phpt [new file with mode: 0644]
ext/standard/tests/class_object/get_parent_class_error_001.phpt [new file with mode: 0644]
ext/standard/tests/class_object/get_parent_class_variation_001.phpt [new file with mode: 0644]
ext/standard/tests/class_object/get_parent_class_variation_002.phpt [new file with mode: 0644]
ext/standard/tests/class_object/is_a_error_001.phpt [new file with mode: 0644]
ext/standard/tests/class_object/is_a_variation_001.phpt [new file with mode: 0644]
ext/standard/tests/class_object/is_a_variation_002.phpt [new file with mode: 0644]
ext/standard/tests/class_object/is_a_variation_003.phpt [new file with mode: 0644]
ext/standard/tests/class_object/is_subclass_of_error_001.phpt [new file with mode: 0644]
ext/standard/tests/class_object/is_subclass_of_variation_001.phpt [new file with mode: 0644]
ext/standard/tests/class_object/is_subclass_of_variation_002.phpt [new file with mode: 0644]
ext/standard/tests/class_object/is_subclass_of_variation_003.phpt [new file with mode: 0644]
ext/standard/tests/class_object/method_exists_basic_001.phpt [new file with mode: 0644]
ext/standard/tests/class_object/method_exists_basic_002.phpt [new file with mode: 0644]
ext/standard/tests/class_object/method_exists_basic_003.phpt [new file with mode: 0644]
ext/standard/tests/class_object/method_exists_error_001.phpt [new file with mode: 0644]
ext/standard/tests/class_object/method_exists_variation_001.phpt [new file with mode: 0644]
ext/standard/tests/class_object/method_exists_variation_002.phpt [new file with mode: 0644]
ext/standard/tests/class_object/method_exists_variation_003.phpt [new file with mode: 0644]
tests/classes/__call_004.phpt [new file with mode: 0644]
tests/classes/__call_005.phpt [new file with mode: 0644]
tests/classes/interface_constant_inheritance_001.phpt [new file with mode: 0644]
tests/classes/interface_constant_inheritance_002.phpt [new file with mode: 0644]
tests/classes/interface_constant_inheritance_003.phpt [new file with mode: 0644]
tests/classes/interface_constant_inheritance_004.phpt [new file with mode: 0644]
tests/classes/tostring_004.phpt [new file with mode: 0644]

diff --git a/ext/standard/tests/class_object/class_exists_basic_001.phpt b/ext/standard/tests/class_object/class_exists_basic_001.phpt
new file mode 100644 (file)
index 0000000..4cb6cbd
--- /dev/null
@@ -0,0 +1,55 @@
+--TEST--
+Test class_exists() function : basic functionality 
+--FILE--
+<?php
+/* Prototype  : proto bool class_exists(string classname [, bool autoload])
+ * Description: Checks if the class exists 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing class_exists() : basic functionality ***\n";
+
+function __autoload($className) {
+       echo "In __autoload($className)\n";
+}
+
+echo "Calling class_exists() on non-existent class with autoload explicitly enabled:\n";
+var_dump( class_exists('C', true) );
+echo "\nCalling class_exists() on existing class with autoload explicitly enabled:\n";
+var_dump( class_exists('stdclass', true) );
+
+echo "\nCalling class_exists() on non-existent class with autoload explicitly enabled:\n";
+var_dump( class_exists('D', false) );
+echo "\nCalling class_exists() on existing class with autoload explicitly disabled:\n";
+var_dump( class_exists('stdclass', false) );
+
+echo "\nCalling class_exists() on non-existent class with autoload unspecified:\n";
+var_dump( class_exists('E') );
+echo "\nCalling class_exists() on existing class with autoload unspecified:\n";
+var_dump( class_exists('stdclass') );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing class_exists() : basic functionality ***
+Calling class_exists() on non-existent class with autoload explicitly enabled:
+In __autoload(C)
+bool(false)
+
+Calling class_exists() on existing class with autoload explicitly enabled:
+bool(true)
+
+Calling class_exists() on non-existent class with autoload explicitly enabled:
+bool(false)
+
+Calling class_exists() on existing class with autoload explicitly disabled:
+bool(true)
+
+Calling class_exists() on non-existent class with autoload unspecified:
+In __autoload(E)
+bool(false)
+
+Calling class_exists() on existing class with autoload unspecified:
+bool(true)
+Done
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/class_exists_error_001.phpt b/ext/standard/tests/class_object/class_exists_error_001.phpt
new file mode 100644 (file)
index 0000000..99c0b89
--- /dev/null
@@ -0,0 +1,42 @@
+--TEST--
+Test class_exists() function : error conditions (wrong number of arguments)
+--FILE--
+<?php
+/* Prototype  : proto bool class_exists(string classname [, bool autoload])
+ * Description: Checks if the class exists 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+/**
+ * Test wrong number of arguments
+ */
+
+echo "*** Testing class_exists() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing class_exists() function with Zero arguments --\n";
+var_dump( class_exists() );
+
+//Test class_exists with one more than the expected number of arguments
+echo "\n-- Testing class_exists() function with more than expected no. of arguments --\n";
+$classname = 'string_val';
+$autoload = true;
+$extra_arg = 10;
+var_dump( class_exists($classname, $autoload, $extra_arg) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing class_exists() : error conditions ***
+
+-- Testing class_exists() function with Zero arguments --
+
+Warning: class_exists() expects at least 1 parameter, 0 given in %s on line 16
+NULL
+
+-- Testing class_exists() function with more than expected no. of arguments --
+
+Warning: class_exists() expects at most 2 parameters, 3 given in %s on line 23
+NULL
+Done
diff --git a/ext/standard/tests/class_object/class_exists_variation_001.phpt b/ext/standard/tests/class_object/class_exists_variation_001.phpt
new file mode 100644 (file)
index 0000000..2141d65
--- /dev/null
@@ -0,0 +1,182 @@
+--TEST--
+Test class_exists() function : usage variations - unexpected types for agument 1
+--FILE--
+<?php
+/* Prototype  : proto bool class_exists(string classname [, bool autoload])
+ * Description: Checks if the class exists 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+function __autoload($className) {
+       echo "In __autoload($className)\n";
+}
+
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+       echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+}
+set_error_handler('test_error_handler');
+
+echo "*** Testing class_exists() : usage variations ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$autoload = true;
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//array of values to iterate over
+$values = array(
+
+      // int data
+      0,
+      1,
+      12345,
+      -2345,
+
+      // float data
+      10.5,
+      -10.5,
+      10.1234567e10,
+      10.7654321E-10,
+      .5,
+
+      // array data
+      array(),
+      array(0),
+      array(1),
+      array(1, 2),
+      array('color' => 'red', 'item' => 'pen'),
+
+      // null data
+      NULL,
+      null,
+
+      // boolean data
+      true,
+      false,
+      TRUE,
+      FALSE,
+
+      // empty data
+      "",
+      '',
+
+      // object data
+      new stdclass(),
+
+      // undefined data
+      $undefined_var,
+
+      // unset data
+      $unset_var,
+);
+
+// loop through each element of the array for classname
+
+foreach($values as $value) {
+      echo "\nArg value $value \n";
+      var_dump( class_exists($value, $autoload) );
+};
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing class_exists() : usage variations ***
+Error: 8 - Undefined variable: undefined_var, %s(67)
+Error: 8 - Undefined variable: unset_var, %s(70)
+
+Arg value 0 
+In __autoload(0)
+bool(false)
+
+Arg value 1 
+In __autoload(1)
+bool(false)
+
+Arg value 12345 
+In __autoload(12345)
+bool(false)
+
+Arg value -2345 
+In __autoload(-2345)
+bool(false)
+
+Arg value 10.5 
+In __autoload(10.5)
+bool(false)
+
+Arg value -10.5 
+In __autoload(-10.5)
+bool(false)
+
+Arg value 101234567000 
+In __autoload(101234567000)
+bool(false)
+
+Arg value 1.07654321E-9 
+In __autoload(1.07654321E-9)
+bool(false)
+
+Arg value 0.5 
+In __autoload(0.5)
+bool(false)
+
+Arg value Array 
+Error: 2 - class_exists() expects parameter 1 to be string, array given, %s(77)
+NULL
+
+Arg value Array 
+Error: 2 - class_exists() expects parameter 1 to be string, array given, %s(77)
+NULL
+
+Arg value Array 
+Error: 2 - class_exists() expects parameter 1 to be string, array given, %s(77)
+NULL
+
+Arg value Array 
+Error: 2 - class_exists() expects parameter 1 to be string, array given, %s(77)
+NULL
+
+Arg value Array 
+Error: 2 - class_exists() expects parameter 1 to be string, array given, %s(77)
+NULL
+
+Arg value  
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value 1 
+In __autoload(1)
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value 1 
+In __autoload(1)
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value  
+bool(false)
+Error: 4096 - Object of class stdClass could not be converted to string, %s(76)
+
+Arg value  
+Error: 2 - class_exists() expects parameter 1 to be string, object given, %s(77)
+NULL
+
+Arg value  
+bool(false)
+
+Arg value  
+bool(false)
+Done
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/class_exists_variation_002.phpt b/ext/standard/tests/class_object/class_exists_variation_002.phpt
new file mode 100644 (file)
index 0000000..da10cac
--- /dev/null
@@ -0,0 +1,193 @@
+--TEST--
+Test class_exists() function : usage variations  - unexpected types for agument 2
+--FILE--
+<?php
+/* Prototype  : proto bool class_exists(string classname [, bool autoload])
+ * Description: Checks if the class exists 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+function __autoload($className) {
+       echo "In __autoload($className)\n";
+}
+
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+       echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+}
+set_error_handler('test_error_handler');
+
+echo "*** Testing class_exists() : usage variations ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$classname = 'string_val';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//array of values to iterate over
+$values = array(
+
+      // int data
+      0,
+      1,
+      12345,
+      -2345,
+
+      // float data
+      10.5,
+      -10.5,
+      10.1234567e10,
+      10.7654321E-10,
+      .5,
+
+      // array data
+      array(),
+      array(0),
+      array(1),
+      array(1, 2),
+      array('color' => 'red', 'item' => 'pen'),
+
+      // null data
+      NULL,
+      null,
+
+      // boolean data
+      true,
+      false,
+      TRUE,
+      FALSE,
+
+      // empty data
+      "",
+      '',
+
+      // string data
+      "string",
+      'string',
+
+      // object data
+      new stdclass(),
+
+      // undefined data
+      $undefined_var,
+
+      // unset data
+      $unset_var,
+);
+
+// loop through each element of the array for autoload
+
+foreach($values as $value) {
+      echo "\nArg value $value \n";
+      var_dump( class_exists($classname, $value) );
+};
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing class_exists() : usage variations ***
+Error: 8 - Undefined variable: undefined_var, %s(71)
+Error: 8 - Undefined variable: unset_var, %s(74)
+
+Arg value 0 
+bool(false)
+
+Arg value 1 
+In __autoload(string_val)
+bool(false)
+
+Arg value 12345 
+In __autoload(string_val)
+bool(false)
+
+Arg value -2345 
+In __autoload(string_val)
+bool(false)
+
+Arg value 10.5 
+In __autoload(string_val)
+bool(false)
+
+Arg value -10.5 
+In __autoload(string_val)
+bool(false)
+
+Arg value 101234567000 
+In __autoload(string_val)
+bool(false)
+
+Arg value 1.07654321E-9 
+In __autoload(string_val)
+bool(false)
+
+Arg value 0.5 
+In __autoload(string_val)
+bool(false)
+
+Arg value Array 
+Error: 2 - class_exists() expects parameter 2 to be boolean, array given, %s(81)
+NULL
+
+Arg value Array 
+Error: 2 - class_exists() expects parameter 2 to be boolean, array given, %s(81)
+NULL
+
+Arg value Array 
+Error: 2 - class_exists() expects parameter 2 to be boolean, array given, %s(81)
+NULL
+
+Arg value Array 
+Error: 2 - class_exists() expects parameter 2 to be boolean, array given, %s(81)
+NULL
+
+Arg value Array 
+Error: 2 - class_exists() expects parameter 2 to be boolean, array given, %s(81)
+NULL
+
+Arg value  
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value 1 
+In __autoload(string_val)
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value 1 
+In __autoload(string_val)
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value string 
+In __autoload(string_val)
+bool(false)
+
+Arg value string 
+In __autoload(string_val)
+bool(false)
+Error: 4096 - Object of class stdClass could not be converted to string, %s(80)
+
+Arg value  
+Error: 2 - class_exists() expects parameter 2 to be boolean, object given, %s(81)
+NULL
+
+Arg value  
+bool(false)
+
+Arg value  
+bool(false)
+Done
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/class_exists_variation_003.phpt b/ext/standard/tests/class_object/class_exists_variation_003.phpt
new file mode 100644 (file)
index 0000000..0745601
--- /dev/null
@@ -0,0 +1,18 @@
+--TEST--
+Test class_exists() function : usage variations  - case sensitivity
+--FILE--
+<?php
+/* Prototype  : proto bool class_exists(string classname [, bool autoload])
+ * Description: Checks if the class exists 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+class caseSensitivityTest {}
+var_dump(class_exists('casesensitivitytest'));
+
+echo "Done"
+?>
+--EXPECTF--
+bool(true)
+Done
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/get_class_error_001.phpt b/ext/standard/tests/class_object/get_class_error_001.phpt
new file mode 100644 (file)
index 0000000..b563c31
--- /dev/null
@@ -0,0 +1,28 @@
+--TEST--
+Test get_class() function : error conditions - wrong number of arguments.
+--FILE--
+<?php
+/* Prototype  : proto string get_class([object object])
+ * Description: Retrieves the class name 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing get_class() : error conditions ***\n";
+
+//Test get_class with one more than the expected number of arguments
+echo "\n-- Testing get_class() function with more than expected no. of arguments --\n";
+$object = new stdclass();
+$extra_arg = 10;
+var_dump( get_class($object, $extra_arg) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing get_class() : error conditions ***
+
+-- Testing get_class() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for get_class() in %s on line 14
+NULL
+Done
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/get_class_methods_basic_001.phpt b/ext/standard/tests/class_object/get_class_methods_basic_001.phpt
new file mode 100644 (file)
index 0000000..b2b87af
--- /dev/null
@@ -0,0 +1,63 @@
+--TEST--
+Test get_class_methods() function : basic functionality 
+--FILE--
+<?php
+/* Prototype  : proto array get_class_methods(mixed class)
+ * Description: Returns an array of method names for class or class instance. 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+/*
+ * Test basic behaviour with existing class and non-existent class.
+ */
+
+echo "*** Testing get_class_methods() : basic functionality ***\n";
+
+class C {
+       function f() {}
+       function g() {}
+       function h() {}
+} 
+
+echo "Argument is class name:\n";
+var_dump( get_class_methods("C") );
+echo "Argument is class instance:\n";
+$c = new C;
+var_dump( get_class_methods($c) );
+
+class D {}
+echo "Argument is name of class which has no methods:\n";
+var_dump( get_class_methods("D") );
+
+echo "Argument is non existent class:\n";
+var_dump( get_class_methods("NonExistent") );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing get_class_methods() : basic functionality ***
+Argument is class name:
+array(3) {
+  [0]=>
+  string(1) "f"
+  [1]=>
+  string(1) "g"
+  [2]=>
+  string(1) "h"
+}
+Argument is class instance:
+array(3) {
+  [0]=>
+  string(1) "f"
+  [1]=>
+  string(1) "g"
+  [2]=>
+  string(1) "h"
+}
+Argument is name of class which has no methods:
+array(0) {
+}
+Argument is non existent class:
+NULL
+Done
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/get_class_methods_basic_002.phpt b/ext/standard/tests/class_object/get_class_methods_basic_002.phpt
new file mode 100644 (file)
index 0000000..441bb45
--- /dev/null
@@ -0,0 +1,178 @@
+--TEST--
+Test get_class_methods() function : basic functionality
+--FILE--
+<?php
+/* Prototype  : proto array get_class_methods(mixed class)
+ * Description: Returns an array of method names for class or class instance. 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+/*
+ * Test behaviour with various visibility levels.
+ */
+
+class C {
+       private function privC() {}
+       protected function protC() {}
+       public function pubC() {}
+       
+       public static function testFromC() {
+               echo "Accessing C from C:\n";
+               var_dump(get_class_methods("C"));
+               echo "Accessing D from C:\n";
+               var_dump(get_class_methods("D"));
+               echo "Accessing X from C:\n";
+               var_dump(get_class_methods("X"));
+       }
+}
+
+class D extends C {
+       private function privD() {}
+       protected function protD() {}
+       public function pubD() {}
+       
+       public static function testFromD() {
+               echo "Accessing C from D:\n";
+               var_dump(get_class_methods("C"));
+               echo "Accessing D from D:\n";
+               var_dump(get_class_methods("D"));
+               echo "Accessing X from D:\n";
+               var_dump(get_class_methods("X"));
+       }
+}
+
+class X {
+       private function privX() {}
+       protected function protX() {}
+       public function pubX() {}
+       
+       public static function testFromX() {
+               echo "Accessing C from X:\n";
+               var_dump(get_class_methods("C"));
+               echo "Accessing D from X:\n";
+               var_dump(get_class_methods("D"));
+               echo "Accessing X from X:\n";
+               var_dump(get_class_methods("X"));
+       }
+}
+
+echo "Accessing D from global scope:\n";
+var_dump(get_class_methods("D"));
+
+C::testFromC();
+D::testFromD();
+X::testFromX();
+
+echo "Done";
+?>
+--EXPECTF--
+Accessing D from global scope:
+array(4) {
+  [0]=>
+  string(4) "pubD"
+  [1]=>
+  string(9) "testFromD"
+  [2]=>
+  string(4) "pubC"
+  [3]=>
+  string(9) "testFromC"
+}
+Accessing C from C:
+array(4) {
+  [0]=>
+  string(5) "privC"
+  [1]=>
+  string(5) "protC"
+  [2]=>
+  string(4) "pubC"
+  [3]=>
+  string(9) "testFromC"
+}
+Accessing D from C:
+array(7) {
+  [0]=>
+  string(5) "protD"
+  [1]=>
+  string(4) "pubD"
+  [2]=>
+  string(9) "testFromD"
+  [3]=>
+  string(5) "privC"
+  [4]=>
+  string(5) "protC"
+  [5]=>
+  string(4) "pubC"
+  [6]=>
+  string(9) "testFromC"
+}
+Accessing X from C:
+array(2) {
+  [0]=>
+  string(4) "pubX"
+  [1]=>
+  string(9) "testFromX"
+}
+Accessing C from D:
+array(3) {
+  [0]=>
+  string(5) "protC"
+  [1]=>
+  string(4) "pubC"
+  [2]=>
+  string(9) "testFromC"
+}
+Accessing D from D:
+array(7) {
+  [0]=>
+  string(5) "privD"
+  [1]=>
+  string(5) "protD"
+  [2]=>
+  string(4) "pubD"
+  [3]=>
+  string(9) "testFromD"
+  [4]=>
+  string(5) "protC"
+  [5]=>
+  string(4) "pubC"
+  [6]=>
+  string(9) "testFromC"
+}
+Accessing X from D:
+array(2) {
+  [0]=>
+  string(4) "pubX"
+  [1]=>
+  string(9) "testFromX"
+}
+Accessing C from X:
+array(2) {
+  [0]=>
+  string(4) "pubC"
+  [1]=>
+  string(9) "testFromC"
+}
+Accessing D from X:
+array(4) {
+  [0]=>
+  string(4) "pubD"
+  [1]=>
+  string(9) "testFromD"
+  [2]=>
+  string(4) "pubC"
+  [3]=>
+  string(9) "testFromC"
+}
+Accessing X from X:
+array(4) {
+  [0]=>
+  string(5) "privX"
+  [1]=>
+  string(5) "protX"
+  [2]=>
+  string(4) "pubX"
+  [3]=>
+  string(9) "testFromX"
+}
+Done
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/get_class_methods_basic_003.phpt b/ext/standard/tests/class_object/get_class_methods_basic_003.phpt
new file mode 100644 (file)
index 0000000..b64f702
--- /dev/null
@@ -0,0 +1,76 @@
+--TEST--
+Test get_class_methods() function : basic functionality 
+--FILE--
+<?php
+/* Prototype  : proto array get_class_methods(mixed class)
+ * Description: Returns an array of method names for class or class instance. 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+/*
+ * Test behaviour with interfaces.
+ */
+
+interface I {
+       public function pubI();
+
+}
+
+class C implements I {
+       public function pubI() {}
+
+       private function privC() {}
+       protected function protC() {}
+       public function pubC() {}
+       
+       public static function testFromC() {
+               echo "Accessing I from C:\n";
+               var_dump(get_class_methods("I"));       
+               echo "Accessing C from C:\n";
+               var_dump(get_class_methods("C"));
+       }
+}
+
+
+echo "Accessing I from global scope:\n";
+var_dump(get_class_methods("I"));
+echo "Accessing C from global scope:\n";
+var_dump(get_class_methods("C"));
+C::testFromC();
+echo "Done";
+?>
+--EXPECTF--
+Accessing I from global scope:
+array(1) {
+  [0]=>
+  string(4) "pubI"
+}
+Accessing C from global scope:
+array(3) {
+  [0]=>
+  string(4) "pubI"
+  [1]=>
+  string(4) "pubC"
+  [2]=>
+  string(9) "testFromC"
+}
+Accessing I from C:
+array(1) {
+  [0]=>
+  string(4) "pubI"
+}
+Accessing C from C:
+array(5) {
+  [0]=>
+  string(4) "pubI"
+  [1]=>
+  string(5) "privC"
+  [2]=>
+  string(5) "protC"
+  [3]=>
+  string(4) "pubC"
+  [4]=>
+  string(9) "testFromC"
+}
+Done
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/get_class_methods_error_001.phpt b/ext/standard/tests/class_object/get_class_methods_error_001.phpt
new file mode 100644 (file)
index 0000000..6edb108
--- /dev/null
@@ -0,0 +1,41 @@
+--TEST--
+Test get_class_methods() function : error conditions 
+--FILE--
+<?php
+/* Prototype  : proto array get_class_methods(mixed class)
+ * Description: Returns an array of method names for class or class instance. 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+/*
+ * Test wrong number of arguments.
+ */
+
+echo "*** Testing get_class_methods() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing get_class_methods() function with Zero arguments --\n";
+var_dump( get_class_methods() );
+
+//Test get_class_methods with one more than the expected number of arguments
+echo "\n-- Testing get_class_methods() function with more than expected no. of arguments --\n";
+$class = 1;
+$extra_arg = 10;
+var_dump( get_class_methods($class, $extra_arg) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing get_class_methods() : error conditions ***
+
+-- Testing get_class_methods() function with Zero arguments --
+
+Warning: Wrong parameter count for get_class_methods() in %s on line 16
+NULL
+
+-- Testing get_class_methods() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for get_class_methods() in %s on line 22
+NULL
+Done
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/get_class_methods_variation_001.phpt b/ext/standard/tests/class_object/get_class_methods_variation_001.phpt
new file mode 100644 (file)
index 0000000..b881452
--- /dev/null
@@ -0,0 +1,172 @@
+--TEST--
+Test get_class_methods() function : usage variations  - unexpected types
+--FILE--
+<?php
+/* Prototype  : proto array get_class_methods(mixed class)
+ * Description: Returns an array of method names for class or class instance. 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+       echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+}
+set_error_handler('test_error_handler');
+
+echo "*** Testing get_class_methods() : usage variations ***\n";
+
+// Initialise function arguments not being substituted (if any)
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//array of values to iterate over
+$values = array(
+
+      // int data
+      0,
+      1,
+      12345,
+      -2345,
+
+      // float data
+      10.5,
+      -10.5,
+      10.1234567e10,
+      10.7654321E-10,
+      .5,
+
+      // array data
+      array(),
+      array(0),
+      array(1),
+      array(1, 2),
+      array('color' => 'red', 'item' => 'pen'),
+
+      // null data
+      NULL,
+      null,
+
+      // boolean data
+      true,
+      false,
+      TRUE,
+      FALSE,
+
+      // empty data
+      "",
+      '',
+
+      // string data
+      "string",
+      'string',
+
+      // object data
+      new stdclass(),
+
+      // undefined data
+      $undefined_var,
+
+      // unset data
+      $unset_var,
+);
+
+// loop through each element of the array for class
+
+foreach($values as $value) {
+      echo "\nArg value $value \n";
+      var_dump( get_class_methods($value) );
+};
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing get_class_methods() : usage variations ***
+Error: 8 - Undefined variable: undefined_var, %s(67)
+Error: 8 - Undefined variable: unset_var, %s(70)
+
+Arg value 0 
+NULL
+
+Arg value 1 
+NULL
+
+Arg value 12345 
+NULL
+
+Arg value -2345 
+NULL
+
+Arg value 10.5 
+NULL
+
+Arg value -10.5 
+NULL
+
+Arg value 101234567000 
+NULL
+
+Arg value 1.07654321E-9 
+NULL
+
+Arg value 0.5 
+NULL
+
+Arg value Array 
+NULL
+
+Arg value Array 
+NULL
+
+Arg value Array 
+NULL
+
+Arg value Array 
+NULL
+
+Arg value Array 
+NULL
+
+Arg value  
+NULL
+
+Arg value  
+NULL
+
+Arg value 1 
+NULL
+
+Arg value  
+NULL
+
+Arg value 1 
+NULL
+
+Arg value  
+NULL
+
+Arg value  
+NULL
+
+Arg value  
+NULL
+
+Arg value string 
+NULL
+
+Arg value string 
+NULL
+Error: 4096 - Object of class stdClass could not be converted to string, %s(76)
+
+Arg value  
+array(0) {
+}
+
+Arg value  
+NULL
+
+Arg value  
+NULL
+Done
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/get_class_methods_variation_002.phpt b/ext/standard/tests/class_object/get_class_methods_variation_002.phpt
new file mode 100644 (file)
index 0000000..60b944c
--- /dev/null
@@ -0,0 +1,27 @@
+--TEST--
+Test get_class_methods() function : usage variations  - case sensitivity
+--FILE--
+<?php
+/* Prototype  : proto array get_class_methods(mixed class)
+ * Description: Returns an array of method names for class or class instance. 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing get_class_methods() : usage variations ***\n";
+
+class caseSensitivityTest {
+       function MyMeThOd() {}
+}
+
+var_dump( get_class_methods('CasesensitivitytesT') );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing get_class_methods() : usage variations ***
+array(1) {
+  [0]=>
+  string(8) "MyMeThOd"
+}
+Done
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/get_class_variation_001.phpt b/ext/standard/tests/class_object/get_class_variation_001.phpt
new file mode 100644 (file)
index 0000000..6cbe0b3
--- /dev/null
@@ -0,0 +1,160 @@
+--TEST--
+Test get_class() function : usage variations  - passing unexpected types.
+--FILE--
+<?php
+/* Prototype  : proto string get_class([object object])
+ * Description: Retrieves the class name 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing get_class() : usage variations ***\n";
+
+//  Note: basic use cases in Zend/tests/009.phpt
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//array of values to iterate over
+$values = array(
+
+      // int data
+      0,
+      1,
+      12345,
+      -2345,
+
+      // float data
+      10.5,
+      -10.5,
+      10.1234567e10,
+      10.7654321E-10,
+      .5,
+
+      // array data
+      array(),
+      array(0),
+      array(1),
+      array(1, 2),
+      array('color' => 'red', 'item' => 'pen'),
+
+      // null data
+      NULL,
+      null,
+
+      // boolean data
+      true,
+      false,
+      TRUE,
+      FALSE,
+
+      // empty data
+      "",
+      '',
+
+      // string data
+      "string",
+      'string',
+
+      // undefined data
+      $undefined_var,
+
+      // unset data
+      $unset_var,
+);
+
+// loop through each element of the array for object
+
+foreach($values as $value) {
+      echo "\nArg value: $value (type: " . gettype($value) . ")\n";
+      var_dump( get_class($value) );
+};
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing get_class() : usage variations ***
+
+Notice: Undefined variable: undefined_var in %s on line 58
+
+Notice: Undefined variable: unset_var in %s on line 61
+
+Arg value: 0 (type: integer)
+bool(false)
+
+Arg value: 1 (type: integer)
+bool(false)
+
+Arg value: 12345 (type: integer)
+bool(false)
+
+Arg value: -2345 (type: integer)
+bool(false)
+
+Arg value: 10.5 (type: double)
+bool(false)
+
+Arg value: -10.5 (type: double)
+bool(false)
+
+Arg value: 101234567000 (type: double)
+bool(false)
+
+Arg value: 1.07654321E-9 (type: double)
+bool(false)
+
+Arg value: 0.5 (type: double)
+bool(false)
+
+Arg value: Array (type: array)
+bool(false)
+
+Arg value: Array (type: array)
+bool(false)
+
+Arg value: Array (type: array)
+bool(false)
+
+Arg value: Array (type: array)
+bool(false)
+
+Arg value: Array (type: array)
+bool(false)
+
+Arg value:  (type: NULL)
+bool(false)
+
+Arg value:  (type: NULL)
+bool(false)
+
+Arg value: 1 (type: boolean)
+bool(false)
+
+Arg value:  (type: boolean)
+bool(false)
+
+Arg value: 1 (type: boolean)
+bool(false)
+
+Arg value:  (type: boolean)
+bool(false)
+
+Arg value:  (type: string)
+bool(false)
+
+Arg value:  (type: string)
+bool(false)
+
+Arg value: string (type: string)
+bool(false)
+
+Arg value: string (type: string)
+bool(false)
+
+Arg value:  (type: NULL)
+bool(false)
+
+Arg value:  (type: NULL)
+bool(false)
+Done
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/get_class_variation_002.phpt b/ext/standard/tests/class_object/get_class_variation_002.phpt
new file mode 100644 (file)
index 0000000..1ee3529
--- /dev/null
@@ -0,0 +1,18 @@
+--TEST--
+Test get_class() function : usage variations  - ensure class name case is preserved.
+--FILE--
+<?php
+/* Prototype  : proto string get_class([object object])
+ * Description: Retrieves the class name 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+class caseSensitivityTest {}
+var_dump(get_class(new casesensitivitytest));
+
+echo "Done";
+?>
+--EXPECTF--
+string(19) "caseSensitivityTest"
+Done
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/get_declared_classes_basic_001.phpt b/ext/standard/tests/class_object/get_declared_classes_basic_001.phpt
new file mode 100644 (file)
index 0000000..123e977
--- /dev/null
@@ -0,0 +1,47 @@
+--TEST--
+Test get_declared_classes() function : basic functionality 
+--FILE--
+<?php
+/* Prototype  : proto array get_declared_classes()
+ * Description: Returns an array of all declared classes. 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+
+echo "*** Testing get_declared_classes() : basic functionality ***\n";
+
+// Zero arguments
+echo "\n-- Testing get_declared_classes() function with Zero arguments --\n";
+var_dump(get_declared_classes());
+
+foreach (get_declared_classes() as $class) {
+       if (!class_exists($class)) {
+               echo "Error: $class is not a valid class.\n"; 
+       }
+}
+
+echo "\n-- Ensure userspace classes are listed --\n";
+Class C {}
+var_dump(in_array('C', get_declared_classes()));
+
+echo "\n-- Ensure userspace interfaces are not listed --\n";
+Interface I {}
+var_dump(in_array( 'I', get_declared_classes()));
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing get_declared_classes() : basic functionality ***
+
+-- Testing get_declared_classes() function with Zero arguments --
+array(%d) {
+%a
+}
+
+-- Ensure userspace classes are listed --
+bool(true)
+
+-- Ensure userspace interfaces are not listed --
+bool(false)
+Done
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/get_declared_classes_error_001.phpt b/ext/standard/tests/class_object/get_declared_classes_error_001.phpt
new file mode 100644 (file)
index 0000000..a508443
--- /dev/null
@@ -0,0 +1,27 @@
+--TEST--
+Test get_declared_classes() function : error conditions 
+--FILE--
+<?php
+/* Prototype  : proto array get_declared_classes()
+ * Description: Returns an array of all declared classes. 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing get_declared_classes() : error conditions ***\n";
+
+// One argument
+echo "\n-- Testing get_declared_classes() function with one argument --\n";
+$extra_arg = 10;;
+var_dump( get_declared_classes($extra_arg) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing get_declared_classes() : error conditions ***
+
+-- Testing get_declared_classes() function with one argument --
+
+Warning: Wrong parameter count for get_declared_classes() in %s on line 13
+NULL
+Done
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/get_declared_interfaces_basic_001.phpt b/ext/standard/tests/class_object/get_declared_interfaces_basic_001.phpt
new file mode 100644 (file)
index 0000000..a0ec715
--- /dev/null
@@ -0,0 +1,47 @@
+--TEST--
+Test get_declared_interfaces() function : basic functionality 
+--FILE--
+<?php
+/* Prototype  : proto array get_declared_interfaces()
+ * Description: Returns an array of all declared interfaces. 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+
+echo "*** Testing get_declared_interfaces() : basic functionality ***\n";
+
+// Zero arguments
+echo "\n-- Testing get_declared_interfaces() function with Zero arguments --\n";
+var_dump(get_declared_interfaces());
+
+foreach (get_declared_interfaces() as $interface) {
+       if (!interface_exists($interface)) {
+               echo "Error: $interface is not a valid interface.\n"; 
+       }
+}
+
+echo "\n-- Ensure userspace classes are not listed --\n";
+Class C {}
+var_dump(in_array('C', get_declared_interfaces()));
+
+echo "\n-- Ensure userspace interfaces are listed --\n";
+Interface I {}
+var_dump(in_array('I', get_declared_interfaces()));
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing get_declared_interfaces() : basic functionality ***
+
+-- Testing get_declared_interfaces() function with Zero arguments --
+array(%d) {
+%a
+}
+
+-- Ensure userspace classes are not listed --
+bool(false)
+
+-- Ensure userspace interfaces are listed --
+bool(true)
+Done
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/get_declared_interfaces_error_001.phpt b/ext/standard/tests/class_object/get_declared_interfaces_error_001.phpt
new file mode 100644 (file)
index 0000000..93aabb6
--- /dev/null
@@ -0,0 +1,27 @@
+--TEST--
+Test get_declared_interfaces() function : error conditions 
+--FILE--
+<?php
+/* Prototype  : proto array get_declared_interfaces()
+ * Description: Returns an array of all declared interfaces. 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing get_declared_interfaces() : error conditions ***\n";
+
+// One argument
+echo "\n-- Testing get_declared_interfaces() function with one argument --\n";
+$extra_arg = 10;;
+var_dump( get_declared_interfaces($extra_arg) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing get_declared_interfaces() : error conditions ***
+
+-- Testing get_declared_interfaces() function with one argument --
+
+Warning: Wrong parameter count for get_declared_interfaces() in %s on line 13
+NULL
+Done
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/get_object_vars_basic_001.phpt b/ext/standard/tests/class_object/get_object_vars_basic_001.phpt
new file mode 100644 (file)
index 0000000..38ed74f
--- /dev/null
@@ -0,0 +1,107 @@
+--TEST--
+get_object_vars(): visibility from static methods (target object passed as arg)
+--FILE--
+<?php
+/* Prototype  : proto array get_object_vars(object obj)
+ * Description: Returns an array of object properties 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+Class A {
+       private $hiddenPriv = 'A::hiddenPriv';
+
+       public static function test($b) {
+               echo __METHOD__ . "\n"; 
+               var_dump(get_object_vars($b));
+       }
+}
+
+Class B extends A {
+       private $hiddenPriv = 'B::hiddenPriv';  
+       private $priv = 'B::priv';
+       protected $prot = 'B::prot';
+       public $pub = 'B::pub';
+
+       public static function test($b) {
+               echo __METHOD__ . "\n";         
+               var_dump(get_object_vars($b));
+       } 
+}
+
+Class C extends B {
+       private $hiddenPriv = 'C::hiddenPriv';
+       
+       public static function test($b) {
+               echo __METHOD__ . "\n";         
+               var_dump(get_object_vars($b));
+       } 
+}
+
+Class X {
+       public static function test($b) {
+               echo __METHOD__ . "\n";         
+               var_dump(get_object_vars($b));
+       } 
+}
+
+
+$b = new B;
+echo "\n---( Global scope: )---\n";
+var_dump(get_object_vars($b));
+echo "\n---( Declaring class: )---\n";
+B::test($b);
+echo "\n---( Subclass: )---\n";
+C::test($b);
+echo "\n---( Superclass: )---\n";
+A::test($b);
+echo "\n---( Unrelated class: )---\n";
+X::test($b);
+?>
+--EXPECTF--
+
+---( Global scope: )---
+array(1) {
+  ["pub"]=>
+  string(6) "B::pub"
+}
+
+---( Declaring class: )---
+B::test
+array(4) {
+  ["hiddenPriv"]=>
+  string(13) "B::hiddenPriv"
+  ["priv"]=>
+  string(7) "B::priv"
+  ["prot"]=>
+  string(7) "B::prot"
+  ["pub"]=>
+  string(6) "B::pub"
+}
+
+---( Subclass: )---
+C::test
+array(2) {
+  ["prot"]=>
+  string(7) "B::prot"
+  ["pub"]=>
+  string(6) "B::pub"
+}
+
+---( Superclass: )---
+A::test
+array(3) {
+  ["prot"]=>
+  string(7) "B::prot"
+  ["pub"]=>
+  string(6) "B::pub"
+  ["hiddenPriv"]=>
+  string(13) "A::hiddenPriv"
+}
+
+---( Unrelated class: )---
+X::test
+array(1) {
+  ["pub"]=>
+  string(6) "B::pub"
+}
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/get_object_vars_basic_002.phpt b/ext/standard/tests/class_object/get_object_vars_basic_002.phpt
new file mode 100644 (file)
index 0000000..910926b
--- /dev/null
@@ -0,0 +1,64 @@
+--TEST--
+get_object_vars(): visibility from non static methods (target object passed as arg)
+--FILE--
+<?php
+/* Prototype  : proto array get_object_vars(object obj)
+ * Description: Returns an array of object properties 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+Class A {
+       private $hiddenPriv = 'A::hiddenPriv';
+
+       public function testA($b) {
+               echo __METHOD__ . "\n"; 
+               var_dump(get_object_vars($b));
+       } 
+}
+
+Class B extends A {
+       private $hiddenPriv = 'B::hiddenPriv';  
+       private $priv = 'B::priv';
+       protected $prot = 'B::prot';
+       public $pub = 'B::pub';
+
+       public function testB($b) {
+               echo __METHOD__ . "\n";         
+               var_dump(get_object_vars($b));
+       } 
+}
+
+
+$b = new B;
+echo "\n---( Declaring class: )---\n";
+$b->testB($b);
+echo "\n---( Superclass: )---\n";
+$b->testA($b);
+
+?>
+--EXPECTF--
+
+---( Declaring class: )---
+B::testB
+array(4) {
+  ["hiddenPriv"]=>
+  string(13) "B::hiddenPriv"
+  ["priv"]=>
+  string(7) "B::priv"
+  ["prot"]=>
+  string(7) "B::prot"
+  ["pub"]=>
+  string(6) "B::pub"
+}
+
+---( Superclass: )---
+A::testA
+array(3) {
+  ["prot"]=>
+  string(7) "B::prot"
+  ["pub"]=>
+  string(6) "B::pub"
+  ["hiddenPriv"]=>
+  string(13) "A::hiddenPriv"
+}
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/get_object_vars_error_001.phpt b/ext/standard/tests/class_object/get_object_vars_error_001.phpt
new file mode 100644 (file)
index 0000000..67a2705
--- /dev/null
@@ -0,0 +1,37 @@
+--TEST--
+Test get_object_vars() function : error conditions - wrong number of args
+--FILE--
+<?php
+/* Prototype  : proto array get_object_vars(object obj)
+ * Description: Returns an array of object properties 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing get_object_vars() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing get_object_vars() function with Zero arguments --\n";
+var_dump( get_object_vars() );
+
+//Test get_object_vars with one more than the expected number of arguments
+echo "\n-- Testing get_object_vars() function with more than expected no. of arguments --\n";
+$obj = new stdclass();
+$extra_arg = 10;
+var_dump( get_object_vars($obj, $extra_arg) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing get_object_vars() : error conditions ***
+
+-- Testing get_object_vars() function with Zero arguments --
+
+Warning: Wrong parameter count for get_object_vars() in %s on line 12
+NULL
+
+-- Testing get_object_vars() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for get_object_vars() in %s on line 18
+NULL
+Done
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/get_object_vars_variation_001.phpt b/ext/standard/tests/class_object/get_object_vars_variation_001.phpt
new file mode 100644 (file)
index 0000000..89fbc53
--- /dev/null
@@ -0,0 +1,20 @@
+--TEST--
+get_object_vars() - ensure statics are not shown
+--FILE--
+<?php
+/* Prototype  : proto array get_object_vars(object obj)
+ * Description: Returns an array of object properties 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+Class A {
+       public static $var = 'hello';
+}
+
+$a = new A;
+var_dump(get_object_vars($a));
+?>
+--EXPECTF--
+array(0) {
+}
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/get_object_vars_variation_002.phpt b/ext/standard/tests/class_object/get_object_vars_variation_002.phpt
new file mode 100644 (file)
index 0000000..73478de
--- /dev/null
@@ -0,0 +1,47 @@
+--TEST--
+get_object_vars() - ensure references are preserved
+--FILE--
+<?php
+/* Prototype  : proto array get_object_vars(object obj)
+ * Description: Returns an array of object properties 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+$obj = new stdClass;
+var_dump(get_object_vars($obj));
+
+$a='original.a';
+$obj->ref = &$a;
+$obj->val = $a;
+
+$arr = get_object_vars($obj);
+var_dump($arr);
+
+$arr['ref'] = 'changed.ref';
+$arr['val'] = 'changed.val';
+
+var_dump($arr, $obj, $a);
+?>
+--EXPECTF--
+array(0) {
+}
+array(2) {
+  ["ref"]=>
+  &string(10) "original.a"
+  ["val"]=>
+  string(10) "original.a"
+}
+array(2) {
+  ["ref"]=>
+  &string(11) "changed.ref"
+  ["val"]=>
+  string(11) "changed.val"
+}
+object(stdClass)#1 (2) {
+  ["ref"]=>
+  &string(11) "changed.ref"
+  ["val"]=>
+  string(10) "original.a"
+}
+string(11) "changed.ref"
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/get_object_vars_variation_003.phpt b/ext/standard/tests/class_object/get_object_vars_variation_003.phpt
new file mode 100644 (file)
index 0000000..70794e7
--- /dev/null
@@ -0,0 +1,158 @@
+--TEST--
+Test get_object_vars() function : usage variations  - unexpected types for argument 1
+--FILE--
+<?php
+/* Prototype  : proto array get_object_vars(object obj)
+ * Description: Returns an array of object properties 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing get_object_vars() : usage variations ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//array of values to iterate over
+$values = array(
+
+      // int data
+      0,
+      1,
+      12345,
+      -2345,
+
+      // float data
+      10.5,
+      -10.5,
+      10.1234567e10,
+      10.7654321E-10,
+      .5,
+
+      // array data
+      array(),
+      array(0),
+      array(1),
+      array(1, 2),
+      array('color' => 'red', 'item' => 'pen'),
+
+      // null data
+      NULL,
+      null,
+
+      // boolean data
+      true,
+      false,
+      TRUE,
+      FALSE,
+
+      // empty data
+      "",
+      '',
+
+      // string data
+      "string",
+      'string',
+
+      // undefined data
+      $undefined_var,
+
+      // unset data
+      $unset_var,
+);
+
+// loop through each element of the array for obj
+
+foreach($values as $value) {
+      echo "\nArg value $value \n";
+      var_dump( get_object_vars($value) );
+};
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing get_object_vars() : usage variations ***
+
+Notice: Undefined variable: undefined_var in %s on line 56
+
+Notice: Undefined variable: unset_var in %s on line 59
+
+Arg value 0 
+bool(false)
+
+Arg value 1 
+bool(false)
+
+Arg value 12345 
+bool(false)
+
+Arg value -2345 
+bool(false)
+
+Arg value 10.5 
+bool(false)
+
+Arg value -10.5 
+bool(false)
+
+Arg value 101234567000 
+bool(false)
+
+Arg value 1.07654321E-9 
+bool(false)
+
+Arg value 0.5 
+bool(false)
+
+Arg value Array 
+bool(false)
+
+Arg value Array 
+bool(false)
+
+Arg value Array 
+bool(false)
+
+Arg value Array 
+bool(false)
+
+Arg value Array 
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value 1 
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value 1 
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value string 
+bool(false)
+
+Arg value string 
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value  
+bool(false)
+Done
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/get_parent_class_error_001.phpt b/ext/standard/tests/class_object/get_parent_class_error_001.phpt
new file mode 100644 (file)
index 0000000..cf9c3e8
--- /dev/null
@@ -0,0 +1,29 @@
+--TEST--
+Test get_parent_class() function : error conditions - wrong number of args.
+--FILE--
+<?php
+/* Prototype  : proto string get_parent_class([mixed object])
+ * Description: Retrieves the parent class name for object or class or current scope. 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing get_parent_class() : error conditions ***\n";
+
+
+//Test get_parent_class with one more than the expected number of arguments
+echo "\n-- Testing get_parent_class() function with more than expected no. of arguments --\n";
+$object = 1;
+$extra_arg = 10;
+var_dump( get_parent_class($object, $extra_arg) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing get_parent_class() : error conditions ***
+
+-- Testing get_parent_class() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for get_parent_class() in %s on line 15
+NULL
+Done
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/get_parent_class_variation_001.phpt b/ext/standard/tests/class_object/get_parent_class_variation_001.phpt
new file mode 100644 (file)
index 0000000..6f2e328
--- /dev/null
@@ -0,0 +1,27 @@
+--TEST--
+Test get_parent_class() function : variation - case sensitivity
+--FILE--
+<?php
+/* Prototype  : proto string get_parent_class([mixed object])
+ * Description: Retrieves the parent class name for object or class or current scope. 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+//  Note: basic use cases in Zend/tests/010.phpt
+
+echo "*** Testing get_parent_class() : variation ***\n";
+
+class caseSensitivityTest {}
+class caseSensitivityTestChild extends caseSensitivityTest {}
+
+var_dump(get_parent_class('CasesensitivitytestCHILD'));
+var_dump(get_parent_class(new CasesensitivitytestCHILD));
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing get_parent_class() : variation ***
+string(19) "caseSensitivityTest"
+string(19) "caseSensitivityTest"
+Done
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/get_parent_class_variation_002.phpt b/ext/standard/tests/class_object/get_parent_class_variation_002.phpt
new file mode 100644 (file)
index 0000000..f7e5b9d
--- /dev/null
@@ -0,0 +1,174 @@
+--TEST--
+Test get_parent_class() function : usage variations  - unexpected argument type.
+--FILE--
+<?php
+/* Prototype  : proto string get_parent_class([mixed object])
+ * Description: Retrieves the parent class name for object or class or current scope. 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+function __autoload($className) {
+       echo "In __autoload($className)\n";
+}
+
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+       echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+}
+set_error_handler('test_error_handler');
+
+echo "*** Testing get_parent_class() : usage variations ***\n";
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//array of values to iterate over
+$values = array(
+
+      // int data
+      0,
+      1,
+      12345,
+      -2345,
+
+      // float data
+      10.5,
+      -10.5,
+      10.1234567e10,
+      10.7654321E-10,
+      .5,
+
+      // array data
+      array(),
+      array(0),
+      array(1),
+      array(1, 2),
+      array('color' => 'red', 'item' => 'pen'),
+
+      // null data
+      NULL,
+      null,
+
+      // boolean data
+      true,
+      false,
+      TRUE,
+      FALSE,
+
+      // empty data
+      "",
+      '',
+
+      // string data
+      "string",
+      'String',
+
+      // object data
+      new stdclass(),
+
+      // undefined data
+      $undefined_var,
+
+      // unset data
+      $unset_var,
+);
+
+// loop through each element of the array for object
+
+foreach($values as $value) {
+      echo "\nArg value $value \n";
+      var_dump( get_parent_class($value) );
+};
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing get_parent_class() : usage variations ***
+Error: 8 - Undefined variable: undefined_var, %s(68)
+Error: 8 - Undefined variable: unset_var, %s(71)
+
+Arg value 0 
+bool(false)
+
+Arg value 1 
+bool(false)
+
+Arg value 12345 
+bool(false)
+
+Arg value -2345 
+bool(false)
+
+Arg value 10.5 
+bool(false)
+
+Arg value -10.5 
+bool(false)
+
+Arg value 101234567000 
+bool(false)
+
+Arg value 1.07654321E-9 
+bool(false)
+
+Arg value 0.5 
+bool(false)
+
+Arg value Array 
+bool(false)
+
+Arg value Array 
+bool(false)
+
+Arg value Array 
+bool(false)
+
+Arg value Array 
+bool(false)
+
+Arg value Array 
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value 1 
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value 1 
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value string 
+In __autoload(string)
+bool(false)
+
+Arg value String 
+In __autoload(String)
+bool(false)
+Error: 4096 - Object of class stdClass could not be converted to string, %s(77)
+
+Arg value  
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value  
+bool(false)
+Done
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/is_a_error_001.phpt b/ext/standard/tests/class_object/is_a_error_001.phpt
new file mode 100644 (file)
index 0000000..0d1aedc
--- /dev/null
@@ -0,0 +1,44 @@
+--TEST--
+Test is_a() function : error conditions - wrong number of args
+--FILE--
+<?php
+/* Prototype  : proto bool is_a(object object, string class_name)
+ * Description: Returns true if the object is of this class or has this class as one of its parents 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing is_a() : error conditions ***\n";
+
+
+//Test is_a with one more than the expected number of arguments
+echo "\n-- Testing is_a() function with more than expected no. of arguments --\n";
+$object = new stdclass();
+$class_name = 'string_val';
+$extra_arg = 10;
+var_dump( is_a($object, $class_name, $extra_arg) );
+
+// Testing is_a with one less than the expected number of arguments
+echo "\n-- Testing is_a() function with less than expected no. of arguments --\n";
+$object = new stdclass();
+var_dump( is_a($object) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing is_a() : error conditions ***
+
+-- Testing is_a() function with more than expected no. of arguments --
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 16
+
+Warning: Wrong parameter count for is_a() in %s on line 16
+NULL
+
+-- Testing is_a() function with less than expected no. of arguments --
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 21
+
+Warning: Wrong parameter count for is_a() in %s on line 21
+NULL
+Done
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/is_a_variation_001.phpt b/ext/standard/tests/class_object/is_a_variation_001.phpt
new file mode 100644 (file)
index 0000000..d521502
--- /dev/null
@@ -0,0 +1,213 @@
+--TEST--
+Test is_a() function : usage variations  - wrong type for arg 1 
+--FILE--
+<?php
+/* Prototype  : proto bool is_a(object object, string class_name)
+ * Description: Returns true if the object is of this class or has this class as one of its parents 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+// Note: basic use cases in Zend/tests/is_a.phpt 
+echo "*** Testing is_a() : usage variations ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$class_name = 'stdClass';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//array of values to iterate over
+$values = array(
+
+      // int data
+      0,
+      1,
+      12345,
+      -2345,
+
+      // float data
+      10.5,
+      -10.5,
+      10.1234567e10,
+      10.7654321E-10,
+      .5,
+
+      // array data
+      array(),
+      array(0),
+      array(1),
+      array(1, 2),
+      array('color' => 'red', 'item' => 'pen'),
+
+      // null data
+      NULL,
+      null,
+
+      // boolean data
+      true,
+      false,
+      TRUE,
+      FALSE,
+
+      // empty data
+      "",
+      '',
+
+      // string data
+      "string",
+      'String',
+      
+      // undefined data
+      $undefined_var,
+
+      // unset data
+      $unset_var,
+);
+
+// loop through each element of the array for object
+
+foreach($values as $value) {
+      echo "\nArg value $value \n";
+      var_dump( is_a($value, $class_name) );
+};
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing is_a() : usage variations ***
+
+Notice: Undefined variable: undefined_var in %s on line 59
+
+Notice: Undefined variable: unset_var in %s on line 62
+
+Arg value 0 
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 69
+bool(false)
+
+Arg value 1 
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 69
+bool(false)
+
+Arg value 12345 
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 69
+bool(false)
+
+Arg value -2345 
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 69
+bool(false)
+
+Arg value 10.5 
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 69
+bool(false)
+
+Arg value -10.5 
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 69
+bool(false)
+
+Arg value 101234567000 
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 69
+bool(false)
+
+Arg value 1.07654321E-9 
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 69
+bool(false)
+
+Arg value 0.5 
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 69
+bool(false)
+
+Arg value Array 
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 69
+bool(false)
+
+Arg value Array 
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 69
+bool(false)
+
+Arg value Array 
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 69
+bool(false)
+
+Arg value Array 
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 69
+bool(false)
+
+Arg value Array 
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 69
+bool(false)
+
+Arg value  
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 69
+bool(false)
+
+Arg value  
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 69
+bool(false)
+
+Arg value 1 
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 69
+bool(false)
+
+Arg value  
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 69
+bool(false)
+
+Arg value 1 
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 69
+bool(false)
+
+Arg value  
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 69
+bool(false)
+
+Arg value  
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 69
+bool(false)
+
+Arg value  
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 69
+bool(false)
+
+Arg value string 
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 69
+bool(false)
+
+Arg value String 
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 69
+bool(false)
+
+Arg value  
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 69
+bool(false)
+
+Arg value  
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 69
+bool(false)
+Done
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/is_a_variation_002.phpt b/ext/standard/tests/class_object/is_a_variation_002.phpt
new file mode 100644 (file)
index 0000000..9835e7c
--- /dev/null
@@ -0,0 +1,223 @@
+--TEST--
+Test is_a() function : usage variations  - wrong type for arg 2 
+--FILE--
+<?php
+/* Prototype  : proto bool is_a(object object, string class_name)
+ * Description: Returns true if the object is of this class or has this class as one of its parents 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+class C {
+       function __toString() {
+               return "C Instance";
+       }
+}
+
+echo "*** Testing is_a() : usage variations ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$object = new stdclass();
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//array of values to iterate over
+$values = array(
+
+      // int data
+      0,
+      1,
+      12345,
+      -2345,
+
+      // float data
+      10.5,
+      -10.5,
+      10.1234567e10,
+      10.7654321E-10,
+      .5,
+
+      // array data
+      array(),
+      array(0),
+      array(1),
+      array(1, 2),
+      array('color' => 'red', 'item' => 'pen'),
+
+      // null data
+      NULL,
+      null,
+
+      // boolean data
+      true,
+      false,
+      TRUE,
+      FALSE,
+
+      // empty data
+      "",
+      '',
+
+      // object data
+      new C,
+
+      // undefined data
+      $undefined_var,
+
+      // unset data
+      $unset_var,
+);
+
+// loop through each element of the array for class_name
+
+foreach($values as $value) {
+      echo "\nArg value $value \n";
+      var_dump( is_a($object, $value) );
+};
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing is_a() : usage variations ***
+
+Notice: Undefined variable: undefined_var in %s on line 64
+
+Notice: Undefined variable: unset_var in %s on line 67
+
+Arg value 0 
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 74
+bool(false)
+
+Arg value 1 
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 74
+bool(false)
+
+Arg value 12345 
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 74
+bool(false)
+
+Arg value -2345 
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 74
+bool(false)
+
+Arg value 10.5 
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 74
+bool(false)
+
+Arg value -10.5 
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 74
+bool(false)
+
+Arg value 101234567000 
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 74
+bool(false)
+
+Arg value 1.07654321E-9 
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 74
+bool(false)
+
+Arg value 0.5 
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 74
+bool(false)
+
+Arg value Array 
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 74
+
+Notice: Array to string conversion in %s on line 74
+bool(false)
+
+Arg value Array 
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 74
+
+Notice: Array to string conversion in %s on line 74
+bool(false)
+
+Arg value Array 
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 74
+
+Notice: Array to string conversion in %s on line 74
+bool(false)
+
+Arg value Array 
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 74
+
+Notice: Array to string conversion in %s on line 74
+bool(false)
+
+Arg value Array 
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 74
+
+Notice: Array to string conversion in %s on line 74
+bool(false)
+
+Arg value  
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 74
+bool(false)
+
+Arg value  
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 74
+bool(false)
+
+Arg value 1 
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 74
+bool(false)
+
+Arg value  
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 74
+bool(false)
+
+Arg value 1 
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 74
+bool(false)
+
+Arg value  
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 74
+bool(false)
+
+Arg value  
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 74
+bool(false)
+
+Arg value  
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 74
+bool(false)
+
+Arg value C Instance 
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 74
+bool(false)
+
+Arg value  
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 74
+bool(false)
+
+Arg value  
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 74
+bool(false)
+Done
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/is_a_variation_003.phpt b/ext/standard/tests/class_object/is_a_variation_003.phpt
new file mode 100644 (file)
index 0000000..9cc50f3
--- /dev/null
@@ -0,0 +1,25 @@
+--TEST--
+Test is_a() function : usage variations  - case sensitivity
+--FILE--
+<?php
+/* Prototype  : proto bool is_a(object object, string class_name)
+ * Description: Returns true if the object is of this class or has this class as one of its parents 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing is_a() : usage variations ***\n";
+
+class caseSensitivityTest {}
+class caseSensitivityTestChild extends caseSensitivityTest {}
+
+var_dump(is_a(new caseSensitivityTestChild, 'caseSensitivityTEST'));
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing is_a() : usage variations ***
+
+Strict Standards: is_a(): Deprecated. Please use the instanceof operator in %s on line 13
+bool(true)
+Done
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/is_subclass_of_error_001.phpt b/ext/standard/tests/class_object/is_subclass_of_error_001.phpt
new file mode 100644 (file)
index 0000000..4403bde
--- /dev/null
@@ -0,0 +1,40 @@
+--TEST--
+Test is_subclass_of() function : wrong number of args 
+--FILE--
+<?php
+/* Prototype  : proto bool is_subclass_of(object object, string class_name)
+ * Description: Returns true if the object has this class as one of its parents 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing is_subclass_of() : error conditions ***\n";
+
+
+//Test is_subclass_of with one more than the expected number of arguments
+echo "\n-- Testing is_subclass_of() function with more than expected no. of arguments --\n";
+$object = new stdclass();
+$class_name = 'string_val';
+$extra_arg = 10;
+var_dump( is_subclass_of($object, $class_name, $extra_arg) );
+
+// Testing is_subclass_of with one less than the expected number of arguments
+echo "\n-- Testing is_subclass_of() function with less than expected no. of arguments --\n";
+$object = new stdclass();
+var_dump( is_subclass_of($object) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing is_subclass_of() : error conditions ***
+
+-- Testing is_subclass_of() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for is_subclass_of() in %s on line 16
+NULL
+
+-- Testing is_subclass_of() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for is_subclass_of() in %s on line 21
+NULL
+Done
diff --git a/ext/standard/tests/class_object/is_subclass_of_variation_001.phpt b/ext/standard/tests/class_object/is_subclass_of_variation_001.phpt
new file mode 100644 (file)
index 0000000..f11183d
--- /dev/null
@@ -0,0 +1,175 @@
+--TEST--
+Test is_subclass_of() function : usage variations  - unexpected type for arg 1
+--FILE--
+<?php
+/* Prototype  : proto bool is_subclass_of(object object, string class_name)
+ * Description: Returns true if the object has this class as one of its parents 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+// Note: basic use cases in Zend/tests/is_a.phpt
+function __autoload($className) {
+       echo "In __autoload($className)\n";
+}
+
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+       echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+}
+set_error_handler('test_error_handler');
+
+
+echo "*** Testing is_subclass_of() : usage variations ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$class_name = 'string_val';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//array of values to iterate over
+$values = array(
+
+      // int data
+      0,
+      1,
+      12345,
+      -2345,
+
+      // float data
+      10.5,
+      -10.5,
+      10.1234567e10,
+      10.7654321E-10,
+      .5,
+
+      // array data
+      array(),
+      array(0),
+      array(1),
+      array(1, 2),
+      array('color' => 'red', 'item' => 'pen'),
+
+      // null data
+      NULL,
+      null,
+
+      // boolean data
+      true,
+      false,
+      TRUE,
+      FALSE,
+
+      // empty data
+      "",
+      '',
+
+      // string data
+      "string",
+      'String',
+
+      // undefined data
+      $undefined_var,
+
+      // unset data
+      $unset_var,
+);
+
+// loop through each element of the array for object
+
+foreach($values as $value) {
+      echo "\nArg value $value \n";
+      var_dump( is_subclass_of($value, $class_name) );
+};
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing is_subclass_of() : usage variations ***
+Error: 8 - Undefined variable: undefined_var, %s(69)
+Error: 8 - Undefined variable: unset_var, %s(72)
+
+Arg value 0 
+bool(false)
+
+Arg value 1 
+bool(false)
+
+Arg value 12345 
+bool(false)
+
+Arg value -2345 
+bool(false)
+
+Arg value 10.5 
+bool(false)
+
+Arg value -10.5 
+bool(false)
+
+Arg value 101234567000 
+bool(false)
+
+Arg value 1.07654321E-9 
+bool(false)
+
+Arg value 0.5 
+bool(false)
+
+Arg value Array 
+bool(false)
+
+Arg value Array 
+bool(false)
+
+Arg value Array 
+bool(false)
+
+Arg value Array 
+bool(false)
+
+Arg value Array 
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value 1 
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value 1 
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value  
+Error: 2 - Unknown class passed as parameter, %s(79)
+bool(false)
+
+Arg value  
+Error: 2 - Unknown class passed as parameter, %s(79)
+bool(false)
+
+Arg value string 
+In __autoload(string)
+Error: 2 - Unknown class passed as parameter, %s(79)
+bool(false)
+
+Arg value String 
+In __autoload(String)
+Error: 2 - Unknown class passed as parameter, %s(79)
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value  
+bool(false)
+Done
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/is_subclass_of_variation_002.phpt b/ext/standard/tests/class_object/is_subclass_of_variation_002.phpt
new file mode 100644 (file)
index 0000000..a45583c
--- /dev/null
@@ -0,0 +1,172 @@
+--TEST--
+Test is_subclass_of() function : usage variations  - unexpected type for arg 2
+--FILE--
+<?php
+/* Prototype  : proto bool is_subclass_of(object object, string class_name)
+ * Description: Returns true if the object has this class as one of its parents 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+function __autoload($className) {
+       echo "In __autoload($className)\n";
+}
+
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+       echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+}
+set_error_handler('test_error_handler');
+
+echo "*** Testing is_subclass_of() : usage variations ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$object = new stdclass();
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//array of values to iterate over
+$values = array(
+
+      // int data
+      0,
+      1,
+      12345,
+      -2345,
+
+      // float data
+      10.5,
+      -10.5,
+      10.1234567e10,
+      10.7654321E-10,
+      .5,
+
+      // array data
+      array(),
+      array(0),
+      array(1),
+      array(1, 2),
+      array('color' => 'red', 'item' => 'pen'),
+
+      // null data
+      NULL,
+      null,
+
+      // boolean data
+      true,
+      false,
+      TRUE,
+      FALSE,
+
+      // empty data
+      "",
+      '',
+
+      // object data
+      new stdclass(),
+
+      // undefined data
+      $undefined_var,
+
+      // unset data
+      $unset_var,
+);
+
+// loop through each element of the array for class_name
+
+foreach($values as $value) {
+      echo "\nArg value $value \n";
+      var_dump( is_subclass_of($object, $value) );
+};
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing is_subclass_of() : usage variations ***
+Error: 8 - Undefined variable: undefined_var, %s(67)
+Error: 8 - Undefined variable: unset_var, %s(70)
+
+Arg value 0 
+bool(false)
+
+Arg value 1 
+bool(false)
+
+Arg value 12345 
+bool(false)
+
+Arg value -2345 
+bool(false)
+
+Arg value 10.5 
+bool(false)
+
+Arg value -10.5 
+bool(false)
+
+Arg value 101234567000 
+bool(false)
+
+Arg value 1.07654321E-9 
+bool(false)
+
+Arg value 0.5 
+bool(false)
+
+Arg value Array 
+Error: 8 - Array to string conversion, %s(77)
+bool(false)
+
+Arg value Array 
+Error: 8 - Array to string conversion, %s(77)
+bool(false)
+
+Arg value Array 
+Error: 8 - Array to string conversion, %s(77)
+bool(false)
+
+Arg value Array 
+Error: 8 - Array to string conversion, %s(77)
+bool(false)
+
+Arg value Array 
+Error: 8 - Array to string conversion, %s(77)
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value 1 
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value 1 
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value  
+bool(false)
+Error: 4096 - Object of class stdClass could not be converted to string, %s(76)
+
+Arg value  
+Error: 4096 - Object of class stdClass could not be converted to string, %s(77)
+Error: 8 - Object of class stdClass to string conversion, %s(77)
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value  
+bool(false)
+Done
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/is_subclass_of_variation_003.phpt b/ext/standard/tests/class_object/is_subclass_of_variation_003.phpt
new file mode 100644 (file)
index 0000000..d4aef12
--- /dev/null
@@ -0,0 +1,26 @@
+--TEST--
+Test is_subclass_of() function : usage variations  - case sensitivity
+--FILE--
+<?php
+/* Prototype  : proto bool is_subclass_of(object object, string class_name)
+ * Description: Returns true if the object has this class as one of its parents 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing is_subclass_of() : usage variations ***\n";
+
+echo "*** Testing is_a() : usage variations ***\n";
+
+class caseSensitivityTest {}
+class caseSensitivityTestChild extends caseSensitivityTest {}
+
+var_dump(is_subclass_of('caseSensitivityTestCHILD', 'caseSensitivityTEST'));
+
+echo "Done"
+?>
+--EXPECTF--
+*** Testing is_subclass_of() : usage variations ***
+*** Testing is_a() : usage variations ***
+bool(true)
+Done
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/method_exists_basic_001.phpt b/ext/standard/tests/class_object/method_exists_basic_001.phpt
new file mode 100644 (file)
index 0000000..2f11e4c
--- /dev/null
@@ -0,0 +1,83 @@
+--TEST--
+method_exists() on userspace classes; static & non-static methods with various visibilities.
+--FILE--
+<?php
+/* Prototype  : proto bool is_subclass_of(object object, string class_name)
+ * Description: Returns true if the object has this class as one of its parents 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+Class B {
+       public function inherit_pub() {}
+       protected function inherit_prot() {}
+       private function inherit_priv() {}
+       static public function inherit_static_pub() {}
+       static protected function inherit_static_prot() {}
+       static private function inherit_static_priv() {}        
+}
+
+Class C extends B {
+       public function pub() {}
+       protected function prot() {}
+       private function priv() {}
+       static public function static_pub() {}
+       static protected function static_prot() {}
+       static private function static_priv() {}
+}
+
+
+$methods = array(
+       'inherit_pub', 'inherit_prot', 'inherit_priv',
+       'inherit_static_pub', 'inherit_static_prot', 'inherit_static_priv',
+       'pub', 'prot', 'priv',
+       'static_pub', 'static_prot', 'static_priv',
+       'non_existent');
+
+echo "\n ---(Using string class name)---\n";
+foreach ($methods as $method) {
+  echo "Does C::$method exist? ";
+  var_dump(method_exists("C", $method));
+}
+
+echo "\n ---(Using object)---\n";
+$myC = new C;
+foreach ($methods as $method) {
+  echo "Does C::$method exist? ";
+  var_dump(method_exists($myC, $method));
+}
+
+echo "Done";
+?>
+--EXPECTF--
+
+ ---(Using string class name)---
+Does C::inherit_pub exist? bool(true)
+Does C::inherit_prot exist? bool(true)
+Does C::inherit_priv exist? bool(true)
+Does C::inherit_static_pub exist? bool(true)
+Does C::inherit_static_prot exist? bool(true)
+Does C::inherit_static_priv exist? bool(true)
+Does C::pub exist? bool(true)
+Does C::prot exist? bool(true)
+Does C::priv exist? bool(true)
+Does C::static_pub exist? bool(true)
+Does C::static_prot exist? bool(true)
+Does C::static_priv exist? bool(true)
+Does C::non_existent exist? bool(false)
+
+ ---(Using object)---
+Does C::inherit_pub exist? bool(true)
+Does C::inherit_prot exist? bool(true)
+Does C::inherit_priv exist? bool(true)
+Does C::inherit_static_pub exist? bool(true)
+Does C::inherit_static_prot exist? bool(true)
+Does C::inherit_static_priv exist? bool(true)
+Does C::pub exist? bool(true)
+Does C::prot exist? bool(true)
+Does C::priv exist? bool(true)
+Does C::static_pub exist? bool(true)
+Does C::static_prot exist? bool(true)
+Does C::static_priv exist? bool(true)
+Does C::non_existent exist? bool(false)
+Done
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/method_exists_basic_002.phpt b/ext/standard/tests/class_object/method_exists_basic_002.phpt
new file mode 100644 (file)
index 0000000..f6b62aa
--- /dev/null
@@ -0,0 +1,33 @@
+--TEST--
+method_exists() on internal classes
+--FILE--
+<?php
+/* Prototype  : proto bool is_subclass_of(object object, string class_name)
+ * Description: Returns true if the object has this class as one of its parents 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+echo " ---(Internal classes, using string class name)---\n";
+echo "Does exception::getmessage exist? ";
+var_dump(method_exists("exception", "getmessage"));
+echo "Does stdclass::nonexistent exist? ";
+var_dump(method_exists("stdclass", "nonexistent"));
+
+echo "\n ---(Internal classes, using class instance)---\n";
+echo "Does exception::getmessage exist? ";
+var_dump(method_exists(new exception, "getmessage"));
+echo "Does stdclass::nonexistent exist? ";
+var_dump(method_exists(new stdclass, "nonexistent"));
+
+echo "Done";
+?>
+--EXPECTF--
+ ---(Internal classes, using string class name)---
+Does exception::getmessage exist? bool(true)
+Does stdclass::nonexistent exist? bool(false)
+
+ ---(Internal classes, using class instance)---
+Does exception::getmessage exist? bool(true)
+Does stdclass::nonexistent exist? bool(false)
+Done
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/method_exists_basic_003.phpt b/ext/standard/tests/class_object/method_exists_basic_003.phpt
new file mode 100644 (file)
index 0000000..32f62b7
--- /dev/null
@@ -0,0 +1,22 @@
+--TEST--
+method_exists() on non-existent class, with __autoload().
+--FILE--
+<?php
+/* Prototype  : proto bool is_subclass_of(object object, string class_name)
+ * Description: Returns true if the object has this class as one of its parents 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+function __autoload($name) {
+       echo "In __autoload($name)\n"; 
+} 
+
+var_dump(method_exists('UndefC', 'func'));
+
+echo "Done";
+?>
+--EXPECTF--
+In __autoload(UndefC)
+bool(false)
+Done
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/method_exists_error_001.phpt b/ext/standard/tests/class_object/method_exists_error_001.phpt
new file mode 100644 (file)
index 0000000..203128c
--- /dev/null
@@ -0,0 +1,40 @@
+--TEST--
+Test method_exists() function : error conditions - wrong number of args
+--FILE--
+<?php
+/* Prototype  : proto bool method_exists(object object, string method)
+ * Description: Checks if the class method exists 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing method_exists() : error conditions ***\n";
+
+
+//Test method_exists with one more than the expected number of arguments
+echo "\n-- Testing method_exists() function with more than expected no. of arguments --\n";
+$object = new stdclass();
+$method = 'string_val';
+$extra_arg = 10;
+var_dump( method_exists($object, $method, $extra_arg) );
+
+// Testing method_exists with one less than the expected number of arguments
+echo "\n-- Testing method_exists() function with less than expected no. of arguments --\n";
+$object = new stdclass();
+var_dump( method_exists($object) );
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing method_exists() : error conditions ***
+
+-- Testing method_exists() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for method_exists() in %s on line 16
+NULL
+
+-- Testing method_exists() function with less than expected no. of arguments --
+
+Warning: Wrong parameter count for method_exists() in %s on line 21
+NULL
+Done
diff --git a/ext/standard/tests/class_object/method_exists_variation_001.phpt b/ext/standard/tests/class_object/method_exists_variation_001.phpt
new file mode 100644 (file)
index 0000000..117c211
--- /dev/null
@@ -0,0 +1,170 @@
+--TEST--
+Test method_exists() function : usage variations  - unexpected type for arg 1
+--FILE--
+<?php
+/* Prototype  : proto bool method_exists(object object, string method)
+ * Description: Checks if the class method exists 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+function __autoload($className) {
+       echo "In __autoload($className)\n";
+}
+
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+       echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+}
+set_error_handler('test_error_handler');
+
+echo "*** Testing method_exists() : usage variations ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$method = 'string_val';
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//array of values to iterate over
+$values = array(
+
+      // int data
+      0,
+      1,
+      12345,
+      -2345,
+
+      // float data
+      10.5,
+      -10.5,
+      10.1234567e10,
+      10.7654321E-10,
+      .5,
+
+      // array data
+      array(),
+      array(0),
+      array(1),
+      array(1, 2),
+      array('color' => 'red', 'item' => 'pen'),
+
+      // null data
+      NULL,
+      null,
+
+      // boolean data
+      true,
+      false,
+      TRUE,
+      FALSE,
+
+      // empty data
+      "",
+      '',
+
+      // string data
+      "string",
+      'String',
+
+      // undefined data
+      $undefined_var,
+
+      // unset data
+      $unset_var,
+);
+
+// loop through each element of the array for object
+
+foreach($values as $value) {
+      echo "\nArg value $value \n";
+      var_dump( method_exists($value, $method) );
+};
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing method_exists() : usage variations ***
+Error: 8 - Undefined variable: undefined_var, %s(68)
+Error: 8 - Undefined variable: unset_var, %s(71)
+
+Arg value 0 
+bool(false)
+
+Arg value 1 
+bool(false)
+
+Arg value 12345 
+bool(false)
+
+Arg value -2345 
+bool(false)
+
+Arg value 10.5 
+bool(false)
+
+Arg value -10.5 
+bool(false)
+
+Arg value 101234567000 
+bool(false)
+
+Arg value 1.07654321E-9 
+bool(false)
+
+Arg value 0.5 
+bool(false)
+
+Arg value Array 
+bool(false)
+
+Arg value Array 
+bool(false)
+
+Arg value Array 
+bool(false)
+
+Arg value Array 
+bool(false)
+
+Arg value Array 
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value 1 
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value 1 
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value string 
+In __autoload(string)
+bool(false)
+
+Arg value String 
+In __autoload(String)
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value  
+bool(false)
+Done
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/method_exists_variation_002.phpt b/ext/standard/tests/class_object/method_exists_variation_002.phpt
new file mode 100644 (file)
index 0000000..54d0ef9
--- /dev/null
@@ -0,0 +1,172 @@
+--TEST--
+Test method_exists() function : usage variations  - unexpected type for arg 2
+--FILE--
+<?php
+/* Prototype  : proto bool method_exists(object object, string method)
+ * Description: Checks if the class method exists 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+function __autoload($className) {
+       echo "In __autoload($className)\n";
+}
+
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+       echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+}
+set_error_handler('test_error_handler');
+
+echo "*** Testing method_exists() : usage variations ***\n";
+
+// Initialise function arguments not being substituted (if any)
+$object = new stdclass();
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+//array of values to iterate over
+$values = array(
+
+      // int data
+      0,
+      1,
+      12345,
+      -2345,
+
+      // float data
+      10.5,
+      -10.5,
+      10.1234567e10,
+      10.7654321E-10,
+      .5,
+
+      // array data
+      array(),
+      array(0),
+      array(1),
+      array(1, 2),
+      array('color' => 'red', 'item' => 'pen'),
+
+      // null data
+      NULL,
+      null,
+
+      // boolean data
+      true,
+      false,
+      TRUE,
+      FALSE,
+
+      // empty data
+      "",
+      '',
+
+      // object data
+      new stdclass(),
+
+      // undefined data
+      $undefined_var,
+
+      // unset data
+      $unset_var,
+);
+
+// loop through each element of the array for method
+
+foreach($values as $value) {
+      echo "\nArg value $value \n";
+      var_dump( method_exists($object, $value) );
+};
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing method_exists() : usage variations ***
+Error: 8 - Undefined variable: undefined_var, %s(67)
+Error: 8 - Undefined variable: unset_var, %s(70)
+
+Arg value 0 
+bool(false)
+
+Arg value 1 
+bool(false)
+
+Arg value 12345 
+bool(false)
+
+Arg value -2345 
+bool(false)
+
+Arg value 10.5 
+bool(false)
+
+Arg value -10.5 
+bool(false)
+
+Arg value 101234567000 
+bool(false)
+
+Arg value 1.07654321E-9 
+bool(false)
+
+Arg value 0.5 
+bool(false)
+
+Arg value Array 
+Error: 8 - Array to string conversion, %s(77)
+bool(false)
+
+Arg value Array 
+Error: 8 - Array to string conversion, %s(77)
+bool(false)
+
+Arg value Array 
+Error: 8 - Array to string conversion, %s(77)
+bool(false)
+
+Arg value Array 
+Error: 8 - Array to string conversion, %s(77)
+bool(false)
+
+Arg value Array 
+Error: 8 - Array to string conversion, %s(77)
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value 1 
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value 1 
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value  
+bool(false)
+Error: 4096 - Object of class stdClass could not be converted to string, %s(76)
+
+Arg value  
+Error: 4096 - Object of class stdClass could not be converted to string, %s(77)
+Error: 8 - Object of class stdClass to string conversion, %s(77)
+bool(false)
+
+Arg value  
+bool(false)
+
+Arg value  
+bool(false)
+Done
\ No newline at end of file
diff --git a/ext/standard/tests/class_object/method_exists_variation_003.phpt b/ext/standard/tests/class_object/method_exists_variation_003.phpt
new file mode 100644 (file)
index 0000000..debe5a3
--- /dev/null
@@ -0,0 +1,26 @@
+--TEST--
+Test method_exists() function : variation - Case sensitivity
+--FILE--
+<?php
+/* Prototype  : proto bool method_exists(object object, string method)
+ * Description: Checks if the class method exists 
+ * Source code: Zend/zend_builtin_functions.c
+ * Alias to functions: 
+ */
+
+echo "*** Testing method_exists() : variation ***\n";
+
+Class caseSensitivityTest {
+       public function myMethod() {}
+}
+
+var_dump(method_exists(new casesensitivitytest, 'myMetHOD'));
+var_dump(method_exists('casesensiTivitytest', 'myMetHOD'));
+
+echo "Done";
+?>
+--EXPECTF--
+*** Testing method_exists() : variation ***
+bool(true)
+bool(true)
+Done
\ No newline at end of file
diff --git a/tests/classes/__call_004.phpt b/tests/classes/__call_004.phpt
new file mode 100644 (file)
index 0000000..2072112
--- /dev/null
@@ -0,0 +1,41 @@
+--TEST--
+When __call() is invoked via ::, ensure current scope's __call() is favoured over the specified class's  __call().
+--FILE--
+<?php
+class A {
+       function __call($strMethod, $arrArgs) {
+               echo "In " . __METHOD__ . "($strMethod, array(" . implode(',',$arrArgs) . "))\n";
+               var_dump($this);
+       }
+}
+
+class B extends A {
+       function __call($strMethod, $arrArgs) {
+               echo "In " . __METHOD__ . "($strMethod, array(" . implode(',',$arrArgs) . "))\n";
+               var_dump($this);
+       }
+       
+       function test() {
+               A::test1(1,'a');
+               B::test2(1,'a');
+               self::test3(1,'a');
+               parent::test4(1,'a');
+       }
+}
+
+$b = new B();
+$b->test();
+?>
+--EXPECTF--
+In B::__call(test1, array(1,a))
+object(B)#1 (0) {
+}
+In B::__call(test2, array(1,a))
+object(B)#1 (0) {
+}
+In B::__call(test3, array(1,a))
+object(B)#1 (0) {
+}
+In B::__call(test4, array(1,a))
+object(B)#1 (0) {
+}
\ No newline at end of file
diff --git a/tests/classes/__call_005.phpt b/tests/classes/__call_005.phpt
new file mode 100644 (file)
index 0000000..c82a853
--- /dev/null
@@ -0,0 +1,36 @@
+--TEST--
+When __call() is invoked via ::, ensure private implementation of __call() in superclass is accessed without error. 
+--FILE--
+<?php
+class A {
+       private function __call($strMethod, $arrArgs) {
+               echo "In " . __METHOD__ . "($strMethod, array(" . implode(',',$arrArgs) . "))\n";
+               var_dump($this);
+       }
+}
+
+class B extends A {
+       function test() {
+               A::test1(1,'a');
+               B::test2(1,'a');
+               self::test3(1,'a');
+               parent::test4(1,'a');
+       }
+}
+
+$b = new B();
+$b->test();
+?>
+--EXPECTF--
+In A::__call(test1, array(1,a))
+object(B)#1 (0) {
+}
+In A::__call(test2, array(1,a))
+object(B)#1 (0) {
+}
+In A::__call(test3, array(1,a))
+object(B)#1 (0) {
+}
+In A::__call(test4, array(1,a))
+object(B)#1 (0) {
+}
\ No newline at end of file
diff --git a/tests/classes/interface_constant_inheritance_001.phpt b/tests/classes/interface_constant_inheritance_001.phpt
new file mode 100644 (file)
index 0000000..ae3e71e
--- /dev/null
@@ -0,0 +1,17 @@
+--TEST--
+Ensure an interface may not shadow an inherited constant. 
+--FILE--
+<?php
+interface I1 {
+       const FOO = 10;
+}
+
+interface I2 extends I1 {
+       const FOO = 10;
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+
+Fatal error: Cannot inherit previously-inherited constant FOO from interface I1 in %s on line 6
\ No newline at end of file
diff --git a/tests/classes/interface_constant_inheritance_002.phpt b/tests/classes/interface_constant_inheritance_002.phpt
new file mode 100644 (file)
index 0000000..d5001ba
--- /dev/null
@@ -0,0 +1,17 @@
+--TEST--
+Ensure a class may not shadow a constant inherited from an interface. 
+--FILE--
+<?php
+interface I {
+       const FOO = 10;
+}
+
+class C implements I {
+       const FOO = 10;
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+
+Fatal error: Cannot inherit previously-inherited constant FOO from interface I in %s on line 6
\ No newline at end of file
diff --git a/tests/classes/interface_constant_inheritance_003.phpt b/tests/classes/interface_constant_inheritance_003.phpt
new file mode 100644 (file)
index 0000000..a3ba815
--- /dev/null
@@ -0,0 +1,20 @@
+--TEST--
+Ensure a class may not inherit two constants with the same name from two separate interfaces. 
+--FILE--
+<?php
+interface I1 {
+       const FOO = 10;
+}
+
+interface I2 {
+       const FOO = 10;
+}
+
+class C implements I1,I2 {
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+
+Fatal error: Cannot inherit previously-inherited constant FOO from interface I2 in %s on line 10
diff --git a/tests/classes/interface_constant_inheritance_004.phpt b/tests/classes/interface_constant_inheritance_004.phpt
new file mode 100644 (file)
index 0000000..05b8972
--- /dev/null
@@ -0,0 +1,18 @@
+--TEST--
+Ensure a class may implement two interfaces which include the same constant due to inheritance. 
+--FILE--
+<?php
+interface IA {
+       const FOO = 10;
+}
+
+interface IB extends IA {
+}
+
+class C implements IA, IB {
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+Done
diff --git a/tests/classes/tostring_004.phpt b/tests/classes/tostring_004.phpt
new file mode 100644 (file)
index 0000000..de0283e
--- /dev/null
@@ -0,0 +1,56 @@
+--TEST--
+Object to string conversion: error cases and behaviour variations.
+--FILE--
+<?php
+function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
+        echo "Error: $err_no - $err_msg\n";
+}
+set_error_handler('test_error_handler');
+error_reporting(8191);
+
+
+echo "Object with no __toString():\n";
+$obj = new stdClass;
+echo "Try 1:\n";
+printf($obj);
+printf("\n");
+
+echo "\nTry 2:\n";
+printf($obj . "\n");
+
+
+echo "\n\nObject with bad __toString():\n";
+class badToString {
+       function __toString() {
+               return 0;
+       }       
+}
+$obj = new badToString;
+echo "Try 1:\n";
+printf($obj);
+printf("\n");
+
+echo "\nTry 2:\n";
+printf($obj . "\n");
+
+?>
+--EXPECTF--
+Object with no __toString():
+Try 1:
+Error: 4096 - Object of class stdClass could not be converted to string
+Error: 8 - Object of class stdClass to string conversion
+Object
+
+Try 2:
+Error: 4096 - Object of class stdClass could not be converted to string
+
+
+
+Object with bad __toString():
+Try 1:
+Error: 4096 - Method badToString::__toString() must return a string value
+
+
+Try 2:
+Error: 4096 - Method badToString::__toString() must return a string value
+