uw Mon Jul 23 12:11:38 2007 UTC Added files: /php-src/ext/mysqli/tests mysqli_class_mysqli_driver_interface.phpt mysqli_class_mysqli_driver_reflection.phpt mysqli_class_mysqli_interface.phpt mysqli_class_mysqli_reflection.phpt mysqli_class_mysqli_result_interface.phpt mysqli_class_mysqli_result_reflection.phpt mysqli_class_mysqli_stmt_interface.phpt mysqli_class_mysqli_warning.phpt mysqli_class_mysqli_warning_reflection.phpt Log: Adding new tests that check the interface of the classes exported by mysqli
http://cvs.php.net/viewvc.cgi/php-src/ext/mysqli/tests/mysqli_class_mysqli_driver_interface.phpt?view=markup&rev=1.1 Index: php-src/ext/mysqli/tests/mysqli_class_mysqli_driver_interface.phpt +++ php-src/ext/mysqli/tests/mysqli_class_mysqli_driver_interface.phpt --TEST-- Interface of the class mysqli_driver --SKIPIF-- <?php require_once('skipif.inc'); ?> <?php require_once('skipifemb.inc'); ?> --FILE-- <?php require('connect.inc'); require('table.inc');
$driver = new mysqli_driver(); printf("Parent class:\n"); var_dump(get_parent_class($driver)); printf("\nMethods:\n"); $methods = get_class_methods($driver); $expected_methods = array(); if (!$IS_MYSQLND) { /* libmysql only */ $expected_methods = array_merge($expected_methods, array( 'embedded_server_start' => true, 'embedded_server_end' => true, )); } foreach ($methods as $k => $method) { if (isset($expected_methods[$method])) { unset($expected_methods[$method]); unset($methods[$k]); } } if (!empty($expected_methods)) { printf("Dumping list of missing methods.\n"); var_dump($expected_methods); } if (!empty($methods)) { printf("Dumping list of unexpected methods.\n"); var_dump($methods); } if (empty($expected_methods) && empty($methods)) printf("ok\n"); printf("\nClass variables:\n"); $variables = get_class_vars(get_class($driver)); sort($variables); foreach ($variables as $k => $var) printf("%s\n", $var); printf("\nObject variables:\n"); $variables = get_object_vars($driver); foreach ($variables as $k => $var) printf("%s\n", $var); printf("\nMagic, magic properties:\n"); assert(mysqli_get_client_info() === $driver->client_info); printf("driver->client_info = '%s'\n", $driver->client_info); assert(mysqli_get_client_version() === $driver->client_version); printf("driver->client_version = '%s'\n", $driver->client_version); assert($driver->driver_version > 0); printf("driver->driver_version = '%s'\n", $driver->driver_version); assert(in_array($driver->report_mode, array( MYSQLI_REPORT_ALL, MYSQLI_REPORT_STRICT, MYSQLI_REPORT_ERROR, MYSQLI_REPORT_INDEX, MYSQLI_REPORT_OFF ) )); printf("driver->report_mode = '%s'\n", $driver->report_mode); $driver->report_mode = MYSQLI_REPORT_STRICT; assert($driver->report_mode === MYSQLI_REPORT_STRICT); assert(is_bool($driver->embedded)); printf("driver->embedded = '%s'\n", $driver->embedded); printf("driver->reconnect = '%s'\n", $driver->reconnect); printf("\nAccess to undefined properties:\n"); printf("driver->unknown = '%s'\n", @$driver->unknown); print "done!"; ?> --EXPECTF-- Parent class: bool(false) Methods: ok Class variables: Object variables: Magic, magic properties: driver->client_info = '%s' driver->client_version = '%d' driver->driver_version = '%d' driver->report_mode = '%d' driver->embedded = '' driver->reconnect = '' Access to undefined properties: driver->unknown = '' done! http://cvs.php.net/viewvc.cgi/php-src/ext/mysqli/tests/mysqli_class_mysqli_driver_reflection.phpt?view=markup&rev=1.1 Index: php-src/ext/mysqli/tests/mysqli_class_mysqli_driver_reflection.phpt +++ php-src/ext/mysqli/tests/mysqli_class_mysqli_driver_reflection.phpt --TEST-- Interface of the class mysqli_driver - Reflection --SKIPIF-- <?php require_once('skipif.inc'); require_once('skipifemb.inc'); require_once('connect.inc'); if (($tmp = substr(PHP_VERSION, 0, strpos(PHP_VERSION, '.'))) && ($tmp < 5)) die("skip Reflection not available before PHP 5 (found PHP $tmp)"); /* Let's not deal with cross-version issues in the EXPECTF/UEXPECTF. Most of the things which we test are covered by mysqli_class_*_interface.phpt. Those tests go into the details and are aimed to be a development tool, no more. */ if (!$IS_MYSQLND) die("skip Test has been written for the latest version of mysqlnd only"); if ($MYSQLND_VERSION < 576) die("skip Test requires mysqlnd Revision 576 or newer"); ?> --FILE-- <?php require_once('reflection_tools.inc'); $class = new ReflectionClass('mysqli_driver'); inspectClass($class); print "done!"; ?> --EXPECTF-- Inspecting class 'mysqli_driver' isInternal: yes isUserDefined: no isInstantiable: yes isInterface: no isAbstract: no isFinal: yes isIteratable: no Modifiers: '%d' Parent Class: '' Extension: 'mysqli' done! http://cvs.php.net/viewvc.cgi/php-src/ext/mysqli/tests/mysqli_class_mysqli_interface.phpt?view=markup&rev=1.1 Index: php-src/ext/mysqli/tests/mysqli_class_mysqli_interface.phpt +++ php-src/ext/mysqli/tests/mysqli_class_mysqli_interface.phpt --TEST-- Interface of the class mysqli --SKIPIF-- <?php require_once('skipif.inc'); ?> <?php require_once('skipifemb.inc'); ?> --FILE-- <?php require('connect.inc'); $mysqli = new mysqli($host, $user, $passwd, $db, $port, $socket); $link = mysqli_connect($host, $user, $passwd, $db, $port, $socket); printf("Parent class:\n"); var_dump(get_parent_class($mysqli)); printf("\nMethods:\n"); $methods = get_class_methods($mysqli); $expected_methods = array( 'autocommit' => true, 'change_user' => true, 'character_set_name' => true, 'client_encoding' => true, 'close' => true, 'commit' => true, 'connect' => true, 'dump_debug_info' => true, 'escape_string' => true, 'get_charset' => true, 'get_client_info' => true, 'get_server_info' => true, 'get_warnings' => true, 'init' => true, 'kill' => true, 'more_results' => true, 'multi_query' => true, 'mysqli' => true, 'next_result' => true, 'options' => true, 'ping' => true, 'prepare' => true, 'query' => true, 'real_connect' => true, 'real_escape_string' => true, 'real_query' => true, 'rollback' => true, 'select_db' => true, 'set_charset' => true, 'set_local_infile_default' => true, 'set_local_infile_handler' => true, 'set_opt' => true, 'stat' => true, 'stmt_init' => true, 'store_result' => true, 'thread_safe' => true, 'use_result' => true, ); if ($IS_MYSQLND) { // mysqlnd only /* $expected_methods['get_cache_stats'] = true; */ /* $expected_methods['get_client_stats'] = true; */ $expected_methods['get_connection_stats'] = true; } else { // libmysql only if (function_exists('mysqli_disable_reads_from_master')) $expected_methods['disable_reads_from_master'] = true; if (function_exists('mysqli_disable_rpl_parse')) $expected_methods['disable_rpl_parse'] = true; if (function_exists('mysqli_enable_reads_from_master')) $expected_methods['enable_reads_from_master'] = true; if (function_exists('mysqli_enable_rpl_parse')) $expected_methods['enable_rpl_parse'] = true; if (function_exists('mysqli_master_query')) $expected_methods['master_query'] = true; if (function_exists('mysqli_rpl_parse_enabled')) $expected_methods['rpl_parse_enabled'] = true; if (function_exists('mysqli_rpl_probe')) $expected_methods['rpl_probe'] = true; if (function_exists('mysqli_rpl_query_type')) $expected_methods['rpl_query_type'] = true; if (function_exists('mysqli_slave_query')) $expected_methods['slave_query'] = true; if (function_exists('mysqli_ssl_set')) $expected_methods['ssl_set'] = true; } /* we should add ruled when to expect them */ if (function_exists('mysqli_debug')) $expected_methods['debug'] = true; if (function_exists('ssl_set')) $expected_methods['ssl_set'] = true; foreach ($methods as $k => $method) { if (isset($expected_methods[$method])) { unset($methods[$k]); unset($expected_methods[$method]); } } if (!empty($methods)) { printf("Dumping list of unexpected methods.\n"); var_dump($methods); } if (!empty($expected_methods)) { printf("Dumping list of missing methods.\n"); var_dump($expected_methods); } if (empty($methods) && empty($expected_methods)) printf("ok\n"); printf("\nClass variables:\n"); $variables = get_class_vars(get_class($mysqli)); sort($variables); foreach ($variables as $k => $var) printf("%s\n", $var); printf("\nObject variables:\n"); $variables = get_object_vars($mysqli); foreach ($variables as $k => $var) printf("%s\n", $var); printf("\nMagic, magic properties:\n"); assert(mysqli_affected_rows($link) === $mysqli->affected_rows); printf("mysqli->affected_rows = '%s'/%s ('%s'/%s)\n", $mysqli->affected_rows, gettype($mysqli->affected_rows), mysqli_affected_rows($link), gettype(mysqli_affected_rows($link))); assert(mysqli_get_client_info() === $mysqli->client_info); printf("mysqli->client_info = '%s'/%s ('%s'/%s)\n", $mysqli->client_info, gettype($mysqli->client_info), mysqli_get_client_info(), gettype(mysqli_get_client_info())); assert(mysqli_get_client_version() === $mysqli->client_version); printf("mysqli->client_version = '%s'/%s ('%s'/%s)\n", $mysqli->client_version, gettype($mysqli->client_version), mysqli_get_client_version(), gettype(mysqli_get_client_version())); assert(mysqli_errno($link) === $mysqli->errno); printf("mysqli->errno = '%s'/%s ('%s'/%s)\n", $mysqli->errno, gettype($mysqli->errno), mysqli_errno($link), gettype(mysqli_errno($link))); assert(mysqli_error($link) === $mysqli->error); printf("mysqli->error = '%s'/%s ('%s'/%s)\n", $mysqli->error, gettype($mysqli->error), mysqli_error($link), gettype(mysqli_error($link))); assert(mysqli_field_count($link) === $mysqli->field_count); printf("mysqli->field_count = '%s'/%s ('%s'/%s)\n", $mysqli->field_count, gettype($mysqli->field_count), mysqli_field_count($link), gettype(mysqli_field_count($link))); assert(mysqli_insert_id($link) === $mysqli->insert_id); printf("mysqli->insert_id = '%s'/%s ('%s'/%s)\n", $mysqli->insert_id, gettype($mysqli->insert_id), mysqli_insert_id($link), gettype(mysqli_insert_id($link))); assert(mysqli_sqlstate($link) === $mysqli->sqlstate); printf("mysqli->sqlstate = '%s'/%s ('%s'/%s)\n", $mysqli->sqlstate, gettype($mysqli->sqlstate), mysqli_sqlstate($link), gettype(mysqli_sqlstate($link))); assert(mysqli_get_host_info($link) === $mysqli->host_info); printf("mysqli->host_info = '%s'/%s ('%s'/%s)\n", $mysqli->host_info, gettype($mysqli->host_info), mysqli_get_host_info($link), gettype(mysqli_get_host_info($link))); /* note that the data types are different */ assert(mysqli_info($link) == $mysqli->info); printf("mysqli->info = '%s'/%s ('%s'/%s)\n", $mysqli->info, gettype($mysqli->info), mysqli_info($link), gettype(mysqli_info($link))); assert(mysqli_thread_id($link) > $mysqli->thread_id); assert(gettype($mysqli->thread_id) == gettype(mysqli_thread_id($link))); printf("mysqli->thread_id = '%s'/%s ('%s'/%s)\n", $mysqli->thread_id, gettype($mysqli->thread_id), mysqli_thread_id($link), gettype(mysqli_thread_id($link))); assert(mysqli_get_proto_info($link) === $mysqli->protocol_version); printf("mysqli->protocol_version = '%s'/%s ('%s'/%s)\n", $mysqli->protocol_version, gettype($mysqli->protocol_version), mysqli_get_proto_info($link), gettype(mysqli_get_proto_info($link))); assert(mysqli_get_server_info($link) === $mysqli->server_info); printf("mysqli->server_info = '%s'/%s ('%s'/%s)\n", $mysqli->server_info, gettype($mysqli->server_info), mysqli_get_server_info($link), gettype(mysqli_get_server_info($link))); assert(mysqli_get_server_version($link) === $mysqli->server_version); printf("mysqli->server_version = '%s'/%s ('%s'/%s)\n", $mysqli->server_version, gettype($mysqli->server_version), mysqli_get_server_version($link), gettype(mysqli_get_server_version($link))); assert(mysqli_warning_count($link) === $mysqli->warning_count); printf("mysqli->warning_count = '%s'/%s ('%s'/%s)\n", $mysqli->warning_count, gettype($mysqli->warning_count), mysqli_warning_count($link), gettype(mysqli_warning_count($link))); printf("\nAccess to undefined properties:\n"); printf("mysqli->unknown = '%s'\n", @$mysqli->unknown); @$mysqli->unknown = 13; printf("setting mysqli->unknown, mysqli_unknown = '%s'\n", @$mysqli->unknown); $unknown = 'friday'; @$mysqli->unknown = $unknown; printf("setting mysqli->unknown, mysqli_unknown = '%s'\n", @$mysqli->unknown); $mysqli = new mysqli($host, $user, $passwd, $db, $port, $socket); printf("\nAccess hidden properties for MYSLQI_STATUS_INITIALIZED (TODO documentation):\n"); assert(mysqli_connect_error() === $mysqli->connect_error); printf("mysqli->connect_error = '%s'/%s ('%s'/%s)\n", $mysqli->connect_error, gettype($mysqli->connect_error), mysqli_connect_error(), gettype(mysqli_connect_error())); assert(mysqli_connect_errno() === $mysqli->connect_errno); printf("mysqli->connect_errno = '%s'/%s ('%s'/%s)\n", $mysqli->connect_errno, gettype($mysqli->connect_errno), mysqli_connect_errno(), gettype(mysqli_connect_errno())); print "done!"; ?> --EXPECTF-- Parent class: bool(false) Methods: ok Class variables: Object variables: Magic, magic properties: mysqli->affected_rows = '%s'/integer ('%s'/integer) mysqli->client_info = '%s'/string ('%s'/string) mysqli->client_version = '%d'/integer ('%d'/integer) mysqli->errno = '0'/integer ('0'/integer) mysqli->error = ''/string (''/string) mysqli->field_count = '0'/integer ('0'/integer) mysqli->insert_id = '0'/integer ('0'/integer) mysqli->sqlstate = '00000'/string ('00000'/string) mysqli->host_info = '%s'/string ('%s'/string) mysqli->info = ''/NULL (''/string) mysqli->thread_id = '%d'/integer ('%d'/integer) mysqli->protocol_version = '%d'/integer ('%d'/integer) mysqli->server_info = '%s'/string ('%s'/string) mysqli->server_version = '%d'/integer ('%d'/integer) mysqli->warning_count = '0'/integer ('0'/integer) Access to undefined properties: mysqli->unknown = '' setting mysqli->unknown, mysqli_unknown = '13' setting mysqli->unknown, mysqli_unknown = 'friday' Access hidden properties for MYSLQI_STATUS_INITIALIZED (TODO documentation): mysqli->connect_error = ''/string (''/string) mysqli->connect_errno = '0'/integer ('0'/integer) done! --UEXPECTF-- Parent class: bool(false) Methods: ok Class variables: Object variables: Magic, magic properties: mysqli->affected_rows = '%s'/integer ('%s'/integer) mysqli->client_info = '%s'/unicode ('%s'/unicode) mysqli->client_version = '%d'/integer ('%d'/integer) mysqli->errno = '0'/integer ('0'/integer) mysqli->error = ''/unicode (''/unicode) mysqli->field_count = '0'/integer ('0'/integer) mysqli->insert_id = '0'/integer ('0'/integer) mysqli->sqlstate = '00000'/unicode ('00000'/unicode) mysqli->host_info = '%s'/unicode ('%s'/unicode) mysqli->info = ''/NULL (''/unicode) mysqli->thread_id = '%d'/integer ('%d'/integer) mysqli->protocol_version = '%d'/integer ('%d'/integer) mysqli->server_info = '%s'/unicode ('%s'/unicode) mysqli->server_version = '%d'/integer ('%d'/integer) mysqli->warning_count = '0'/integer ('0'/integer) Access to undefined properties: mysqli->unknown = '' setting mysqli->unknown, mysqli_unknown = '13' setting mysqli->unknown, mysqli_unknown = 'friday' Access hidden properties for MYSLQI_STATUS_INITIALIZED (TODO documentation): mysqli->connect_error = ''/unicode (''/unicode) mysqli->connect_errno = '0'/integer ('0'/integer) done! http://cvs.php.net/viewvc.cgi/php-src/ext/mysqli/tests/mysqli_class_mysqli_reflection.phpt?view=markup&rev=1.1 Index: php-src/ext/mysqli/tests/mysqli_class_mysqli_reflection.phpt +++ php-src/ext/mysqli/tests/mysqli_class_mysqli_reflection.phpt --TEST-- Interface of the class mysqli - Reflection --SKIPIF-- <?php require_once('skipif.inc'); require_once('skipifemb.inc'); require_once('connect.inc'); if (($tmp = substr(PHP_VERSION, 0, strpos(PHP_VERSION, '.'))) && ($tmp < 5)) die("skip Reflection not available before PHP 5 (found PHP $tmp)"); /* Let's not deal with cross-version issues in the EXPECTF/UEXPECTF. Most of the things which we test are covered by mysqli_class_*_interface.phpt. Those tests go into the details and are aimed to be a development tool, no more. */ if (!$IS_MYSQLND) die("skip Test has been written for the latest version of mysqlnd only"); if ($MYSQLND_VERSION < 576) die("skip Test requires mysqlnd Revision 576 or newer"); ?> --FILE-- <?php require_once('reflection_tools.inc'); $class = new ReflectionClass('mysqli'); inspectClass($class); print "done!"; ?> --EXPECTF-- Inspecting class 'mysqli' isInternal: yes isUserDefined: no isInstantiable: yes isInterface: no isAbstract: no isFinal: no isIteratable: no Modifiers: '0' Parent Class: '' Extension: 'mysqli' Inspecting method 'mysqli' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: yes isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 8448 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'autocommit' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'change_user' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'character_set_name' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'client_encoding' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'close' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'commit' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'connect' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'debug' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'dump_debug_info' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'escape_string' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'get_charset' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'get_client_info' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'get_connection_stats' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'get_server_info' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'get_warnings' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'init' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'kill' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'more_results' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'multi_query' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'mysqli' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: yes isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 8448 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'next_result' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'options' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'ping' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'prepare' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'query' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'real_connect' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'real_escape_string' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'real_query' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'rollback' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'select_db' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'set_charset' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'set_local_infile_default' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'set_local_infile_handler' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'set_opt' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'stat' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'stmt_init' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'store_result' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'thread_safe' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'use_result' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: 256 Number of Parameters: 0 Number of Required Parameters: 0 done! http://cvs.php.net/viewvc.cgi/php-src/ext/mysqli/tests/mysqli_class_mysqli_result_interface.phpt?view=markup&rev=1.1 Index: php-src/ext/mysqli/tests/mysqli_class_mysqli_result_interface.phpt +++ php-src/ext/mysqli/tests/mysqli_class_mysqli_result_interface.phpt --TEST-- Interface of the class mysqli_result --SKIPIF-- <?php require_once('skipif.inc'); require_once('skipifemb.inc'); ?> --FILE-- <?php require('connect.inc'); require('table.inc'); $mysqli = new mysqli($host, $user, $passwd, $db, $port, $socket); $mysqli_result = $mysqli->query('SELECT * FROM test'); $row = $mysqli_result->fetch_row(); $link = mysqli_connect($host, $user, $passwd, $db, $port, $socket); $res = mysqli_query($link, 'SELECT * FROM test'); assert(mysqli_fetch_row($res) === $row); printf("Parent class:\n"); var_dump(get_parent_class($mysqli_result)); printf("\nMethods:\n"); $methods = get_class_methods($mysqli_result); $expected_methods = array( '__construct' => true, 'close' => true, 'data_seek' => true, 'fetch_array' => true, 'fetch_assoc' => true, 'fetch_field' => true, 'fetch_field_direct' => true, 'fetch_fields' => true, 'fetch_object' => true, 'fetch_row' => true, 'field_seek' => true, 'free' => true, 'free_result' => true, ); if ($IS_MYSQLND) $expected_methods['fetch_all'] = true; foreach ($methods as $k => $method) { if (isset($expected_methods[$method])) { unset($expected_methods[$method]); unset($methods[$k]); } if ($method == 'mysqli_result') { // get_class_method reports different constructor names unset($expected_methods['__construct']); unset($methods[$k]); } } if (!empty($expected_methods)) { printf("Dumping list of missing methods.\n"); var_dump($expected_methods); } if (!empty($methods)) { printf("Dumping list of unexpected methods.\n"); var_dump($methods); } if (empty($expected_methods) && empty($methods)) printf("ok\n"); printf("\nClass variables:\n"); $variables = get_class_vars(get_class($mysqli_result)); sort($variables); foreach ($variables as $k => $var) printf("%s\n", $var); printf("\nObject variables:\n"); $variables = get_object_vars($mysqli_result); foreach ($variables as $k => $var) printf("%s\n", $var); printf("\nMagic, magic properties:\n"); assert(($tmp = mysqli_field_tell($res)) === $mysqli_result->current_field); printf("mysqli_result->current_field = '%s'/%s ('%s'/%s)\n", $mysqli_result->current_field, gettype($mysqli_result->current_field), $tmp, gettype($tmp)); assert(($tmp = mysqli_field_count($link)) === $mysqli_result->field_count); printf("mysqli_result->field_count = '%s'/%s ('%s'/%s)\n", $mysqli_result->field_count, gettype($mysqli_result->field_count), $tmp, gettype($tmp)); assert(($tmp = mysqli_fetch_lengths($res)) === $mysqli_result->lengths); printf("mysqli_result->lengths -> '%s'/%s ('%s'/%s)\n", ((is_array($mysqli_result->lengths)) ? implode(' ', $mysqli_result->lengths) : 'n/a'), gettype($mysqli_result->lengths), ((is_array($tmp)) ? implode(' ', $tmp) : 'n/a'), gettype($tmp)); assert(($tmp = mysqli_num_rows($res)) === $mysqli_result->num_rows); printf("mysqli_result->num_rows = '%s'/%s ('%s'/%s)\n", $mysqli_result->num_rows, gettype($mysqli_result->num_rows), $tmp, gettype($tmp)); assert(in_array($mysqli_result->type, array(MYSQLI_STORE_RESULT, MYSQLI_USE_RESULT))); printf("mysqli_result->type = '%s'/%s\n", ((MYSQLI_STORE_RESULT == $mysqli_result->type) ? 'store' : 'use'), gettype($mysqli_result->type)); printf("\nAccess to undefined properties:\n"); printf("mysqli_result->unknown = '%s'\n", @$mysqli_result->unknown); printf("\nConstructor:\n"); if (!is_object($res = new mysqli_result($link))) printf("[001] Expecting object/mysqli_result got %s/%s\n", gettye($res), $res); if (null !== ($tmp = @$res->num_rows)) printf("[002] Expecting NULL got %s/%s\n", gettype($tmp), $tmp); if (!mysqli_query($link, "SELECT id FROM test ORDER BY id")) printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link)); if (!is_object($res = new mysqli_result($link))) printf("[004] [%d] %s\n", mysqli_errno($link), mysqli_error($link)); if (!is_object($res = new mysqli_result($link, MYSQLI_STORE_RESULT))) printf("[005] [%d] %s\n", mysqli_errno($link), mysqli_error($link)); if (!is_object($res = new mysqli_result($link, MYSQLI_USE_RESULT))) printf("[006] [%d] %s\n", mysqli_errno($link), mysqli_error($link)); if (!is_object($res = new mysqli_result($link, 'invalid'))) printf("[007] [%d] %s\n", mysqli_errno($link), mysqli_error($link)); $valid = array(MYSQLI_STORE_RESULT, MYSQLI_USE_RESULT); do { $mode = mt_rand(-1000, 1000); } while (in_array($mode, $valid)); if ($TEST_EXPERIMENTAL) { ob_start(); if (!is_object($res = new mysqli_result($link, $mode))) printf("[008] [%d] %s\n", mysqli_errno($link), mysqli_error($link)); $content = ob_get_contents(); ob_end_clean(); if (!stristr($content, 'Invalid value for resultmode')) printf("[009] Expecting warning because of invalid resultmode\n"); } if (!is_object($res = new mysqli_result('foo'))) printf("[010] [%d] %s\n", mysqli_errno($link), mysqli_error($link)); if (!is_object($res = @new mysqli_result($link, MYSQLI_STORE_RESULT, 1))) printf("[011] [%d] %s\n", mysqli_errno($link), mysqli_error($link)); print "done!"; ?> --EXPECTF-- Parent class: bool(false) Methods: ok Class variables: Object variables: Magic, magic properties: mysqli_result->current_field = '0'/integer ('0'/integer) mysqli_result->field_count = '2'/integer ('2'/integer) mysqli_result->lengths -> '1 1'/array ('1 1'/array) mysqli_result->num_rows = '6'/integer ('6'/integer) mysqli_result->type = 'store'/integer Access to undefined properties: mysqli_result->unknown = '' Constructor: Warning: mysqli_result::mysqli_result() expects parameter 2 to be long, string given in %s on line %d Warning: mysqli_result::mysqli_result() expects parameter 1 to be mysqli, string given in %s on line %d done! --UEXPECTF-- Parent class: bool(false) Methods: ok Class variables: Object variables: Magic, magic properties: mysqli_result->current_field = '0'/integer ('0'/integer) mysqli_result->field_count = '2'/integer ('2'/integer) mysqli_result->lengths -> '1 1'/array ('1 1'/array) mysqli_result->num_rows = '6'/integer ('6'/integer) mysqli_result->type = 'store'/integer Access to undefined properties: mysqli_result->unknown = '' Constructor: Warning: mysqli_result::mysqli_result() expects parameter 2 to be long, Unicode string given in %s on line %d Warning: mysqli_result::mysqli_result() expects parameter 1 to be mysqli, Unicode string given in %s on line %d done! http://cvs.php.net/viewvc.cgi/php-src/ext/mysqli/tests/mysqli_class_mysqli_result_reflection.phpt?view=markup&rev=1.1 Index: php-src/ext/mysqli/tests/mysqli_class_mysqli_result_reflection.phpt +++ php-src/ext/mysqli/tests/mysqli_class_mysqli_result_reflection.phpt --TEST-- Interface of the class mysqli_result - Reflection --SKIPIF-- <?php require_once('skipif.inc'); require_once('skipifemb.inc'); require_once('connect.inc'); if (($tmp = substr(PHP_VERSION, 0, strpos(PHP_VERSION, '.'))) && ($tmp < 5)) die("skip Reflection not available before PHP 5 (found PHP $tmp)"); /* Let's not deal with cross-version issues in the EXPECTF/UEXPECTF. Most of the things which we test are covered by mysqli_class_*_interface.phpt. Those tests go into the details and are aimed to be a development tool, no more. */ if (!$IS_MYSQLND) die("skip Test has been written for the latest version of mysqlnd only"); if ($MYSQLND_VERSION < 576) die("skip Test requires mysqlnd Revision 576 or newer"); ?> --FILE-- <?php require_once('reflection_tools.inc'); $class = new ReflectionClass('mysqli_result'); inspectClass($class); print "done!"; ?> --EXPECTF-- Inspecting class 'mysqli_result' isInternal: yes isUserDefined: no isInstantiable: yes isInterface: no isAbstract: no isFinal: no isIteratable: no Modifiers: '0' Parent Class: '' Extension: 'mysqli' Inspecting method '__construct' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: yes isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: %d Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method '__construct' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: yes isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: %d Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'close' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: %d Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'data_seek' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: %d Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'fetch_all' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: %d Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'fetch_array' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: %d Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'fetch_assoc' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: %d Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'fetch_field' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: %d Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'fetch_field_direct' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: %d Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'fetch_fields' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: %d Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'fetch_object' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: %d Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'fetch_row' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: %d Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'field_seek' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: %d Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'free' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: %d Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'free_result' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: %d Number of Parameters: 0 Number of Required Parameters: 0 done! http://cvs.php.net/viewvc.cgi/php-src/ext/mysqli/tests/mysqli_class_mysqli_stmt_interface.phpt?view=markup&rev=1.1 Index: php-src/ext/mysqli/tests/mysqli_class_mysqli_stmt_interface.phpt +++ php-src/ext/mysqli/tests/mysqli_class_mysqli_stmt_interface.phpt --TEST-- Interface of the class mysqli_stmt --SKIPIF-- <?php require_once('skipif.inc'); ?> <?php require_once('skipifemb.inc'); ?> --FILE-- <?php require('connect.inc'); require('table.inc'); $link = mysqli_connect($host, $user, $passwd, $db, $port, $socket); $stmt = new mysqli_stmt($link); printf("Parent class:\n"); var_dump(get_parent_class($stmt)); printf("\nMethods:\n"); $methods = get_class_methods($stmt); $expected_methods = array( '__construct' => true, 'attr_get' => true, 'attr_set' => true, 'bind_param' => true, 'bind_result' => true, 'close' => true, 'data_seek' => true, 'execute' => true, 'fetch' => true, 'free_result' => true, 'get_warnings' => true, 'num_rows' => true, 'prepare' => true, 'reset' => true, 'result_metadata' => true, 'send_long_data' => true, 'stmt' => true, 'store_result' => true, ); if ($IS_MYSQLND) $expected_methods['get_result'] = true; foreach ($methods as $k => $method) { if (isset($expected_methods[$method])) { unset($methods[$k]); unset($expected_methods[$method]); } if ($method == 'mysqli_stmt') { // get_class_method reports different constructor names unset($expected_methods['__construct']); unset($methods[$k]); } } if (!empty($methods)) { printf("More methods found than indicated. Dumping list of unexpected methods.\n"); var_dump($methods); } if (!empty($expected_methods)) { printf("Some methods are missing. Dumping list of missing methods.\n"); var_dump($expected_methods); } if (empty($methods) && empty($expected_methods)) printf("ok\n"); printf("\nClass variables:\n"); $variables = get_class_vars(get_class($stmt)); sort($variables); foreach ($variables as $k => $var) printf("%s\n", $var); printf("\nObject variables:\n"); $variables = get_object_vars($stmt); foreach ($variables as $k => $var) printf("%s\n", $var); printf("\nMagic, magic properties:\n"); assert(mysqli_stmt_affected_rows($stmt) === $stmt->affected_rows); printf("stmt->affected_rows = '%s'\n", $stmt->affected_rows); if (!$stmt->prepare("INSERT INTO test(id, label) VALUES (100, 'z')") || !$stmt->execute()) printf("[001] [%d] %s\n", $stmt->errno, $stmt->error); assert(mysqli_stmt_affected_rows($stmt) === $stmt->affected_rows); printf("stmt->affected_rows = '%s'\n", $stmt->affected_rows); assert(mysqli_stmt_errno($stmt) === $stmt->errno); printf("stmt->errno = '%s'\n", $stmt->errno); assert(mysqli_stmt_error($stmt) === $stmt->error); printf("stmt->error = '%s'\n", $stmt->error); assert(mysqli_stmt_field_count($stmt) === $stmt->field_count); printf("stmt->field_count = '%s'\n", $stmt->field_count); assert($stmt->id > 0); printf("stmt->id = '%s'\n", $stmt->id); assert(mysqli_stmt_insert_id($stmt) === $stmt->insert_id); printf("stmt->insert_id = '%s'\n", $stmt->insert_id); assert(mysqli_stmt_num_rows($stmt) === $stmt->num_rows); printf("stmt->num_rows = '%s'\n", $stmt->num_rows); assert(mysqli_stmt_param_count($stmt) === $stmt->param_count); printf("stmt->param_count = '%s'\n", $stmt->param_count); assert(mysqli_stmt_sqlstate($stmt) === $stmt->sqlstate); printf("stmt->sqlstate = '%s'\n", $stmt->sqlstate); printf("\nAccess to undefined properties:\n"); printf("stmt->unknown = '%s'\n", @$stmt->unknown); @$stmt->unknown = 13; printf("stmt->unknown = '%s'\n", @$stmt->unknown); printf("\nPrepare using the constructor:\n"); $stmt = new mysqli_stmt($link, 'SELECT id FROM test ORDER BY id'); if (!$stmt->execute()) printf("[002] [%d] %s\n", $stmt->errno, $stmt->error); $stmt->close(); $obj = new stdClass(); if (!is_object($stmt = new mysqli_stmt($link, $obj))) printf("[003] Expecting NULL got %s/%s\n", gettype($stmt), $stmt); print "done!"; ?> --EXPECTF-- Parent class: bool(false) Methods: ok Class variables: Object variables: Magic, magic properties: Warning: mysqli_stmt_affected_rows(): invalid object or resource mysqli_stmt in %s on line %d Warning: main(): Property access is not allowed yet in %s on line %d Warning: main(): Property access is not allowed yet in %s on line %d stmt->affected_rows = '' stmt->affected_rows = '1' stmt->errno = '0' stmt->error = '' stmt->field_count = '0' stmt->id = '%d' stmt->insert_id = '0' stmt->num_rows = '0' stmt->param_count = '0' stmt->sqlstate = '00000' Access to undefined properties: stmt->unknown = '' stmt->unknown = '13' Prepare using the constructor: Warning: mysqli_stmt::mysqli_stmt() expects parameter 2 to be string, object given in %s on line %d done! --UEXPECTF-- Parent class: bool(false) Methods: ok Class variables: Object variables: Magic, magic properties: Warning: mysqli_stmt_affected_rows(): invalid object or resource mysqli_stmt in %s on line %d Warning: main(): Property access is not allowed yet in %s on line %d Warning: main(): Property access is not allowed yet in %s on line %d stmt->affected_rows = '' stmt->affected_rows = '1' stmt->errno = '0' stmt->error = '' stmt->field_count = '0' stmt->id = '%d' stmt->insert_id = '0' stmt->num_rows = '0' stmt->param_count = '0' stmt->sqlstate = '00000' Access to undefined properties: stmt->unknown = '' stmt->unknown = '13' Prepare using the constructor: Warning: mysqli_stmt::mysqli_stmt() expects parameter 2 to be binary string, object given in %s on line %d done! http://cvs.php.net/viewvc.cgi/php-src/ext/mysqli/tests/mysqli_class_mysqli_warning.phpt?view=markup&rev=1.1 Index: php-src/ext/mysqli/tests/mysqli_class_mysqli_warning.phpt +++ php-src/ext/mysqli/tests/mysqli_class_mysqli_warning.phpt --TEST-- Interface of the class mysqli_warning - TODO --SKIPIF-- <?php require_once('skipif.inc'); require_once('skipifemb.inc'); require_once('connect.inc'); if (!$TEST_EXPERIMENTAL) die("skip - experimental (= unsupported) feature"); ?> --FILE-- <?php require('connect.inc'); $warning = new mysqli_warning(); $warning = new mysqli_warning(null); $warning = new mysqli_warning(null, null); $mysqli = new mysqli(); $warning = new mysqli_warning($mysqli); $mysqli = new mysqli($host, $user, $passwd, $db, $port, $socket); $stmt = new mysqli_stmt($mysqli); $warning = new mysqli_warning($stmt); $stmt = $mysqli->stmt_init(); $warning = new mysqli_warning($stmt); $obj = new stdClass(); $warning = new mysqli_warning($obj); include("table.inc"); $mysqli = new mysqli($host, $user, $passwd, $db, $port, $socket); $res = $mysqli->query('INSERT INTO test(id, label) VALUES (1, "zz")'); $warning = mysqli_get_warnings($mysqli); printf("Parent class:\n"); var_dump(get_parent_class($warning)); printf("\nMethods:\n"); $methods = get_class_methods($warning); $expected_methods = array( 'next' => true, ); foreach ($methods as $k => $method) { if (isset($expected_methods[$method])) { unset($methods[$k]); unset($expected_methods[$method]); } } if (!empty($methods)) { printf("Dumping list of unexpected methods.\n"); var_dump($methods); } if (!empty($expected_methods)) { printf("Dumping list of missing methods.\n"); var_dump($expected_methods); } if (empty($methods) && empty($expected_methods)) printf("ok\n"); printf("\nClass variables:\n"); $variables = get_class_vars(get_class($mysqli)); sort($variables); foreach ($variables as $k => $var) printf("%s\n", $var); printf("\nObject variables:\n"); $variables = get_object_vars($mysqli); foreach ($variables as $k => $var) printf("%s\n", $var); printf("\nMagic, magic properties:\n"); assert('' === $warning->message); printf("warning->message = '%s'\n", $warning->message); assert('' === $warning->sqlstate); printf("warning->sqlstate= '%s'\n", $warning->sqlstate); assert(0 === $warning->errno); printf("warning->errno = '%s'\n", $warning->errno); printf("\nAccess to undefined properties:\n"); printf("warning->unknown = '%s'\n", @$warning->unknown); print "done!"; ?> --EXPECTF-- Warning: Wrong parameter count for mysqli_warning::mysqli_warning() in %s on line %d Warning: mysqli_warning::mysqli_warning() expects parameter 1 to be object, null given in %s on line %d Warning: Wrong parameter count for mysqli_warning::mysqli_warning() in %s on line %d Warning: mysqli_warning::mysqli_warning(): Couldn't fetch mysqli in %s on line %d Warning: mysqli_warning::mysqli_warning(): invalid object or resource mysqli_stmt in %s on line %d Warning: mysqli_warning::mysqli_warning(): invalid object or resource mysqli_stmt in %s on line %d Warning: mysqli_warning::mysqli_warning(): invalid class argument in /home/nixnutz/php6_mysqlnd/ext/mysqli/tests/mysqli_class_mysqli_warning.php on line 19 Warning: mysqli_warning::mysqli_warning(): No warnings found in %s on line %d Parent class: bool(false) Methods: ok Class variables: Object variables: Magic, magic properties: warning->message = '' warning->sqlstate= '' warning->errno = '' Access to undefined properties: warning->unknown = '' done! http://cvs.php.net/viewvc.cgi/php-src/ext/mysqli/tests/mysqli_class_mysqli_warning_reflection.phpt?view=markup&rev=1.1 Index: php-src/ext/mysqli/tests/mysqli_class_mysqli_warning_reflection.phpt +++ php-src/ext/mysqli/tests/mysqli_class_mysqli_warning_reflection.phpt --TEST-- Interface of the class mysqli_stmt - Reflection --SKIPIF-- <?php require_once('skipif.inc'); require_once('skipifemb.inc'); require_once('connect.inc'); if (($tmp = substr(PHP_VERSION, 0, strpos(PHP_VERSION, '.'))) && ($tmp < 5)) die("skip Reflection not available before PHP 5 (found PHP $tmp)"); /* Let's not deal with cross-version issues in the EXPECTF/UEXPECTF. Most of the things which we test are covered by mysqli_class_*_interface.phpt. Those tests go into the details and are aimed to be a development tool, no more. */ if (!$IS_MYSQLND) die("skip Test has been written for the latest version of mysqlnd only"); if ($MYSQLND_VERSION < 576) die("skip Test requires mysqlnd Revision 576 or newer"); ?> --FILE-- <?php require_once('reflection_tools.inc'); $class = new ReflectionClass('mysqli_warning'); inspectClass($class); print "done!"; ?> --EXPECTF-- Inspecting class 'mysqli_warning' isInternal: yes isUserDefined: no isInstantiable: no isInterface: no isAbstract: no isFinal: yes isIteratable: no Modifiers: '%d' Parent Class: '' Extension: 'mysqli' Inspecting method '__construct' isFinal: no isAbstract: no isPublic: no isPrivate: no isProtected: yes isStatic: no isConstructor: yes isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: %d Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method '__construct' isFinal: no isAbstract: no isPublic: no isPrivate: no isProtected: yes isStatic: no isConstructor: yes isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: %d Number of Parameters: 0 Number of Required Parameters: 0 Inspecting method 'next' isFinal: no isAbstract: no isPublic: yes isPrivate: no isProtected: no isStatic: no isConstructor: no isDestructor: no isInternal: yes isUserDefined: no returnsReference: no Modifiers: %d Number of Parameters: 0 Number of Required Parameters: 0 done!
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php