system_test.module

File

drupal/core/modules/system/tests/modules/system_test/system_test.module
View source
<?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/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,
  );
  return $items;
}
function system_test_sleep($seconds) {
  sleep($seconds);
}
function system_test_basic_auth_page() {
  $output = t('$_SERVER[\'PHP_AUTH_USER\'] is @username.', array(
    '@username' => $_SERVER['PHP_AUTH_USER'],
  ));
  $output .= t('$_SERVER[\'PHP_AUTH_PW\'] is @password.', array(
    '@password' => $_SERVER['PHP_AUTH_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 (state()
    ->get('system_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 (state()
    ->get('system_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 (state()
    ->get('system_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 (state()
    ->get('system_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().
  $frontpage = state()
    ->get('system_test.front_page_output') ?: 0;
  if ($frontpage && 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 = state()
    ->get('system_test.dependencies')) || $test) {
    if ($file->name == 'module_test') {
      $info['hidden'] = FALSE;
      $info['dependencies'][] = array_shift($dependencies);
      state()
        ->set('system_test.dependencies', $dependencies);
      $test = TRUE;
    }
    if ($file->name == 'common_test') {
      $info['hidden'] = FALSE;
      $info['version'] = '8.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'),
      'class' => 'Drupal\\system_test\\MockFileTransfer',
      'weight' => -10,
    ),
  );
}

/**
 * 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'] . '/core/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);
}

Functions

Namesort descending Description
system_test_authorize_init_page Page callback to initialize authorize.php during testing.
system_test_basic_auth_page
system_test_boot Implements hook_boot().
system_test_exit Implements hook_exit().
system_test_filetransfer_info Implements hook_filetransfer_info().
system_test_init Implements hook_init().
system_test_lock_acquire Try to acquire a named lock and report the outcome.
system_test_lock_exit Try to acquire a specific lock, and then exit.
system_test_main_content_fallback Menu callback to test main content fallback().
system_test_menu Implements hook_menu().
system_test_modules_disabled Implements hook_modules_disabled().
system_test_modules_enabled Implements hook_modules_enabled().
system_test_modules_installed Implements hook_modules_installed().
system_test_modules_uninstalled Implements hook_modules_uninstalled().
system_test_multiple_redirects Menu callback; sends a redirect header to itself until $count argument is 0.
system_test_page_build Implements hook_page_build().
system_test_page_shutdown_functions A simple page callback which adds a register shutdown function.
system_test_redirect
system_test_redirect_invalid_scheme
system_test_redirect_noparse
system_test_redirect_noscheme
system_test_set_header
system_test_sleep
system_test_system_info_alter Implements hook_system_info_alter().
_system_test_first_shutdown_function Dummy shutdown function which registers another shutdown function.
_system_test_second_shutdown_function Dummy shutdown function.