Browse Source

Add deleted tests back for reflection_cpp2_test.py by addtional exception catch

jieluo@google.com 11 năm trước cách đây
mục cha
commit
24095cc7e5
1 tập tin đã thay đổi với 47 bổ sung0 xóa
  1. 47 0
      python/google/protobuf/internal/reflection_test.py

+ 47 - 0
python/google/protobuf/internal/reflection_test.py

@@ -41,6 +41,7 @@ import copy
 import gc
 import operator
 import struct
+import sys
 
 from google.apputils import basetest
 from google.protobuf import unittest_import_pb2
@@ -1556,6 +1557,20 @@ class ReflectionTest(basetest.TestCase):
 
   def assertNotInitialized(self, proto):
     self.assertFalse(proto.IsInitialized())
+    try:
+      proto.SerializeToString()
+    except message.EncodeError:
+      return
+    except:
+      # C++ implementation in opensource do not consider the catched
+      # exception google.protobuf.message.EncodeError same as
+      # message.EncodeError. Add an additional catch to deal with it.
+      if api_implementation.Type() == 'python':
+        raise self.failureException('message.EncodeError not raised')
+      self.assertEqual('<class \'google.protobuf.message.EncodeError\'>',
+                       str(sys.exc_info()[0]))
+    else:
+      raise self.failureException('message.EncodeError not raised')
     # "Partial" serialization doesn't care if message is uninitialized.
     proto.SerializePartialToString()
 
@@ -2485,11 +2500,23 @@ class SerializationTest(basetest.TestCase):
       # Check if the exception message is the right one.
       self.assertEqual(exception, str(ex))
       return
+    except:
+      # C++ implementation in opensource do not consider the catched
+      # exception google.protobuf.message.EncodeError same as
+      # message.EncodeError. Add an additional catch to deal with it.
+      if api_implementation.Type() == 'python':
+        raise self.failureException('%s not raised' % str(exc_class))
+      self.assertEqual(exception, str(sys.exc_info()[1]))
     else:
       raise self.failureException('%s not raised' % str(exc_class))
 
   def testSerializeUninitialized(self):
     proto = unittest_pb2.TestRequired()
+    self._CheckRaises(
+        message.EncodeError,
+        proto.SerializeToString,
+        'Message protobuf_unittest.TestRequired is missing required fields: '
+        'a,b,c')
     # Shouldn't raise exceptions.
     partial = proto.SerializePartialToString()
 
@@ -2500,10 +2527,18 @@ class SerializationTest(basetest.TestCase):
     self.assertFalse(proto2.HasField('a'))
 
     proto.a = 1
+    self._CheckRaises(
+        message.EncodeError,
+        proto.SerializeToString,
+        'Message protobuf_unittest.TestRequired is missing required fields: b,c')
     # Shouldn't raise exceptions.
     partial = proto.SerializePartialToString()
 
     proto.b = 2
+    self._CheckRaises(
+        message.EncodeError,
+        proto.SerializeToString,
+        'Message protobuf_unittest.TestRequired is missing required fields: c')
     # Shouldn't raise exceptions.
     partial = proto.SerializePartialToString()
 
@@ -2533,6 +2568,12 @@ class SerializationTest(basetest.TestCase):
     proto.SerializeToString()
 
     proto.optional_message.a = 1
+    self._CheckRaises(
+        message.EncodeError,
+        proto.SerializeToString,
+        'Message protobuf_unittest.TestRequiredForeign '
+        'is missing required fields: '
+        'optional_message.b,optional_message.c')
 
     proto.optional_message.b = 2
     proto.optional_message.c = 3
@@ -2540,6 +2581,12 @@ class SerializationTest(basetest.TestCase):
 
     proto.repeated_message.add().a = 1
     proto.repeated_message.add().b = 2
+    self._CheckRaises(
+        message.EncodeError,
+        proto.SerializeToString,
+        'Message protobuf_unittest.TestRequiredForeign is missing required fields: '
+        'repeated_message[0].b,repeated_message[0].c,'
+        'repeated_message[1].a,repeated_message[1].c')
 
     proto.repeated_message[0].b = 2
     proto.repeated_message[0].c = 3