diff --git a/core/modules/simpletest/lib/Drupal/simpletest/Form/SimpletestTestForm.php b/core/modules/simpletest/lib/Drupal/simpletest/Form/SimpletestTestForm.php
index 193eefc..3b05894 100644
--- a/core/modules/simpletest/lib/Drupal/simpletest/Form/SimpletestTestForm.php
+++ b/core/modules/simpletest/lib/Drupal/simpletest/Form/SimpletestTestForm.php
@@ -52,9 +52,40 @@ public function buildForm(array $form, array &$form_state) {
     );
 
     $form['tests']['table'] = array(
-      '#theme' => 'simpletest_test_table',
+      '#type' => 'table',
+      '#attached' => array('library' => array(array('simpletest', 'drupal.simpletest'))),
+      '#header' => array(
+        array('class' => array('select-all')),
+        array('data' => t('Test'), 'class' => array('simpletest_test')),
+        array('data' => t('Description'), 'class' => array('simpletest_description')),
+      ),
+      '#empty' => '<strong>' . t('No tests to display.') . '</strong>',
+      '#attributes' => array('id' => 'simpletest-form-table'),
+    );
+
+    // Define the images used to expand/collapse the test groups.
+    $js = array(
+      'images' => array(
+        theme('image', array(
+          'uri' => 'core/misc/menu-collapsed.png',
+          'width' => 7,
+          'height' => 7,
+          'alt' => t('Expand'),
+          'title' => t('Expand'),
+        )) . ' <a href="#" class="simpletest-collapse">(' . t('Expand') . ')</a>',
+        theme('image', array(
+          'uri' => 'core/misc/menu-expanded.png',
+          'width' => 7,
+          'height' => 7,
+          'alt' => t('Collapse'),
+          'title' => t('Collapse'),
+        )) . ' <a href="#" class="simpletest-collapse">(' . t('Collapse') . ')</a>',
+      ),
     );
 
+    // Cycle through each test group and create a row.
+    $rows = array();
+
     // Generate the list of tests arranged by group.
     $groups = simpletest_test_get_all();
     $groups['PHPUnit'] = simpletest_phpunit_get_available_tests();
@@ -63,17 +94,94 @@ public function buildForm(array $form, array &$form_state) {
     foreach ($groups as $group => $tests) {
       $form['tests']['table'][$group] = array(
         '#collapsed' => TRUE,
+        '#attributes' => array('class' => array('simpletest-group')),
+      );
+
+      // 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]/", "-", $group)));
+
+      // Place-holder for checkboxes to select group of tests.
+      $form['tests']['table'][$group]['checkbox'] = array(
+        '#wrapper_attributes' => array(
+          'id' => $test_class,
+          'class' => array('simpletest-select-all'),
+        ),
+      );
+
+      // Expand/collapse image and group title.
+      $form['tests']['table'][$group]['title'] = array(
+        '#markup' => '<div class="simpletest-image" id="simpletest-test-group-' . $test_class . '"></div>' .
+          '<label for="' . $test_class . '-select-all" class="simpletest-group-label">' . $group . '</label>',
+        '#wrapper_attributes' => array(
+          'class' => array('simpletest-group-label'),
+        ),
+      );
+
+      $form['tests']['table'][$group]['description'] = array(
+        '#markup' => '&nbsp;',
+        '#wrapper_attributes' => array(
+          'class' => array('simpletest-group-description'),
+        ),
+      );
+
+      // Add individual tests to group.
+      $current_js = array(
+        'testClass' => $test_class . '-test',
+        'testNames' => array(),
+        // imageDirection maps to the 'images' index in the $js array.
+        'imageDirection' => 0,
+        'clickActive' => FALSE,
       );
 
+      // Sorting $element by children's name attribute instead of by class name.
+      uasort($tests, array($this, 'elementSortByName'));
+
+      // Cycle through each test within the current group.
       foreach ($tests as $class => $info) {
-        $form['tests']['table'][$group][$class] = array(
-          '#type' => 'checkbox',
-          '#title' => $info['name'],
-          '#description' => $info['description'],
+        $test_class_id = 'edit-' . drupal_html_id($class);
+        $current_js['testNames'][] = $test_class_id;
+
+        $form['tests']['table'][$test_class_id] = array(
+          '#attributes' => array('class' => array($test_class . '-test', 'js-hide')),
+        );
+
+        $form['tests']['table'][$test_class_id]['checkbox'] = array(
+          '#wrapper_attributes' => array(
+            'class' => array('simpletest-test-select'),
+          ),
+          'checkbox' => array(
+            '#type' => 'checkbox',
+            '#title_display' => 'invisible',
+            '#title' => $info['name'],
+            '#attributes' => array(
+              'aria-describedby' => $test_class_id . '--description',
+            ),
+            '#parents' => array($class),
+          ),
+        );
+
+        $form['tests']['table'][$test_class_id]['title'] = array(
+          '#markup' => '<label for="' . $test_class_id . '">' . $info['name'] . '</label>',
+          '#wrapper_attributes' => array(
+            'class' => array('simpletest-test-label'),
+          ),
+        );
+
+        $form['tests']['table'][$test_class_id]['description'] = array(
+          '#markup' => '<div class="description">' . $info['description'] . '</div>',
+          '#wrapper_attributes' => array(
+            'class' => array('simpletest-test-description'),
+          ),
         );
       }
+
+      $js['simpletest-test-group-' . $test_class] = $current_js;
     }
 
+    // Add JavaScript array of settings.
+    drupal_add_js(array('simpleTest' => $js), 'setting');
+
     // Action buttons.
     $form['tests']['op'] = array(
       '#type' => 'submit',
@@ -94,6 +202,21 @@ public function buildForm(array $form, array &$form_state) {
   }
 
   /**
+   * Sorts a structured array by 'name' property.
+   *
+   * @param $a
+   *   First item for comparison. The compared items should be associative arrays
+   *   that optionally include a 'name' key.
+   * @param $b
+   *   Second item for comparison.
+   */
+  private function elementSortByName($a, $b) {
+    $a_name = (is_array($a) && isset($a['name'])) ? $a['name'] : '';
+    $b_name = (is_array($b) && isset($b['name'])) ? $b['name'] : '';
+    return strnatcasecmp($a_name, $b_name);
+  }
+
+  /**
    * {@inheritdoc}
    */
   public function validateForm(array &$form, array &$form_state) {
diff --git a/core/modules/simpletest/simpletest.module b/core/modules/simpletest/simpletest.module
index 4004dd3..21fce16 100644
--- a/core/modules/simpletest/simpletest.module
+++ b/core/modules/simpletest/simpletest.module
@@ -74,10 +74,6 @@ function simpletest_permission() {
  */
 function simpletest_theme() {
   return array(
-    'simpletest_test_table' => array(
-      'render element' => 'table',
-      'file' => 'simpletest.theme.inc',
-    ),
     'simpletest_result_summary' => array(
       'render element' => 'form',
       'file' => 'simpletest.theme.inc',
diff --git a/core/modules/simpletest/simpletest.theme.inc b/core/modules/simpletest/simpletest.theme.inc
index 31cbb02..9890c62 100644
--- a/core/modules/simpletest/simpletest.theme.inc
+++ b/core/modules/simpletest/simpletest.theme.inc
@@ -6,149 +6,6 @@
  */
 
 /**
- * Returns an HTML table for a test list generated by simpletest_test_form().
- *
- * @param $variables
- *   An associative array containing:
- *   - table: A render element representing the table.
- *
- * @ingroup themeable
- */
-function theme_simpletest_test_table($variables) {
-  $table = $variables['table'];
-
-  drupal_add_library('simpletest', 'drupal.simpletest');
-
-  // Create header for test selection table.
-  $header = array(
-    array('class' => array('select-all')),
-    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.
-  $image_collapsed = array(
-    '#theme' => 'image',
-    '#uri' => 'core/misc/menu-collapsed.png',
-    '#width' => '7',
-    '#height' => '7',
-    '#alt' => t('Expand'),
-    '#title' => t('Expand'),
-    '#suffix' => '<a href="#" class="simpletest-collapse">(' . t('Expand') . ')</a>',
-  );
-  $image_extended = array(
-    '#theme' => 'image',
-    '#uri' => 'core/misc/menu-expanded.png',
-    '#width' => '7',
-    '#height' => '7',
-    '#alt' => t('Collapse'),
-    '#title' => t('Collapse'),
-    '#suffix' => ' <a href="#" class="simpletest-collapse">(' . t('Collapse') . ')</a>',
-   );
-  $js = array(
-    'images' => array(
-      drupal_render($image_collapsed),
-      drupal_render($image_extended),
-    ),
-  );
-
-  // 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>' .
-        '<label for="' . $test_class . '-select-all" class="simpletest-group-label">' . $key . '</label>',
-      'class' => array('simpletest-group-label'),
-    );
-
-    $row[] = array(
-      'data' => '&nbsp;',
-      'class' => array('simpletest-group-description'),
-    );
-
-    $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, 'element_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'];
-
-      $test['#title_display'] = 'invisible';
-      unset($test['#description']);
-
-      // Test name is used to determine what tests to run.
-      $test['#name'] = $test_name;
-
-      $row[] = array(
-        'data' => drupal_render($test),
-        'class' => array('simpletest-test-select'),
-      );
-      $row[] = array(
-        'data' => '<label for="' . $test['#id'] . '">' . $title . '</label>',
-        'class' => array('simpletest-test-label', 'table-filter-text-source'),
-      );
-      $row[] = array(
-        'data' => '<div class="description">' . format_string('@description (@class)', array('@description' => $description, '@class' => $test_name)) . '</div>',
-        'class' => array('simpletest-test-description', 'table-filter-text-source'),
-      );
-
-      $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 {
-    $simpletest_form_table = array(
-      '#theme' => 'table',
-      '#header' => $header,
-      '#rows' => $rows,
-      '#attributes' => array('id' => 'simpletest-form-table'),
-    );
-    return drupal_render($simpletest_form_table);
-  }
-}
-
-/**
  * Returns HTML for the summary status of a simpletest result.
  *
  * @param $variables
