| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481 | <?php/** * Implements hook_menu(). */function system_test_menu() {  $items['system-test/sleep/%'] = array(    'page callback' => 'system_test_sleep',    'page arguments' => array(2),    'access callback' => TRUE,    'type' => MENU_CALLBACK,  );  $items['system-test/auth'] = array(    'page callback' => 'system_test_basic_auth_page',    'access callback' => TRUE,    'type' => MENU_CALLBACK,  );  $items['system-test/authorize-init/%'] = array(    'page callback' => 'system_test_authorize_init_page',    'page arguments' => array(2),    'access arguments' => array('administer software updates'),    'type' => MENU_CALLBACK,  );  $items['system-test/redirect/%'] = array(    'title' => 'Redirect',    'page callback' => 'system_test_redirect',    'page arguments' => array(2),    'access arguments' => array('access content'),    'type' => MENU_CALLBACK,  );  $items['system-test/multiple-redirects/%'] = array(    'title' => 'Redirect',    'page callback' => 'system_test_multiple_redirects',    'page arguments' => array(2),    'access arguments' => array('access content'),    'type' => MENU_CALLBACK,  );  $items['system-test/set-header'] = array(    'page callback' => 'system_test_set_header',    'access arguments' => array('access content'),    'type' => MENU_CALLBACK,  );  $items['system-test/redirect-noscheme'] = array(    'page callback' => 'system_test_redirect_noscheme',    'access arguments' => array('access content'),    'type' => MENU_CALLBACK,  );  $items['system-test/redirect-noparse'] = array(    'page callback' => 'system_test_redirect_noparse',    'access arguments' => array('access content'),    'type' => MENU_CALLBACK,  );  $items['system-test/redirect-invalid-scheme'] = array(    'page callback' => 'system_test_redirect_invalid_scheme',    'access arguments' => array('access content'),    'type' => MENU_CALLBACK,  );  $items['system-test/variable-get'] = array(    'title' => 'Variable Get',    'page callback' => 'variable_get',    'page arguments' => array('simpletest_bootstrap_variable_test', NULL),    'access arguments' => array('access content'),    'type' => MENU_CALLBACK,  );  $items['system-test/lock-acquire'] = array(    'title' => 'Lock acquire',    'page callback' => 'system_test_lock_acquire',    'access callback' => TRUE,    'type' => MENU_CALLBACK,  );  $items['system-test/lock-exit'] = array(    'title' => 'Lock acquire then exit',    'page callback' => 'system_test_lock_exit',    'access callback' => TRUE,    'type' => MENU_CALLBACK,  );  $items['system-test/drupal-set-message'] = array(    'title' => 'Set messages with drupal_set_message()',    'page callback' => 'system_test_drupal_set_message',    'access callback' => TRUE,    'type' => MENU_CALLBACK,  );  $items['system-test/main-content-handling'] = array(    'title' => 'Test main content handling',    'page callback' => 'system_test_main_content_fallback',    'access callback' => TRUE,    'type' => MENU_CALLBACK,  );  $items['system-test/main-content-fallback'] = array(    'title' => 'Test main content fallback',    'page callback' => 'system_test_main_content_fallback',    'access callback' => TRUE,    'type' => MENU_CALLBACK,  );  $items['system-test/main-content-duplication'] = array(    'title' => 'Test main content duplication',    'page callback' => 'system_test_main_content_fallback',    'access callback' => TRUE,    'type' => MENU_CALLBACK,  );  $items['system-test/shutdown-functions'] = array(    'title' => 'Test main content duplication',    'page callback' => 'system_test_page_shutdown_functions',    'access callback' => TRUE,    'type' => MENU_CALLBACK,  );  $items['system-test/get-destination'] = array(    'title' => 'Test $_GET[\'destination\']',    'page callback' => 'system_test_get_destination',    'access callback' => TRUE,    'type' => MENU_CALLBACK,  );  $items['system-test/request-destination'] = array(    'title' => 'Test $_REQUEST[\'destination\']',    'page callback' => 'system_test_request_destination',    'access callback' => TRUE,    'type' => MENU_CALLBACK,  );  return $items;}function system_test_sleep($seconds) {  sleep($seconds);}function system_test_basic_auth_page() {  // The Authorization HTTP header is forwarded via Drupal's .htaccess file even  // for PHP CGI SAPIs.  if (isset($_SERVER['HTTP_AUTHORIZATION'])) {    $authorization_header = $_SERVER['HTTP_AUTHORIZATION'];  }  // If using CGI on Apache with mod_rewrite, the forwarded HTTP header appears  // in the redirected HTTP headers. See  // https://github.com/symfony/symfony/blob/master/src/Symfony/Component/HttpFoundation/ServerBag.php#L61  elseif (isset($_SERVER['REDIRECT_HTTP_AUTHORIZATION'])) {    $authorization_header = $_SERVER['REDIRECT_HTTP_AUTHORIZATION'];  }  // Resemble PHP_AUTH_USER and PHP_AUTH_PW for a Basic authentication from  // the HTTP_AUTHORIZATION header. See  // http://www.php.net/manual/features.http-auth.php  list($user, $pw) = explode(':', base64_decode(substr($authorization_header, 6)));  $output = t('Username is @username.', array('@username' => $user));  $output .= t('Password is @password.', array('@password' => $pw));  return $output;}function system_test_redirect($code) {  $code = (int) $code;  if ($code != 200) {    // Header names are case-insensitive.    header("locaTION: " . url('system-test/redirect/200', array('absolute' => TRUE)), TRUE, $code);    exit;  }  return '';}/** * Menu callback; sends a redirect header to itself until $count argument is 0. * * Emulates the variable number of redirects (given by initial $count argument) * to the final destination URL by continuous sending of 301 HTTP redirect * headers to itself together with decrementing the $count parameter until the * $count parameter reaches 0. After that it returns an empty string to render * the final destination page. * * @param $count *   The count of redirects left until the final destination page. * * @returns *   The location redirect if the $count > 0, otherwise an empty string. */function system_test_multiple_redirects($count) {  $count = (int) $count;  if ($count > 0) {    header("location: " . url('system-test/multiple-redirects/' . --$count, array('absolute' => TRUE)), TRUE, 301);    exit;  }  return '';}function system_test_set_header() {  drupal_add_http_header($_GET['name'], $_GET['value']);  return t('The following header was set: %name: %value', array('%name' => $_GET['name'], '%value' => $_GET['value']));}function system_test_redirect_noscheme() {  header("Location: localhost/path", TRUE, 301);  exit;}function system_test_redirect_noparse() {  header("Location: http:///path", TRUE, 301);  exit;}function system_test_redirect_invalid_scheme() {  header("Location: ftp://localhost/path", TRUE, 301);  exit;}/** * Implements hook_modules_installed(). */function system_test_modules_installed($modules) {  if (variable_get('test_verbose_module_hooks')) {    foreach ($modules as $module) {      drupal_set_message(t('hook_modules_installed fired for @module', array('@module' => $module)));    }  }}/** * Implements hook_modules_enabled(). */function system_test_modules_enabled($modules) {  if (variable_get('test_verbose_module_hooks')) {    foreach ($modules as $module) {      drupal_set_message(t('hook_modules_enabled fired for @module', array('@module' => $module)));    }  }}/** * Implements hook_modules_disabled(). */function system_test_modules_disabled($modules) {  if (variable_get('test_verbose_module_hooks')) {    foreach ($modules as $module) {      drupal_set_message(t('hook_modules_disabled fired for @module', array('@module' => $module)));    }  }}/** * Implements hook_modules_uninstalled(). */function system_test_modules_uninstalled($modules) {  if (variable_get('test_verbose_module_hooks')) {    foreach ($modules as $module) {      drupal_set_message(t('hook_modules_uninstalled fired for @module', array('@module' => $module)));    }  }}/** * Implements hook_boot(). */function system_test_boot() {  watchdog('system_test', 'hook_boot');}/** * Implements hook_init(). */function system_test_init() {  // Used by FrontPageTestCase to get the results of drupal_is_front_page().  if (variable_get('front_page_output', 0) && drupal_is_front_page()) {    drupal_set_message(t('On front page.'));  }}/** * Implements hook_exit(). */function system_test_exit() {  watchdog('system_test', 'hook_exit');}/** * Implements hook_system_info_alter(). */function system_test_system_info_alter(&$info, $file, $type) {  // We need a static otherwise the last test will fail to alter common_test.  static $test;  if (($dependencies = variable_get('dependencies', array())) || $test) {    if ($file->name == 'module_test') {      $info['hidden'] = FALSE;      $info['dependencies'][] = array_shift($dependencies);      variable_set('dependencies', $dependencies);      $test = TRUE;    }    if ($file->name == 'common_test') {      $info['hidden'] = FALSE;      $info['version'] = '7.x-2.4-beta3';    }  }  // Make the system_dependencies_test visible by default.  if ($file->name == 'system_dependencies_test') {    $info['hidden'] = FALSE;  }  if (in_array($file->name, array(    'system_incompatible_module_version_dependencies_test',    'system_incompatible_core_version_dependencies_test',    'system_incompatible_module_version_test',    'system_incompatible_core_version_test',  ))) {    $info['hidden'] = FALSE;  }  if ($file->name == 'requirements1_test' || $file->name == 'requirements2_test') {    $info['hidden'] = FALSE;  }}/** * Try to acquire a named lock and report the outcome. */function system_test_lock_acquire() {  if (lock_acquire('system_test_lock_acquire')) {    lock_release('system_test_lock_acquire');    return 'TRUE: Lock successfully acquired in system_test_lock_acquire()';  }  else {    return 'FALSE: Lock not acquired in system_test_lock_acquire()';  }}/** * Try to acquire a specific lock, and then exit. */function system_test_lock_exit() {  if (lock_acquire('system_test_lock_exit', 900)) {    echo 'TRUE: Lock successfully acquired in system_test_lock_exit()';    // The shut-down function should release the lock.    exit();  }  else {    return 'FALSE: Lock not acquired in system_test_lock_exit()';  }}/** * Implements hook_page_build(). */function system_test_page_build(&$page) {  $menu_item = menu_get_item();  $main_content_display = &drupal_static('system_main_content_added', FALSE);  if ($menu_item['path'] == 'system-test/main-content-handling') {    $page['footer'] = drupal_set_page_content();    $page['footer']['main']['#markup'] = '<div id="system-test-content">' . $page['footer']['main']['#markup'] . '</div>';  }  elseif ($menu_item['path'] == 'system-test/main-content-fallback') {    drupal_set_page_content();    $main_content_display = FALSE;  }  elseif ($menu_item['path'] == 'system-test/main-content-duplication') {    drupal_set_page_content();  }}/** * Menu callback to test main content fallback(). */function system_test_main_content_fallback() {  return t('Content to test main content fallback');}/** * A simple page callback which adds a register shutdown function. */function system_test_page_shutdown_functions($arg1, $arg2) {  drupal_register_shutdown_function('_system_test_first_shutdown_function', $arg1, $arg2);}/** * Dummy shutdown function which registers another shutdown function. */function _system_test_first_shutdown_function($arg1, $arg2) {  // Output something, page has already been printed and the session stored  // so we can't use drupal_set_message.  print t('First shutdown function, arg1 : @arg1, arg2: @arg2', array('@arg1' => $arg1, '@arg2' => $arg2));  drupal_register_shutdown_function('_system_test_second_shutdown_function', $arg1, $arg2);}/** * Dummy shutdown function. */function _system_test_second_shutdown_function($arg1, $arg2) {  // Output something, page has already been printed and the session stored  // so we can't use drupal_set_message.  print t('Second shutdown function, arg1 : @arg1, arg2: @arg2', array('@arg1' => $arg1, '@arg2' => $arg2));  // Throw an exception with an HTML tag. Since this is called in a shutdown  // function, it will not bubble up to the default exception handler but will  // be caught in _drupal_shutdown_function() and be displayed through  // _drupal_render_exception_safe().  throw new Exception('Drupal is <blink>awesome</blink>.');}/** * Implements hook_filetransfer_info(). */function system_test_filetransfer_info() {  return array(    'system_test' => array(      'title' => t('System Test FileTransfer'),      'file' => 'system_test.module',  // Should be a .inc, but for test, ok.      'class' => 'SystemTestFileTransfer',      'weight' => -10,    ),  );}/** * Mock FileTransfer object to test the settings form functionality. */class SystemTestFileTransfer {  public static function factory() {    return new SystemTestFileTransfer;  }  public function getSettingsForm() {    $form = array();    $form['system_test_username'] = array(      '#type' => 'textfield',      '#title' => t('System Test Username'),    );    return $form;  }}/** * Page callback to initialize authorize.php during testing. * * @see system_authorized_init(). */function system_test_authorize_init_page($page_title) {  $authorize_url = $GLOBALS['base_url'] . '/authorize.php';  system_authorized_init('system_test_authorize_run', drupal_get_path('module', 'system_test') . '/system_test.module', array(), $page_title);  drupal_goto($authorize_url);}/** * Sets two messages and removes the first one before the messages are displayed. */function system_test_drupal_set_message() {  // Set two messages.  drupal_set_message('First message (removed).');  drupal_set_message('Second message (not removed).');  // Remove the first.  unset($_SESSION['messages']['status'][0]);  return '';}/** * Page callback to print out $_GET['destination'] for testing. */function system_test_get_destination() {  if (isset($_GET['destination'])) {    print $_GET['destination'];  }  // No need to render the whole page, we are just interested in this bit of  // information.  exit;}/** * Page callback to print out $_REQUEST['destination'] for testing. */function system_test_request_destination() {  if (isset($_REQUEST['destination'])) {    print $_REQUEST['destination'];  }  // No need to render the whole page, we are just interested in this bit of  // information.  exit;}
 |