Support for old TestResult object (unittest) with warnings when using unsupported features.
diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py
index 8de36d7..88d1bec 100644
--- a/Lib/unittest/case.py
+++ b/Lib/unittest/case.py
@@ -249,6 +249,15 @@
         return "<%s testMethod=%s>" % \
                (strclass(self.__class__), self._testMethodName)
 
+    def _addSkip(self, result, reason):
+        addSkip = getattr(result, 'addSkip', None)
+        if addSkip is not None:
+            addSkip(self, reason)
+        else:
+            warnings.warn("TestResult has no addSkip method, skips not reported",
+                          RuntimeWarning, 2)
+            result.addSuccess(self)
+
     def run(self, result=None):
         orig_result = result
         if result is None:
@@ -262,7 +271,7 @@
         if getattr(self.__class__, "__unittest_skip__", False):
             # If the whole class was skipped.
             try:
-                result.addSkip(self, self.__class__.__unittest_skip_why__)
+                self._addSkip(result, self.__class__.__unittest_skip_why__)
             finally:
                 result.stopTest(self)
             return
@@ -272,7 +281,7 @@
             try:
                 self.setUp()
             except SkipTest as e:
-                result.addSkip(self, str(e))
+                self._addSkip(result, str(e))
             except Exception:
                 result.addError(self, sys.exc_info())
             else:
@@ -281,11 +290,23 @@
                 except self.failureException:
                     result.addFailure(self, sys.exc_info())
                 except _ExpectedFailure as e:
-                    result.addExpectedFailure(self, e.exc_info)
+                    addExpectedFailure = getattr(result, 'addExpectedFailure', None)
+                    if addExpectedFailure is not None:
+                        addExpectedFailure(self, e.exc_info)
+                    else:
+                        warnings.warn("TestResult has no addExpectedFailure method, reporting as passes",
+                                      RuntimeWarning)
+                        result.addSuccess(self)
                 except _UnexpectedSuccess:
-                    result.addUnexpectedSuccess(self)
+                    addUnexpectedSuccess = getattr(result, 'addUnexpectedSuccess', None)
+                    if addUnexpectedSuccess is not None:
+                        addUnexpectedSuccess(self)
+                    else:
+                        warnings.warn("TestResult has no addUnexpectedSuccess method, reporting as failures",
+                                      RuntimeWarning)
+                        result.addFailure(self, sys.exc_info())
                 except SkipTest as e:
-                    result.addSkip(self, str(e))
+                    self._addSkip(result, str(e))
                 except Exception:
                     result.addError(self, sys.exc_info())
                 else:
diff --git a/Lib/unittest/result.py b/Lib/unittest/result.py
index 4538304..bb2a47c 100644
--- a/Lib/unittest/result.py
+++ b/Lib/unittest/result.py
@@ -107,6 +107,6 @@
         return length
 
     def __repr__(self):
-        return "<%s run=%i errors=%i failures=%i>" % \
+        return ("<%s run=%i errors=%i failures=%i>" %
                (util.strclass(self.__class__), self.testsRun, len(self.errors),
-                len(self.failures))
+                len(self.failures)))