'Run the test case, storing the results in C{result}.
First runs C{setUp} on self, then runs the test method (defined in the
constructor), then runs C{tearDown}.  As with the standard library
L{unittest.TestCase}, the return value of these methods is disregarded.
In particular, returning a L{Deferred<twisted.internet.defer.Deferred>}
has no special additional consequences.
@param result: A L{TestResult} object.'

def run(self, result):

    log.msg(('-->    %s    <--' % self.id()))
    new_result = itrial.IReporter(result, None)
    if (new_result is None):
        result = PyUnitResultAdapter(result)
    else:
        result = new_result
    result.startTest(self)
    if self.getSkip():
        result.addSkip(self, self.getSkip())
        result.stopTest(self)
        return
    self._passed = False
    self._warnings = []
    self._installObserver()
    _collectWarnings(self._warnings.append, self._runFixturesAndTest, result)
    for w in self.flushWarnings():
        try:
            warnings.warn_explicit(**w)
        except:
            result.addError(self, failure.Failure())
    result.stopTest(self)
