Annotation of embedaddon/php/ext/mysqli/tests/mysqli_class_mysqli_result_interface.phpt, revision 1.1.1.1

1.1       misho       1: --TEST--
                      2: Interface of the class mysqli_result
                      3: --SKIPIF--
                      4: <?php
                      5: require_once('skipif.inc');
                      6: require_once('skipifemb.inc');
                      7: require_once('skipifconnectfailure.inc');
                      8: ?>
                      9: --FILE--
                     10: <?php
                     11:        require('connect.inc');
                     12:        require('table.inc');
                     13: 
                     14:        $mysqli = new my_mysqli($host, $user, $passwd, $db, $port, $socket);
                     15:        $mysqli_result = $mysqli->query('SELECT * FROM test');
                     16:        $row = $mysqli_result->fetch_row();
                     17: 
                     18:        $link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
                     19:        $res = mysqli_query($link, 'SELECT * FROM test');
                     20:        assert(mysqli_fetch_row($res) === $row);
                     21: 
                     22:        printf("Parent class:\n");
                     23:        var_dump(get_parent_class($mysqli_result));
                     24: 
                     25:        printf("\nMethods:\n");
                     26:        $methods = get_class_methods($mysqli_result);
                     27:        $expected_methods = array(
                     28:                '__construct'           => true,
                     29:                'close'                 => true,
                     30:                'data_seek'             => true,
                     31:                'fetch_array'           => true,
                     32:                'fetch_assoc'           => true,
                     33:                'fetch_field'           => true,
                     34:                'fetch_field_direct'    => true,
                     35:                'fetch_fields'          => true,
                     36:                'fetch_object'          => true,
                     37:                'fetch_row'             => true,
                     38:                'field_seek'            => true,
                     39:                'free'                  => true,
                     40:                'free_result'           => true,
                     41:        );
                     42:        if ($IS_MYSQLND)
                     43:                $expected_methods['fetch_all'] = true;
                     44: 
                     45:        foreach ($methods as $k => $method) {
                     46:                if (isset($expected_methods[$method])) {
                     47:                        unset($expected_methods[$method]);
                     48:                        unset($methods[$k]);
                     49:                }
                     50:                if ($method == 'mysqli_result') {
                     51:                        // get_class_method reports different constructor names
                     52:                        unset($expected_methods['__construct']);
                     53:                        unset($methods[$k]);
                     54:                }
                     55:        }
                     56: 
                     57:        if (!empty($expected_methods)) {
                     58:                printf("Dumping list of missing methods.\n");
                     59:                var_dump($expected_methods);
                     60:        }
                     61:        if (!empty($methods)) {
                     62:                printf("Dumping list of unexpected methods.\n");
                     63:                var_dump($methods);
                     64:        }
                     65:        if (empty($expected_methods) && empty($methods))
                     66:                printf("ok\n");
                     67: 
                     68: 
                     69:        printf("\nClass variables:\n");
                     70:        $variables = array_keys(get_class_vars(get_class($mysqli_result)));
                     71:        sort($variables);
                     72:        foreach ($variables as $k => $var)
                     73:                printf("%s\n", $var);
                     74: 
                     75:        printf("\nObject variables:\n");
                     76:        $variables = array_keys(get_object_vars($mysqli_result));
                     77:        foreach ($variables as $k => $var)
                     78:                printf("%s\n", $var);
                     79: 
                     80:        printf("\nMagic, magic properties:\n");
                     81: 
                     82:        assert(($tmp = mysqli_field_tell($res)) === $mysqli_result->current_field);
                     83:        printf("mysqli_result->current_field = '%s'/%s ('%s'/%s)\n",
                     84:                $mysqli_result->current_field, gettype($mysqli_result->current_field),
                     85:                $tmp, gettype($tmp));
                     86: 
                     87:        assert(($tmp = mysqli_field_count($link)) === $mysqli_result->field_count);
                     88:        printf("mysqli_result->field_count = '%s'/%s ('%s'/%s)\n",
                     89:                $mysqli_result->field_count, gettype($mysqli_result->field_count),
                     90:                $tmp, gettype($tmp));
                     91: 
                     92:        assert(($tmp = mysqli_fetch_lengths($res)) === $mysqli_result->lengths);
                     93:        printf("mysqli_result->lengths -> '%s'/%s ('%s'/%s)\n",
                     94:                ((is_array($mysqli_result->lengths)) ? implode(' ', $mysqli_result->lengths) : 'n/a'),
                     95:                gettype($mysqli_result->lengths),
                     96:                ((is_array($tmp)) ? implode(' ', $tmp) : 'n/a'),
                     97:                gettype($tmp));
                     98: 
                     99:        assert(($tmp = mysqli_num_rows($res)) === $mysqli_result->num_rows);
                    100:        printf("mysqli_result->num_rows = '%s'/%s ('%s'/%s)\n",
                    101:                $mysqli_result->num_rows, gettype($mysqli_result->num_rows),
                    102:                $tmp, gettype($tmp));
                    103: 
                    104:        assert(in_array($mysqli_result->type, array(MYSQLI_STORE_RESULT, MYSQLI_USE_RESULT)));
                    105:        printf("mysqli_result->type = '%s'/%s\n",
                    106:                ((MYSQLI_STORE_RESULT == $mysqli_result->type) ? 'store' : 'use'),
                    107:                gettype($mysqli_result->type));
                    108: 
                    109:        printf("\nAccess to undefined properties:\n");
                    110:        printf("mysqli_result->unknown = '%s'\n", @$mysqli_result->unknown);
                    111: 
                    112:        printf("\nConstructor:\n");
                    113:        if (!is_object($res = new mysqli_result($link)))
                    114:                printf("[001] Expecting object/mysqli_result got %s/%s\n", gettye($res), $res);
                    115: 
                    116:        if (null !== ($tmp = @$res->num_rows))
                    117:                printf("[002] Expecting NULL got %s/%s\n", gettype($tmp), $tmp);
                    118: 
                    119:        if (!mysqli_query($link, "SELECT id FROM test ORDER BY id"))
                    120:                printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
                    121: 
                    122:        if (!is_object($res = new mysqli_result($link)))
                    123:                printf("[004] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
                    124: 
                    125:        if (!is_object($res = new mysqli_result($link, MYSQLI_STORE_RESULT)))
                    126:                printf("[005] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
                    127: 
                    128:        if (!is_object($res = new mysqli_result($link, MYSQLI_USE_RESULT)))
                    129:                printf("[006] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
                    130: 
                    131:        if (!is_object($res = new mysqli_result($link, 'invalid')))
                    132:                printf("[007] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
                    133: 
                    134:        $valid = array(MYSQLI_STORE_RESULT, MYSQLI_USE_RESULT);
                    135:        do {
                    136:                $mode = mt_rand(-1000, 1000);
                    137:        } while (in_array($mode, $valid));
                    138: 
                    139:        if ($TEST_EXPERIMENTAL) {
                    140:                ob_start();
                    141:                if (!is_object($res = new mysqli_result($link, $mode)))
                    142:                        printf("[008] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
                    143:                $content = ob_get_contents();
                    144:                ob_end_clean();
                    145:                if (!stristr($content, 'Invalid value for resultmode'))
                    146:                        printf("[009] Expecting warning because of invalid resultmode\n");
                    147:        }
                    148: 
                    149:        if (!is_object($res = new mysqli_result('foo')))
                    150:                printf("[010] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
                    151: 
                    152:        if (!is_object($res = @new mysqli_result($link, MYSQLI_STORE_RESULT, 1)))
                    153:                printf("[011] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
                    154: 
                    155:        print "done!";
                    156: ?>
                    157: --EXPECTF--
                    158: Parent class:
                    159: bool(false)
                    160: 
                    161: Methods:
                    162: ok
                    163: 
                    164: Class variables:
                    165: current_field
                    166: field_count
                    167: lengths
                    168: num_rows
                    169: type
                    170: 
                    171: Object variables:
                    172: current_field
                    173: field_count
                    174: lengths
                    175: num_rows
                    176: type
                    177: 
                    178: Magic, magic properties:
                    179: mysqli_result->current_field = '0'/integer ('0'/integer)
                    180: mysqli_result->field_count = '2'/integer ('2'/integer)
                    181: mysqli_result->lengths -> '1 1'/array ('1 1'/array)
                    182: mysqli_result->num_rows = '6'/integer ('6'/integer)
                    183: mysqli_result->type = 'store'/integer
                    184: 
                    185: Access to undefined properties:
                    186: mysqli_result->unknown = ''
                    187: 
                    188: Constructor:
                    189: 
                    190: Warning: mysqli_result::__construct() expects parameter 2 to be long, %unicode_string_optional% given in %s on line %d
                    191: 
                    192: Warning: mysqli_result::__construct() expects parameter 1 to be mysqli, %unicode_string_optional% given in %s on line %d
                    193: done!

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>