diff --git a/pathinc.test b/pathinc.test
index 7a51487..57e5fff 100644
--- a/pathinc.test
+++ b/pathinc.test
@@ -21,6 +21,9 @@ class PathincTestHelperDelegate extends DrupalTestCase {
   }
 }
 
+/**
+ * A copy of the core test, but enabling pathinc.
+ */
 class PathincDrupalMatchPathTestCase extends DrupalMatchPathTestCase {
   public static function getInfo() {
     return PathincTestHelperDelegate::getInfoHelper(parent::getInfo());
@@ -32,17 +35,9 @@ class PathincDrupalMatchPathTestCase extends DrupalMatchPathTestCase {
   }
 }
 
-class PathincUrlAlterFunctionalTest extends UrlAlterFunctionalTest {
-  public static function getInfo() {
-    return PathincTestHelperDelegate::getInfoHelper(parent::getInfo());
-  }
-
-  function setUp() {
-    parent::setUp();
-    PathincTestHelperDelegate::setUpHelper($this);
-  }
-}
-
+/**
+ * A copy of the core test, but enabling pathinc.
+ */
 class PathincPathLookupTest extends PathLookupTest {
   public static function getInfo() {
     return PathincTestHelperDelegate::getInfoHelper(parent::getInfo());
@@ -54,6 +49,9 @@ class PathincPathLookupTest extends PathLookupTest {
   }
 }
 
+/**
+ * A copy of the core test, but enabling pathinc.
+ */
 class PathincPathSaveTest extends PathSaveTest {
   public static function getInfo() {
     return PathincTestHelperDelegate::getInfoHelper(parent::getInfo());
@@ -65,57 +63,163 @@ class PathincPathSaveTest extends PathSaveTest {
   }
 }
 
-class PathincPathTestCase extends PathTestCase {
-  public static function getInfo() {
-    return PathincTestHelperDelegate::getInfoHelper(parent::getInfo());
-  }
-
-  function setUp() {
-    parent::setUp();
-    PathincTestHelperDelegate::setUpHelper($this);
-  }
-}
-
-class PathincPathTaxonomyTermTestCase extends PathTaxonomyTermTestCase {
-  public static function getInfo() {
-    return PathincTestHelperDelegate::getInfoHelper(parent::getInfo());
-  }
-
-  function setUp() {
-    parent::setUp();
-    PathincTestHelperDelegate::setUpHelper($this);
-  }
-}
-
-class PathincPathLanguageTestCase extends PathLanguageTestCase {
-  public static function getInfo() {
-    return PathincTestHelperDelegate::getInfoHelper(parent::getInfo());
-  }
-
-  function setUp() {
-    parent::setUp();
-    PathincTestHelperDelegate::setUpHelper($this);
-  }
-}
-
-class PathincPathLanguageUITestCase extends PathLanguageUITestCase {
-  public static function getInfo() {
-    return PathincTestHelperDelegate::getInfoHelper(parent::getInfo());
-  }
-
-  function setUp() {
-    parent::setUp();
-    PathincTestHelperDelegate::setUpHelper($this);
-  }
-}
-
-class PathincPathMonolingualTestCase extends PathMonolingualTestCase {
+/**
+ * We need a test that enables pathinc, then runs the tests within site.
+ */
+class PathincWebTestHelper extends DrupalWebTestCase {
   public static function getInfo() {
-    return PathincTestHelperDelegate::getInfoHelper(parent::getInfo());
+    return array(
+      'name' => 'Pathinc tests',
+      'description' => 'Tests the other tests.',
+      'group' => 'Pathinc',
+    );
   }
 
-  function setUp() {
+  protected function setUp() {
     parent::setUp();
-    PathincTestHelperDelegate::setUpHelper($this);
+    self::setUpHelper($this);
+  }
+
+  public function testAllTests() {
+    $tests = array(
+      'PathincDrupalMatchPathTestCase',
+      'PathincPathLookupTest',
+      'PathincPathSaveTest',
+    );
+    self::outerRun($this, $tests);
+  }
+
+  // @TODO: Make these non-static methods.
+  public static function setUpHelper(DrupalWebTestCase $testClass) {
+    if (!self::inCURL()) {
+      $modules = array('simpletest', 'pathinc');
+      $success = module_enable($modules, TRUE);
+      $testClass->assertTrue($success, t('Enabled modules: %modules', array('%modules' => implode(', ', $modules))));
+      $testClass->resetAll();
+      // Create and login user
+      $admin_user = $testClass->drupalCreateUser(array('administer unit tests'));
+      $testClass->drupalLogin($admin_user);
+    }
+  }
+
+  public static function outerRun($testClass, $testNames) {
+    foreach ($testNames as $testName) {
+      // Run this test from web interface.
+      $testClass->drupalGet('admin/config/development/testing');
+
+      $edit = array();
+      $edit[$testName] = TRUE;
+      $testClass->drupalPost(NULL, $edit, t('Run tests'));
+
+      // Parse results and add to our results.
+      $results = self::getTestResults($testClass, $testName);
+      if (!empty($results['assertions'])) {
+        foreach ($results['assertions'] as $result) {
+          switch ($result['status']) {
+            case 'pass':
+            case 'fail':
+              // Just repeat the test assertions on ourselves.
+              $testClass->assert($result['status'], $result['message'], $result['type'], array(
+                'file' => $result['file'],
+                'line' => $result['line'],
+                'function' => $result['function'],
+              ));
+              break;
+          }
+        }
+      }
+      else {
+        $testClass->fail('Did not find any valid assertions from sub tests.');
+      }
+    }
+  }
+
+  public static function istestRun($testClass) {
+    if (self::inCURL()) {
+      return TRUE;
+    }
+    else {
+      return FALSE;
+    }
+  }
+
+  /**
+   * Get the results from a test and store them in the class array $results.
+   */
+  public static function getTestResults($testClass, $testName) {
+    $results = array();
+    if ($testClass->parse()) {
+      if ($fieldset = self::getResultFieldSet($testClass, $testName)) {
+        // Code assumes this is the only test in group.
+        $results['summary'] = self::asText($testClass, $fieldset->div->div[1]);
+        $results['name'] = self::asText($testClass, $fieldset->legend);
+
+        $results['assertions'] = array();
+        $tbody = $fieldset->div->table->tbody;
+        foreach ($tbody->tr as $row) {
+          $assertion = array();
+          $assertion['message'] = self::asText($testClass, $row->td[0]);
+          $assertion['type'] = self::asText($testClass, $row->td[1]);
+          $assertion['file'] = self::asText($testClass, $row->td[2]);
+          $assertion['line'] = self::asText($testClass, $row->td[3]);
+          $assertion['function'] = self::asText($testClass, $row->td[4]);
+          $ok_url = file_create_url('misc/watchdog-ok.png');
+          $fail_url = file_create_url('misc/watchdog-error.png');
+          $verbose_url = file_create_url('misc/watchdog-warning.png');
+          switch ($row->td[5]->img['src']) {
+            case $ok_url:
+              $assertion['status'] = 'pass';
+              break;
+
+            case $fail_url:
+              $assertion['status'] = 'fail';
+              break;
+
+            case $verbose_url:
+              $assertion['status'] = 'verbose';
+              break;
+          }
+          $results['assertions'][] = $assertion;
+        }
+      }
+    }
+    return $results;
+  }
+
+  /**
+   * Get the fieldset containing the results for group this test is in.
+   */
+  public static function getResultFieldSet($testClass, $testName) {
+    $name = $testName;
+    $fieldsets = $testClass->xpath('//fieldset');
+    $info = $name::getInfo();
+    foreach ($fieldsets as $fieldset) {
+      if (self::asText($testClass, $fieldset->legend) == $info['name']) {
+        return $fieldset;
+      }
+    }
+    return FALSE;
+  }
+
+  /**
+   * Extract the text contained by the element.
+   *
+   * @param $element
+   *   Element to extract text from.
+   * @return
+   *   Extracted text.
+   */
+  public static function asText($testClass, SimpleXMLElement $element) {
+    if (!is_object($element)) {
+      return $testClass->fail('The element is not an element.');
+    }
+    return trim(html_entity_decode(strip_tags($element->asXML())));
+  }
+
+  /**
+   * Check if the test is being run from inside a CURL request.
+   */
+  public static function inCURL() {
+    return (bool) drupal_valid_test_ua();
   }
 }
