Index: includes/common.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/common.inc,v retrieving revision 1.799 diff -u -r1.799 common.inc --- includes/common.inc 20 Sep 2008 20:22:23 -0000 1.799 +++ includes/common.inc 27 Sep 2008 12:49:14 -0000 @@ -625,6 +625,12 @@ drupal_set_message($entry, 'error'); } + if (!headers_sent()) { + static $index = 0; + $message = str_replace("\n", " ", $message); + header("X-Drupal-Error-$index: " . $errno . "|" . $filename . "|" . $line . "|" . $message); + $index++; + } watchdog('php', '%message in %file on line %line.', array('%error' => $types[$errno], '%message' => $message, '%file' => $filename, '%line' => $line), WATCHDOG_ERROR); } } Index: modules/simpletest/drupal_web_test_case.php =================================================================== RCS file: /cvs/drupal/drupal/modules/simpletest/drupal_web_test_case.php,v retrieving revision 1.45 diff -u -r1.45 drupal_web_test_case.php --- modules/simpletest/drupal_web_test_case.php 20 Sep 2008 20:22:24 -0000 1.45 +++ modules/simpletest/drupal_web_test_case.php 27 Sep 2008 12:49:15 -0000 @@ -803,9 +803,22 @@ } $curl_options[CURLOPT_USERPWD] = $auth; } + $curl_options[CURLOPT_HEADERFUNCTION] = array($this, 'readHeader'); return $this->curlExec($curl_options); } } + + /** + * Read an HTTP header returned in the current response. + */ + protected function readHeader($ch, $header) { + if (preg_match("@^X-Drupal-Error-[0-9]+: ([^|]+)\|([^|]+)\|([^|]+)\|(.*)$@", $header, $matches)) { + list(, $severity, $filename, $line, $message) = $matches; + $message = trim($message); + $this->error(simpletest_get_severity_as_string($severity), $message, $filename, $line); + } + return strlen($header); + } /** * Performs a cURL exec with the specified options after calling curlConnect(). Index: modules/simpletest/simpletest.module =================================================================== RCS file: /cvs/drupal/drupal/modules/simpletest/simpletest.module,v retrieving revision 1.15 diff -u -r1.15 simpletest.module --- modules/simpletest/simpletest.module 20 Sep 2008 20:22:24 -0000 1.15 +++ modules/simpletest/simpletest.module 27 Sep 2008 12:49:15 -0000 @@ -592,3 +592,22 @@ drupal_set_message(t('Removed @count test results.', array('@count' => $count))); } } + +/** + * Returns a string from a php error severity. + * + * @param mixed $severity + * @access public + * @return string + */ +function simpletest_get_severity_as_string($severity) { + // List swiped from drupal_error_handler(); + $types = array(1 => 'error', 2 => 'warning', 4 => 'parse error', 8 => 'notice', 16 => 'core error', 32 => 'core warning', 64 => 'compile error', 128 => 'compile warning', 256 => 'user error', 512 => 'user warning', 1024 => 'user notice', 2048 => 'strict warning', 4096 => 'recoverable fatal error'); + if (isset($types[$severity])) { + return $types[$severity]; + } + else { + return 'unknown'; + } +} +