Index: third_party/protobuf/python/google/protobuf/internal/unknown_fields_test.py |
diff --git a/third_party/protobuf/python/google/protobuf/internal/unknown_fields_test.py b/third_party/protobuf/python/google/protobuf/internal/unknown_fields_test.py |
index 1b81ae79bf084606b268a3f094b6146aba2ef6ac..84984b40ff5905cb51980abf8c92aee8bf76fa10 100644 |
--- a/third_party/protobuf/python/google/protobuf/internal/unknown_fields_test.py |
+++ b/third_party/protobuf/python/google/protobuf/internal/unknown_fields_test.py |
@@ -1,9 +1,9 @@ |
-#! /usr/bin/env python |
+#! /usr/bin/python |
# -*- coding: utf-8 -*- |
# |
# Protocol Buffers - Google's data interchange format |
# Copyright 2008 Google Inc. All rights reserved. |
-# https://developers.google.com/protocol-buffers/ |
+# http://code.google.com/p/protobuf/ |
# |
# Redistribution and use in source and binary forms, with or without |
# modification, are permitted provided that the following conditions are |
@@ -38,10 +38,7 @@ __author__ = 'bohdank@google.com (Bohdan Koval)' |
import unittest |
from google.protobuf import unittest_mset_pb2 |
from google.protobuf import unittest_pb2 |
-from google.protobuf import unittest_proto3_arena_pb2 |
-from google.protobuf.internal import api_implementation |
from google.protobuf.internal import encoder |
-from google.protobuf.internal import missing_enum_values_pb2 |
from google.protobuf.internal import test_util |
from google.protobuf.internal import type_checkers |
@@ -55,100 +52,18 @@ class UnknownFieldsTest(unittest.TestCase): |
self.all_fields_data = self.all_fields.SerializeToString() |
self.empty_message = unittest_pb2.TestEmptyMessage() |
self.empty_message.ParseFromString(self.all_fields_data) |
- |
- def testSerialize(self): |
- data = self.empty_message.SerializeToString() |
- |
- # Don't use assertEqual because we don't want to dump raw binary data to |
- # stdout. |
- self.assertTrue(data == self.all_fields_data) |
- |
- def testSerializeProto3(self): |
- # Verify that proto3 doesn't preserve unknown fields. |
- message = unittest_proto3_arena_pb2.TestEmptyMessage() |
- message.ParseFromString(self.all_fields_data) |
- self.assertEqual(0, len(message.SerializeToString())) |
- |
- def testByteSize(self): |
- self.assertEqual(self.all_fields.ByteSize(), self.empty_message.ByteSize()) |
- |
- def testListFields(self): |
- # Make sure ListFields doesn't return unknown fields. |
- self.assertEqual(0, len(self.empty_message.ListFields())) |
- |
- def testSerializeMessageSetWireFormatUnknownExtension(self): |
- # Create a message using the message set wire format with an unknown |
- # message. |
- raw = unittest_mset_pb2.RawMessageSet() |
- |
- # Add an unknown extension. |
- item = raw.item.add() |
- item.type_id = 1545009 |
- message1 = unittest_mset_pb2.TestMessageSetExtension1() |
- message1.i = 12345 |
- item.message = message1.SerializeToString() |
- |
- serialized = raw.SerializeToString() |
- |
- # Parse message using the message set wire format. |
- proto = unittest_mset_pb2.TestMessageSet() |
- proto.MergeFromString(serialized) |
- |
- # Verify that the unknown extension is serialized unchanged |
- reserialized = proto.SerializeToString() |
- new_raw = unittest_mset_pb2.RawMessageSet() |
- new_raw.MergeFromString(reserialized) |
- self.assertEqual(raw, new_raw) |
- |
- # C++ implementation for proto2 does not currently take into account unknown |
- # fields when checking equality. |
- # |
- # TODO(haberman): fix this. |
- @unittest.skipIf( |
- api_implementation.Type() == 'cpp' and api_implementation.Version() == 2, |
- 'C++ implementation does not expose unknown fields to Python') |
- def testEquals(self): |
- message = unittest_pb2.TestEmptyMessage() |
- message.ParseFromString(self.all_fields_data) |
- self.assertEqual(self.empty_message, message) |
- |
- self.all_fields.ClearField('optional_string') |
- message.ParseFromString(self.all_fields.SerializeToString()) |
- self.assertNotEqual(self.empty_message, message) |
- |
- |
-@unittest.skipIf( |
- api_implementation.Type() == 'cpp' and api_implementation.Version() == 2, |
- 'C++ implementation does not expose unknown fields to Python') |
-class UnknownFieldsAccessorsTest(unittest.TestCase): |
- |
- def setUp(self): |
- self.descriptor = unittest_pb2.TestAllTypes.DESCRIPTOR |
- self.all_fields = unittest_pb2.TestAllTypes() |
- test_util.SetAllFields(self.all_fields) |
- self.all_fields_data = self.all_fields.SerializeToString() |
- self.empty_message = unittest_pb2.TestEmptyMessage() |
- self.empty_message.ParseFromString(self.all_fields_data) |
self.unknown_fields = self.empty_message._unknown_fields |
def GetField(self, name): |
field_descriptor = self.descriptor.fields_by_name[name] |
wire_type = type_checkers.FIELD_TYPE_TO_WIRE_TYPE[field_descriptor.type] |
field_tag = encoder.TagBytes(field_descriptor.number, wire_type) |
- result_dict = {} |
for tag_bytes, value in self.unknown_fields: |
if tag_bytes == field_tag: |
- decoder = unittest_pb2.TestAllTypes._decoders_by_tag[tag_bytes][0] |
+ decoder = unittest_pb2.TestAllTypes._decoders_by_tag[tag_bytes] |
+ result_dict = {} |
decoder(value, 0, len(value), self.all_fields, result_dict) |
- return result_dict[field_descriptor] |
- |
- def testEnum(self): |
- value = self.GetField('optional_nested_enum') |
- self.assertEqual(self.all_fields.optional_nested_enum, value) |
- |
- def testRepeatedEnum(self): |
- value = self.GetField('repeated_nested_enum') |
- self.assertEqual(self.all_fields.repeated_nested_enum, value) |
+ return result_dict[field_descriptor] |
def testVarint(self): |
value = self.GetField('optional_int32') |
@@ -170,6 +85,13 @@ class UnknownFieldsAccessorsTest(unittest.TestCase): |
value = self.GetField('optionalgroup') |
self.assertEqual(self.all_fields.optionalgroup, value) |
+ def testSerialize(self): |
+ data = self.empty_message.SerializeToString() |
+ |
+ # Don't use assertEqual because we don't want to dump raw binary data to |
+ # stdout. |
+ self.assertTrue(data == self.all_fields_data) |
+ |
def testCopyFrom(self): |
message = unittest_pb2.TestEmptyMessage() |
message.CopyFrom(self.empty_message) |
@@ -197,67 +119,51 @@ class UnknownFieldsAccessorsTest(unittest.TestCase): |
self.empty_message.Clear() |
self.assertEqual(0, len(self.empty_message._unknown_fields)) |
+ def testByteSize(self): |
+ self.assertEqual(self.all_fields.ByteSize(), self.empty_message.ByteSize()) |
+ |
def testUnknownExtensions(self): |
message = unittest_pb2.TestEmptyMessageWithExtensions() |
message.ParseFromString(self.all_fields_data) |
self.assertEqual(self.empty_message._unknown_fields, |
message._unknown_fields) |
+ def testListFields(self): |
+ # Make sure ListFields doesn't return unknown fields. |
+ self.assertEqual(0, len(self.empty_message.ListFields())) |
+ def testSerializeMessageSetWireFormatUnknownExtension(self): |
+ # Create a message using the message set wire format with an unknown |
+ # message. |
+ raw = unittest_mset_pb2.RawMessageSet() |
-@unittest.skipIf( |
- api_implementation.Type() == 'cpp' and api_implementation.Version() == 2, |
- 'C++ implementation does not expose unknown fields to Python') |
-class UnknownEnumValuesTest(unittest.TestCase): |
- |
- def setUp(self): |
- self.descriptor = missing_enum_values_pb2.TestEnumValues.DESCRIPTOR |
- |
- self.message = missing_enum_values_pb2.TestEnumValues() |
- self.message.optional_nested_enum = ( |
- missing_enum_values_pb2.TestEnumValues.ZERO) |
- self.message.repeated_nested_enum.extend([ |
- missing_enum_values_pb2.TestEnumValues.ZERO, |
- missing_enum_values_pb2.TestEnumValues.ONE, |
- ]) |
- self.message.packed_nested_enum.extend([ |
- missing_enum_values_pb2.TestEnumValues.ZERO, |
- missing_enum_values_pb2.TestEnumValues.ONE, |
- ]) |
- self.message_data = self.message.SerializeToString() |
- self.missing_message = missing_enum_values_pb2.TestMissingEnumValues() |
- self.missing_message.ParseFromString(self.message_data) |
- self.unknown_fields = self.missing_message._unknown_fields |
+ # Add an unknown extension. |
+ item = raw.item.add() |
+ item.type_id = 1545009 |
+ message1 = unittest_mset_pb2.TestMessageSetExtension1() |
+ message1.i = 12345 |
+ item.message = message1.SerializeToString() |
- def GetField(self, name): |
- field_descriptor = self.descriptor.fields_by_name[name] |
- wire_type = type_checkers.FIELD_TYPE_TO_WIRE_TYPE[field_descriptor.type] |
- field_tag = encoder.TagBytes(field_descriptor.number, wire_type) |
- result_dict = {} |
- for tag_bytes, value in self.unknown_fields: |
- if tag_bytes == field_tag: |
- decoder = missing_enum_values_pb2.TestEnumValues._decoders_by_tag[ |
- tag_bytes][0] |
- decoder(value, 0, len(value), self.message, result_dict) |
- return result_dict[field_descriptor] |
+ serialized = raw.SerializeToString() |
- def testUnknownEnumValue(self): |
- self.assertFalse(self.missing_message.HasField('optional_nested_enum')) |
- value = self.GetField('optional_nested_enum') |
- self.assertEqual(self.message.optional_nested_enum, value) |
+ # Parse message using the message set wire format. |
+ proto = unittest_mset_pb2.TestMessageSet() |
+ proto.MergeFromString(serialized) |
- def testUnknownRepeatedEnumValue(self): |
- value = self.GetField('repeated_nested_enum') |
- self.assertEqual(self.message.repeated_nested_enum, value) |
+ # Verify that the unknown extension is serialized unchanged |
+ reserialized = proto.SerializeToString() |
+ new_raw = unittest_mset_pb2.RawMessageSet() |
+ new_raw.MergeFromString(reserialized) |
+ self.assertEqual(raw, new_raw) |
- def testUnknownPackedEnumValue(self): |
- value = self.GetField('packed_nested_enum') |
- self.assertEqual(self.message.packed_nested_enum, value) |
+ def testEquals(self): |
+ message = unittest_pb2.TestEmptyMessage() |
+ message.ParseFromString(self.all_fields_data) |
+ self.assertEqual(self.empty_message, message) |
- def testRoundTrip(self): |
- new_message = missing_enum_values_pb2.TestEnumValues() |
- new_message.ParseFromString(self.missing_message.SerializeToString()) |
- self.assertEqual(self.message, new_message) |
+ self.all_fields.ClearField('optional_string') |
+ message.ParseFromString(self.all_fields.SerializeToString()) |
+ self.assertNotEqual(self.empty_message, message) |
if __name__ == '__main__': |