t('Format size test'), 'description' => t('Parse a predefined amount of bytes and compare the output with the expected value.'), 'group' => t('System') ); } /** * Implementation of setUp(). */ function setUp() { $this->exact_test_cases = array( '1 byte' => 1, // byte '1 KB' => 1000, // kilobyte '1 MB' => 1000000, // megabyte '1 GB' => 1000000000, // gigabyte '1 TB' => 1000000000000, // terabyte '1 PB' => 1000000000000000, // petabyte '1 EB' => 1000000000000000000, // exabyte '1 ZB' => 1000000000000000000000, // zettabyte '1 YB' => 1000000000000000000000000, // yottabyte ); $this->rounded_test_cases = array( '2 bytes' => 2, // bytes '1 MB' => 999999, // 1 MB (not 1000 kilobyte!) '3.62 MB' => 3623651, // megabytes '67.23 PB' => 67234178751368124, // petabytes '235.35 YB' => 235346823821125814962843827, // yottabytes ); parent::setUp(); } /** * testCommonFormatSize */ function testCommonFormatSize() { foreach (array($this->exact_test_cases, $this->rounded_test_cases) as $test_cases) { foreach ($test_cases as $expected => $size) { $this->assertTrue( ($result = format_size($size, NULL)) == $expected, $expected . " == " . $result . " (" . $size . " bytes) %s" ); } } } } /** * Test drupal_explode_tags() and drupal_implode_tags(). */ class DrupalTagsHandlingTestCase extends DrupalWebTestCase { var $validTags = array( 'Drupal' => 'Drupal', 'Drupal with some spaces' => 'Drupal with some spaces', '"Legendary Drupal mascot of doom: ""Druplicon"""' => 'Legendary Drupal mascot of doom: "Druplicon"', '"Drupal, although it rhymes with sloopal, is as awesome as a troopal!"' => 'Drupal, although it rhymes with sloopal, is as awesome as a troopal!', ); /** * Implementation of getInfo(). */ function getInfo() { return array( 'name' => t('Drupal tags handling'), 'description' => t("Performs tests on Drupal's handling of tags, both explosion and implosion tactics used."), 'group' => t('System') ); } /** * Explode a series of tags. */ function testDrupalExplodeTags() { $string = implode(', ', array_keys($this->validTags)); $tags = drupal_explode_tags($string); $this->assertTags($tags); } /** * Implode a series of tags. */ function testDrupalImplodeTags() { $tags = array_values($this->validTags); // Let's explode and implode to our heart's content. for ($i = 0; $i < 10; $i++) { $string = drupal_implode_tags($tags); $tags = drupal_explode_tags($string); } $this->assertTags($tags); } /** * Helper function: asserts that the ending array of tags is what we wanted. */ function assertTags($tags) { $original = $this->validTags; foreach ($tags as $tag) { $key = array_search($tag, $original); $this->_assert($key !== FALSE, t('Make sure tag %tag shows up in the final tags array (originally %original)', array('%tag' => $tag, '%original' => $key))); unset($original[$key]); } foreach ($original as $leftover) { $this->_assert(FALSE, t('Leftover tag %leftover was left over.', array('%leftover' => $leftover))); } } } /** * Test drupal_http_request(). */ class DrupalHTTPRequestTestCase extends DrupalWebTestCase { /** * Implementation of getInfo(). */ function getInfo() { return array( 'name' => t('Drupal HTTP request'), 'description' => t("Performs tests on Drupal's HTTP request mechanism."), 'group' => t('System') ); } /** * Implementation of setUp(). */ function setUp() { parent::setUp('system_test'); } function testDrupalHTTPRequest() { // Parse URL schema. $missing_scheme = drupal_http_request('example.com/path'); $this->assertEqual($missing_scheme->error, 'missing schema', t('Returned with "missing schema" error.')); $unable_to_parse = drupal_http_request('http:///path'); $this->assertEqual($unable_to_parse->error, 'unable to parse URL', t('Returned with "unable to parse URL" error.')); // Fetch page. $result = drupal_http_request(url('node', array('absolute' => TRUE))); $this->assertEqual($result->code, 200, t('Fetched page successfully.')); $this->drupalSetContent($result->data); $this->assertTitle(variable_get('site_name', 'Drupal'), t('Site title matches.')); } function testDrupalHTTPRequestBasicAuth() { $username = $this->randomName(); $password = $this->randomName(); $url = url('system-test/auth', array('absolute' => TRUE)); $auth = str_replace('http://', 'http://' . $username . ':' . $password .'@', $url); $result = drupal_http_request($auth); // We use strpos directly. // assertRaw() cannot be used because we are getting the data // in a variable instead of $this->_content. $this->assertTrue(strpos($result->data, $username) !== FALSE, t('$_SERVER[\'PHP_AUTH_USER\'] is passed correctly.')); $this->assertTrue(strpos($result->data, $password) !== FALSE, t('$_SERVER[\'PHP_AUTH_PW\'] is passed correctly.')); } function testDrupalHTTPRequestRedirect() { $redirect_301 = drupal_http_request(url('system-test/redirect/301', array('absolute' => TRUE)), array(), 'GET', NULL, 1); $this->assertEqual($redirect_301->redirect_code, 301, t('drupal_http_request follows the 301 redirect.')); $redirect_301 = drupal_http_request(url('system-test/redirect/301', array('absolute' => TRUE)), array(), 'GET', NULL, 0); $this->assertFalse(isset($redirect_301->redirect_code), t('drupal_http_request does not follow 301 redirect if $retry = 0.')); $redirect_invalid = drupal_http_request(url('system-test/redirect-noscheme', array('absolute' => TRUE)), array(), 'GET', NULL, 1); $this->assertEqual($redirect_invalid->error, 'missing schema', t('301 redirect to invalid URL returned with error "!error".', array('!error' => $redirect_invalid->error))); $redirect_invalid = drupal_http_request(url('system-test/redirect-noparse', array('absolute' => TRUE)), array(), 'GET', NULL, 1); $this->assertEqual($redirect_invalid->error, 'unable to parse URL', t('301 redirect to invalid URL returned with error "!error".', array('!error' => $redirect_invalid->error))); $redirect_invalid = drupal_http_request(url('system-test/redirect-invalid-scheme', array('absolute' => TRUE)), array(), 'GET', NULL, 1); $this->assertEqual($redirect_invalid->error, 'invalid schema ftp', t('301 redirect to invalid URL returned with error "!error".', array('!error' => $redirect_invalid->error))); $redirect_302 = drupal_http_request(url('system-test/redirect/302', array('absolute' => TRUE)), array(), 'GET', NULL, 1); $this->assertEqual($redirect_302->redirect_code, 302, t('drupal_http_request follows the 302 redirect.')); $redirect_302 = drupal_http_request(url('system-test/redirect/302', array('absolute' => TRUE)), array(), 'GET', NULL, 0); $this->assertFalse(isset($redirect_302->redirect_code), t('drupal_http_request does not follow 302 redirect if $retry = 0.')); $redirect_307 = drupal_http_request(url('system-test/redirect/307', array('absolute' => TRUE)), array(), 'GET', NULL, 1); $this->assertEqual($redirect_307->redirect_code, 307, t('drupal_http_request follows the 307 redirect.')); $redirect_307 = drupal_http_request(url('system-test/redirect/307', array('absolute' => TRUE)), array(), 'GET', NULL, 0); $this->assertFalse(isset($redirect_307->redirect_code), t('drupal_http_request does not follow 307 redirect if $retry = 0.')); } function testDrupalGetDestination() { $query = $this->randomName(10); $url = url('system-test/destination', array('absolute' => TRUE, 'query' => $query)); $this->drupalGet($url); $this->assertText($query, t('The query passed to the page is correctly represented by drupal_get_detination().')); } } /** * Testing drupal_set_content and drupal_get_content. */ class DrupalSetContentTestCase extends DrupalWebTestCase { /** * Implementation of getInfo(). */ function getInfo() { return array( 'name' => t('Drupal set/get content'), 'description' => t("Performs tests on setting and retrieiving content from theme regions."), 'group' => t('System') ); } /** * Test setting and retrieving content for theme regions. */ function testRegions() { global $theme_key; $block_regions = array_keys(system_region_list($theme_key)); $delimiter = $this->randomName(32); $values = array(); // Set some random content for each region available. foreach ($block_regions as $region) { $first_chunk = $this->randomName(32); drupal_set_content($region, $first_chunk); $second_chunk = $this->randomName(32); drupal_set_content($region, $second_chunk); // Store the expected result for a drupal_get_content call for this region. $values[$region] = $first_chunk . $delimiter . $second_chunk; } // Ensure drupal_get_content returns expected results when fetching all regions. $content = drupal_get_content(NULL, $delimiter); foreach ($content as $region => $region_content) { $this->assertEqual($region_content, $values[$region], t('@region region text verified when fetching all regions', array('@region' => $region))); } // Ensure drupal_get_content returns expected results when fetching a single region. foreach ($block_regions as $region) { $region_content = drupal_get_content($region, $delimiter); $this->assertEqual($region_content, $values[$region], t('@region region text verified when fetching single region.', array('@region' => $region))); } } } /** * Tests Drupal error and exception handlers. */ class DrupalErrorHandlerUnitTest extends DrupalWebTestCase { function getInfo() { return array( 'name' => t('Drupal error handlers'), 'description' => t("Performs tests on the Drupal error and exception handler."), 'group' => t('System'), ); } function setUp() { parent::setUp('system_test'); } /** * Test the error handler. */ function testErrorHandler() { $this->drupalGet('system-test/generate-warnings'); $this->assertErrorMessage('Notice', 'system_test.module', 'system_test_generate_warnings() ', 'Undefined variable'); $this->assertErrorMessage('Warning', 'system_test.module', 'system_test_generate_warnings() ', 'Division by zero'); $this->assertErrorMessage('User notice', 'system_test.module', 'system_test_generate_warnings() ', 'Drupal is awesome'); } /** * Test the exception handler. */ function testExceptionHandler() { $this->drupalGet('system-test/trigger-exception'); $this->assertErrorMessage('Exception', 'system_test.module', 'system_test_trigger_exception()', 'Drupal is awesome'); $this->drupalGet('system-test/trigger-pdo-exception'); $this->assertErrorMessage('PDOException', 'system_test.module', 'system_test_trigger_pdo_exception()', 'Base table or view not found'); } /** * Helper function: assert that the logged message is correct. */ function assertErrorMessage($type, $file, $function, $message) { $this->assertText($type, t("Found '%type' in error page.", array('%type' => $type))); $this->assertText($file, t("Found '%file' in error page.", array('%file' => $file))); $this->assertText($function, t("Found '%function' in error page.", array('%function' => $function))); $this->assertText($message, t("Found '%message' in error page.", array('%message' => $message))); } }