You are here

function theme_simpletest_test_table in SimpleTest 7

Same name and namespace in other branches
  1. 6.2 simpletest.pages.inc \theme_simpletest_test_table()
  2. 7.2 simpletest.pages.inc \theme_simpletest_test_table()

Theme the test list generated by simpletest_test_form() into a table.

Parameters

$variables: An associative array containing:

  • table: Form array that represent a table.

Return value

HTML output.

1 theme call to theme_simpletest_test_table()
simpletest_test_form in ./simpletest.pages.inc
List tests arranged in groups that can be selected and run.

File

./simpletest.pages.inc, line 69
Page callbacks for simpletest module.

Code

function theme_simpletest_test_table($variables) {
  $table = $variables['table'];
  drupal_add_css(drupal_get_path('module', 'simpletest') . '/simpletest.css');
  drupal_add_js(drupal_get_path('module', 'simpletest') . '/simpletest.js');

  // Create header for test selection table.
  $header = array(
    theme('table_select_header_cell'),
    array(
      'data' => t('Test'),
      'class' => array(
        'simpletest_test',
      ),
    ),
    array(
      'data' => t('Description'),
      'class' => array(
        'simpletest_description',
      ),
    ),
  );

  // Define the images used to expand/collapse the test groups.
  $js = array(
    'images' => array(
      theme('image', array(
        'path' => 'misc/menu-collapsed.png',
        'alt' => 'Expand',
        'title' => 'Expand',
      )),
      theme('image', array(
        'path' => 'misc/menu-expanded.png',
        'alt' => 'Collapsed',
        'title' => 'Collapsed',
      )),
    ),
  );

  // Cycle through each test group and create a row.
  $rows = array();
  foreach (element_children($table) as $key) {
    $element =& $table[$key];
    $row = array();

    // Make the class name safe for output on the page by replacing all
    // non-word/decimal characters with a dash (-).
    $test_class = strtolower(trim(preg_replace("/[^\\w\\d]/", "-", $key)));

    // Select the right "expand"/"collapse" image, depending on whether the
    // category is expanded (at least one test selected) or not.
    $collapsed = !empty($element['#collapsed']);
    $image_index = $collapsed ? 0 : 1;

    // Place-holder for checkboxes to select group of tests.
    $row[] = array(
      'id' => $test_class,
      'class' => array(
        'simpletest-select-all',
      ),
    );

    // Expand/collapse image and group title.
    $row[] = array(
      'data' => '<div class="simpletest-image" id="simpletest-test-group-' . $test_class . '"></div>&nbsp;' . '<label for="' . $test_class . '-select-all" class="simpletest-group-label">' . $key . '</label>',
      'style' => 'font-weight: bold;',
    );
    $row[] = '&nbsp;';
    $rows[] = array(
      'data' => $row,
      'class' => array(
        'simpletest-group',
      ),
    );

    // Add individual tests to group.
    $current_js = array(
      'testClass' => $test_class . '-test',
      'testNames' => array(),
      'imageDirection' => $image_index,
      'clickActive' => FALSE,
    );

    // Sorting $element by children's #title attribute instead of by class name.
    uasort($element, '_simpletest_sort_by_title');

    // Cycle through each test within the current group.
    foreach (element_children($element) as $test_name) {
      $test = $element[$test_name];
      $row = array();
      $current_js['testNames'][] = $test['#id'];

      // Store test title and description so that checkbox won't render them.
      $title = $test['#title'];
      $description = $test['#description'];
      unset($test['#title']);
      unset($test['#description']);

      // Test name is used to determine what tests to run.
      $test['#name'] = $test_name;
      $row[] = drupal_render($test);
      $row[] = theme('indentation', array(
        'size' => 1,
      )) . '<label for="' . $test['#id'] . '">' . $title . '</label>';
      $row[] = '<div class="description">' . $description . '</div>';
      $rows[] = array(
        'data' => $row,
        'class' => array(
          $test_class . '-test',
          $collapsed ? 'js-hide' : '',
        ),
      );
    }
    $js['simpletest-test-group-' . $test_class] = $current_js;
    unset($table[$key]);
  }

  // Add js array of settings.
  drupal_add_js(array(
    'simpleTest' => $js,
  ), 'setting');
  if (empty($rows)) {
    return '<strong>' . t('No tests to display.') . '</strong>';
  }
  else {
    return theme('table', array(
      'header' => $header,
      'rows' => $rows,
      'attributes' => array(
        'id' => 'simpletest-form-table',
      ),
    ));
  }
}