aboutsummaryrefslogtreecommitdiffhomepage
path: root/python/google/protobuf/internal/reflection_test.py
diff options
context:
space:
mode:
authorGravatar pesho.petrov <pesho.petrov@630680e5-0e50-0410-840e-4b1c322b438d>2008-12-24 01:07:22 +0000
committerGravatar pesho.petrov <pesho.petrov@630680e5-0e50-0410-840e-4b1c322b438d>2008-12-24 01:07:22 +0000
commit87e64e1ceeff224043078e7e31fe0b1a119c8b1a (patch)
treeae690cfa90c7e3e213bc3422a3cb8b86a1ed01d8 /python/google/protobuf/internal/reflection_test.py
parentd41578239cf7f2a59f4ee5b7be67a4b711c663ec (diff)
Adding slicing support for repeated scalar fields and get/delete slice for composite fields.
Diffstat (limited to 'python/google/protobuf/internal/reflection_test.py')
-rwxr-xr-xpython/google/protobuf/internal/reflection_test.py74
1 files changed, 57 insertions, 17 deletions
diff --git a/python/google/protobuf/internal/reflection_test.py b/python/google/protobuf/internal/reflection_test.py
index c2ca5132..14062762 100755
--- a/python/google/protobuf/internal/reflection_test.py
+++ b/python/google/protobuf/internal/reflection_test.py
@@ -56,7 +56,12 @@ from google.protobuf.internal import test_util
from google.protobuf.internal import decoder
-class RefectionTest(unittest.TestCase):
+class ReflectionTest(unittest.TestCase):
+
+ def assertIs(self, values, others):
+ self.assertEqual(len(values), len(others))
+ for i in range(len(values)):
+ self.assertTrue(values[i] is others[i])
def testSimpleHasBits(self):
# Test a scalar.
@@ -411,14 +416,17 @@ class RefectionTest(unittest.TestCase):
self.assertTrue(not proto.repeated_int32)
self.assertEqual(0, len(proto.repeated_int32))
- proto.repeated_int32.append(5);
- proto.repeated_int32.append(10);
+ proto.repeated_int32.append(5)
+ proto.repeated_int32.append(10)
+ proto.repeated_int32.append(15)
self.assertTrue(proto.repeated_int32)
- self.assertEqual(2, len(proto.repeated_int32))
+ self.assertEqual(3, len(proto.repeated_int32))
+
+ self.assertEqual([5, 10, 15], proto.repeated_int32)
- self.assertEqual([5, 10], proto.repeated_int32)
+ # Test single retrieval.
self.assertEqual(5, proto.repeated_int32[0])
- self.assertEqual(10, proto.repeated_int32[-1])
+ self.assertEqual(15, proto.repeated_int32[-1])
# Test out-of-bounds indices.
self.assertRaises(IndexError, proto.repeated_int32.__getitem__, 1234)
self.assertRaises(IndexError, proto.repeated_int32.__getitem__, -1234)
@@ -426,11 +434,36 @@ class RefectionTest(unittest.TestCase):
self.assertRaises(TypeError, proto.repeated_int32.__getitem__, 'foo')
self.assertRaises(TypeError, proto.repeated_int32.__getitem__, None)
+ # Test single assignment.
+ proto.repeated_int32[1] = 20
+ self.assertEqual([5, 20, 15], proto.repeated_int32)
+
+ # Test insertion.
+ proto.repeated_int32.insert(1, 25)
+ self.assertEqual([5, 25, 20, 15], proto.repeated_int32)
+
+ # Test slice retrieval.
+ proto.repeated_int32.append(30)
+ self.assertEqual([25, 20, 15], proto.repeated_int32[1:4])
+ self.assertEqual([5, 25, 20, 15, 30], proto.repeated_int32[:])
+
+ # Test slice assignment.
+ proto.repeated_int32[1:4] = [35, 40, 45]
+ self.assertEqual([5, 35, 40, 45, 30], proto.repeated_int32)
+
# Test that we can use the field as an iterator.
result = []
for i in proto.repeated_int32:
result.append(i)
- self.assertEqual([5, 10], result)
+ self.assertEqual([5, 35, 40, 45, 30], result)
+
+ # Test single deletion.
+ del proto.repeated_int32[2]
+ self.assertEqual([5, 35, 45, 30], proto.repeated_int32)
+
+ # Test slice deletion.
+ del proto.repeated_int32[2:]
+ self.assertEqual([5, 35], proto.repeated_int32)
# Test clearing.
proto.ClearField('repeated_int32')
@@ -474,8 +507,7 @@ class RefectionTest(unittest.TestCase):
m1 = proto.repeated_nested_message.add()
self.assertTrue(proto.repeated_nested_message)
self.assertEqual(2, len(proto.repeated_nested_message))
- self.assertTrue(m0 is proto.repeated_nested_message[0])
- self.assertTrue(m1 is proto.repeated_nested_message[1])
+ self.assertIs([m0, m1], proto.repeated_nested_message)
self.assertTrue(isinstance(m0, unittest_pb2.TestAllTypes.NestedMessage))
# Test out-of-bounds indices.
@@ -490,18 +522,26 @@ class RefectionTest(unittest.TestCase):
self.assertRaises(TypeError, proto.repeated_nested_message.__getitem__,
None)
+ # Test slice retrieval.
+ m2 = proto.repeated_nested_message.add()
+ m3 = proto.repeated_nested_message.add()
+ m4 = proto.repeated_nested_message.add()
+ self.assertIs([m1, m2, m3], proto.repeated_nested_message[1:4])
+ self.assertIs([m0, m1, m2, m3, m4], proto.repeated_nested_message[:])
+
# Test that we can use the field as an iterator.
result = []
for i in proto.repeated_nested_message:
result.append(i)
- self.assertEqual(2, len(result))
- self.assertTrue(m0 is result[0])
- self.assertTrue(m1 is result[1])
-
- # Test item deletion.
- del proto.repeated_nested_message[0]
- self.assertEqual(1, len(proto.repeated_nested_message))
- self.assertTrue(m1 is proto.repeated_nested_message[0])
+ self.assertIs([m0, m1, m2, m3, m4], result)
+
+ # Test single deletion.
+ del proto.repeated_nested_message[2]
+ self.assertIs([m0, m1, m3, m4], proto.repeated_nested_message)
+
+ # Test slice deletion.
+ del proto.repeated_nested_message[2:]
+ self.assertIs([m0, m1], proto.repeated_nested_message)
# Test clearing.
proto.ClearField('repeated_nested_message')