From 71edc31f23918ca3c0093ce9cdb38bfa0206ed94 Mon Sep 17 00:00:00 2001 From: Tres Seaver Date: Tue, 13 Jan 2015 15:38:10 -0500 Subject: Compatibility with Python2.6 unittest. --- .../protobuf/internal/message_factory_test.py | 4 +-- python/google/protobuf/internal/reflection_test.py | 30 ++++++++++++++-------- .../protobuf/internal/unknown_fields_test.py | 15 +++++++++-- python/setup.py | 7 ----- 4 files changed, 35 insertions(+), 21 deletions(-) (limited to 'python') diff --git a/python/google/protobuf/internal/message_factory_test.py b/python/google/protobuf/internal/message_factory_test.py index 45ddcd26..5a344a79 100644 --- a/python/google/protobuf/internal/message_factory_test.py +++ b/python/google/protobuf/internal/message_factory_test.py @@ -94,11 +94,11 @@ class MessageFactoryTest(unittest.TestCase): factory = message_factory.MessageFactory() cls = factory.GetPrototype(pool.FindMessageTypeByName( 'google.protobuf.python.internal.Factory2Message')) - self.assertIsNot(cls, factory_test2_pb2.Factory2Message) + self.assertFalse(cls is factory_test2_pb2.Factory2Message) self._ExerciseDynamicClass(cls) cls2 = factory.GetPrototype(pool.FindMessageTypeByName( 'google.protobuf.python.internal.Factory2Message')) - self.assertIs(cls, cls2) + self.assertTrue(cls is cls2) def testGetMessages(self): # performed twice because multiple calls with the same input must be allowed diff --git a/python/google/protobuf/internal/reflection_test.py b/python/google/protobuf/internal/reflection_test.py index 8a72e134..03f558fd 100755 --- a/python/google/protobuf/internal/reflection_test.py +++ b/python/google/protobuf/internal/reflection_test.py @@ -40,6 +40,17 @@ import gc import operator import struct import unittest +try: + from unittest import skipIf +except ImportError: + def skipIf(predicate, message): + def decorator(wrapped): + if predicate: + def _noop(*args, **kw): + pass + return _noop + return wrapped + return decorator import six @@ -1623,7 +1634,7 @@ class ReflectionTest(unittest.TestCase): self.assertFalse(proto.IsInitialized(errors)) self.assertEqual(errors, ['a', 'b', 'c']) - @unittest.skipIf( + @skipIf( api_implementation.Type() != 'cpp' or api_implementation.Version() != 2, 'Errors are only available from the most recent C++ implementation.') def testFileDescriptorErrors(self): @@ -1644,18 +1655,17 @@ class ReflectionTest(unittest.TestCase): file_descriptor_proto.name = another_file_name m2 = file_descriptor_proto.message_type.add() m2.name = 'msg2' - with self.assertRaises(TypeError) as cm: + try: descriptor.FileDescriptor( another_file_name, package_name, serialized_pb=file_descriptor_proto.SerializeToString()) - self.assertTrue(hasattr(cm, 'exception'), '%s not raised' % - getattr(cm.expected, '__name__', cm.expected)) - self.assertIn('test_file_descriptor_errors.proto', str(cm.exception)) - # Error message will say something about this definition being a - # duplicate, though we don't check the message exactly to avoid a - # dependency on the C++ logging code. - self.assertIn('test_file_descriptor_errors.msg1', str(cm.exception)) + except TypeError as e: + message = str(e) + else: + self.fail("Did not raise TypeError") + + self.assertTrue('test_file_descriptor_errors.proto' in message) def testStringUTF8Encoding(self): proto = unittest_pb2.TestAllTypes() @@ -2824,7 +2834,7 @@ class OptionsTest(unittest.TestCase): class ClassAPITest(unittest.TestCase): - @unittest.skipIf( + @skipIf( api_implementation.Type() == 'cpp' and api_implementation.Version() == 2, 'C++ implementation requires a call to MakeDescriptor()') def testMakeClassWithNestedDescriptor(self): diff --git a/python/google/protobuf/internal/unknown_fields_test.py b/python/google/protobuf/internal/unknown_fields_test.py index 0650d92b..e405f113 100755 --- a/python/google/protobuf/internal/unknown_fields_test.py +++ b/python/google/protobuf/internal/unknown_fields_test.py @@ -36,6 +36,17 @@ __author__ = 'bohdank@google.com (Bohdan Koval)' import unittest +try: + from unittest import skipIf +except ImportError: + def skipIf(predicate, message): + def decorator(wrapped): + if predicate: + def _noop(*args, **kw): + pass + return _noop + return wrapped + return decorator from google.protobuf import unittest_mset_pb2 from google.protobuf import unittest_pb2 @@ -46,7 +57,7 @@ from google.protobuf.internal import test_util from google.protobuf.internal import type_checkers -@unittest.skipIf( +@skipIf( api_implementation.Type() == 'cpp' and api_implementation.Version() == 2, 'C++ implementation does not expose unknown fields to Python') class UnknownFieldsTest(unittest.TestCase): @@ -180,7 +191,7 @@ class UnknownFieldsTest(unittest.TestCase): self.assertNotEqual(self.empty_message, message) -@unittest.skipIf( +@skipIf( api_implementation.Type() == 'cpp' and api_implementation.Version() == 2, 'C++ implementation does not expose unknown fields to Python') class UnknownEnumValuesTest(unittest.TestCase): diff --git a/python/setup.py b/python/setup.py index d916b9c5..a4015d8a 100755 --- a/python/setup.py +++ b/python/setup.py @@ -135,13 +135,6 @@ class build_py(_build_py): pass # _build_py is an old-style class, so super() doesn't work. _build_py.run(self) - # TODO(mrovner): Subclass to run 2to3 on some files only. - # Tracing what https://wiki.python.org/moin/PortingPythonToPy3k's "Approach 2" - # section on how to get 2to3 to run on source files during install under - # Python 3. This class seems like a good place to put logic that calls - # python3's distutils.util.run_2to3 on the subset of the files we have in our - # release that are subject to conversion. - # See code reference in previous code review. if __name__ == '__main__': ext_module_list = [] -- cgit v1.2.3