'Drupal error handlers', 'description' => 'Performs tests on the Drupal error and exception handler.', 'group' => 'System', ); } function setUp() { parent::setUp('error_test'); } /** * Test the error handler. */ function testErrorHandler() { $error_notice = array( '%type' => 'Notice', '%message' => 'Undefined variable: bananas', '%function' => 'error_test_generate_warnings()', '%line' => 44, '%file' => drupal_realpath('modules/simpletest/tests/error_test.module'), ); $error_warning = array( '%type' => 'Warning', '%message' => 'Division by zero', '%function' => 'error_test_generate_warnings()', '%line' => 46, '%file' => drupal_realpath('modules/simpletest/tests/error_test.module'), ); $error_user_notice = array( '%type' => 'User warning', '%message' => 'Drupal is awesome', '%function' => 'error_test_generate_warnings()', '%line' => 48, '%file' => drupal_realpath('modules/simpletest/tests/error_test.module'), ); // Set error reporting to collect notices. variable_set('error_level', ERROR_REPORTING_DISPLAY_ALL); $this->drupalGet('error-test/generate-warnings'); $this->assertResponse(200, 'Received expected HTTP status code.'); $this->assertErrorMessage($error_notice); $this->assertErrorMessage($error_warning); $this->assertErrorMessage($error_user_notice); // Set error reporting to not collect notices. variable_set('error_level', ERROR_REPORTING_DISPLAY_SOME); $this->drupalGet('error-test/generate-warnings'); $this->assertResponse(200, 'Received expected HTTP status code.'); $this->assertNoErrorMessage($error_notice); $this->assertErrorMessage($error_warning); $this->assertErrorMessage($error_user_notice); // Set error reporting to not show any errors. variable_set('error_level', ERROR_REPORTING_HIDE); $this->drupalGet('error-test/generate-warnings'); $this->assertResponse(200, 'Received expected HTTP status code.'); $this->assertNoErrorMessage($error_notice); $this->assertNoErrorMessage($error_warning); $this->assertNoErrorMessage($error_user_notice); } /** * Test the exception handler. */ function testExceptionHandler() { $error_exception = array( '%type' => 'Exception', '%message' => 'Drupal is awesome', '%function' => 'error_test_trigger_exception()', '%line' => 57, '%file' => drupal_realpath('modules/simpletest/tests/error_test.module'), ); $error_pdo_exception = array( '%type' => 'PDOException', '%message' => 'SELECT * FROM bananas_are_awesome', '%function' => 'error_test_trigger_pdo_exception()', '%line' => 65, '%file' => drupal_realpath('modules/simpletest/tests/error_test.module'), ); $this->drupalGet('error-test/trigger-exception'); $this->assertTrue(strpos($this->drupalGetHeader(':status'), '500 Service unavailable (with message)'), 'Received expected HTTP status line.'); $this->assertErrorMessage($error_exception); $this->drupalGet('error-test/trigger-pdo-exception'); $this->assertTrue(strpos($this->drupalGetHeader(':status'), '500 Service unavailable (with message)'), 'Received expected HTTP status line.'); // We cannot use assertErrorMessage() since the extact error reported // varies from database to database. Check that the SQL string is displayed. $this->assertText($error_pdo_exception['%type'], 'Found ' . $error_pdo_exception['%type'] . ' in error page.'); $this->assertText($error_pdo_exception['%message'], 'Found ' . $error_pdo_exception['%message'] . ' in error page.'); $error_details = t('in %function (line %line of %file)', $error_pdo_exception); $this->assertRaw($error_details, "Found '" . $error_details . "' in error page."); } /** * Helper function: assert that the error message is found. */ function assertErrorMessage(array $error) { $message = t('%type: %message in %function (line %line of %file).', $error); $this->assertRaw($message, 'Error ' . $message . ' found.'); } /** * Helper function: assert that the error message is not found. */ function assertNoErrorMessage(array $error) { $message = t('%type: %message in %function (line %line of %file).', $error); $this->assertNoRaw($message, 'Error ' . $message . ' not found.'); } }