summaryrefslogtreecommitdiff
path: root/trunk/reprap/web/james-bom/MDB2/MDB2-2.4.1/tests/testUtils.php
blob: 0c1a251b1690c3a3f06bd07bebdfa3b098e7195a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<?php

/* Some utility functions for the test scripts */

/**
 * this is used (with array filter) to filter out the test*
 * methods from a PHPUnit testcase
 */
function grepForTest($var)
{
    return preg_match('/\btest.*/', $var);
}

/**
 * given a class name it returns an array of test* methods
 *
 * @param $class text classname
 * @return array of methods beginning with test
 */
function getTests($class)
{
    $methods = array_map('strtolower', get_class_methods($class));
    return array_filter($methods, 'grepForTest');
}

/**
 * Little helper function that outputs check for boxes with suitable names
 */
function testCheck($testcase, $testmethod)
{
    return "<input type=\"checkbox\" name=\"testmethods[$testcase][$testmethod]\" value=\"1\">$testmethod <br>\n";
}

/**
 * Little helper function that gets a backtrace if available
 */
function getBacktrace($errline = 0)
{
    $message = '';
    if (!function_exists('debug_backtrace')) {
        $message.= 'function debug_backtrace does not exists'."\n";
    }

    $debug_backtrace = debug_backtrace();
    array_shift($debug_backtrace);
    $message.= 'Debug backtrace:'."\n";

    foreach ($debug_backtrace as $trace_item) {
        $message.= "\t" . '    @ ';
        if (!empty($trace_item['file'])) {
            $message.= basename($trace_item['file']) . ':' . $trace_item['line'];
        } else {
            $message.= '- PHP inner-code - ';
        }
        $message.= ' -- ';
        if (!empty($trace_item['class'])) {
            $message.= $trace_item['class'] . $trace_item['type'];
        }
        $message.= $trace_item['function'];

        if (!empty($trace_item['args']) && is_array($trace_item['args'])) {
            $args = array();
            foreach ($trace_item['args'] as $arg) {
              $args[] = is_scalar($arg) ? $arg : (is_object($arg) ? get_class($arg) : gettype($arg));
            }
            $message.= '('.implode(', ', $args).')';
        } else {
            $message.= '()';
        }
        $message.= "\n";
    }

    return $message;
}

require_once 'PEAR.php';
function errorHandlerPEAR($error_obj)
{
    $message = "-- PEAR-Error --\n";
    $message.= $error_obj->getMessage().': '.$error_obj->getUserinfo()."\n";
    $message.= getBacktrace();

    print_r($message);
}

PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'errorHandlerPEAR');

$GLOBALS['_show_silenced'] = false;
function errorHandler($errno, $errstr, $errfile, $errline)
{
    if ((!$GLOBALS['_show_silenced'] && !error_reporting()) || $errno == 2048) {
        return;
    }
    $message = "\n";
    switch ($errno) {
    case E_USER_ERROR:
        $message.= "FATAL [$errno] $errstr\n";
        $message.= "  Fatal error in line $errline of file $errfile";
        $message.= ", PHP " . PHP_VERSION . " (" . PHP_OS . ")\n";
        $message.= "Aborting...\n";
        die($message);
        break;
    case E_USER_WARNING:
        $message.= "ERROR [$errno] $errstr in line $errline of file $errfile\n";
        break;
    case E_USER_NOTICE:
        $message.= "WARNING [$errno] $errstr in line $errline of file $errfile\n";
        break;
    default:
        $message.= "Unkown error type: [$errno] $errstr in line $errline of file $errfile\n";
        break;
    }

    $message.= getBacktrace($errline);

    print_r($message);
}

set_error_handler('errorHandler');
if (function_exists('xdebug_disable')) {
    xdebug_disable();
}
?>