/**
  * Run this test suite
  *
  * @return  unittest.TestResult
  */
 public function run()
 {
     $this->notifyListeners('testRunStarted', array($this));
     $result = new TestResult();
     foreach ($this->order as $classname => $tests) {
         $class = XPClass::forName($classname);
         // Run all tests in this class
         try {
             $this->beforeClass($class);
         } catch (PrerequisitesNotMetError $e) {
             foreach ($tests as $i) {
                 $this->notifyListeners('testSkipped', array($result->setSkipped($this->tests[$i], $e, 0.0)));
             }
             continue;
         }
         foreach ($tests as $i) {
             $this->runInternal($this->tests[$i], $result);
         }
         $this->afterClass($class);
     }
     $this->notifyListeners('testRunFinished', array($this, $result));
     return $result;
 }