Rev 5372: (jameinel) Handle [:digit:] globbing tests better for python2.7 (Martin [gz]) in file:///home/pqm/archives/thelove/bzr/%2Btrunk/

Canonical.com Patch Queue Manager pqm at pqm.ubuntu.com
Sat Aug 7 17:42:15 BST 2010


At file:///home/pqm/archives/thelove/bzr/%2Btrunk/

------------------------------------------------------------
revno: 5372 [merge]
revision-id: pqm at pqm.ubuntu.com-20100807164209-65oitxejsx27if31
parent: pqm at pqm.ubuntu.com-20100806221134-i0gwvzn5qyyxftno
parent: gzlist at googlemail.com-20100806160236-hez2domtkhiwawe8
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Sat 2010-08-07 17:42:09 +0100
message:
  (jameinel) Handle [:digit:] globbing tests better for python2.7 (Martin [gz])
modified:
  bzrlib/tests/TestUtil.py       TestUtil.py-20050824080200-5f70140a2d938694
  bzrlib/tests/__init__.py       selftest.py-20050531073622-8d0e3c8845c97a64
  bzrlib/tests/test_globbing.py  test_glob.py-20061113075651-q63o2v35fm2ydk9x-2
  bzrlib/tests/test_selftest.py  test_selftest.py-20051202044319-c110a115d8c0456a
=== modified file 'bzrlib/tests/TestUtil.py'
--- a/bzrlib/tests/TestUtil.py	2010-02-17 17:11:16 +0000
+++ b/bzrlib/tests/TestUtil.py	2010-08-05 18:13:23 +0000
@@ -135,7 +135,13 @@
         >>>         result.addTests([test, test])
         >>>     return result
         """
-        basic_tests = super(TestLoader, self).loadTestsFromModule(module)
+        if sys.version_info < (2, 7):
+            basic_tests = super(TestLoader, self).loadTestsFromModule(module)
+        else:
+            # GZ 2010-07-19: Python 2.7 unittest also uses load_tests but with
+            #                a different and incompatible signature
+            basic_tests = super(TestLoader, self).loadTestsFromModule(module,
+                use_load_tests=False)
         load_tests = getattr(module, "load_tests", None)
         if load_tests is not None:
             return load_tests(basic_tests, module, self)

=== modified file 'bzrlib/tests/__init__.py'
--- a/bzrlib/tests/__init__.py	2010-08-05 05:41:34 +0000
+++ b/bzrlib/tests/__init__.py	2010-08-07 16:42:09 +0000
@@ -141,7 +141,7 @@
 SUBUNIT_SEEK_CUR = 1
 
 
-class ExtendedTestResult(unittest._TextTestResult):
+class ExtendedTestResult(testtools.TextTestResult):
     """Accepts, reports and accumulates the results of running tests.
 
     Compared to the unittest version this class adds support for
@@ -168,7 +168,7 @@
         :param bench_history: Optionally, a writable file object to accumulate
             benchmark results.
         """
-        unittest._TextTestResult.__init__(self, stream, descriptions, verbosity)
+        testtools.TextTestResult.__init__(self, stream)
         if bench_history is not None:
             from bzrlib.version import _get_bzr_source_tree
             src_tree = _get_bzr_source_tree()
@@ -201,11 +201,13 @@
         actionTaken = "Ran"
         stopTime = time.time()
         timeTaken = stopTime - self.startTime
-        self.printErrors()
-        self.stream.writeln(self.separator2)
-        self.stream.writeln("%s %d test%s in %.3fs" % (actionTaken,
+        # GZ 2010-07-19: Seems testtools has no printErrors method, and though
+        #                the parent class method is similar have to duplicate
+        self._show_list('ERROR', self.errors)
+        self._show_list('FAIL', self.failures)
+        self.stream.write(self.sep2)
+        self.stream.write("%s %d test%s in %.3fs\n\n" % (actionTaken,
                             run, run != 1 and "s" or "", timeTaken))
-        self.stream.writeln()
         if not self.wasSuccessful():
             self.stream.write("FAILED (")
             failed, errored = map(len, (self.failures, self.errors))
@@ -218,20 +220,20 @@
                 if failed or errored: self.stream.write(", ")
                 self.stream.write("known_failure_count=%d" %
                     self.known_failure_count)
-            self.stream.writeln(")")
+            self.stream.write(")\n")
         else:
             if self.known_failure_count:
-                self.stream.writeln("OK (known_failures=%d)" %
+                self.stream.write("OK (known_failures=%d)\n" %
                     self.known_failure_count)
             else:
-                self.stream.writeln("OK")
+                self.stream.write("OK\n")
         if self.skip_count > 0:
             skipped = self.skip_count
-            self.stream.writeln('%d test%s skipped' %
+            self.stream.write('%d test%s skipped\n' %
                                 (skipped, skipped != 1 and "s" or ""))
         if self.unsupported:
             for feature, count in sorted(self.unsupported.items()):
-                self.stream.writeln("Missing feature '%s' skipped %d tests." %
+                self.stream.write("Missing feature '%s' skipped %d tests.\n" %
                     (feature, count))
         if self._strict:
             ok = self.wasStrictlySuccessful()
@@ -279,7 +281,7 @@
         return what
 
     def startTest(self, test):
-        unittest.TestResult.startTest(self, test)
+        super(ExtendedTestResult, self).startTest(test)
         if self.count == 0:
             self.startTests()
         self.report_test_start(test)
@@ -323,7 +325,7 @@
         fails with an unexpected error.
         """
         self._post_mortem()
-        unittest.TestResult.addError(self, test, err)
+        super(ExtendedTestResult, self).addError(test, err)
         self.error_count += 1
         self.report_error(test, err)
         if self.stop_early:
@@ -337,7 +339,7 @@
         fails because e.g. an assert() method failed.
         """
         self._post_mortem()
-        unittest.TestResult.addFailure(self, test, err)
+        super(ExtendedTestResult, self).addFailure(test, err)
         self.failure_count += 1
         self.report_failure(test, err)
         if self.stop_early:
@@ -357,7 +359,7 @@
                     test.id()))
         self.report_success(test)
         self._cleanupLogFile(test)
-        unittest.TestResult.addSuccess(self, test)
+        super(ExtendedTestResult, self).addSuccess(test)
         test._log_contents = ''
 
     def addExpectedFailure(self, test, err):
@@ -551,40 +553,40 @@
         return '%s%s' % (indent, err[1])
 
     def report_error(self, test, err):
-        self.stream.writeln('ERROR %s\n%s'
+        self.stream.write('ERROR %s\n%s\n'
                 % (self._testTimeString(test),
                    self._error_summary(err)))
 
     def report_failure(self, test, err):
-        self.stream.writeln(' FAIL %s\n%s'
+        self.stream.write(' FAIL %s\n%s\n'
                 % (self._testTimeString(test),
                    self._error_summary(err)))
 
     def report_known_failure(self, test, err):
-        self.stream.writeln('XFAIL %s\n%s'
+        self.stream.write('XFAIL %s\n%s\n'
                 % (self._testTimeString(test),
                    self._error_summary(err)))
 
     def report_success(self, test):
-        self.stream.writeln('   OK %s' % self._testTimeString(test))
+        self.stream.write('   OK %s\n' % self._testTimeString(test))
         for bench_called, stats in getattr(test, '_benchcalls', []):
-            self.stream.writeln('LSProf output for %s(%s, %s)' % bench_called)
+            self.stream.write('LSProf output for %s(%s, %s)\n' % bench_called)
             stats.pprint(file=self.stream)
         # flush the stream so that we get smooth output. This verbose mode is
         # used to show the output in PQM.
         self.stream.flush()
 
     def report_skip(self, test, reason):
-        self.stream.writeln(' SKIP %s\n%s'
+        self.stream.write(' SKIP %s\n%s\n'
                 % (self._testTimeString(test), reason))
 
     def report_not_applicable(self, test, reason):
-        self.stream.writeln('  N/A %s\n    %s'
+        self.stream.write('  N/A %s\n    %s\n'
                 % (self._testTimeString(test), reason))
 
     def report_unsupported(self, test, feature):
         """test cannot be run because feature is missing."""
-        self.stream.writeln("NODEP %s\n    The feature '%s' is not available."
+        self.stream.write("NODEP %s\n    The feature '%s' is not available.\n"
                 %(self._testTimeString(test), feature))
 
 
@@ -619,7 +621,7 @@
             encode = codec.encode
         stream = osutils.UnicodeOrBytesToBytesWriter(encode, stream)
         stream.encoding = new_encoding
-        self.stream = unittest._WritelnDecorator(stream)
+        self.stream = stream
         self.descriptions = descriptions
         self.verbosity = verbosity
         self._bench_history = bench_history

=== modified file 'bzrlib/tests/test_globbing.py'
--- a/bzrlib/tests/test_globbing.py	2010-07-19 14:25:37 +0000
+++ b/bzrlib/tests/test_globbing.py	2010-08-07 16:42:09 +0000
@@ -55,14 +55,16 @@
     def test_char_group_digit(self):
         self.assertMatchBasenameAndFullpath([
             # The definition of digit this uses includes arabic digits from
-            # non-latin scripts (arabic, indic, etc.) and subscript/superscript
-            # digits, but neither roman numerals nor vulgar fractions.
+            # non-latin scripts (arabic, indic, etc.) but neither roman
+            # numerals nor vulgar fractions. Some characters such as
+            # subscript/superscript digits may or may not match depending on
+            # the Python version used, see: <http://bugs.python.org/issue6561>
             (u'[[:digit:]]',
-             [u'0', u'5', u'\u0663', u'\u06f9', u'\u0f21', u'\xb9'],
+             [u'0', u'5', u'\u0663', u'\u06f9', u'\u0f21'],
              [u'T', u'q', u' ', u'\u8336', u'.']),
             (u'[^[:digit:]]',
              [u'T', u'q', u' ', u'\u8336', u'.'],
-             [u'0', u'5', u'\u0663', u'\u06f9', u'\u0f21', u'\xb9']),
+             [u'0', u'5', u'\u0663', u'\u06f9', u'\u0f21']),
             ])
 
     def test_char_group_space(self):

=== modified file 'bzrlib/tests/test_selftest.py'
--- a/bzrlib/tests/test_selftest.py	2010-07-23 18:45:31 +0000
+++ b/bzrlib/tests/test_selftest.py	2010-08-07 16:42:09 +0000
@@ -801,7 +801,7 @@
         self.requireFeature(test_lsprof.LSProfFeature)
         result_stream = StringIO()
         result = bzrlib.tests.VerboseTestResult(
-            unittest._WritelnDecorator(result_stream),
+            result_stream,
             descriptions=0,
             verbosity=2,
             )
@@ -862,7 +862,7 @@
         # verbose test output formatting
         result_stream = StringIO()
         result = bzrlib.tests.VerboseTestResult(
-            unittest._WritelnDecorator(result_stream),
+            result_stream,
             descriptions=0,
             verbosity=2,
             )
@@ -878,6 +878,9 @@
         output = result_stream.getvalue()[prefix:]
         lines = output.splitlines()
         self.assertContainsRe(lines[0], r'XFAIL *\d+ms$')
+        if sys.version_info > (2, 7):
+            self.expectFailure("_ExpectedFailure on 2.7 loses the message",
+                self.assertNotEqual, lines[1], '    ')
         self.assertEqual(lines[1], '    foo')
         self.assertEqual(2, len(lines))
 
@@ -917,7 +920,7 @@
         # verbose test output formatting
         result_stream = StringIO()
         result = bzrlib.tests.VerboseTestResult(
-            unittest._WritelnDecorator(result_stream),
+            result_stream,
             descriptions=0,
             verbosity=2,
             )
@@ -1419,7 +1422,7 @@
         sample_test = TestTestCase("method_that_times_a_bit_twice")
         output_stream = StringIO()
         result = bzrlib.tests.VerboseTestResult(
-            unittest._WritelnDecorator(output_stream),
+            output_stream,
             descriptions=0,
             verbosity=2)
         sample_test.run(result)




More information about the bazaar-commits mailing list