Annotation of embedaddon/php/ext/pdo_mysql/tests/pdo_mysql_attr_errmode.phpt, revision 1.1.1.1

1.1       misho       1: --TEST--
                      2: PDO::ATTR_ERRMODE
                      3: --SKIPIF--
                      4: <?php
                      5: require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'skipif.inc');
                      6: require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
                      7: MySQLPDOTest::skip();
                      8: $db = MySQLPDOTest::factory();
                      9: ?>
                     10: --INI--
                     11: error_reporting=E_ALL
                     12: --FILE--
                     13: <?php
                     14:        require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
                     15:        $db = MySQLPDOTest::factory();
                     16: 
                     17:        $valid = array(PDO::ERRMODE_SILENT, PDO::ERRMODE_WARNING, PDO::ERRMODE_EXCEPTION);
                     18:        do {
                     19:                $invalid = mt_rand(-1000, 1000);
                     20:        } while (in_array($invalid, $valid));
                     21: 
                     22: 
                     23:        $tmp = array();
                     24:        if (false != @$db->setAttribute(PDO::ATTR_ERRMODE, $tmp))
                     25:                printf("[001] Maybe PDO could indicate that this is not a proper way of setting the ERRMODE...\n");
                     26: 
                     27:        $tmp = new stdClass();
                     28:        $ret = @$db->setAttribute(PDO::ATTR_ERRMODE, $tmp);
                     29:        if (false != $ret)
                     30:                printf("[002] Maybe PDO could indicate that this is not a proper way of setting the ERRMODE...%s\n",
                     31:                        var_export($ret, true));
                     32: 
                     33:        $ret = @$db->setAttribute(PDO::ATTR_ERRMODE, 'pdo');
                     34:        if (false != $ret)
                     35:                printf("[003] Maybe PDO could indicate that this is not a proper way of setting the ERRMODE...%s\n",
                     36:                        var_export($ret, true));
                     37: 
                     38:        if (false != @$db->setAttribute(PDO::ATTR_ERRMODE, $invalid))
                     39:                printf("[004] Invalid ERRMODE should be rejected\n");
                     40: 
                     41:        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
                     42:        // no message for any PDO call but...
                     43:        $db->query('THIS IS NOT VALID SQL');
                     44:        // ... still messages for everything else
                     45:        $code = $db->errorCode();
                     46:        $info = $db->errorInfo();
                     47: 
                     48:        if ($code != '42000')
                     49:                printf("[005] Expecting SQL code 42000 got '%s'\n", $code);
                     50:        if ($code !== $info[0])
                     51:                printf("[006] Code and info should be identical, got errorCode() = %s, errorInfo()[0] = %s\n",
                     52:                        $code, $info[0]);
                     53:        if ('' == $info[1])
                     54:                printf("[007] Driver specific error code not set\n");
                     55:        if ('' == $info[2])
                     56:                printf("[008] Driver specific error message not set\n");
                     57: 
                     58:        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
                     59:        $db->query('THIS IS NOT VALID SQL');
                     60: 
                     61:        $code = $db->errorCode();
                     62:        $info = $db->errorInfo();
                     63: 
                     64:        if ($code != '42000')
                     65:                printf("[009] Expecting SQL code 42000 got '%s'\n", $code);
                     66:        if ($code !== $info[0])
                     67:                printf("[010] Code and info should be identical, got errorCode() = %s, errorInfo()[0] = %s\n",
                     68:                        $code, $info[0]);
                     69:        if ('' == $info[1])
                     70:                printf("[011] Driver specific error code not set\n");
                     71:        if ('' == $info[2])
                     72:                printf("[012] Driver specific error message not set\n");
                     73: 
                     74:        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                     75:        try {
                     76:                $line = __LINE__ + 1;
                     77:                $db->query('THIS IS NOT VALID SQL');
                     78:        } catch (PDOException $e) {
                     79: 
                     80:                $code = $db->errorCode();
                     81:                $info = $db->errorInfo();
                     82: 
                     83:                if ($code != '42000')
                     84:                        printf("[013] Expecting SQL code 42000 got '%s'\n", $code);
                     85:                if ($code !== $info[0])
                     86:                        printf("[014] Code and info should be identical, got errorCode() = %s, errorInfo()[0] = %s\n",
                     87:                                $code, $info[0]);
                     88:                if ('' == $info[1])
                     89:                        printf("[015] Driver specific error code not set\n");
                     90:                if ('' == $info[2])
                     91:                        printf("[016] Driver specific error message not set\n");
                     92: 
                     93:                if ($e->getCode() !== $code)
                     94:                        printf("[017] Exception code '%s' differs from errorCode '%s'\n",
                     95:                                $e->getCode(), $code);
                     96: 
                     97:                $msg = $e->getMessage();
                     98:                foreach ($info as $k => $v) {
                     99:                        if (false === stristr($msg, (string)$v)) {
                    100:                                printf("[018] Cannot find all parts of the error info ('%s') in the exception message '%s'\n",
                    101:                                        $v, $msg);
                    102:                        }
                    103:                }
                    104: 
                    105:                if ($e->getLine() !== $line)
                    106:                        printf("[019] Exception has been thrown in line %d, exception object reports line %d\n",
                    107:                                $line, $e->getLine());
                    108: 
                    109:                if ($e->getFile() !== __FILE__)
                    110:                        printf("[020] Exception has been thrown in file '%s', exception object reports file '%s'\n",
                    111:                                __FILE__, $e->getFile());
                    112: 
                    113:        }
                    114: 
                    115:        function my_handler($e) {
                    116:                global $db, $line;
                    117: 
                    118:                $code = $db->errorCode();
                    119:                $info = $db->errorInfo();
                    120: 
                    121:                if ($code != '42000')
                    122:                        printf("[021] Expecting SQL code 42000 got '%s'\n", $code);
                    123:                if ($code !== $info[0])
                    124:                        printf("[022] Code and info should be identical, got errorCode() = %s, errorInfo()[0] = %s\n",
                    125:                                $code, $info[0]);
                    126:                if ('' == $info[1])
                    127:                        printf("[023] Driver specific error code not set\n");
                    128:                if ('' == $info[2])
                    129:                        printf("[024] Driver specific error message not set\n");
                    130: 
                    131:                if ($e->getCode() !== $code)
                    132:                        printf("[025] Exception code '%s' differs from errorCode '%s'\n",
                    133:                                $e->getCode(), $code);
                    134: 
                    135:                $msg = $e->getMessage();
                    136:                foreach ($info as $k => $v) {
                    137:                        if (false === stristr($msg, (string)$v)) {
                    138:                                printf("[026] Cannot find all parts of the error info ('%s') in the exception message '%s'\n",
                    139:                                        $v, $msg);
                    140:                        }
                    141:                }
                    142: 
                    143:                if ($e->getLine() !== $line)
                    144:                        printf("[027] Exception has been thrown in line %d, exception object reports line %d\n",
                    145:                                $line, $e->getLine());
                    146: 
                    147:                if ($e->getFile() !== __FILE__)
                    148:                        printf("[028] Exception has been thrown in file '%s', exception object reports file '%s'\n",
                    149:                                __FILE__, $e->getFile());
                    150: 
                    151:                if (get_class($e) != 'PDOException')
                    152:                        printf("[029] Expecting PDO exception got exception of type '%s'\n", get_class($e));
                    153: 
                    154:                print "\nend of execution";
                    155:        }
                    156:        set_exception_handler('my_handler');
                    157:        $line = __LINE__ + 1;
                    158:        $db->query('THIS IS NOT VALID SQL');
                    159: 
                    160:        print "done!\n";
                    161: --EXPECTF--
                    162: [003] Maybe PDO could indicate that this is not a proper way of setting the ERRMODE...true
                    163: 
                    164: Warning: PDO::query(): SQLSTATE[42000]: Syntax error or access violation: %d You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%s' at line %d in %s on line %d
                    165: 
                    166: end of execution

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