diff --git a/modules/simpletest/simpletest.info b/modules/simpletest/simpletest.info
index 1aec619..23e4fb1 100644
--- a/modules/simpletest/simpletest.info
+++ b/modules/simpletest/simpletest.info
@@ -39,7 +39,6 @@ files[] = tests/tablesort.test
 files[] = tests/theme.test
 files[] = tests/unicode.test
 files[] = tests/update.test
-files[] = tests/xmlrpc.test
 files[] = tests/upgrade/upgrade.test
 files[] = tests/upgrade/upgrade.comment.test
 files[] = tests/upgrade/upgrade.filter.test
diff --git a/modules/simpletest/tests/xmlrpc.test b/modules/simpletest/tests/xmlrpc.test
deleted file mode 100644
index 1a9ef23..0000000
--- a/modules/simpletest/tests/xmlrpc.test
+++ /dev/null
@@ -1,249 +0,0 @@
-<?php
-
-/**
- * Perform basic XML-RPC tests that do not require addition callbacks.
- */
-class XMLRPCBasicTestCase extends DrupalWebTestCase {
-
-  public static function getInfo() {
-    return array(
-      'name'  => 'XML-RPC basic',
-      'description'  => 'Perform basic XML-RPC tests that do not require additional callbacks.',
-      'group' => 'XML-RPC',
-    );
-  }
-
-  /**
-   * Ensure that a basic XML-RPC call with no parameters works.
-   */
-  protected function testListMethods() {
-    // Minimum list of methods that should be included.
-    $minimum = array(
-      'system.multicall',
-      'system.methodSignature',
-      'system.getCapabilities',
-      'system.listMethods',
-      'system.methodHelp',
-    );
-
-    // Invoke XML-RPC call to get list of methods.
-    $url = url(NULL, array('absolute' => TRUE)) . 'xmlrpc.php';
-    $methods = xmlrpc($url, array('system.listMethods' => array()));
-
-    // Ensure that the minimum methods were found.
-    $count = 0;
-    foreach ($methods as $method) {
-      if (in_array($method, $minimum)) {
-        $count++;
-      }
-    }
-
-    $this->assertEqual($count, count($minimum), 'system.listMethods returned at least the minimum listing');
-  }
-
-  /**
-   * Ensure that system.methodSignature returns an array of signatures.
-   */
-  protected function testMethodSignature() {
-    $url = url(NULL, array('absolute' => TRUE)) . 'xmlrpc.php';
-    $signature = xmlrpc($url, array('system.methodSignature' => array('system.listMethods')));
-    $this->assert(is_array($signature) && !empty($signature) && is_array($signature[0]),
-      'system.methodSignature returns an array of signature arrays.');
-  }
-
-  /**
-   * Ensure that XML-RPC correctly handles invalid messages when parsing.
-   */
-  protected function testInvalidMessageParsing() {
-    $invalid_messages = array(
-      array(
-        'message' => xmlrpc_message(''),
-        'assertion' => 'Empty message correctly rejected during parsing.',
-      ),
-      array(
-        'message' => xmlrpc_message('<?xml version="1.0" encoding="ISO-8859-1"?>'),
-        'assertion' => 'Empty message with XML declaration correctly rejected during parsing.',
-      ),
-      array(
-        'message' => xmlrpc_message('<?xml version="1.0"?><params><param><value><string>value</string></value></param></params>'),
-        'assertion' => 'Non-empty message without a valid message type is rejected during parsing.',
-      ),
-      array(
-        'message' => xmlrpc_message('<methodResponse><params><param><value><string>value</string></value></param></methodResponse>'),
-        'assertion' => 'Non-empty malformed message is rejected during parsing.',
-      ),
-    );
-
-    foreach ($invalid_messages as $assertion) {
-      $this->assertFalse(xmlrpc_message_parse($assertion['message']), $assertion['assertion']);
-    }
-  }
-}
-
-class XMLRPCValidator1IncTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'XML-RPC validator',
-      'description' => 'See <a href="http://www.xmlrpc.com/validator1Docs">the xmlrpc validator1 specification</a>.',
-      'group' => 'XML-RPC',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('xmlrpc_test');
-  }
-
-  /**
-   * Run validator1 tests.
-   */
-  function testValidator1() {
-    $xml_url = url(NULL, array('absolute' => TRUE)) . 'xmlrpc.php';
-    srand();
-    mt_srand();
-
-    $array_1 = array(array('curly' => mt_rand(-100, 100)),
-                  array('curly' => mt_rand(-100, 100)),
-                  array('larry' => mt_rand(-100, 100)),
-                  array('larry' => mt_rand(-100, 100)),
-                  array('moe' => mt_rand(-100, 100)),
-                  array('moe' => mt_rand(-100, 100)),
-                  array('larry' => mt_rand(-100, 100)));
-    shuffle($array_1);
-    $l_res_1 = xmlrpc_test_arrayOfStructsTest($array_1);
-    $r_res_1 = xmlrpc($xml_url, array('validator1.arrayOfStructsTest' => array($array_1)));
-    $this->assertIdentical($l_res_1, $r_res_1);
-
-    $string_2 = 't\'&>>zf"md>yr>xlcev<h<"k&j<og"w&&>">>uai"np&s>>q\'&b<>"&&&';
-    $l_res_2 = xmlrpc_test_countTheEntities($string_2);
-    $r_res_2 = xmlrpc($xml_url, array('validator1.countTheEntities' => array($string_2)));
-    $this->assertIdentical($l_res_2, $r_res_2);
-
-    $struct_3 = array('moe' => mt_rand(-100, 100), 'larry' => mt_rand(-100, 100), 'curly' => mt_rand(-100, 100), 'homer' => mt_rand(-100, 100));
-    $l_res_3 = xmlrpc_test_easyStructTest($struct_3);
-    $r_res_3 = xmlrpc($xml_url, array('validator1.easyStructTest' => array($struct_3)));
-    $this->assertIdentical($l_res_3, $r_res_3);
-
-    $struct_4 = array('sub1' => array('bar' => 13),
-                    'sub2' => 14,
-                    'sub3' => array('foo' => 1, 'baz' => 2),
-                    'sub4' => array('ss' => array('sss' => array('ssss' => 'sssss'))));
-    $l_res_4 = xmlrpc_test_echoStructTest($struct_4);
-    $r_res_4 = xmlrpc($xml_url, array('validator1.echoStructTest' => array($struct_4)));
-    $this->assertIdentical($l_res_4, $r_res_4);
-
-    $int_5     = mt_rand(-100, 100);
-    $bool_5    = (($int_5 % 2) == 0);
-    $string_5  = $this->randomName();
-    $double_5  = (double)(mt_rand(-1000, 1000) / 100);
-    $time_5    = REQUEST_TIME;
-    $base64_5  = $this->randomName(100);
-    $l_res_5 = xmlrpc_test_manyTypesTest($int_5, $bool_5, $string_5, $double_5, xmlrpc_date($time_5), $base64_5);
-    // See http://drupal.org/node/37766 why this currently fails
-    $l_res_5[5] = $l_res_5[5]->data;
-    $r_res_5 = xmlrpc($xml_url, array('validator1.manyTypesTest' => array($int_5, $bool_5, $string_5, $double_5, xmlrpc_date($time_5), xmlrpc_base64($base64_5))));
-    // @todo Contains objects, objects are not equal.
-    $this->assertEqual($l_res_5, $r_res_5);
-
-    $size = mt_rand(100, 200);
-    $array_6 = array();
-    for ($i = 0; $i < $size; $i++) {
-      $array_6[] = $this->randomName(mt_rand(8, 12));
-    }
-
-    $l_res_6 = xmlrpc_test_moderateSizeArrayCheck($array_6);
-    $r_res_6 = xmlrpc($xml_url, array('validator1.moderateSizeArrayCheck' => array($array_6)));
-    $this->assertIdentical($l_res_6, $r_res_6);
-
-    $struct_7 = array();
-    for ($y = 2000; $y < 2002; $y++) {
-      for ($m = 3; $m < 5; $m++) {
-        for ($d = 1; $d < 6; $d++) {
-          $ys = (string) $y;
-          $ms = sprintf('%02d', $m);
-          $ds = sprintf('%02d', $d);
-          $struct_7[$ys][$ms][$ds]['moe']   = mt_rand(-100, 100);
-          $struct_7[$ys][$ms][$ds]['larry'] = mt_rand(-100, 100);
-          $struct_7[$ys][$ms][$ds]['curly'] = mt_rand(-100, 100);
-        }
-      }
-    }
-    $l_res_7 = xmlrpc_test_nestedStructTest($struct_7);
-    $r_res_7 = xmlrpc($xml_url, array('validator1.nestedStructTest' => array($struct_7)));
-    $this->assertIdentical($l_res_7, $r_res_7);
-
-
-    $int_8 = mt_rand(-100, 100);
-    $l_res_8 = xmlrpc_test_simpleStructReturnTest($int_8);
-    $r_res_8 = xmlrpc($xml_url, array('validator1.simpleStructReturnTest' => array($int_8)));
-    $this->assertIdentical($l_res_8, $r_res_8);
-
-    /* Now test multicall */
-    $x = array();
-    $x['validator1.arrayOfStructsTest'] = array($array_1);
-    $x['validator1.countTheEntities'] = array($string_2);
-    $x['validator1.easyStructTest'] = array($struct_3);
-    $x['validator1.echoStructTest'] = array($struct_4);
-    $x['validator1.manyTypesTest'] = array($int_5, $bool_5, $string_5, $double_5, xmlrpc_date($time_5), xmlrpc_base64($base64_5));
-    $x['validator1.moderateSizeArrayCheck'] = array($array_6);
-    $x['validator1.nestedStructTest'] = array($struct_7);
-    $x['validator1.simpleStructReturnTest'] = array($int_8);
-
-    $a_l_res = array($l_res_1, $l_res_2, $l_res_3, $l_res_4, $l_res_5, $l_res_6, $l_res_7, $l_res_8);
-    $a_r_res = xmlrpc($xml_url, $x);
-    $this->assertEqual($a_l_res, $a_r_res);
-  }
-}
-
-class XMLRPCMessagesTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name'  => 'XML-RPC message and alteration',
-      'description' => 'Test large messages and method alterations.',
-      'group' => 'XML-RPC',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('xmlrpc_test');
-  }
-
-  /**
-   * Make sure that XML-RPC can transfer large messages.
-   */
-  function testSizedMessages() {
-    // These tests can produce up to 128 x 160 words in the XML-RPC message
-    // (see xmlrpc_test_message_sized_in_kb()) with 4 tags used to represent
-    // each. Set a large enough tag limit to allow this to be tested.
-    variable_set('xmlrpc_message_maximum_tag_count', 100000);
-
-    $xml_url = url(NULL, array('absolute' => TRUE)) . 'xmlrpc.php';
-    $sizes = array(8, 80, 160);
-    foreach ($sizes as $size) {
-      $xml_message_l = xmlrpc_test_message_sized_in_kb($size);
-      $xml_message_r = xmlrpc($xml_url, array('messages.messageSizedInKB' => array($size)));
-
-      $this->assertEqual($xml_message_l, $xml_message_r, format_string('XML-RPC messages.messageSizedInKB of %s Kb size received', array('%s' => $size)));
-    }
-  }
-
-  /**
-   * Ensure that hook_xmlrpc_alter() can hide even builtin methods.
-   */
-  protected function testAlterListMethods() {
-
-    // Ensure xmlrpc_test_xmlrpc_alter() is disabled and retrieve regular list of methods.
-    variable_set('xmlrpc_test_xmlrpc_alter', FALSE);
-    $url = url(NULL, array('absolute' => TRUE)) . 'xmlrpc.php';
-    $methods1 = xmlrpc($url, array('system.listMethods' => array()));
-
-    // Enable the alter hook and retrieve the list of methods again.
-    variable_set('xmlrpc_test_xmlrpc_alter', TRUE);
-    $methods2 = xmlrpc($url, array('system.listMethods' => array()));
-
-    $diff = array_diff($methods1, $methods2);
-    $this->assertTrue(is_array($diff) && !empty($diff), 'Method list is altered by hook_xmlrpc_alter');
-    $removed = reset($diff);
-    $this->assertEqual($removed, 'system.methodSignature', 'Hiding builting system.methodSignature with hook_xmlrpc_alter works');
-  }
-
-}
diff --git a/modules/simpletest/tests/xmlrpc_test/src/Tests/XmlRpcBasicTest.php b/modules/simpletest/tests/xmlrpc_test/src/Tests/XmlRpcBasicTest.php
new file mode 100644
index 0000000..33c5bd3
--- /dev/null
+++ b/modules/simpletest/tests/xmlrpc_test/src/Tests/XmlRpcBasicTest.php
@@ -0,0 +1,88 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\xmlrpc_test\Tests\XmlRpcBasicTest.
+ */
+
+namespace Drupal\xmlrpc_test\Tests;
+
+/**
+ * Perform basic XML-RPC tests that do not require addition callbacks.
+ */
+class XmlRpcBasicTest extends \DrupalWebTestCase {
+
+  public static function getInfo() {
+    return array(
+      'name'  => 'XML-RPC basic',
+      'description'  => 'Perform basic XML-RPC tests that do not require additional callbacks.',
+      'group' => 'XML-RPC8',
+    );
+  }
+
+  /**
+   * Ensure that a basic XML-RPC call with no parameters works.
+   */
+  protected function testListMethods() {
+    // Minimum list of methods that should be included.
+    $minimum = array(
+      'system.multicall',
+      'system.methodSignature',
+      'system.getCapabilities',
+      'system.listMethods',
+      'system.methodHelp',
+    );
+
+    // Invoke XML-RPC call to get list of methods.
+    $url = url(NULL, array('absolute' => TRUE)) . 'xmlrpc.php';
+    $methods = xmlrpc($url, array('system.listMethods' => array()));
+
+    // Ensure that the minimum methods were found.
+    $count = 0;
+    foreach ($methods as $method) {
+      if (in_array($method, $minimum)) {
+        $count++;
+      }
+    }
+
+    $this->assertEqual($count, count($minimum), 'system.listMethods returned at least the minimum listing');
+  }
+
+  /**
+   * Ensure that system.methodSignature returns an array of signatures.
+   */
+  protected function testMethodSignature() {
+    $url = url(NULL, array('absolute' => TRUE)) . 'xmlrpc.php';
+    $signature = xmlrpc($url, array('system.methodSignature' => array('system.listMethods')));
+    $this->assert(is_array($signature) && !empty($signature) && is_array($signature[0]),
+      'system.methodSignature returns an array of signature arrays.');
+  }
+
+  /**
+   * Ensure that XML-RPC correctly handles invalid messages when parsing.
+   */
+  protected function testInvalidMessageParsing() {
+    $invalid_messages = array(
+      array(
+        'message' => xmlrpc_message(''),
+        'assertion' => 'Empty message correctly rejected during parsing.',
+      ),
+      array(
+        'message' => xmlrpc_message('<?xml version="1.0" encoding="ISO-8859-1"?>'),
+        'assertion' => 'Empty message with XML declaration correctly rejected during parsing.',
+      ),
+      array(
+        'message' => xmlrpc_message('<?xml version="1.0"?><params><param><value><string>value</string></value></param></params>'),
+        'assertion' => 'Non-empty message without a valid message type is rejected during parsing.',
+      ),
+      array(
+        'message' => xmlrpc_message('<methodResponse><params><param><value><string>value</string></value></param></methodResponse>'),
+        'assertion' => 'Non-empty malformed message is rejected during parsing.',
+      ),
+    );
+
+    foreach ($invalid_messages as $assertion) {
+      $this->assertFalse(xmlrpc_message_parse($assertion['message']), $assertion['assertion']);
+    }
+  }
+}
diff --git a/modules/simpletest/tests/xmlrpc_test/src/Tests/XmlRpcMessagesTest.php b/modules/simpletest/tests/xmlrpc_test/src/Tests/XmlRpcMessagesTest.php
new file mode 100644
index 0000000..608e4b5
--- /dev/null
+++ b/modules/simpletest/tests/xmlrpc_test/src/Tests/XmlRpcMessagesTest.php
@@ -0,0 +1,62 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\xmlrpc_test\Tests\XmlRpcValidatorTest.
+ */
+
+namespace Drupal\xmlrpc_test\Tests;
+
+class XmlRpcMessagesTest extends \DrupalWebTestCase {
+  public static function getInfo() {
+    return array(
+      'name'  => 'XML-RPC message and alteration',
+      'description' => 'Test large messages and method alterations.',
+      'group' => 'XML-RPC8',
+    );
+  }
+
+  function setUp() {
+    parent::setUp('xmlrpc_test');
+  }
+
+  /**
+   * Make sure that XML-RPC can transfer large messages.
+   */
+  function testSizedMessages() {
+    // These tests can produce up to 128 x 160 words in the XML-RPC message
+    // (see xmlrpc_test_message_sized_in_kb()) with 4 tags used to represent
+    // each. Set a large enough tag limit to allow this to be tested.
+    variable_set('xmlrpc_message_maximum_tag_count', 100000);
+
+    $xml_url = url(NULL, array('absolute' => TRUE)) . 'xmlrpc.php';
+    $sizes = array(8, 80, 160);
+    foreach ($sizes as $size) {
+      $xml_message_l = xmlrpc_test_message_sized_in_kb($size);
+      $xml_message_r = xmlrpc($xml_url, array('messages.messageSizedInKB' => array($size)));
+
+      $this->assertEqual($xml_message_l, $xml_message_r, format_string('XML-RPC messages.messageSizedInKB of %s Kb size received', array('%s' => $size)));
+    }
+  }
+
+  /**
+   * Ensure that hook_xmlrpc_alter() can hide even builtin methods.
+   */
+  protected function testAlterListMethods() {
+
+    // Ensure xmlrpc_test_xmlrpc_alter() is disabled and retrieve regular list of methods.
+    variable_set('xmlrpc_test_xmlrpc_alter', FALSE);
+    $url = url(NULL, array('absolute' => TRUE)) . 'xmlrpc.php';
+    $methods1 = xmlrpc($url, array('system.listMethods' => array()));
+
+    // Enable the alter hook and retrieve the list of methods again.
+    variable_set('xmlrpc_test_xmlrpc_alter', TRUE);
+    $methods2 = xmlrpc($url, array('system.listMethods' => array()));
+
+    $diff = array_diff($methods1, $methods2);
+    $this->assertTrue(is_array($diff) && !empty($diff), 'Method list is altered by hook_xmlrpc_alter');
+    $removed = reset($diff);
+    $this->assertEqual($removed, 'system.methodSignature', 'Hiding builting system.methodSignature with hook_xmlrpc_alter works');
+  }
+
+}
diff --git a/modules/simpletest/tests/xmlrpc_test/src/Tests/XmlRpcValidatorTest.php b/modules/simpletest/tests/xmlrpc_test/src/Tests/XmlRpcValidatorTest.php
new file mode 100644
index 0000000..dfc3bb2
--- /dev/null
+++ b/modules/simpletest/tests/xmlrpc_test/src/Tests/XmlRpcValidatorTest.php
@@ -0,0 +1,122 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\xmlrpc_test\Tests\XmlRpcValidatorTest.
+ */
+
+namespace Drupal\xmlrpc_test\Tests;
+
+class XmlRpcValidatorTest extends \DrupalWebTestCase {
+  public static function getInfo() {
+    return array(
+      'name' => 'XML-RPC validator',
+      'description' => 'See <a href="http://www.xmlrpc.com/validator1Docs">the xmlrpc validator1 specification</a>.',
+      'group' => 'XML-RPC8',
+    );
+  }
+
+  function setUp() {
+    parent::setUp('xmlrpc_test');
+  }
+
+  /**
+   * Run validator1 tests.
+   */
+  function testValidator1() {
+    $xml_url = url(NULL, array('absolute' => TRUE)) . 'xmlrpc.php';
+    srand();
+    mt_srand();
+
+    $array_1 = array(array('curly' => mt_rand(-100, 100)),
+                  array('curly' => mt_rand(-100, 100)),
+                  array('larry' => mt_rand(-100, 100)),
+                  array('larry' => mt_rand(-100, 100)),
+                  array('moe' => mt_rand(-100, 100)),
+                  array('moe' => mt_rand(-100, 100)),
+                  array('larry' => mt_rand(-100, 100)));
+    shuffle($array_1);
+    $l_res_1 = xmlrpc_test_arrayOfStructsTest($array_1);
+    $r_res_1 = xmlrpc($xml_url, array('validator1.arrayOfStructsTest' => array($array_1)));
+    $this->assertIdentical($l_res_1, $r_res_1);
+
+    $string_2 = 't\'&>>zf"md>yr>xlcev<h<"k&j<og"w&&>">>uai"np&s>>q\'&b<>"&&&';
+    $l_res_2 = xmlrpc_test_countTheEntities($string_2);
+    $r_res_2 = xmlrpc($xml_url, array('validator1.countTheEntities' => array($string_2)));
+    $this->assertIdentical($l_res_2, $r_res_2);
+
+    $struct_3 = array('moe' => mt_rand(-100, 100), 'larry' => mt_rand(-100, 100), 'curly' => mt_rand(-100, 100), 'homer' => mt_rand(-100, 100));
+    $l_res_3 = xmlrpc_test_easyStructTest($struct_3);
+    $r_res_3 = xmlrpc($xml_url, array('validator1.easyStructTest' => array($struct_3)));
+    $this->assertIdentical($l_res_3, $r_res_3);
+
+    $struct_4 = array('sub1' => array('bar' => 13),
+                    'sub2' => 14,
+                    'sub3' => array('foo' => 1, 'baz' => 2),
+                    'sub4' => array('ss' => array('sss' => array('ssss' => 'sssss'))));
+    $l_res_4 = xmlrpc_test_echoStructTest($struct_4);
+    $r_res_4 = xmlrpc($xml_url, array('validator1.echoStructTest' => array($struct_4)));
+    $this->assertIdentical($l_res_4, $r_res_4);
+
+    $int_5     = mt_rand(-100, 100);
+    $bool_5    = (($int_5 % 2) == 0);
+    $string_5  = $this->randomName();
+    $double_5  = (double)(mt_rand(-1000, 1000) / 100);
+    $time_5    = REQUEST_TIME;
+    $base64_5  = $this->randomName(100);
+    $l_res_5 = xmlrpc_test_manyTypesTest($int_5, $bool_5, $string_5, $double_5, xmlrpc_date($time_5), $base64_5);
+    // See http://drupal.org/node/37766 why this currently fails
+    $l_res_5[5] = $l_res_5[5]->data;
+    $r_res_5 = xmlrpc($xml_url, array('validator1.manyTypesTest' => array($int_5, $bool_5, $string_5, $double_5, xmlrpc_date($time_5), xmlrpc_base64($base64_5))));
+    // @todo Contains objects, objects are not equal.
+    $this->assertEqual($l_res_5, $r_res_5);
+
+    $size = mt_rand(100, 200);
+    $array_6 = array();
+    for ($i = 0; $i < $size; $i++) {
+      $array_6[] = $this->randomName(mt_rand(8, 12));
+    }
+
+    $l_res_6 = xmlrpc_test_moderateSizeArrayCheck($array_6);
+    $r_res_6 = xmlrpc($xml_url, array('validator1.moderateSizeArrayCheck' => array($array_6)));
+    $this->assertIdentical($l_res_6, $r_res_6);
+
+    $struct_7 = array();
+    for ($y = 2000; $y < 2002; $y++) {
+      for ($m = 3; $m < 5; $m++) {
+        for ($d = 1; $d < 6; $d++) {
+          $ys = (string) $y;
+          $ms = sprintf('%02d', $m);
+          $ds = sprintf('%02d', $d);
+          $struct_7[$ys][$ms][$ds]['moe']   = mt_rand(-100, 100);
+          $struct_7[$ys][$ms][$ds]['larry'] = mt_rand(-100, 100);
+          $struct_7[$ys][$ms][$ds]['curly'] = mt_rand(-100, 100);
+        }
+      }
+    }
+    $l_res_7 = xmlrpc_test_nestedStructTest($struct_7);
+    $r_res_7 = xmlrpc($xml_url, array('validator1.nestedStructTest' => array($struct_7)));
+    $this->assertIdentical($l_res_7, $r_res_7);
+
+
+    $int_8 = mt_rand(-100, 100);
+    $l_res_8 = xmlrpc_test_simpleStructReturnTest($int_8);
+    $r_res_8 = xmlrpc($xml_url, array('validator1.simpleStructReturnTest' => array($int_8)));
+    $this->assertIdentical($l_res_8, $r_res_8);
+
+    /* Now test multicall */
+    $x = array();
+    $x['validator1.arrayOfStructsTest'] = array($array_1);
+    $x['validator1.countTheEntities'] = array($string_2);
+    $x['validator1.easyStructTest'] = array($struct_3);
+    $x['validator1.echoStructTest'] = array($struct_4);
+    $x['validator1.manyTypesTest'] = array($int_5, $bool_5, $string_5, $double_5, xmlrpc_date($time_5), xmlrpc_base64($base64_5));
+    $x['validator1.moderateSizeArrayCheck'] = array($array_6);
+    $x['validator1.nestedStructTest'] = array($struct_7);
+    $x['validator1.simpleStructReturnTest'] = array($int_8);
+
+    $a_l_res = array($l_res_1, $l_res_2, $l_res_3, $l_res_4, $l_res_5, $l_res_6, $l_res_7, $l_res_8);
+    $a_r_res = xmlrpc($xml_url, $x);
+    $this->assertEqual($a_l_res, $a_r_res);
+  }
+}
diff --git a/modules/simpletest/tests/xmlrpc_test.info b/modules/simpletest/tests/xmlrpc_test/xmlrpc_test.info
similarity index 100%
rename from modules/simpletest/tests/xmlrpc_test.info
rename to modules/simpletest/tests/xmlrpc_test/xmlrpc_test.info
diff --git a/modules/simpletest/tests/xmlrpc_test.module b/modules/simpletest/tests/xmlrpc_test/xmlrpc_test.module
similarity index 100%
rename from modules/simpletest/tests/xmlrpc_test.module
rename to modules/simpletest/tests/xmlrpc_test/xmlrpc_test.module
diff --git a/scripts/run-tests.sh b/scripts/run-tests.sh
deleted file mode 100755
index 9078168..0000000
--- a/scripts/run-tests.sh
+++ /dev/null
@@ -1,724 +0,0 @@
-<?php
-/**
- * @file
- * This script runs Drupal tests from command line.
- */
-
-define('SIMPLETEST_SCRIPT_COLOR_PASS', 32); // Green.
-define('SIMPLETEST_SCRIPT_COLOR_FAIL', 31); // Red.
-define('SIMPLETEST_SCRIPT_COLOR_EXCEPTION', 33); // Brown.
-
-// Set defaults and get overrides.
-list($args, $count) = simpletest_script_parse_args();
-
-if ($args['help'] || $count == 0) {
-  simpletest_script_help();
-  exit;
-}
-
-if ($args['execute-test']) {
-  // Masquerade as Apache for running tests.
-  simpletest_script_init("Apache");
-  simpletest_script_run_one_test($args['test-id'], $args['execute-test']);
-}
-else {
-  // Run administrative functions as CLI.
-  simpletest_script_init(NULL);
-}
-
-// Bootstrap to perform initial validation or other operations.
-drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
-if (!module_exists('simpletest')) {
-  simpletest_script_print_error("The simpletest module must be enabled before this script can run.");
-  exit;
-}
-
-if ($args['clean']) {
-  // Clean up left-over times and directories.
-  simpletest_clean_environment();
-  echo "\nEnvironment cleaned.\n";
-
-  // Get the status messages and print them.
-  $messages = array_pop(drupal_get_messages('status'));
-  foreach ($messages as $text) {
-    echo " - " . $text . "\n";
-  }
-  exit;
-}
-
-// Load SimpleTest files.
-$groups = simpletest_test_get_all();
-$all_tests = array();
-foreach ($groups as $group => $tests) {
-  $all_tests = array_merge($all_tests, array_keys($tests));
-}
-$test_list = array();
-
-if ($args['list']) {
-  // Display all available tests.
-  echo "\nAvailable test groups & classes\n";
-  echo   "-------------------------------\n\n";
-  foreach ($groups as $group => $tests) {
-    echo $group . "\n";
-    foreach ($tests as $class => $info) {
-      echo " - " . $info['name'] . ' (' . $class . ')' . "\n";
-    }
-  }
-  exit;
-}
-
-$test_list = simpletest_script_get_test_list();
-
-// Try to allocate unlimited time to run the tests.
-drupal_set_time_limit(0);
-
-simpletest_script_reporter_init();
-
-// Setup database for test results.
-$test_id = db_insert('simpletest_test_id')->useDefaults(array('test_id'))->execute();
-
-// Execute tests.
-simpletest_script_execute_batch($test_id, simpletest_script_get_test_list());
-
-// Retrieve the last database prefix used for testing and the last test class
-// that was run from. Use the information to read the lgo file in case any
-// fatal errors caused the test to crash.
-list($last_prefix, $last_test_class) = simpletest_last_test_get($test_id);
-simpletest_log_read($test_id, $last_prefix, $last_test_class);
-
-// Stop the timer.
-simpletest_script_reporter_timer_stop();
-
-// Display results before database is cleared.
-simpletest_script_reporter_display_results();
-
-if ($args['xml']) {
-  simpletest_script_reporter_write_xml_results();
-}
-
-// Cleanup our test results.
-simpletest_clean_results_table($test_id);
-
-// Test complete, exit.
-exit;
-
-/**
- * Print help text.
- */
-function simpletest_script_help() {
-  global $args;
-
-  echo <<<EOF
-
-Run Drupal tests from the shell.
-
-Usage:        {$args['script']} [OPTIONS] <tests>
-Example:      {$args['script']} Profile
-
-All arguments are long options.
-
-  --help      Print this page.
-
-  --list      Display all available test groups.
-
-  --clean     Cleans up database tables or directories from previous, failed,
-              tests and then exits (no tests are run).
-
-  --url       Immediately precedes a URL to set the host and path. You will
-              need this parameter if Drupal is in a subdirectory on your
-              localhost and you have not set \$base_url in settings.php. Tests
-              can be run under SSL by including https:// in the URL.
-
-  --php       The absolute path to the PHP executable. Usually not needed.
-
-  --concurrency [num]
-
-              Run tests in parallel, up to [num] tests at a time.
-
-  --all       Run all available tests.
-
-  --class     Run tests identified by specific class names, instead of group names.
-
-  --file      Run tests identified by specific file names, instead of group names.
-              Specify the path and the extension (i.e. 'modules/user/user.test').
-
-  --xml       <path>
-
-              If provided, test results will be written as xml files to this path.
-
-  --color     Output text format results with color highlighting.
-
-  --verbose   Output detailed assertion messages in addition to summary.
-
-  <test1>[,<test2>[,<test3> ...]]
-
-              One or more tests to be run. By default, these are interpreted
-              as the names of test groups as shown at
-              ?q=admin/config/development/testing.
-              These group names typically correspond to module names like "User"
-              or "Profile" or "System", but there is also a group "XML-RPC".
-              If --class is specified then these are interpreted as the names of
-              specific test classes whose test methods will be run. Tests must
-              be separated by commas. Ignored if --all is specified.
-
-To run this script you will normally invoke it from the root directory of your
-Drupal installation as the webserver user (differs per configuration), or root:
-
-sudo -u [wwwrun|www-data|etc] php ./scripts/{$args['script']}
-  --url http://example.com/ --all
-sudo -u [wwwrun|www-data|etc] php ./scripts/{$args['script']}
-  --url http://example.com/ --class BlockTestCase
-\n
-EOF;
-}
-
-/**
- * Parse execution argument and ensure that all are valid.
- *
- * @return The list of arguments.
- */
-function simpletest_script_parse_args() {
-  // Set default values.
-  $args = array(
-    'script' => '',
-    'help' => FALSE,
-    'list' => FALSE,
-    'clean' => FALSE,
-    'url' => '',
-    'php' => '',
-    'concurrency' => 1,
-    'all' => FALSE,
-    'class' => FALSE,
-    'file' => FALSE,
-    'color' => FALSE,
-    'verbose' => FALSE,
-    'test_names' => array(),
-    // Used internally.
-    'test-id' => 0,
-    'execute-test' => '',
-    'xml' => '',
-  );
-
-  // Override with set values.
-  $args['script'] = basename(array_shift($_SERVER['argv']));
-
-  $count = 0;
-  while ($arg = array_shift($_SERVER['argv'])) {
-    if (preg_match('/--(\S+)/', $arg, $matches)) {
-      // Argument found.
-      if (array_key_exists($matches[1], $args)) {
-        // Argument found in list.
-        $previous_arg = $matches[1];
-        if (is_bool($args[$previous_arg])) {
-          $args[$matches[1]] = TRUE;
-        }
-        else {
-          $args[$matches[1]] = array_shift($_SERVER['argv']);
-        }
-        // Clear extraneous values.
-        $args['test_names'] = array();
-        $count++;
-      }
-      else {
-        // Argument not found in list.
-        simpletest_script_print_error("Unknown argument '$arg'.");
-        exit;
-      }
-    }
-    else {
-      // Values found without an argument should be test names.
-      $args['test_names'] += explode(',', $arg);
-      $count++;
-    }
-  }
-
-  // Validate the concurrency argument
-  if (!is_numeric($args['concurrency']) || $args['concurrency'] <= 0) {
-    simpletest_script_print_error("--concurrency must be a strictly positive integer.");
-    exit;
-  }
-
-  return array($args, $count);
-}
-
-/**
- * Initialize script variables and perform general setup requirements.
- */
-function simpletest_script_init($server_software) {
-  global $args, $php;
-
-  $host = 'localhost';
-  $path = '';
-  // Determine location of php command automatically, unless a command line argument is supplied.
-  if (!empty($args['php'])) {
-    $php = $args['php'];
-  }
-  elseif ($php_env = getenv('_')) {
-    // '_' is an environment variable set by the shell. It contains the command that was executed.
-    $php = $php_env;
-  }
-  elseif ($sudo = getenv('SUDO_COMMAND')) {
-    // 'SUDO_COMMAND' is an environment variable set by the sudo program.
-    // Extract only the PHP interpreter, not the rest of the command.
-    list($php, ) = explode(' ', $sudo, 2);
-  }
-  else {
-    simpletest_script_print_error('Unable to automatically determine the path to the PHP interpreter. Supply the --php command line argument.');
-    simpletest_script_help();
-    exit();
-  }
-
-  // Get URL from arguments.
-  if (!empty($args['url'])) {
-    $parsed_url = parse_url($args['url']);
-    $host = $parsed_url['host'] . (isset($parsed_url['port']) ? ':' . $parsed_url['port'] : '');
-    $path = isset($parsed_url['path']) ? $parsed_url['path'] : '';
-
-    // If the passed URL schema is 'https' then setup the $_SERVER variables
-    // properly so that testing will run under HTTPS.
-    if ($parsed_url['scheme'] == 'https') {
-      $_SERVER['HTTPS'] = 'on';
-    }
-  }
-
-  $_SERVER['HTTP_HOST'] = $host;
-  $_SERVER['REMOTE_ADDR'] = '127.0.0.1';
-  $_SERVER['SERVER_ADDR'] = '127.0.0.1';
-  $_SERVER['SERVER_SOFTWARE'] = $server_software;
-  $_SERVER['SERVER_NAME'] = 'localhost';
-  $_SERVER['REQUEST_URI'] = $path .'/';
-  $_SERVER['REQUEST_METHOD'] = 'GET';
-  $_SERVER['SCRIPT_NAME'] = $path .'/index.php';
-  $_SERVER['PHP_SELF'] = $path .'/index.php';
-  $_SERVER['HTTP_USER_AGENT'] = 'Drupal command line';
-
-  if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') {
-    // Ensure that any and all environment variables are changed to https://.
-    foreach ($_SERVER as $key => $value) {
-      $_SERVER[$key] = str_replace('http://', 'https://', $_SERVER[$key]);
-    }
-  }
-
-  chdir(realpath(dirname(__FILE__) . '/..'));
-  define('DRUPAL_ROOT', getcwd());
-  require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
-}
-
-/**
- * Execute a batch of tests.
- */
-function simpletest_script_execute_batch($test_id, $test_classes) {
-  global $args;
-
-  // Multi-process execution.
-  $children = array();
-  while (!empty($test_classes) || !empty($children)) {
-    while (count($children) < $args['concurrency']) {
-      if (empty($test_classes)) {
-        break;
-      }
-
-      // Fork a child process.
-      $test_class = array_shift($test_classes);
-      $command = simpletest_script_command($test_id, $test_class);
-      $process = proc_open($command, array(), $pipes, NULL, NULL, array('bypass_shell' => TRUE));
-
-      if (!is_resource($process)) {
-        echo "Unable to fork test process. Aborting.\n";
-        exit;
-      }
-
-      // Register our new child.
-      $children[] = array(
-        'process' => $process,
-        'class' => $test_class,
-        'pipes' => $pipes,
-      );
-    }
-
-    // Wait for children every 200ms.
-    usleep(200000);
-
-    // Check if some children finished.
-    foreach ($children as $cid => $child) {
-      $status = proc_get_status($child['process']);
-      if (empty($status['running'])) {
-        // The child exited, unregister it.
-        proc_close($child['process']);
-        if ($status['exitcode']) {
-          echo 'FATAL ' . $test_class . ': test runner returned a non-zero error code (' . $status['exitcode'] . ').' . "\n";
-        }
-        unset($children[$cid]);
-      }
-    }
-  }
-}
-
-/**
- * Bootstrap Drupal and run a single test.
- */
-function simpletest_script_run_one_test($test_id, $test_class) {
-  try {
-    // Bootstrap Drupal.
-    drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
-
-    simpletest_classloader_register();
-
-    $test = new $test_class($test_id);
-    $test->run();
-    $info = $test->getInfo();
-
-    $had_fails = (isset($test->results['#fail']) && $test->results['#fail'] > 0);
-    $had_exceptions = (isset($test->results['#exception']) && $test->results['#exception'] > 0);
-    $status = ($had_fails || $had_exceptions ? 'fail' : 'pass');
-    simpletest_script_print($info['name'] . ' ' . _simpletest_format_summary_line($test->results) . "\n", simpletest_script_color_code($status));
-
-    // Finished, kill this runner.
-    exit(0);
-  }
-  catch (Exception $e) {
-    echo (string) $e;
-    exit(1);
-  }
-}
-
-/**
- * Return a command used to run a test in a separate process.
- *
- * @param $test_id
- *  The current test ID.
- * @param $test_class
- *  The name of the test class to run.
- */
-function simpletest_script_command($test_id, $test_class) {
-  global $args, $php;
-
-  $command = escapeshellarg($php) . ' ' . escapeshellarg('./scripts/' . $args['script']) . ' --url ' . escapeshellarg($args['url']);
-  if ($args['color']) {
-    $command .= ' --color';
-  }
-  $command .= " --php " . escapeshellarg($php) . " --test-id $test_id --execute-test " . escapeshellarg($test_class);
-  return $command;
-}
-
-/**
- * Get list of tests based on arguments. If --all specified then
- * returns all available tests, otherwise reads list of tests.
- *
- * Will print error and exit if no valid tests were found.
- *
- * @return List of tests.
- */
-function simpletest_script_get_test_list() {
-  global $args, $all_tests, $groups;
-
-  $test_list = array();
-  if ($args['all']) {
-    $test_list = $all_tests;
-  }
-  else {
-    if ($args['class']) {
-      // Check for valid class names.
-      $test_list = array();
-      foreach ($args['test_names'] as $test_class) {
-        if (class_exists($test_class)) {
-          $test_list[] = $test_class;
-        }
-        else {
-          $groups = simpletest_test_get_all();
-          $all_classes = array();
-          foreach ($groups as $group) {
-            $all_classes = array_merge($all_classes, array_keys($group));
-          }
-          simpletest_script_print_error('Test class not found: ' . $test_class);
-          simpletest_script_print_alternatives($test_class, $all_classes, 6);
-          exit(1);
-        }
-      }
-    }
-    elseif ($args['file']) {
-      $files = array();
-      foreach ($args['test_names'] as $file) {
-        $files[drupal_realpath($file)] = 1;
-      }
-
-      // Check for valid class names.
-      foreach ($all_tests as $class_name) {
-        $refclass = new ReflectionClass($class_name);
-        $file = $refclass->getFileName();
-        if (isset($files[$file])) {
-          $test_list[] = $class_name;
-        }
-      }
-    }
-    else {
-      // Check for valid group names and get all valid classes in group.
-      foreach ($args['test_names'] as $group_name) {
-        if (isset($groups[$group_name])) {
-          $test_list = array_merge($test_list, array_keys($groups[$group_name]));
-        }
-        else {
-          simpletest_script_print_error('Test group not found: ' . $group_name);
-          simpletest_script_print_alternatives($group_name, array_keys($groups));
-          exit(1);
-        }
-      }
-    }
-  }
-
-  if (empty($test_list)) {
-    simpletest_script_print_error('No valid tests were specified.');
-    exit;
-  }
-  return $test_list;
-}
-
-/**
- * Initialize the reporter.
- */
-function simpletest_script_reporter_init() {
-  global $args, $all_tests, $test_list, $results_map;
-
-  $results_map = array(
-    'pass' => 'Pass',
-    'fail' => 'Fail',
-    'exception' => 'Exception'
-  );
-
-  echo "\n";
-  echo "Drupal test run\n";
-  echo "---------------\n";
-  echo "\n";
-
-  // Tell the user about what tests are to be run.
-  if ($args['all']) {
-    echo "All tests will run.\n\n";
-  }
-  else {
-    echo "Tests to be run:\n";
-    foreach ($test_list as $class_name) {
-      $info = call_user_func(array($class_name, 'getInfo'));
-      echo " - " . $info['name'] . ' (' . $class_name . ')' . "\n";
-    }
-    echo "\n";
-  }
-
-  echo "Test run started:\n";
-  echo " " . format_date($_SERVER['REQUEST_TIME'], 'long') . "\n";
-  timer_start('run-tests');
-  echo "\n";
-
-  echo "Test summary\n";
-  echo "------------\n";
-  echo "\n";
-}
-
-/**
- * Display jUnit XML test results.
- */
-function simpletest_script_reporter_write_xml_results() {
-  global $args, $test_id, $results_map;
-
-  $results = db_query("SELECT * FROM {simpletest} WHERE test_id = :test_id ORDER BY test_class, message_id", array(':test_id' => $test_id));
-
-  $test_class = '';
-  $xml_files = array();
-
-  foreach ($results as $result) {
-    if (isset($results_map[$result->status])) {
-      if ($result->test_class != $test_class) {
-        // We've moved onto a new class, so write the last classes results to a file:
-        if (isset($xml_files[$test_class])) {
-          file_put_contents($args['xml'] . '/' . $test_class . '.xml', $xml_files[$test_class]['doc']->saveXML());
-          unset($xml_files[$test_class]);
-        }
-        $test_class = $result->test_class;
-        if (!isset($xml_files[$test_class])) {
-          $doc = new DomDocument('1.0');
-          $root = $doc->createElement('testsuite');
-          $root = $doc->appendChild($root);
-          $xml_files[$test_class] = array('doc' => $doc, 'suite' => $root);
-        }
-      }
-
-      // For convenience:
-      $dom_document = &$xml_files[$test_class]['doc'];
-
-      // Create the XML element for this test case:
-      $case = $dom_document->createElement('testcase');
-      $case->setAttribute('classname', $test_class);
-      list($class, $name) = explode('->', $result->function, 2);
-      $case->setAttribute('name', $name);
-
-      // Passes get no further attention, but failures and exceptions get to add more detail:
-      if ($result->status == 'fail') {
-        $fail = $dom_document->createElement('failure');
-        $fail->setAttribute('type', 'failure');
-        $fail->setAttribute('message', $result->message_group);
-        $text = $dom_document->createTextNode($result->message);
-        $fail->appendChild($text);
-        $case->appendChild($fail);
-      }
-      elseif ($result->status == 'exception') {
-        // In the case of an exception the $result->function may not be a class
-        // method so we record the full function name:
-        $case->setAttribute('name', $result->function);
-
-        $fail = $dom_document->createElement('error');
-        $fail->setAttribute('type', 'exception');
-        $fail->setAttribute('message', $result->message_group);
-        $full_message = $result->message . "\n\nline: " . $result->line . "\nfile: " . $result->file;
-        $text = $dom_document->createTextNode($full_message);
-        $fail->appendChild($text);
-        $case->appendChild($fail);
-      }
-      // Append the test case XML to the test suite:
-      $xml_files[$test_class]['suite']->appendChild($case);
-    }
-  }
-  // The last test case hasn't been saved to a file yet, so do that now:
-  if (isset($xml_files[$test_class])) {
-    file_put_contents($args['xml'] . '/' . $test_class . '.xml', $xml_files[$test_class]['doc']->saveXML());
-    unset($xml_files[$test_class]);
-  }
-}
-
-/**
- * Stop the test timer.
- */
-function simpletest_script_reporter_timer_stop() {
-  echo "\n";
-  $end = timer_stop('run-tests');
-  echo "Test run duration: " . format_interval($end['time'] / 1000);
-  echo "\n\n";
-}
-
-/**
- * Display test results.
- */
-function simpletest_script_reporter_display_results() {
-  global $args, $test_id, $results_map;
-
-  if ($args['verbose']) {
-    // Report results.
-    echo "Detailed test results\n";
-    echo "---------------------\n";
-
-    $results = db_query("SELECT * FROM {simpletest} WHERE test_id = :test_id ORDER BY test_class, message_id", array(':test_id' => $test_id));
-    $test_class = '';
-    foreach ($results as $result) {
-      if (isset($results_map[$result->status])) {
-        if ($result->test_class != $test_class) {
-          // Display test class every time results are for new test class.
-          echo "\n\n---- $result->test_class ----\n\n\n";
-          $test_class = $result->test_class;
-
-          // Print table header.
-          echo "Status    Group      Filename          Line Function                            \n";
-          echo "--------------------------------------------------------------------------------\n";
-        }
-
-        simpletest_script_format_result($result);
-      }
-    }
-  }
-}
-
-/**
- * Format the result so that it fits within the default 80 character
- * terminal size.
- *
- * @param $result The result object to format.
- */
-function simpletest_script_format_result($result) {
-  global $results_map, $color;
-
-  $summary = sprintf("%-9.9s %-10.10s %-17.17s %4.4s %-35.35s\n",
-    $results_map[$result->status], $result->message_group, basename($result->file), $result->line, $result->function);
-
-  simpletest_script_print($summary, simpletest_script_color_code($result->status));
-
-  $lines = explode("\n", wordwrap(trim(strip_tags($result->message)), 76));
-  foreach ($lines as $line) {
-    echo "    $line\n";
-  }
-}
-
-/**
- * Print error message prefixed with "  ERROR: " and displayed in fail color
- * if color output is enabled.
- *
- * @param $message The message to print.
- */
-function simpletest_script_print_error($message) {
-  simpletest_script_print("  ERROR: $message\n", SIMPLETEST_SCRIPT_COLOR_FAIL);
-}
-
-/**
- * Print a message to the console, if color is enabled then the specified
- * color code will be used.
- *
- * @param $message The message to print.
- * @param $color_code The color code to use for coloring.
- */
-function simpletest_script_print($message, $color_code) {
-  global $args;
-  if ($args['color']) {
-    echo "\033[" . $color_code . "m" . $message . "\033[0m";
-  }
-  else {
-    echo $message;
-  }
-}
-
-/**
- * Get the color code associated with the specified status.
- *
- * @param $status The status string to get code for.
- * @return Color code.
- */
-function simpletest_script_color_code($status) {
-  switch ($status) {
-    case 'pass':
-      return SIMPLETEST_SCRIPT_COLOR_PASS;
-    case 'fail':
-      return SIMPLETEST_SCRIPT_COLOR_FAIL;
-    case 'exception':
-      return SIMPLETEST_SCRIPT_COLOR_EXCEPTION;
-  }
-  return 0; // Default formatting.
-}
-
-/**
- * Prints alternative test names.
- *
- * Searches the provided array of string values for close matches based on the
- * Levenshtein algorithm.
- *
- * @see http://php.net/manual/en/function.levenshtein.php
- *
- * @param string $string
- *   A string to test.
- * @param array $array
- *   A list of strings to search.
- * @param int $degree
- *   The matching strictness. Higher values return fewer matches. A value of
- *   4 means that the function will return strings from $array if the candidate
- *   string in $array would be identical to $string by changing 1/4 or fewer of
- *   its characters.
- */
-function simpletest_script_print_alternatives($string, $array, $degree = 4) {
-  $alternatives = array();
-  foreach ($array as $item) {
-    $lev = levenshtein($string, $item);
-    if ($lev <= strlen($item) / $degree || FALSE !== strpos($string, $item)) {
-      $alternatives[] = $item;
-    }
-  }
-  if (!empty($alternatives)) {
-    simpletest_script_print("  Did you mean?\n", SIMPLETEST_SCRIPT_COLOR_FAIL);
-    foreach ($alternatives as $alternative) {
-      simpletest_script_print("  - $alternative\n", SIMPLETEST_SCRIPT_COLOR_FAIL);
-    }
-  }
-}
