1fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#! /usr/bin/python 2fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# -*- coding: utf-8 -*- 3fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# 4fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# Protocol Buffers - Google's data interchange format 5fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# Copyright 2008 Google Inc. All rights reserved. 6fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# http://code.google.com/p/protobuf/ 7fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# 8fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# Redistribution and use in source and binary forms, with or without 9fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# modification, are permitted provided that the following conditions are 10fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# met: 11fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# 12fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# * Redistributions of source code must retain the above copyright 13fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# notice, this list of conditions and the following disclaimer. 14fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# * Redistributions in binary form must reproduce the above 15fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# copyright notice, this list of conditions and the following disclaimer 16fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# in the documentation and/or other materials provided with the 17fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# distribution. 18fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# * Neither the name of Google Inc. nor the names of its 19fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# contributors may be used to endorse or promote products derived from 20fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# this software without specific prior written permission. 21fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# 22fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 23fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 24fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 25fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 26fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 27fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 28fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 29fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 30fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 31fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 32fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 33fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 34fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville"""Unittest for reflection.py, which also indirectly tests the output of the 35fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillepure-Python protocol compiler. 36fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville""" 37fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 38fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville__author__ = 'robinson@google.com (Will Robinson)' 39fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 40fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleimport operator 41d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleimport struct 42fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 43fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleimport unittest 44fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# TODO(robinson): When we split this test in two, only some of these imports 45fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# will be necessary in each test. 46fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillefrom google.protobuf import unittest_import_pb2 47fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillefrom google.protobuf import unittest_mset_pb2 48fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillefrom google.protobuf import unittest_pb2 49fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillefrom google.protobuf import descriptor_pb2 50fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillefrom google.protobuf import descriptor 51fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillefrom google.protobuf import message 52fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillefrom google.protobuf import reflection 53fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillefrom google.protobuf.internal import more_extensions_pb2 54fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillefrom google.protobuf.internal import more_messages_pb2 55fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillefrom google.protobuf.internal import wire_format 56fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillefrom google.protobuf.internal import test_util 57fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillefrom google.protobuf.internal import decoder 58fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 59fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 60d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleclass _MiniDecoder(object): 61d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville """Decodes a stream of values from a string. 62d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 63d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville Once upon a time we actually had a class called decoder.Decoder. Then we 64d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville got rid of it during a redesign that made decoding much, much faster overall. 65d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville But a couple tests in this file used it to check that the serialized form of 66d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville a message was correct. So, this class implements just the methods that were 67d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville used by said tests, so that we don't have to rewrite the tests. 68d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville """ 69d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 70d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def __init__(self, bytes): 71d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self._bytes = bytes 72d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self._pos = 0 73d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 74d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def ReadVarint(self): 75d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville result, self._pos = decoder._DecodeVarint(self._bytes, self._pos) 76d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville return result 77d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 78d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville ReadInt32 = ReadVarint 79d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville ReadInt64 = ReadVarint 80d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville ReadUInt32 = ReadVarint 81d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville ReadUInt64 = ReadVarint 82d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 83d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def ReadSInt64(self): 84d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville return wire_format.ZigZagDecode(self.ReadVarint()) 85d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 86d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville ReadSInt32 = ReadSInt64 87d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 88d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def ReadFieldNumberAndWireType(self): 89d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville return wire_format.UnpackTag(self.ReadVarint()) 90d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 91d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def ReadFloat(self): 92d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville result = struct.unpack("<f", self._bytes[self._pos:self._pos+4])[0] 93d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self._pos += 4 94d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville return result 95d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 96d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def ReadDouble(self): 97d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville result = struct.unpack("<d", self._bytes[self._pos:self._pos+8])[0] 98d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self._pos += 8 99d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville return result 100d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 101d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def EndOfStream(self): 102d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville return self._pos == len(self._bytes) 103d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 104d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 105fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleclass ReflectionTest(unittest.TestCase): 106fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 107fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def assertIs(self, values, others): 108fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(len(values), len(others)) 109fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville for i in range(len(values)): 110fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(values[i] is others[i]) 111fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 112d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def testScalarConstructor(self): 113d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville # Constructor with only scalar types should succeed. 114d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto = unittest_pb2.TestAllTypes( 115d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville optional_int32=24, 116d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville optional_double=54.321, 117d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville optional_string='optional_string') 118d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 119d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEqual(24, proto.optional_int32) 120d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEqual(54.321, proto.optional_double) 121d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEqual('optional_string', proto.optional_string) 122d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 123d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def testRepeatedScalarConstructor(self): 124d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville # Constructor with only repeated scalar types should succeed. 125d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto = unittest_pb2.TestAllTypes( 126d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville repeated_int32=[1, 2, 3, 4], 127d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville repeated_double=[1.23, 54.321], 128d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville repeated_bool=[True, False, False], 129d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville repeated_string=["optional_string"]) 130d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 131d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEquals([1, 2, 3, 4], list(proto.repeated_int32)) 132d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEquals([1.23, 54.321], list(proto.repeated_double)) 133d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEquals([True, False, False], list(proto.repeated_bool)) 134d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEquals(["optional_string"], list(proto.repeated_string)) 135d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 136d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def testRepeatedCompositeConstructor(self): 137d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville # Constructor with only repeated composite types should succeed. 138d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto = unittest_pb2.TestAllTypes( 139d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville repeated_nested_message=[ 140d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.TestAllTypes.NestedMessage( 141d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville bb=unittest_pb2.TestAllTypes.FOO), 142d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.TestAllTypes.NestedMessage( 143d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville bb=unittest_pb2.TestAllTypes.BAR)], 144d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville repeated_foreign_message=[ 145d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.ForeignMessage(c=-43), 146d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.ForeignMessage(c=45324), 147d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.ForeignMessage(c=12)], 148d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville repeatedgroup=[ 149d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.TestAllTypes.RepeatedGroup(), 150d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.TestAllTypes.RepeatedGroup(a=1), 151d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.TestAllTypes.RepeatedGroup(a=2)]) 152d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 153d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEquals( 154d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville [unittest_pb2.TestAllTypes.NestedMessage( 155d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville bb=unittest_pb2.TestAllTypes.FOO), 156d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.TestAllTypes.NestedMessage( 157d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville bb=unittest_pb2.TestAllTypes.BAR)], 158d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville list(proto.repeated_nested_message)) 159d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEquals( 160d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville [unittest_pb2.ForeignMessage(c=-43), 161d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.ForeignMessage(c=45324), 162d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.ForeignMessage(c=12)], 163d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville list(proto.repeated_foreign_message)) 164d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEquals( 165d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville [unittest_pb2.TestAllTypes.RepeatedGroup(), 166d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.TestAllTypes.RepeatedGroup(a=1), 167d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.TestAllTypes.RepeatedGroup(a=2)], 168d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville list(proto.repeatedgroup)) 169d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 170d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def testMixedConstructor(self): 171d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville # Constructor with only mixed types should succeed. 172d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto = unittest_pb2.TestAllTypes( 173d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville optional_int32=24, 174d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville optional_string='optional_string', 175d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville repeated_double=[1.23, 54.321], 176d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville repeated_bool=[True, False, False], 177d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville repeated_nested_message=[ 178d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.TestAllTypes.NestedMessage( 179d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville bb=unittest_pb2.TestAllTypes.FOO), 180d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.TestAllTypes.NestedMessage( 181d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville bb=unittest_pb2.TestAllTypes.BAR)], 182d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville repeated_foreign_message=[ 183d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.ForeignMessage(c=-43), 184d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.ForeignMessage(c=45324), 185d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.ForeignMessage(c=12)]) 186d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 187d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEqual(24, proto.optional_int32) 188d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEqual('optional_string', proto.optional_string) 189d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEquals([1.23, 54.321], list(proto.repeated_double)) 190d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEquals([True, False, False], list(proto.repeated_bool)) 191d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEquals( 192d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville [unittest_pb2.TestAllTypes.NestedMessage( 193d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville bb=unittest_pb2.TestAllTypes.FOO), 194d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.TestAllTypes.NestedMessage( 195d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville bb=unittest_pb2.TestAllTypes.BAR)], 196d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville list(proto.repeated_nested_message)) 197d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEquals( 198d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville [unittest_pb2.ForeignMessage(c=-43), 199d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.ForeignMessage(c=45324), 200d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.ForeignMessage(c=12)], 201d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville list(proto.repeated_foreign_message)) 202d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 203fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testSimpleHasBits(self): 204fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test a scalar. 205fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestAllTypes() 206fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not proto.HasField('optional_int32')) 207fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, proto.optional_int32) 208fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # HasField() shouldn't be true if all we've done is 209fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # read the default value. 210fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not proto.HasField('optional_int32')) 211fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.optional_int32 = 1 212fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Setting a value however *should* set the "has" bit. 213fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(proto.HasField('optional_int32')) 214fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.ClearField('optional_int32') 215fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # And clearing that value should unset the "has" bit. 216fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not proto.HasField('optional_int32')) 217fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 218fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testHasBitsWithSinglyNestedScalar(self): 219fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Helper used to test foreign messages and groups. 220fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # 221fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # composite_field_name should be the name of a non-repeated 222fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # composite (i.e., foreign or group) field in TestAllTypes, 223fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # and scalar_field_name should be the name of an integer-valued 224fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # scalar field within that composite. 225fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # 226fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # I never thought I'd miss C++ macros and templates so much. :( 227fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # This helper is semantically just: 228fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # 229fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # assert proto.composite_field.scalar_field == 0 230fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # assert not proto.composite_field.HasField('scalar_field') 231fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # assert not proto.HasField('composite_field') 232fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # 233fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # proto.composite_field.scalar_field = 10 234fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # old_composite_field = proto.composite_field 235fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # 236fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # assert proto.composite_field.scalar_field == 10 237fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # assert proto.composite_field.HasField('scalar_field') 238fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # assert proto.HasField('composite_field') 239fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # 240fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # proto.ClearField('composite_field') 241fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # 242fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # assert not proto.composite_field.HasField('scalar_field') 243fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # assert not proto.HasField('composite_field') 244fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # assert proto.composite_field.scalar_field == 0 245fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # 246fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # # Now ensure that ClearField('composite_field') disconnected 247fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # # the old field object from the object tree... 248fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # assert old_composite_field is not proto.composite_field 249fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # old_composite_field.scalar_field = 20 250fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # assert not proto.composite_field.HasField('scalar_field') 251fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # assert not proto.HasField('composite_field') 252fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def TestCompositeHasBits(composite_field_name, scalar_field_name): 253fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestAllTypes() 254fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # First, check that we can get the scalar value, and see that it's the 255fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # default (0), but that proto.HasField('omposite') and 256fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # proto.composite.HasField('scalar') will still return False. 257fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville composite_field = getattr(proto, composite_field_name) 258fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville original_scalar_value = getattr(composite_field, scalar_field_name) 259fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, original_scalar_value) 260fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Assert that the composite object does not "have" the scalar. 261fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not composite_field.HasField(scalar_field_name)) 262fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Assert that proto does not "have" the composite field. 263fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not proto.HasField(composite_field_name)) 264fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 265fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Now set the scalar within the composite field. Ensure that the setting 266fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # is reflected, and that proto.HasField('composite') and 267fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # proto.composite.HasField('scalar') now both return True. 268fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville new_val = 20 269fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville setattr(composite_field, scalar_field_name, new_val) 270fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(new_val, getattr(composite_field, scalar_field_name)) 271fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Hold on to a reference to the current composite_field object. 272fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville old_composite_field = composite_field 273fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Assert that the has methods now return true. 274fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(composite_field.HasField(scalar_field_name)) 275fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(proto.HasField(composite_field_name)) 276fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 277fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Now call the clear method... 278fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.ClearField(composite_field_name) 279fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 280fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # ...and ensure that the "has" bits are all back to False... 281fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville composite_field = getattr(proto, composite_field_name) 282fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not composite_field.HasField(scalar_field_name)) 283fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not proto.HasField(composite_field_name)) 284fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # ...and ensure that the scalar field has returned to its default. 285fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, getattr(composite_field, scalar_field_name)) 286fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 287fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Finally, ensure that modifications to the old composite field object 288fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # don't have any effect on the parent. 289fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # 290fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # (NOTE that when we clear the composite field in the parent, we actually 291fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # don't recursively clear down the tree. Instead, we just disconnect the 292fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # cleared composite from the tree.) 293fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(old_composite_field is not composite_field) 294fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville setattr(old_composite_field, scalar_field_name, new_val) 295fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not composite_field.HasField(scalar_field_name)) 296fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not proto.HasField(composite_field_name)) 297fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, getattr(composite_field, scalar_field_name)) 298fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 299fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test simple, single-level nesting when we set a scalar. 300fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville TestCompositeHasBits('optionalgroup', 'a') 301fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville TestCompositeHasBits('optional_nested_message', 'bb') 302fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville TestCompositeHasBits('optional_foreign_message', 'c') 303fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville TestCompositeHasBits('optional_import_message', 'd') 304fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 305fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testReferencesToNestedMessage(self): 306fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestAllTypes() 307fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville nested = proto.optional_nested_message 308fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville del proto 309fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # A previous version had a bug where this would raise an exception when 310fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # hitting a now-dead weak reference. 311fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville nested.bb = 23 312fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 313fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testDisconnectingNestedMessageBeforeSettingField(self): 314fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestAllTypes() 315fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville nested = proto.optional_nested_message 316fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.ClearField('optional_nested_message') # Should disconnect from parent 317fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(nested is not proto.optional_nested_message) 318fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville nested.bb = 23 319fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not proto.HasField('optional_nested_message')) 320fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, proto.optional_nested_message.bb) 321fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 322fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testHasBitsWhenModifyingRepeatedFields(self): 323fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test nesting when we add an element to a repeated field in a submessage. 324fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestNestedMessageHasBits() 325fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.optional_nested_message.nestedmessage_repeated_int32.append(5) 326fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual( 327fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [5], proto.optional_nested_message.nestedmessage_repeated_int32) 328fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(proto.HasField('optional_nested_message')) 329fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 330fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Do the same test, but with a repeated composite field within the 331fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # submessage. 332fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.ClearField('optional_nested_message') 333fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not proto.HasField('optional_nested_message')) 334fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.optional_nested_message.nestedmessage_repeated_foreignmessage.add() 335fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(proto.HasField('optional_nested_message')) 336fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 337fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testHasBitsForManyLevelsOfNesting(self): 338fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test nesting many levels deep. 339fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville recursive_proto = unittest_pb2.TestMutualRecursionA() 340fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not recursive_proto.HasField('bb')) 341fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, recursive_proto.bb.a.bb.a.bb.optional_int32) 342fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not recursive_proto.HasField('bb')) 343fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville recursive_proto.bb.a.bb.a.bb.optional_int32 = 5 344fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(5, recursive_proto.bb.a.bb.a.bb.optional_int32) 345fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(recursive_proto.HasField('bb')) 346fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(recursive_proto.bb.HasField('a')) 347fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(recursive_proto.bb.a.HasField('bb')) 348fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(recursive_proto.bb.a.bb.HasField('a')) 349fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(recursive_proto.bb.a.bb.a.HasField('bb')) 350fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not recursive_proto.bb.a.bb.a.bb.HasField('a')) 351fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(recursive_proto.bb.a.bb.a.bb.HasField('optional_int32')) 352fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 353fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testSingularListFields(self): 354fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestAllTypes() 355fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.optional_fixed32 = 1 356fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.optional_int32 = 5 357fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.optional_string = 'foo' 358d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville # Access sub-message but don't set it yet. 359d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville nested_message = proto.optional_nested_message 360fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual( 361fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [ (proto.DESCRIPTOR.fields_by_name['optional_int32' ], 5), 362fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville (proto.DESCRIPTOR.fields_by_name['optional_fixed32'], 1), 363fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville (proto.DESCRIPTOR.fields_by_name['optional_string' ], 'foo') ], 364fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.ListFields()) 365fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 366d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto.optional_nested_message.bb = 123 367d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEqual( 368d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville [ (proto.DESCRIPTOR.fields_by_name['optional_int32' ], 5), 369d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville (proto.DESCRIPTOR.fields_by_name['optional_fixed32'], 1), 370d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville (proto.DESCRIPTOR.fields_by_name['optional_string' ], 'foo'), 371d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville (proto.DESCRIPTOR.fields_by_name['optional_nested_message' ], 372d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville nested_message) ], 373d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto.ListFields()) 374d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 375fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testRepeatedListFields(self): 376fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestAllTypes() 377fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.repeated_fixed32.append(1) 378fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.repeated_int32.append(5) 379fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.repeated_int32.append(11) 380fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.repeated_string.extend(['foo', 'bar']) 381fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.repeated_string.extend([]) 382fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.repeated_string.append('baz') 383fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.repeated_string.extend(str(x) for x in xrange(2)) 384fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.optional_int32 = 21 385d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto.repeated_bool # Access but don't set anything; should not be listed. 386fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual( 387fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [ (proto.DESCRIPTOR.fields_by_name['optional_int32' ], 21), 388fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville (proto.DESCRIPTOR.fields_by_name['repeated_int32' ], [5, 11]), 389fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville (proto.DESCRIPTOR.fields_by_name['repeated_fixed32'], [1]), 390fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville (proto.DESCRIPTOR.fields_by_name['repeated_string' ], 391fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville ['foo', 'bar', 'baz', '0', '1']) ], 392fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.ListFields()) 393fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 394fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testSingularListExtensions(self): 395fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestAllExtensions() 396fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.Extensions[unittest_pb2.optional_fixed32_extension] = 1 397fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.Extensions[unittest_pb2.optional_int32_extension ] = 5 398fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.Extensions[unittest_pb2.optional_string_extension ] = 'foo' 399fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual( 400fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [ (unittest_pb2.optional_int32_extension , 5), 401fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville (unittest_pb2.optional_fixed32_extension, 1), 402fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville (unittest_pb2.optional_string_extension , 'foo') ], 403fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.ListFields()) 404fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 405fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testRepeatedListExtensions(self): 406fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestAllExtensions() 407fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.Extensions[unittest_pb2.repeated_fixed32_extension].append(1) 408fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.Extensions[unittest_pb2.repeated_int32_extension ].append(5) 409fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.Extensions[unittest_pb2.repeated_int32_extension ].append(11) 410fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.Extensions[unittest_pb2.repeated_string_extension ].append('foo') 411fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.Extensions[unittest_pb2.repeated_string_extension ].append('bar') 412fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.Extensions[unittest_pb2.repeated_string_extension ].append('baz') 413fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.Extensions[unittest_pb2.optional_int32_extension ] = 21 414fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual( 415fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [ (unittest_pb2.optional_int32_extension , 21), 416fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville (unittest_pb2.repeated_int32_extension , [5, 11]), 417fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville (unittest_pb2.repeated_fixed32_extension, [1]), 418fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville (unittest_pb2.repeated_string_extension , ['foo', 'bar', 'baz']) ], 419fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.ListFields()) 420fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 421fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testListFieldsAndExtensions(self): 422fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestFieldOrderings() 423fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville test_util.SetAllFieldsAndExtensions(proto) 424fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville unittest_pb2.my_extension_int 425fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual( 426fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [ (proto.DESCRIPTOR.fields_by_name['my_int' ], 1), 427fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville (unittest_pb2.my_extension_int , 23), 428fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville (proto.DESCRIPTOR.fields_by_name['my_string'], 'foo'), 429fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville (unittest_pb2.my_extension_string , 'bar'), 430fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville (proto.DESCRIPTOR.fields_by_name['my_float' ], 1.0) ], 431fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.ListFields()) 432fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 433fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testDefaultValues(self): 434fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestAllTypes() 435fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, proto.optional_int32) 436fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, proto.optional_int64) 437fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, proto.optional_uint32) 438fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, proto.optional_uint64) 439fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, proto.optional_sint32) 440fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, proto.optional_sint64) 441fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, proto.optional_fixed32) 442fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, proto.optional_fixed64) 443fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, proto.optional_sfixed32) 444fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, proto.optional_sfixed64) 445fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0.0, proto.optional_float) 446fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0.0, proto.optional_double) 447fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(False, proto.optional_bool) 448fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual('', proto.optional_string) 449fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual('', proto.optional_bytes) 450fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 451fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(41, proto.default_int32) 452fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(42, proto.default_int64) 453fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(43, proto.default_uint32) 454fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(44, proto.default_uint64) 455fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(-45, proto.default_sint32) 456fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(46, proto.default_sint64) 457fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(47, proto.default_fixed32) 458fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(48, proto.default_fixed64) 459fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(49, proto.default_sfixed32) 460fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(-50, proto.default_sfixed64) 461fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(51.5, proto.default_float) 462fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(52e3, proto.default_double) 463fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(True, proto.default_bool) 464fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual('hello', proto.default_string) 465fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual('world', proto.default_bytes) 466fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(unittest_pb2.TestAllTypes.BAR, proto.default_nested_enum) 467fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(unittest_pb2.FOREIGN_BAR, proto.default_foreign_enum) 468fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(unittest_import_pb2.IMPORT_BAR, 469fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.default_import_enum) 470fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 471fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestExtremeDefaultValues() 472fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(u'\u1234', proto.utf8_string) 473fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 474fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testHasFieldWithUnknownFieldName(self): 475fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestAllTypes() 476fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(ValueError, proto.HasField, 'nonexistent_field') 477fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 478fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testClearFieldWithUnknownFieldName(self): 479fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestAllTypes() 480fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(ValueError, proto.ClearField, 'nonexistent_field') 481fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 482fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testDisallowedAssignments(self): 483fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # It's illegal to assign values directly to repeated fields 484fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # or to nonrepeated composite fields. Ensure that this fails. 485fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestAllTypes() 486fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Repeated fields. 487fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(AttributeError, setattr, proto, 'repeated_int32', 10) 488fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Lists shouldn't work, either. 489fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(AttributeError, setattr, proto, 'repeated_int32', [10]) 490fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Composite fields. 491fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(AttributeError, setattr, proto, 492fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'optional_nested_message', 23) 493fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Assignment to a repeated nested message field without specifying 494fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # the index in the array of nested messages. 495fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(AttributeError, setattr, proto.repeated_nested_message, 496fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'bb', 34) 497fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Assignment to an attribute of a repeated field. 498fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(AttributeError, setattr, proto.repeated_float, 499fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'some_attribute', 34) 500fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # proto.nonexistent_field = 23 should fail as well. 501fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(AttributeError, setattr, proto, 'nonexistent_field', 23) 502fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 503fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # TODO(robinson): Add type-safety check for enums. 504fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testSingleScalarTypeSafety(self): 505fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestAllTypes() 506fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(TypeError, setattr, proto, 'optional_int32', 1.1) 507fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(TypeError, setattr, proto, 'optional_int32', 'foo') 508fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(TypeError, setattr, proto, 'optional_string', 10) 509fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(TypeError, setattr, proto, 'optional_bytes', 10) 510fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 511fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testSingleScalarBoundsChecking(self): 512fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def TestMinAndMaxIntegers(field_name, expected_min, expected_max): 513fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville pb = unittest_pb2.TestAllTypes() 514fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville setattr(pb, field_name, expected_min) 515fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville setattr(pb, field_name, expected_max) 516fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(ValueError, setattr, pb, field_name, expected_min - 1) 517fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(ValueError, setattr, pb, field_name, expected_max + 1) 518fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 519fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville TestMinAndMaxIntegers('optional_int32', -(1 << 31), (1 << 31) - 1) 520fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville TestMinAndMaxIntegers('optional_uint32', 0, 0xffffffff) 521fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville TestMinAndMaxIntegers('optional_int64', -(1 << 63), (1 << 63) - 1) 522fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville TestMinAndMaxIntegers('optional_uint64', 0, 0xffffffffffffffff) 523fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville TestMinAndMaxIntegers('optional_nested_enum', -(1 << 31), (1 << 31) - 1) 524fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 525fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testRepeatedScalarTypeSafety(self): 526fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestAllTypes() 527fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(TypeError, proto.repeated_int32.append, 1.1) 528fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(TypeError, proto.repeated_int32.append, 'foo') 529fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(TypeError, proto.repeated_string, 10) 530fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(TypeError, proto.repeated_bytes, 10) 531fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 532fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.repeated_int32.append(10) 533fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.repeated_int32[0] = 23 534fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(IndexError, proto.repeated_int32.__setitem__, 500, 23) 535fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(TypeError, proto.repeated_int32.__setitem__, 0, 'abc') 536fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 537fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testSingleScalarGettersAndSetters(self): 538fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestAllTypes() 539fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, proto.optional_int32) 540fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.optional_int32 = 1 541fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(1, proto.optional_int32) 542fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # TODO(robinson): Test all other scalar field types. 543fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 544fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testSingleScalarClearField(self): 545fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestAllTypes() 546fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Should be allowed to clear something that's not there (a no-op). 547fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.ClearField('optional_int32') 548fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.optional_int32 = 1 549fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(proto.HasField('optional_int32')) 550fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.ClearField('optional_int32') 551fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, proto.optional_int32) 552fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not proto.HasField('optional_int32')) 553fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # TODO(robinson): Test all other scalar field types. 554fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 555fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testEnums(self): 556fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestAllTypes() 557fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(1, proto.FOO) 558fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(1, unittest_pb2.TestAllTypes.FOO) 559fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(2, proto.BAR) 560fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(2, unittest_pb2.TestAllTypes.BAR) 561fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(3, proto.BAZ) 562fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(3, unittest_pb2.TestAllTypes.BAZ) 563fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 564fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testRepeatedScalars(self): 565fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestAllTypes() 566fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 567fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not proto.repeated_int32) 568fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, len(proto.repeated_int32)) 569fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.repeated_int32.append(5) 570fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.repeated_int32.append(10) 571fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.repeated_int32.append(15) 572fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(proto.repeated_int32) 573fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(3, len(proto.repeated_int32)) 574fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 575fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual([5, 10, 15], proto.repeated_int32) 576fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 577fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test single retrieval. 578fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(5, proto.repeated_int32[0]) 579fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(15, proto.repeated_int32[-1]) 580fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test out-of-bounds indices. 581fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(IndexError, proto.repeated_int32.__getitem__, 1234) 582fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(IndexError, proto.repeated_int32.__getitem__, -1234) 583fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test incorrect types passed to __getitem__. 584fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(TypeError, proto.repeated_int32.__getitem__, 'foo') 585fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(TypeError, proto.repeated_int32.__getitem__, None) 586fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 587fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test single assignment. 588fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.repeated_int32[1] = 20 589fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual([5, 20, 15], proto.repeated_int32) 590fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 591fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test insertion. 592fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.repeated_int32.insert(1, 25) 593fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual([5, 25, 20, 15], proto.repeated_int32) 594fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 595fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test slice retrieval. 596fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.repeated_int32.append(30) 597fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual([25, 20, 15], proto.repeated_int32[1:4]) 598fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual([5, 25, 20, 15, 30], proto.repeated_int32[:]) 599fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 600fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test slice assignment with an iterator 601fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.repeated_int32[1:4] = (i for i in xrange(3)) 602fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual([5, 0, 1, 2, 30], proto.repeated_int32) 603fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 604fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test slice assignment. 605fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.repeated_int32[1:4] = [35, 40, 45] 606fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual([5, 35, 40, 45, 30], proto.repeated_int32) 607fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 608fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test that we can use the field as an iterator. 609fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville result = [] 610fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville for i in proto.repeated_int32: 611fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville result.append(i) 612fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual([5, 35, 40, 45, 30], result) 613fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 614fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test single deletion. 615fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville del proto.repeated_int32[2] 616fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual([5, 35, 45, 30], proto.repeated_int32) 617fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 618fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test slice deletion. 619fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville del proto.repeated_int32[2:] 620fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual([5, 35], proto.repeated_int32) 621fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 622fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test clearing. 623fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.ClearField('repeated_int32') 624fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not proto.repeated_int32) 625fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, len(proto.repeated_int32)) 626fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 627fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testRepeatedScalarsRemove(self): 628fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestAllTypes() 629fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 630fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not proto.repeated_int32) 631fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, len(proto.repeated_int32)) 632fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.repeated_int32.append(5) 633fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.repeated_int32.append(10) 634fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.repeated_int32.append(5) 635fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.repeated_int32.append(5) 636fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 637fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(4, len(proto.repeated_int32)) 638fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.repeated_int32.remove(5) 639fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(3, len(proto.repeated_int32)) 640fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(10, proto.repeated_int32[0]) 641fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(5, proto.repeated_int32[1]) 642fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(5, proto.repeated_int32[2]) 643fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 644fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.repeated_int32.remove(5) 645fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(2, len(proto.repeated_int32)) 646fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(10, proto.repeated_int32[0]) 647fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(5, proto.repeated_int32[1]) 648fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 649fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.repeated_int32.remove(10) 650fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(1, len(proto.repeated_int32)) 651fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(5, proto.repeated_int32[0]) 652fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 653fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Remove a non-existent element. 654fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(ValueError, proto.repeated_int32.remove, 123) 655fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 656fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testRepeatedComposites(self): 657fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestAllTypes() 658fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not proto.repeated_nested_message) 659fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, len(proto.repeated_nested_message)) 660fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville m0 = proto.repeated_nested_message.add() 661fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville m1 = proto.repeated_nested_message.add() 662fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(proto.repeated_nested_message) 663fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(2, len(proto.repeated_nested_message)) 664fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertIs([m0, m1], proto.repeated_nested_message) 665fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(isinstance(m0, unittest_pb2.TestAllTypes.NestedMessage)) 666fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 667fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test out-of-bounds indices. 668fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(IndexError, proto.repeated_nested_message.__getitem__, 669fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1234) 670fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(IndexError, proto.repeated_nested_message.__getitem__, 671fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville -1234) 672fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 673fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test incorrect types passed to __getitem__. 674fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(TypeError, proto.repeated_nested_message.__getitem__, 675fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'foo') 676fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(TypeError, proto.repeated_nested_message.__getitem__, 677fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville None) 678fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 679fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test slice retrieval. 680fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville m2 = proto.repeated_nested_message.add() 681fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville m3 = proto.repeated_nested_message.add() 682fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville m4 = proto.repeated_nested_message.add() 683fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertIs([m1, m2, m3], proto.repeated_nested_message[1:4]) 684fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertIs([m0, m1, m2, m3, m4], proto.repeated_nested_message[:]) 685fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 686fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test that we can use the field as an iterator. 687fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville result = [] 688fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville for i in proto.repeated_nested_message: 689fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville result.append(i) 690fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertIs([m0, m1, m2, m3, m4], result) 691fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 692fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test single deletion. 693fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville del proto.repeated_nested_message[2] 694fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertIs([m0, m1, m3, m4], proto.repeated_nested_message) 695fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 696fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test slice deletion. 697fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville del proto.repeated_nested_message[2:] 698fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertIs([m0, m1], proto.repeated_nested_message) 699fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 700fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test clearing. 701fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.ClearField('repeated_nested_message') 702fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not proto.repeated_nested_message) 703fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, len(proto.repeated_nested_message)) 704fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 705fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testHandWrittenReflection(self): 706fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # TODO(robinson): We probably need a better way to specify 707fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # protocol types by hand. But then again, this isn't something 708fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # we expect many people to do. Hmm. 709fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville FieldDescriptor = descriptor.FieldDescriptor 710fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville foo_field_descriptor = FieldDescriptor( 711fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville name='foo_field', full_name='MyProto.foo_field', 712fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville index=0, number=1, type=FieldDescriptor.TYPE_INT64, 713fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville cpp_type=FieldDescriptor.CPPTYPE_INT64, 714fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville label=FieldDescriptor.LABEL_OPTIONAL, default_value=0, 715fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville containing_type=None, message_type=None, enum_type=None, 716fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville is_extension=False, extension_scope=None, 717fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville options=descriptor_pb2.FieldOptions()) 718fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville mydescriptor = descriptor.Descriptor( 719fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville name='MyProto', full_name='MyProto', filename='ignored', 720fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville containing_type=None, nested_types=[], enum_types=[], 721fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville fields=[foo_field_descriptor], extensions=[], 722fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville options=descriptor_pb2.MessageOptions()) 723fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville class MyProtoClass(message.Message): 724fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville DESCRIPTOR = mydescriptor 725fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville __metaclass__ = reflection.GeneratedProtocolMessageType 726fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville myproto_instance = MyProtoClass() 727fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, myproto_instance.foo_field) 728fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not myproto_instance.HasField('foo_field')) 729fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville myproto_instance.foo_field = 23 730fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(23, myproto_instance.foo_field) 731fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(myproto_instance.HasField('foo_field')) 732fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 733fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testTopLevelExtensionsForOptionalScalar(self): 734fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extendee_proto = unittest_pb2.TestAllExtensions() 735fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extension = unittest_pb2.optional_int32_extension 736fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not extendee_proto.HasExtension(extension)) 737fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, extendee_proto.Extensions[extension]) 738fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # As with normal scalar fields, just doing a read doesn't actually set the 739fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # "has" bit. 740fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not extendee_proto.HasExtension(extension)) 741fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Actually set the thing. 742fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extendee_proto.Extensions[extension] = 23 743fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(23, extendee_proto.Extensions[extension]) 744fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(extendee_proto.HasExtension(extension)) 745fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Ensure that clearing works as well. 746fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extendee_proto.ClearExtension(extension) 747fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, extendee_proto.Extensions[extension]) 748fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not extendee_proto.HasExtension(extension)) 749fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 750fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testTopLevelExtensionsForRepeatedScalar(self): 751fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extendee_proto = unittest_pb2.TestAllExtensions() 752fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extension = unittest_pb2.repeated_string_extension 753fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, len(extendee_proto.Extensions[extension])) 754fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extendee_proto.Extensions[extension].append('foo') 755fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(['foo'], extendee_proto.Extensions[extension]) 756fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville string_list = extendee_proto.Extensions[extension] 757fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extendee_proto.ClearExtension(extension) 758fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, len(extendee_proto.Extensions[extension])) 759fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(string_list is not extendee_proto.Extensions[extension]) 760fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Shouldn't be allowed to do Extensions[extension] = 'a' 761fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(TypeError, operator.setitem, extendee_proto.Extensions, 762fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extension, 'a') 763fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 764fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testTopLevelExtensionsForOptionalMessage(self): 765fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extendee_proto = unittest_pb2.TestAllExtensions() 766fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extension = unittest_pb2.optional_foreign_message_extension 767fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not extendee_proto.HasExtension(extension)) 768fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, extendee_proto.Extensions[extension].c) 769fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # As with normal (non-extension) fields, merely reading from the 770fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # thing shouldn't set the "has" bit. 771fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not extendee_proto.HasExtension(extension)) 772fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extendee_proto.Extensions[extension].c = 23 773fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(23, extendee_proto.Extensions[extension].c) 774fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(extendee_proto.HasExtension(extension)) 775fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Save a reference here. 776fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville foreign_message = extendee_proto.Extensions[extension] 777fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extendee_proto.ClearExtension(extension) 778fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(foreign_message is not extendee_proto.Extensions[extension]) 779fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Setting a field on foreign_message now shouldn't set 780fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # any "has" bits on extendee_proto. 781fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville foreign_message.c = 42 782fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(42, foreign_message.c) 783fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(foreign_message.HasField('c')) 784fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not extendee_proto.HasExtension(extension)) 785fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Shouldn't be allowed to do Extensions[extension] = 'a' 786fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(TypeError, operator.setitem, extendee_proto.Extensions, 787fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extension, 'a') 788fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 789fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testTopLevelExtensionsForRepeatedMessage(self): 790fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extendee_proto = unittest_pb2.TestAllExtensions() 791fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extension = unittest_pb2.repeatedgroup_extension 792fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, len(extendee_proto.Extensions[extension])) 793fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville group = extendee_proto.Extensions[extension].add() 794fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville group.a = 23 795fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(23, extendee_proto.Extensions[extension][0].a) 796fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville group.a = 42 797fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(42, extendee_proto.Extensions[extension][0].a) 798fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville group_list = extendee_proto.Extensions[extension] 799fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extendee_proto.ClearExtension(extension) 800fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, len(extendee_proto.Extensions[extension])) 801fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(group_list is not extendee_proto.Extensions[extension]) 802fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Shouldn't be allowed to do Extensions[extension] = 'a' 803fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(TypeError, operator.setitem, extendee_proto.Extensions, 804fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extension, 'a') 805fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 806fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testNestedExtensions(self): 807fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extendee_proto = unittest_pb2.TestAllExtensions() 808fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extension = unittest_pb2.TestRequired.single 809fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 810fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # We just test the non-repeated case. 811fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not extendee_proto.HasExtension(extension)) 812fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville required = extendee_proto.Extensions[extension] 813fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, required.a) 814fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not extendee_proto.HasExtension(extension)) 815fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville required.a = 23 816fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(23, extendee_proto.Extensions[extension].a) 817fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(extendee_proto.HasExtension(extension)) 818fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extendee_proto.ClearExtension(extension) 819fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(required is not extendee_proto.Extensions[extension]) 820fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not extendee_proto.HasExtension(extension)) 821fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 822fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # If message A directly contains message B, and 823fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # a.HasField('b') is currently False, then mutating any 824fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # extension in B should change a.HasField('b') to True 825fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # (and so on up the object tree). 826fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testHasBitsForAncestorsOfExtendedMessage(self): 827fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Optional scalar extension. 828fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville toplevel = more_extensions_pb2.TopLevelMessage() 829fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not toplevel.HasField('submessage')) 830fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, toplevel.submessage.Extensions[ 831fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville more_extensions_pb2.optional_int_extension]) 832fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not toplevel.HasField('submessage')) 833fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville toplevel.submessage.Extensions[ 834fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville more_extensions_pb2.optional_int_extension] = 23 835fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(23, toplevel.submessage.Extensions[ 836fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville more_extensions_pb2.optional_int_extension]) 837fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(toplevel.HasField('submessage')) 838fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 839fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Repeated scalar extension. 840fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville toplevel = more_extensions_pb2.TopLevelMessage() 841fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not toplevel.HasField('submessage')) 842fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual([], toplevel.submessage.Extensions[ 843fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville more_extensions_pb2.repeated_int_extension]) 844fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not toplevel.HasField('submessage')) 845fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville toplevel.submessage.Extensions[ 846fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville more_extensions_pb2.repeated_int_extension].append(23) 847fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual([23], toplevel.submessage.Extensions[ 848fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville more_extensions_pb2.repeated_int_extension]) 849fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(toplevel.HasField('submessage')) 850fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 851fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Optional message extension. 852fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville toplevel = more_extensions_pb2.TopLevelMessage() 853fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not toplevel.HasField('submessage')) 854fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, toplevel.submessage.Extensions[ 855fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville more_extensions_pb2.optional_message_extension].foreign_message_int) 856fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not toplevel.HasField('submessage')) 857fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville toplevel.submessage.Extensions[ 858fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville more_extensions_pb2.optional_message_extension].foreign_message_int = 23 859fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(23, toplevel.submessage.Extensions[ 860fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville more_extensions_pb2.optional_message_extension].foreign_message_int) 861fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(toplevel.HasField('submessage')) 862fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 863fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Repeated message extension. 864fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville toplevel = more_extensions_pb2.TopLevelMessage() 865fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not toplevel.HasField('submessage')) 866fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, len(toplevel.submessage.Extensions[ 867fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville more_extensions_pb2.repeated_message_extension])) 868fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not toplevel.HasField('submessage')) 869fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville foreign = toplevel.submessage.Extensions[ 870fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville more_extensions_pb2.repeated_message_extension].add() 871fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(foreign is toplevel.submessage.Extensions[ 872fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville more_extensions_pb2.repeated_message_extension][0]) 873fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(toplevel.HasField('submessage')) 874fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 875fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testDisconnectionAfterClearingEmptyMessage(self): 876fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville toplevel = more_extensions_pb2.TopLevelMessage() 877fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extendee_proto = toplevel.submessage 878fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extension = more_extensions_pb2.optional_message_extension 879fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extension_proto = extendee_proto.Extensions[extension] 880fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extendee_proto.ClearExtension(extension) 881fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extension_proto.foreign_message_int = 23 882fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 883fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(extension_proto is not extendee_proto.Extensions[extension]) 884fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 885fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testExtensionFailureModes(self): 886fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extendee_proto = unittest_pb2.TestAllExtensions() 887fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 888fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Try non-extension-handle arguments to HasExtension, 889fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # ClearExtension(), and Extensions[]... 890fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(KeyError, extendee_proto.HasExtension, 1234) 891fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(KeyError, extendee_proto.ClearExtension, 1234) 892fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(KeyError, extendee_proto.Extensions.__getitem__, 1234) 893fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(KeyError, extendee_proto.Extensions.__setitem__, 1234, 5) 894fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 895fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Try something that *is* an extension handle, just not for 896fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # this message... 897fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville unknown_handle = more_extensions_pb2.optional_int_extension 898fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(KeyError, extendee_proto.HasExtension, 899fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville unknown_handle) 900fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(KeyError, extendee_proto.ClearExtension, 901fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville unknown_handle) 902fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(KeyError, extendee_proto.Extensions.__getitem__, 903fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville unknown_handle) 904fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(KeyError, extendee_proto.Extensions.__setitem__, 905fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville unknown_handle, 5) 906fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 907fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Try call HasExtension() with a valid handle, but for a 908fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # *repeated* field. (Just as with non-extension repeated 909fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # fields, Has*() isn't supported for extension repeated fields). 910fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(KeyError, extendee_proto.HasExtension, 911fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville unittest_pb2.repeated_string_extension) 912fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 913fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testStaticParseFrom(self): 914fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto1 = unittest_pb2.TestAllTypes() 915fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville test_util.SetAllFields(proto1) 916fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 917fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville string1 = proto1.SerializeToString() 918fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto2 = unittest_pb2.TestAllTypes.FromString(string1) 919fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 920fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Messages should be equal. 921fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(proto2, proto1) 922fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 923fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testMergeFromSingularField(self): 924fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test merge with just a singular field. 925fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto1 = unittest_pb2.TestAllTypes() 926fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto1.optional_int32 = 1 927fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 928fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto2 = unittest_pb2.TestAllTypes() 929fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # This shouldn't get overwritten. 930fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto2.optional_string = 'value' 931fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 932fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto2.MergeFrom(proto1) 933fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(1, proto2.optional_int32) 934fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual('value', proto2.optional_string) 935fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 936fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testMergeFromRepeatedField(self): 937fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test merge with just a repeated field. 938fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto1 = unittest_pb2.TestAllTypes() 939fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto1.repeated_int32.append(1) 940fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto1.repeated_int32.append(2) 941fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 942fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto2 = unittest_pb2.TestAllTypes() 943fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto2.repeated_int32.append(0) 944fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto2.MergeFrom(proto1) 945fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 946fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, proto2.repeated_int32[0]) 947fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(1, proto2.repeated_int32[1]) 948fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(2, proto2.repeated_int32[2]) 949fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 950fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testMergeFromOptionalGroup(self): 951fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test merge with an optional group. 952fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto1 = unittest_pb2.TestAllTypes() 953fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto1.optionalgroup.a = 12 954fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto2 = unittest_pb2.TestAllTypes() 955fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto2.MergeFrom(proto1) 956fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(12, proto2.optionalgroup.a) 957fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 958fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testMergeFromRepeatedNestedMessage(self): 959fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test merge with a repeated nested message. 960fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto1 = unittest_pb2.TestAllTypes() 961fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville m = proto1.repeated_nested_message.add() 962fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville m.bb = 123 963fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville m = proto1.repeated_nested_message.add() 964fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville m.bb = 321 965fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 966fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto2 = unittest_pb2.TestAllTypes() 967fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville m = proto2.repeated_nested_message.add() 968fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville m.bb = 999 969fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto2.MergeFrom(proto1) 970fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(999, proto2.repeated_nested_message[0].bb) 971fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(123, proto2.repeated_nested_message[1].bb) 972fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(321, proto2.repeated_nested_message[2].bb) 973fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 974fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testMergeFromAllFields(self): 975fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # With all fields set. 976fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto1 = unittest_pb2.TestAllTypes() 977fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville test_util.SetAllFields(proto1) 978fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto2 = unittest_pb2.TestAllTypes() 979fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto2.MergeFrom(proto1) 980fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 981fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Messages should be equal. 982fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(proto2, proto1) 983fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 984fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Serialized string should be equal too. 985fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville string1 = proto1.SerializeToString() 986fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville string2 = proto2.SerializeToString() 987fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(string1, string2) 988fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 989fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testMergeFromExtensionsSingular(self): 990fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto1 = unittest_pb2.TestAllExtensions() 991fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto1.Extensions[unittest_pb2.optional_int32_extension] = 1 992fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 993fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto2 = unittest_pb2.TestAllExtensions() 994fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto2.MergeFrom(proto1) 995fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual( 996fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1, proto2.Extensions[unittest_pb2.optional_int32_extension]) 997fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 998fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testMergeFromExtensionsRepeated(self): 999fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto1 = unittest_pb2.TestAllExtensions() 1000fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto1.Extensions[unittest_pb2.repeated_int32_extension].append(1) 1001fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto1.Extensions[unittest_pb2.repeated_int32_extension].append(2) 1002fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1003fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto2 = unittest_pb2.TestAllExtensions() 1004fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto2.Extensions[unittest_pb2.repeated_int32_extension].append(0) 1005fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto2.MergeFrom(proto1) 1006fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual( 1007fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 3, len(proto2.Extensions[unittest_pb2.repeated_int32_extension])) 1008fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual( 1009fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 0, proto2.Extensions[unittest_pb2.repeated_int32_extension][0]) 1010fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual( 1011fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1, proto2.Extensions[unittest_pb2.repeated_int32_extension][1]) 1012fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual( 1013fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 2, proto2.Extensions[unittest_pb2.repeated_int32_extension][2]) 1014fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1015fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testMergeFromExtensionsNestedMessage(self): 1016fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto1 = unittest_pb2.TestAllExtensions() 1017fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville ext1 = proto1.Extensions[ 1018fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville unittest_pb2.repeated_nested_message_extension] 1019fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville m = ext1.add() 1020fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville m.bb = 222 1021fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville m = ext1.add() 1022fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville m.bb = 333 1023fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1024fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto2 = unittest_pb2.TestAllExtensions() 1025fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville ext2 = proto2.Extensions[ 1026fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville unittest_pb2.repeated_nested_message_extension] 1027fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville m = ext2.add() 1028fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville m.bb = 111 1029fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1030fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto2.MergeFrom(proto1) 1031fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville ext2 = proto2.Extensions[ 1032fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville unittest_pb2.repeated_nested_message_extension] 1033fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(3, len(ext2)) 1034fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(111, ext2[0].bb) 1035fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(222, ext2[1].bb) 1036fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(333, ext2[2].bb) 1037fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1038fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testCopyFromSingularField(self): 1039fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test copy with just a singular field. 1040fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto1 = unittest_pb2.TestAllTypes() 1041fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto1.optional_int32 = 1 1042fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto1.optional_string = 'important-text' 1043fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1044fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto2 = unittest_pb2.TestAllTypes() 1045fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto2.optional_string = 'value' 1046fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1047fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto2.CopyFrom(proto1) 1048fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(1, proto2.optional_int32) 1049fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual('important-text', proto2.optional_string) 1050fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1051fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testCopyFromRepeatedField(self): 1052fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test copy with a repeated field. 1053fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto1 = unittest_pb2.TestAllTypes() 1054fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto1.repeated_int32.append(1) 1055fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto1.repeated_int32.append(2) 1056fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1057fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto2 = unittest_pb2.TestAllTypes() 1058fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto2.repeated_int32.append(0) 1059fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto2.CopyFrom(proto1) 1060fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1061fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(1, proto2.repeated_int32[0]) 1062fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(2, proto2.repeated_int32[1]) 1063fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1064fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testCopyFromAllFields(self): 1065fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # With all fields set. 1066fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto1 = unittest_pb2.TestAllTypes() 1067fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville test_util.SetAllFields(proto1) 1068fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto2 = unittest_pb2.TestAllTypes() 1069fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto2.CopyFrom(proto1) 1070fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1071fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Messages should be equal. 1072fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(proto2, proto1) 1073fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1074fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Serialized string should be equal too. 1075fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville string1 = proto1.SerializeToString() 1076fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville string2 = proto2.SerializeToString() 1077fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(string1, string2) 1078fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1079fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testCopyFromSelf(self): 1080fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto1 = unittest_pb2.TestAllTypes() 1081fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto1.repeated_int32.append(1) 1082fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto1.optional_int32 = 2 1083fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto1.optional_string = 'important-text' 1084fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1085fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto1.CopyFrom(proto1) 1086fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(1, proto1.repeated_int32[0]) 1087fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(2, proto1.optional_int32) 1088fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual('important-text', proto1.optional_string) 1089fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1090fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testClear(self): 1091fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestAllTypes() 1092fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville test_util.SetAllFields(proto) 1093fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Clear the message. 1094fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.Clear() 1095fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEquals(proto.ByteSize(), 0) 1096fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville empty_proto = unittest_pb2.TestAllTypes() 1097fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEquals(proto, empty_proto) 1098fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1099fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test if extensions which were set are cleared. 1100fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestAllExtensions() 1101fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville test_util.SetAllExtensions(proto) 1102fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Clear the message. 1103fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.Clear() 1104fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEquals(proto.ByteSize(), 0) 1105fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville empty_proto = unittest_pb2.TestAllExtensions() 1106fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEquals(proto, empty_proto) 1107fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1108d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def assertInitialized(self, proto): 1109d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertTrue(proto.IsInitialized()) 1110d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville # Neither method should raise an exception. 1111d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto.SerializeToString() 1112d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto.SerializePartialToString() 1113d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 1114d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def assertNotInitialized(self, proto): 1115d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertFalse(proto.IsInitialized()) 1116d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertRaises(message.EncodeError, proto.SerializeToString) 1117d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville # "Partial" serialization doesn't care if message is uninitialized. 1118d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto.SerializePartialToString() 1119d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 1120fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testIsInitialized(self): 1121fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Trivial cases - all optional fields and extensions. 1122fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestAllTypes() 1123d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertInitialized(proto) 1124fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestAllExtensions() 1125d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertInitialized(proto) 1126fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1127fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # The case of uninitialized required fields. 1128fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestRequired() 1129d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertNotInitialized(proto) 1130fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.a = proto.b = proto.c = 2 1131d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertInitialized(proto) 1132fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1133fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # The case of uninitialized submessage. 1134fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestRequiredForeign() 1135d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertInitialized(proto) 1136fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.optional_message.a = 1 1137d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertNotInitialized(proto) 1138fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.optional_message.b = 0 1139fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.optional_message.c = 0 1140d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertInitialized(proto) 1141fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1142fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Uninitialized repeated submessage. 1143fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message1 = proto.repeated_message.add() 1144d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertNotInitialized(proto) 1145fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message1.a = message1.b = message1.c = 0 1146d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertInitialized(proto) 1147fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1148fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Uninitialized repeated group in an extension. 1149fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestAllExtensions() 1150fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extension = unittest_pb2.TestRequired.multi 1151fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message1 = proto.Extensions[extension].add() 1152fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message2 = proto.Extensions[extension].add() 1153d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertNotInitialized(proto) 1154fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message1.a = 1 1155fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message1.b = 1 1156fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message1.c = 1 1157d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertNotInitialized(proto) 1158fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message2.a = 2 1159fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message2.b = 2 1160fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message2.c = 2 1161d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertInitialized(proto) 1162fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1163fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Uninitialized nonrepeated message in an extension. 1164fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestAllExtensions() 1165fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extension = unittest_pb2.TestRequired.single 1166fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.Extensions[extension].a = 1 1167d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertNotInitialized(proto) 1168fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.Extensions[extension].b = 2 1169fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.Extensions[extension].c = 3 1170d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertInitialized(proto) 1171d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 1172d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville # Try passing an errors list. 1173d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville errors = [] 1174d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto = unittest_pb2.TestRequired() 1175d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertFalse(proto.IsInitialized(errors)) 1176d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEqual(errors, ['a', 'b', 'c']) 1177fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1178fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testStringUTF8Encoding(self): 1179fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestAllTypes() 1180fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1181fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Assignment of a unicode object to a field of type 'bytes' is not allowed. 1182fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(TypeError, 1183fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville setattr, proto, 'optional_bytes', u'unicode object') 1184fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1185fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Check that the default value is of python's 'unicode' type. 1186fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(type(proto.optional_string), unicode) 1187fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1188fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.optional_string = unicode('Testing') 1189fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(proto.optional_string, str('Testing')) 1190fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1191fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Assign a value of type 'str' which can be encoded in UTF-8. 1192fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.optional_string = str('Testing') 1193fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(proto.optional_string, unicode('Testing')) 1194fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1195fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Values of type 'str' are also accepted as long as they can be encoded in 1196fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # UTF-8. 1197fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(type(proto.optional_string), str) 1198fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1199fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Try to assign a 'str' value which contains bytes that aren't 7-bit ASCII. 1200fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(ValueError, 1201fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville setattr, proto, 'optional_string', str('a\x80a')) 1202fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Assign a 'str' object which contains a UTF-8 encoded string. 1203fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(ValueError, 1204fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville setattr, proto, 'optional_string', 'Тест') 1205fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # No exception thrown. 1206fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.optional_string = 'abc' 1207fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1208fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testStringUTF8Serialization(self): 1209fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_mset_pb2.TestMessageSet() 1210fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extension_message = unittest_mset_pb2.TestMessageSetExtension2 1211fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extension = extension_message.message_set_extension 1212fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1213fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville test_utf8 = u'Тест' 1214fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville test_utf8_bytes = test_utf8.encode('utf-8') 1215fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1216fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # 'Test' in another language, using UTF-8 charset. 1217fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.Extensions[extension].str = test_utf8 1218fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1219fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Serialize using the MessageSet wire format (this is specified in the 1220fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # .proto file). 1221fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville serialized = proto.SerializeToString() 1222fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1223fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Check byte size. 1224fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(proto.ByteSize(), len(serialized)) 1225fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1226fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville raw = unittest_mset_pb2.RawMessageSet() 1227fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville raw.MergeFromString(serialized) 1228fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1229fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message2 = unittest_mset_pb2.TestMessageSetExtension2() 1230fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1231fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(1, len(raw.item)) 1232fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Check that the type_id is the same as the tag ID in the .proto file. 1233fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(raw.item[0].type_id, 1547769) 1234fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1235fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Check the actually bytes on the wire. 1236fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue( 1237fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville raw.item[0].message.endswith(test_utf8_bytes)) 1238fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message2.MergeFromString(raw.item[0].message) 1239fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1240fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(type(message2.str), unicode) 1241fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(message2.str, test_utf8) 1242fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1243fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # How about if the bytes on the wire aren't a valid UTF-8 encoded string. 1244fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville bytes = raw.item[0].message.replace( 1245fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville test_utf8_bytes, len(test_utf8_bytes) * '\xff') 1246fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(UnicodeDecodeError, message2.MergeFromString, bytes) 1247fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1248d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def testEmptyNestedMessage(self): 1249d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto = unittest_pb2.TestAllTypes() 1250d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto.optional_nested_message.MergeFrom( 1251d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.TestAllTypes.NestedMessage()) 1252d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertTrue(proto.HasField('optional_nested_message')) 1253d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 1254d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto = unittest_pb2.TestAllTypes() 1255d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto.optional_nested_message.CopyFrom( 1256d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.TestAllTypes.NestedMessage()) 1257d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertTrue(proto.HasField('optional_nested_message')) 1258d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 1259d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto = unittest_pb2.TestAllTypes() 1260d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto.optional_nested_message.MergeFromString('') 1261d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertTrue(proto.HasField('optional_nested_message')) 1262d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 1263d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto = unittest_pb2.TestAllTypes() 1264d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto.optional_nested_message.ParseFromString('') 1265d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertTrue(proto.HasField('optional_nested_message')) 1266d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 1267d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville serialized = proto.SerializeToString() 1268d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto2 = unittest_pb2.TestAllTypes() 1269d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto2.MergeFromString(serialized) 1270d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertTrue(proto2.HasField('optional_nested_message')) 1271d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 1272d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def testSetInParent(self): 1273d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto = unittest_pb2.TestAllTypes() 1274d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertFalse(proto.HasField('optionalgroup')) 1275d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto.optionalgroup.SetInParent() 1276d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertTrue(proto.HasField('optionalgroup')) 1277d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 1278fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1279fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# Since we had so many tests for protocol buffer equality, we broke these out 1280fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# into separate TestCase classes. 1281fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1282fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1283fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleclass TestAllTypesEqualityTest(unittest.TestCase): 1284fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1285fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def setUp(self): 1286fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.first_proto = unittest_pb2.TestAllTypes() 1287fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.second_proto = unittest_pb2.TestAllTypes() 1288fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1289fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testSelfEquality(self): 1290fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(self.first_proto, self.first_proto) 1291fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1292fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testEmptyProtosEqual(self): 1293fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(self.first_proto, self.second_proto) 1294fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1295fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1296fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleclass FullProtosEqualityTest(unittest.TestCase): 1297fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1298fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """Equality tests using completely-full protos as a starting point.""" 1299fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1300fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def setUp(self): 1301fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.first_proto = unittest_pb2.TestAllTypes() 1302fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.second_proto = unittest_pb2.TestAllTypes() 1303fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville test_util.SetAllFields(self.first_proto) 1304fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville test_util.SetAllFields(self.second_proto) 1305fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1306fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testNoneNotEqual(self): 1307fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertNotEqual(self.first_proto, None) 1308fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertNotEqual(None, self.second_proto) 1309fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1310fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testNotEqualToOtherMessage(self): 1311fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville third_proto = unittest_pb2.TestRequired() 1312fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertNotEqual(self.first_proto, third_proto) 1313fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertNotEqual(third_proto, self.second_proto) 1314fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1315fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testAllFieldsFilledEquality(self): 1316fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(self.first_proto, self.second_proto) 1317fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1318fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testNonRepeatedScalar(self): 1319fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Nonrepeated scalar field change should cause inequality. 1320fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.first_proto.optional_int32 += 1 1321fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertNotEqual(self.first_proto, self.second_proto) 1322fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # ...as should clearing a field. 1323fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.first_proto.ClearField('optional_int32') 1324fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertNotEqual(self.first_proto, self.second_proto) 1325fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1326fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testNonRepeatedComposite(self): 1327fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Change a nonrepeated composite field. 1328fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.first_proto.optional_nested_message.bb += 1 1329fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertNotEqual(self.first_proto, self.second_proto) 1330fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.first_proto.optional_nested_message.bb -= 1 1331fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(self.first_proto, self.second_proto) 1332fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Clear a field in the nested message. 1333fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.first_proto.optional_nested_message.ClearField('bb') 1334fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertNotEqual(self.first_proto, self.second_proto) 1335fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.first_proto.optional_nested_message.bb = ( 1336fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.second_proto.optional_nested_message.bb) 1337fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(self.first_proto, self.second_proto) 1338fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Remove the nested message entirely. 1339fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.first_proto.ClearField('optional_nested_message') 1340fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertNotEqual(self.first_proto, self.second_proto) 1341fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1342fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testRepeatedScalar(self): 1343fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Change a repeated scalar field. 1344fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.first_proto.repeated_int32.append(5) 1345fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertNotEqual(self.first_proto, self.second_proto) 1346fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.first_proto.ClearField('repeated_int32') 1347fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertNotEqual(self.first_proto, self.second_proto) 1348fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1349fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testRepeatedComposite(self): 1350fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Change value within a repeated composite field. 1351fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.first_proto.repeated_nested_message[0].bb += 1 1352fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertNotEqual(self.first_proto, self.second_proto) 1353fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.first_proto.repeated_nested_message[0].bb -= 1 1354fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(self.first_proto, self.second_proto) 1355fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Add a value to a repeated composite field. 1356fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.first_proto.repeated_nested_message.add() 1357fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertNotEqual(self.first_proto, self.second_proto) 1358fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.second_proto.repeated_nested_message.add() 1359fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(self.first_proto, self.second_proto) 1360fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1361fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testNonRepeatedScalarHasBits(self): 1362fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Ensure that we test "has" bits as well as value for 1363fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # nonrepeated scalar field. 1364fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.first_proto.ClearField('optional_int32') 1365fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.second_proto.optional_int32 = 0 1366fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertNotEqual(self.first_proto, self.second_proto) 1367fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1368fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testNonRepeatedCompositeHasBits(self): 1369fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Ensure that we test "has" bits as well as value for 1370fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # nonrepeated composite field. 1371fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.first_proto.ClearField('optional_nested_message') 1372fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.second_proto.optional_nested_message.ClearField('bb') 1373fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertNotEqual(self.first_proto, self.second_proto) 1374fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # TODO(robinson): Replace next two lines with method 1375fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # to set the "has" bit without changing the value, 1376fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # if/when such a method exists. 1377fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.first_proto.optional_nested_message.bb = 0 1378fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.first_proto.optional_nested_message.ClearField('bb') 1379fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(self.first_proto, self.second_proto) 1380fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1381fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1382fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleclass ExtensionEqualityTest(unittest.TestCase): 1383fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1384fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testExtensionEquality(self): 1385fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville first_proto = unittest_pb2.TestAllExtensions() 1386fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville second_proto = unittest_pb2.TestAllExtensions() 1387fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(first_proto, second_proto) 1388fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville test_util.SetAllExtensions(first_proto) 1389fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertNotEqual(first_proto, second_proto) 1390fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville test_util.SetAllExtensions(second_proto) 1391fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(first_proto, second_proto) 1392fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1393fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Ensure that we check value equality. 1394fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville first_proto.Extensions[unittest_pb2.optional_int32_extension] += 1 1395fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertNotEqual(first_proto, second_proto) 1396fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville first_proto.Extensions[unittest_pb2.optional_int32_extension] -= 1 1397fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(first_proto, second_proto) 1398fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1399fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Ensure that we also look at "has" bits. 1400fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville first_proto.ClearExtension(unittest_pb2.optional_int32_extension) 1401fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville second_proto.Extensions[unittest_pb2.optional_int32_extension] = 0 1402fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertNotEqual(first_proto, second_proto) 1403fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville first_proto.Extensions[unittest_pb2.optional_int32_extension] = 0 1404fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(first_proto, second_proto) 1405fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1406fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Ensure that differences in cached values 1407fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # don't matter if "has" bits are both false. 1408fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville first_proto = unittest_pb2.TestAllExtensions() 1409fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville second_proto = unittest_pb2.TestAllExtensions() 1410fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual( 1411fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 0, first_proto.Extensions[unittest_pb2.optional_int32_extension]) 1412fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(first_proto, second_proto) 1413fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1414fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1415fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleclass MutualRecursionEqualityTest(unittest.TestCase): 1416fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1417fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testEqualityWithMutualRecursion(self): 1418fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville first_proto = unittest_pb2.TestMutualRecursionA() 1419fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville second_proto = unittest_pb2.TestMutualRecursionA() 1420fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(first_proto, second_proto) 1421fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville first_proto.bb.a.bb.optional_int32 = 23 1422fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertNotEqual(first_proto, second_proto) 1423fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville second_proto.bb.a.bb.optional_int32 = 23 1424fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(first_proto, second_proto) 1425fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1426fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1427fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleclass ByteSizeTest(unittest.TestCase): 1428fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1429fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def setUp(self): 1430fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.proto = unittest_pb2.TestAllTypes() 1431fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.extended_proto = more_extensions_pb2.ExtendedMessage() 1432fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.packed_proto = unittest_pb2.TestPackedTypes() 1433fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.packed_extended_proto = unittest_pb2.TestPackedExtensions() 1434fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1435fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def Size(self): 1436fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return self.proto.ByteSize() 1437fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1438fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testEmptyMessage(self): 1439fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, self.proto.ByteSize()) 1440fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1441fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testVarints(self): 1442fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def Test(i, expected_varint_size): 1443fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.proto.Clear() 1444fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.proto.optional_int64 = i 1445fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Add one to the varint size for the tag info 1446fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # for tag 1. 1447fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(expected_varint_size + 1, self.Size()) 1448fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Test(0, 1) 1449fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Test(1, 1) 1450fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville for i, num_bytes in zip(range(7, 63, 7), range(1, 10000)): 1451fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Test((1 << i) - 1, num_bytes) 1452fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Test(-1, 10) 1453fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Test(-2, 10) 1454fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Test(-(1 << 63), 10) 1455fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1456fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testStrings(self): 1457fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.proto.optional_string = '' 1458fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Need one byte for tag info (tag #14), and one byte for length. 1459fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(2, self.Size()) 1460fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1461fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.proto.optional_string = 'abc' 1462fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Need one byte for tag info (tag #14), and one byte for length. 1463fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(2 + len(self.proto.optional_string), self.Size()) 1464fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1465fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.proto.optional_string = 'x' * 128 1466fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Need one byte for tag info (tag #14), and TWO bytes for length. 1467fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(3 + len(self.proto.optional_string), self.Size()) 1468fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1469fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testOtherNumerics(self): 1470fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.proto.optional_fixed32 = 1234 1471fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # One byte for tag and 4 bytes for fixed32. 1472fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(5, self.Size()) 1473fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.proto = unittest_pb2.TestAllTypes() 1474fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1475fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.proto.optional_fixed64 = 1234 1476fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # One byte for tag and 8 bytes for fixed64. 1477fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(9, self.Size()) 1478fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.proto = unittest_pb2.TestAllTypes() 1479fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1480fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.proto.optional_float = 1.234 1481fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # One byte for tag and 4 bytes for float. 1482fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(5, self.Size()) 1483fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.proto = unittest_pb2.TestAllTypes() 1484fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1485fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.proto.optional_double = 1.234 1486fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # One byte for tag and 8 bytes for float. 1487fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(9, self.Size()) 1488fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.proto = unittest_pb2.TestAllTypes() 1489fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1490fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.proto.optional_sint32 = 64 1491fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # One byte for tag and 2 bytes for zig-zag-encoded 64. 1492fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(3, self.Size()) 1493fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.proto = unittest_pb2.TestAllTypes() 1494fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1495fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testComposites(self): 1496fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # 3 bytes. 1497fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.proto.optional_nested_message.bb = (1 << 14) 1498fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Plus one byte for bb tag. 1499fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Plus 1 byte for optional_nested_message serialized size. 1500fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Plus two bytes for optional_nested_message tag. 1501fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(3 + 1 + 1 + 2, self.Size()) 1502fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1503fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testGroups(self): 1504fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # 4 bytes. 1505fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.proto.optionalgroup.a = (1 << 21) 1506fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Plus two bytes for |a| tag. 1507fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Plus 2 * two bytes for START_GROUP and END_GROUP tags. 1508fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(4 + 2 + 2*2, self.Size()) 1509fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1510fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testRepeatedScalars(self): 1511fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.proto.repeated_int32.append(10) # 1 byte. 1512fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.proto.repeated_int32.append(128) # 2 bytes. 1513fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Also need 2 bytes for each entry for tag. 1514fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(1 + 2 + 2*2, self.Size()) 1515fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1516fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testRepeatedScalarsExtend(self): 1517fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.proto.repeated_int32.extend([10, 128]) # 3 bytes. 1518fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Also need 2 bytes for each entry for tag. 1519fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(1 + 2 + 2*2, self.Size()) 1520fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1521fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testRepeatedScalarsRemove(self): 1522fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.proto.repeated_int32.append(10) # 1 byte. 1523fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.proto.repeated_int32.append(128) # 2 bytes. 1524fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Also need 2 bytes for each entry for tag. 1525fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(1 + 2 + 2*2, self.Size()) 1526fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.proto.repeated_int32.remove(128) 1527fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(1 + 2, self.Size()) 1528fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1529fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testRepeatedComposites(self): 1530fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Empty message. 2 bytes tag plus 1 byte length. 1531fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville foreign_message_0 = self.proto.repeated_nested_message.add() 1532fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # 2 bytes tag plus 1 byte length plus 1 byte bb tag 1 byte int. 1533fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville foreign_message_1 = self.proto.repeated_nested_message.add() 1534fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville foreign_message_1.bb = 7 1535fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(2 + 1 + 2 + 1 + 1 + 1, self.Size()) 1536fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1537fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testRepeatedCompositesDelete(self): 1538fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Empty message. 2 bytes tag plus 1 byte length. 1539fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville foreign_message_0 = self.proto.repeated_nested_message.add() 1540fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # 2 bytes tag plus 1 byte length plus 1 byte bb tag 1 byte int. 1541fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville foreign_message_1 = self.proto.repeated_nested_message.add() 1542fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville foreign_message_1.bb = 9 1543fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(2 + 1 + 2 + 1 + 1 + 1, self.Size()) 1544fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1545fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # 2 bytes tag plus 1 byte length plus 1 byte bb tag 1 byte int. 1546fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville del self.proto.repeated_nested_message[0] 1547fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(2 + 1 + 1 + 1, self.Size()) 1548fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1549fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Now add a new message. 1550fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville foreign_message_2 = self.proto.repeated_nested_message.add() 1551fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville foreign_message_2.bb = 12 1552fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1553fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # 2 bytes tag plus 1 byte length plus 1 byte bb tag 1 byte int. 1554fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # 2 bytes tag plus 1 byte length plus 1 byte bb tag 1 byte int. 1555fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(2 + 1 + 1 + 1 + 2 + 1 + 1 + 1, self.Size()) 1556fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1557fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # 2 bytes tag plus 1 byte length plus 1 byte bb tag 1 byte int. 1558fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville del self.proto.repeated_nested_message[1] 1559fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(2 + 1 + 1 + 1, self.Size()) 1560fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1561fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville del self.proto.repeated_nested_message[0] 1562fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, self.Size()) 1563fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1564fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testRepeatedGroups(self): 1565fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # 2-byte START_GROUP plus 2-byte END_GROUP. 1566fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville group_0 = self.proto.repeatedgroup.add() 1567fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # 2-byte START_GROUP plus 2-byte |a| tag + 1-byte |a| 1568fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # plus 2-byte END_GROUP. 1569fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville group_1 = self.proto.repeatedgroup.add() 1570fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville group_1.a = 7 1571fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(2 + 2 + 2 + 2 + 1 + 2, self.Size()) 1572fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1573fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testExtensions(self): 1574fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestAllExtensions() 1575fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, proto.ByteSize()) 1576fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extension = unittest_pb2.optional_int32_extension # Field #1, 1 byte. 1577fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.Extensions[extension] = 23 1578fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # 1 byte for tag, 1 byte for value. 1579fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(2, proto.ByteSize()) 1580fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1581fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testCacheInvalidationForNonrepeatedScalar(self): 1582fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test non-extension. 1583fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.proto.optional_int32 = 1 1584fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(2, self.proto.ByteSize()) 1585fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.proto.optional_int32 = 128 1586fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(3, self.proto.ByteSize()) 1587fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.proto.ClearField('optional_int32') 1588fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, self.proto.ByteSize()) 1589fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1590fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test within extension. 1591fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extension = more_extensions_pb2.optional_int_extension 1592fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.extended_proto.Extensions[extension] = 1 1593fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(2, self.extended_proto.ByteSize()) 1594fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.extended_proto.Extensions[extension] = 128 1595fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(3, self.extended_proto.ByteSize()) 1596fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.extended_proto.ClearExtension(extension) 1597fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, self.extended_proto.ByteSize()) 1598fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1599fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testCacheInvalidationForRepeatedScalar(self): 1600fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test non-extension. 1601fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.proto.repeated_int32.append(1) 1602fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(3, self.proto.ByteSize()) 1603fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.proto.repeated_int32.append(1) 1604fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(6, self.proto.ByteSize()) 1605fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.proto.repeated_int32[1] = 128 1606fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(7, self.proto.ByteSize()) 1607fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.proto.ClearField('repeated_int32') 1608fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, self.proto.ByteSize()) 1609fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1610fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test within extension. 1611fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extension = more_extensions_pb2.repeated_int_extension 1612fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville repeated = self.extended_proto.Extensions[extension] 1613fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville repeated.append(1) 1614fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(2, self.extended_proto.ByteSize()) 1615fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville repeated.append(1) 1616fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(4, self.extended_proto.ByteSize()) 1617fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville repeated[1] = 128 1618fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(5, self.extended_proto.ByteSize()) 1619fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.extended_proto.ClearExtension(extension) 1620fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, self.extended_proto.ByteSize()) 1621fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1622fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testCacheInvalidationForNonrepeatedMessage(self): 1623fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test non-extension. 1624fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.proto.optional_foreign_message.c = 1 1625fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(5, self.proto.ByteSize()) 1626fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.proto.optional_foreign_message.c = 128 1627fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(6, self.proto.ByteSize()) 1628fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.proto.optional_foreign_message.ClearField('c') 1629fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(3, self.proto.ByteSize()) 1630fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.proto.ClearField('optional_foreign_message') 1631fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, self.proto.ByteSize()) 1632fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville child = self.proto.optional_foreign_message 1633fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.proto.ClearField('optional_foreign_message') 1634fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville child.c = 128 1635fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, self.proto.ByteSize()) 1636fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1637fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test within extension. 1638fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extension = more_extensions_pb2.optional_message_extension 1639fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville child = self.extended_proto.Extensions[extension] 1640fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, self.extended_proto.ByteSize()) 1641fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville child.foreign_message_int = 1 1642fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(4, self.extended_proto.ByteSize()) 1643fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville child.foreign_message_int = 128 1644fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(5, self.extended_proto.ByteSize()) 1645fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.extended_proto.ClearExtension(extension) 1646fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, self.extended_proto.ByteSize()) 1647fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1648fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testCacheInvalidationForRepeatedMessage(self): 1649fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test non-extension. 1650fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville child0 = self.proto.repeated_foreign_message.add() 1651fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(3, self.proto.ByteSize()) 1652fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.proto.repeated_foreign_message.add() 1653fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(6, self.proto.ByteSize()) 1654fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville child0.c = 1 1655fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(8, self.proto.ByteSize()) 1656fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.proto.ClearField('repeated_foreign_message') 1657fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, self.proto.ByteSize()) 1658fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1659fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test within extension. 1660fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extension = more_extensions_pb2.repeated_message_extension 1661fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville child_list = self.extended_proto.Extensions[extension] 1662fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville child0 = child_list.add() 1663fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(2, self.extended_proto.ByteSize()) 1664fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville child_list.add() 1665fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(4, self.extended_proto.ByteSize()) 1666fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville child0.foreign_message_int = 1 1667fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(6, self.extended_proto.ByteSize()) 1668fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville child0.ClearField('foreign_message_int') 1669fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(4, self.extended_proto.ByteSize()) 1670fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.extended_proto.ClearExtension(extension) 1671fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, self.extended_proto.ByteSize()) 1672fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1673fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testPackedRepeatedScalars(self): 1674fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, self.packed_proto.ByteSize()) 1675fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1676fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.packed_proto.packed_int32.append(10) # 1 byte. 1677fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.packed_proto.packed_int32.append(128) # 2 bytes. 1678fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # The tag is 2 bytes (the field number is 90), and the varint 1679fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # storing the length is 1 byte. 1680fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville int_size = 1 + 2 + 3 1681fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(int_size, self.packed_proto.ByteSize()) 1682fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1683fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.packed_proto.packed_double.append(4.2) # 8 bytes 1684fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.packed_proto.packed_double.append(3.25) # 8 bytes 1685fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # 2 more tag bytes, 1 more length byte. 1686fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville double_size = 8 + 8 + 3 1687fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(int_size+double_size, self.packed_proto.ByteSize()) 1688fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1689fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.packed_proto.ClearField('packed_int32') 1690fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(double_size, self.packed_proto.ByteSize()) 1691fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1692fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testPackedExtensions(self): 1693fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, self.packed_extended_proto.ByteSize()) 1694fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extension = self.packed_extended_proto.Extensions[ 1695fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville unittest_pb2.packed_fixed32_extension] 1696fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extension.extend([1, 2, 3, 4]) # 16 bytes 1697fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Tag is 3 bytes. 1698fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(19, self.packed_extended_proto.ByteSize()) 1699fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1700fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1701fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# TODO(robinson): We need cross-language serialization consistency tests. 1702fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# Issues to be sure to cover include: 1703fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# * Handling of unrecognized tags ("uninterpreted_bytes"). 1704fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# * Handling of MessageSets. 1705fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# * Consistent ordering of tags in the wire format, 1706fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# including ordering between extensions and non-extension 1707fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# fields. 1708fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# * Consistent serialization of negative numbers, especially 1709fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# negative int32s. 1710fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# * Handling of empty submessages (with and without "has" 1711fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# bits set). 1712fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1713fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleclass SerializationTest(unittest.TestCase): 1714fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1715fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testSerializeEmtpyMessage(self): 1716fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville first_proto = unittest_pb2.TestAllTypes() 1717fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville second_proto = unittest_pb2.TestAllTypes() 1718fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville serialized = first_proto.SerializeToString() 1719fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(first_proto.ByteSize(), len(serialized)) 1720fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville second_proto.MergeFromString(serialized) 1721fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(first_proto, second_proto) 1722fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1723fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testSerializeAllFields(self): 1724fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville first_proto = unittest_pb2.TestAllTypes() 1725fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville second_proto = unittest_pb2.TestAllTypes() 1726fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville test_util.SetAllFields(first_proto) 1727fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville serialized = first_proto.SerializeToString() 1728fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(first_proto.ByteSize(), len(serialized)) 1729fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville second_proto.MergeFromString(serialized) 1730fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(first_proto, second_proto) 1731fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1732fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testSerializeAllExtensions(self): 1733fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville first_proto = unittest_pb2.TestAllExtensions() 1734fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville second_proto = unittest_pb2.TestAllExtensions() 1735fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville test_util.SetAllExtensions(first_proto) 1736fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville serialized = first_proto.SerializeToString() 1737fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville second_proto.MergeFromString(serialized) 1738fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(first_proto, second_proto) 1739fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1740d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def testSerializeNegativeValues(self): 1741d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville first_proto = unittest_pb2.TestAllTypes() 1742d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 1743d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville first_proto.optional_int32 = -1 1744d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville first_proto.optional_int64 = -(2 << 40) 1745d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville first_proto.optional_sint32 = -3 1746d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville first_proto.optional_sint64 = -(4 << 40) 1747d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville first_proto.optional_sfixed32 = -5 1748d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville first_proto.optional_sfixed64 = -(6 << 40) 1749d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 1750d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville second_proto = unittest_pb2.TestAllTypes.FromString( 1751d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville first_proto.SerializeToString()) 1752d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 1753d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEqual(first_proto, second_proto) 1754d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 1755d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def testParseTruncated(self): 1756d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville first_proto = unittest_pb2.TestAllTypes() 1757d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville test_util.SetAllFields(first_proto) 1758d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville serialized = first_proto.SerializeToString() 1759d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 1760d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville for truncation_point in xrange(len(serialized) + 1): 1761d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville try: 1762d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville second_proto = unittest_pb2.TestAllTypes() 1763d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unknown_fields = unittest_pb2.TestEmptyMessage() 1764d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville pos = second_proto._InternalParse(serialized, 0, truncation_point) 1765d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville # If we didn't raise an error then we read exactly the amount expected. 1766d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEqual(truncation_point, pos) 1767d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 1768d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville # Parsing to unknown fields should not throw if parsing to known fields 1769d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville # did not. 1770d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville try: 1771d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville pos2 = unknown_fields._InternalParse(serialized, 0, truncation_point) 1772d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEqual(truncation_point, pos2) 1773d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville except message.DecodeError: 1774d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.fail('Parsing unknown fields failed when parsing known fields ' 1775d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 'did not.') 1776d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville except message.DecodeError: 1777d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville # Parsing unknown fields should also fail. 1778d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertRaises(message.DecodeError, unknown_fields._InternalParse, 1779d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville serialized, 0, truncation_point) 1780d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 1781fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testCanonicalSerializationOrder(self): 1782fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = more_messages_pb2.OutOfOrderFields() 1783fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # These are also their tag numbers. Even though we're setting these in 1784fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # reverse-tag order AND they're listed in reverse tag-order in the .proto 1785fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # file, they should nonetheless be serialized in tag order. 1786fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.optional_sint32 = 5 1787fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.Extensions[more_messages_pb2.optional_uint64] = 4 1788fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.optional_uint32 = 3 1789fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.Extensions[more_messages_pb2.optional_int64] = 2 1790fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.optional_int32 = 1 1791fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville serialized = proto.SerializeToString() 1792fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(proto.ByteSize(), len(serialized)) 1793d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville d = _MiniDecoder(serialized) 1794fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville ReadTag = d.ReadFieldNumberAndWireType 1795fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual((1, wire_format.WIRETYPE_VARINT), ReadTag()) 1796fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(1, d.ReadInt32()) 1797fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual((2, wire_format.WIRETYPE_VARINT), ReadTag()) 1798fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(2, d.ReadInt64()) 1799fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual((3, wire_format.WIRETYPE_VARINT), ReadTag()) 1800fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(3, d.ReadUInt32()) 1801fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual((4, wire_format.WIRETYPE_VARINT), ReadTag()) 1802fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(4, d.ReadUInt64()) 1803fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual((5, wire_format.WIRETYPE_VARINT), ReadTag()) 1804fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(5, d.ReadSInt32()) 1805fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1806fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testCanonicalSerializationOrderSameAsCpp(self): 1807fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Copy of the same test we use for C++. 1808fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestFieldOrderings() 1809fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville test_util.SetAllFieldsAndExtensions(proto) 1810fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville serialized = proto.SerializeToString() 1811fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville test_util.ExpectAllFieldsAndExtensionsInOrder(serialized) 1812fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1813fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testMergeFromStringWhenFieldsAlreadySet(self): 1814fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville first_proto = unittest_pb2.TestAllTypes() 1815fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville first_proto.repeated_string.append('foobar') 1816fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville first_proto.optional_int32 = 23 1817fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville first_proto.optional_nested_message.bb = 42 1818fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville serialized = first_proto.SerializeToString() 1819fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1820fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville second_proto = unittest_pb2.TestAllTypes() 1821fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville second_proto.repeated_string.append('baz') 1822fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville second_proto.optional_int32 = 100 1823fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville second_proto.optional_nested_message.bb = 999 1824fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1825fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville second_proto.MergeFromString(serialized) 1826fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Ensure that we append to repeated fields. 1827fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(['baz', 'foobar'], list(second_proto.repeated_string)) 1828fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Ensure that we overwrite nonrepeatd scalars. 1829fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(23, second_proto.optional_int32) 1830fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Ensure that we recursively call MergeFromString() on 1831fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # submessages. 1832fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(42, second_proto.optional_nested_message.bb) 1833fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1834fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testMessageSetWireFormat(self): 1835fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_mset_pb2.TestMessageSet() 1836fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extension_message1 = unittest_mset_pb2.TestMessageSetExtension1 1837fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extension_message2 = unittest_mset_pb2.TestMessageSetExtension2 1838fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extension1 = extension_message1.message_set_extension 1839fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extension2 = extension_message2.message_set_extension 1840fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.Extensions[extension1].i = 123 1841fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.Extensions[extension2].str = 'foo' 1842fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1843fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Serialize using the MessageSet wire format (this is specified in the 1844fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # .proto file). 1845fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville serialized = proto.SerializeToString() 1846fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1847fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville raw = unittest_mset_pb2.RawMessageSet() 1848fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(False, 1849fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville raw.DESCRIPTOR.GetOptions().message_set_wire_format) 1850fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville raw.MergeFromString(serialized) 1851fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(2, len(raw.item)) 1852fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1853fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message1 = unittest_mset_pb2.TestMessageSetExtension1() 1854fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message1.MergeFromString(raw.item[0].message) 1855fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(123, message1.i) 1856fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1857fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message2 = unittest_mset_pb2.TestMessageSetExtension2() 1858fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message2.MergeFromString(raw.item[1].message) 1859fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual('foo', message2.str) 1860fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1861fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Deserialize using the MessageSet wire format. 1862fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto2 = unittest_mset_pb2.TestMessageSet() 1863fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto2.MergeFromString(serialized) 1864fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(123, proto2.Extensions[extension1].i) 1865fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual('foo', proto2.Extensions[extension2].str) 1866fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1867fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Check byte size. 1868fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(proto2.ByteSize(), len(serialized)) 1869fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(proto.ByteSize(), len(serialized)) 1870fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1871fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testMessageSetWireFormatUnknownExtension(self): 1872fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Create a message using the message set wire format with an unknown 1873fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # message. 1874fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville raw = unittest_mset_pb2.RawMessageSet() 1875fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1876fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Add an item. 1877fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville item = raw.item.add() 1878fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville item.type_id = 1545008 1879fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extension_message1 = unittest_mset_pb2.TestMessageSetExtension1 1880fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message1 = unittest_mset_pb2.TestMessageSetExtension1() 1881fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message1.i = 12345 1882fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville item.message = message1.SerializeToString() 1883fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1884fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Add a second, unknown extension. 1885fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville item = raw.item.add() 1886fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville item.type_id = 1545009 1887fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extension_message1 = unittest_mset_pb2.TestMessageSetExtension1 1888fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message1 = unittest_mset_pb2.TestMessageSetExtension1() 1889fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message1.i = 12346 1890fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville item.message = message1.SerializeToString() 1891fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1892fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Add another unknown extension. 1893fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville item = raw.item.add() 1894fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville item.type_id = 1545010 1895fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message1 = unittest_mset_pb2.TestMessageSetExtension2() 1896fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message1.str = 'foo' 1897fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville item.message = message1.SerializeToString() 1898fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1899fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville serialized = raw.SerializeToString() 1900fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1901fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Parse message using the message set wire format. 1902fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_mset_pb2.TestMessageSet() 1903fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.MergeFromString(serialized) 1904fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1905fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Check that the message parsed well. 1906fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extension_message1 = unittest_mset_pb2.TestMessageSetExtension1 1907fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extension1 = extension_message1.message_set_extension 1908fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEquals(12345, proto.Extensions[extension1].i) 1909fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1910fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testUnknownFields(self): 1911fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestAllTypes() 1912fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville test_util.SetAllFields(proto) 1913fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1914fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville serialized = proto.SerializeToString() 1915fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1916fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # The empty message should be parsable with all of the fields 1917fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # unknown. 1918fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto2 = unittest_pb2.TestEmptyMessage() 1919fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1920fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Parsing this message should succeed. 1921fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto2.MergeFromString(serialized) 1922fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1923fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Now test with a int64 field set. 1924fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestAllTypes() 1925fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.optional_int64 = 0x0fffffffffffffff 1926fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville serialized = proto.SerializeToString() 1927fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # The empty message should be parsable with all of the fields 1928fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # unknown. 1929fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto2 = unittest_pb2.TestEmptyMessage() 1930fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Parsing this message should succeed. 1931fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto2.MergeFromString(serialized) 1932fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1933fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def _CheckRaises(self, exc_class, callable_obj, exception): 1934fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville """This method checks if the excpetion type and message are as expected.""" 1935fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville try: 1936fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville callable_obj() 1937fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville except exc_class, ex: 1938fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Check if the exception message is the right one. 1939fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(exception, str(ex)) 1940fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return 1941fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville else: 1942fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville raise self.failureException('%s not raised' % str(exc_class)) 1943fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1944fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testSerializeUninitialized(self): 1945fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestRequired() 1946fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self._CheckRaises( 1947fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message.EncodeError, 1948fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.SerializeToString, 1949d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 'Message is missing required fields: a,b,c') 1950fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Shouldn't raise exceptions. 1951fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville partial = proto.SerializePartialToString() 1952fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1953fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.a = 1 1954fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self._CheckRaises( 1955fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message.EncodeError, 1956fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.SerializeToString, 1957d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 'Message is missing required fields: b,c') 1958fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Shouldn't raise exceptions. 1959fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville partial = proto.SerializePartialToString() 1960fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1961fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.b = 2 1962fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self._CheckRaises( 1963fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message.EncodeError, 1964fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.SerializeToString, 1965d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 'Message is missing required fields: c') 1966fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Shouldn't raise exceptions. 1967fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville partial = proto.SerializePartialToString() 1968fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1969fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.c = 3 1970fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville serialized = proto.SerializeToString() 1971fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Shouldn't raise exceptions. 1972fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville partial = proto.SerializePartialToString() 1973fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1974fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto2 = unittest_pb2.TestRequired() 1975fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto2.MergeFromString(serialized) 1976fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(1, proto2.a) 1977fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(2, proto2.b) 1978fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(3, proto2.c) 1979fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto2.ParseFromString(partial) 1980fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(1, proto2.a) 1981fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(2, proto2.b) 1982fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(3, proto2.c) 1983fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 1984d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def testSerializeUninitializedSubMessage(self): 1985d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto = unittest_pb2.TestRequiredForeign() 1986d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 1987d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville # Sub-message doesn't exist yet, so this succeeds. 1988d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto.SerializeToString() 1989d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 1990d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto.optional_message.a = 1 1991d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self._CheckRaises( 1992d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville message.EncodeError, 1993d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto.SerializeToString, 1994d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 'Message is missing required fields: ' 1995d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 'optional_message.b,optional_message.c') 1996d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 1997d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto.optional_message.b = 2 1998d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto.optional_message.c = 3 1999d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto.SerializeToString() 2000d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 2001d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto.repeated_message.add().a = 1 2002d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto.repeated_message.add().b = 2 2003d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self._CheckRaises( 2004d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville message.EncodeError, 2005d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto.SerializeToString, 2006d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 'Message is missing required fields: ' 2007d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 'repeated_message[0].b,repeated_message[0].c,' 2008d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 'repeated_message[1].a,repeated_message[1].c') 2009d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 2010d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto.repeated_message[0].b = 2 2011d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto.repeated_message[0].c = 3 2012d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto.repeated_message[1].a = 1 2013d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto.repeated_message[1].c = 3 2014d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville proto.SerializeToString() 2015d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 2016fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testSerializeAllPackedFields(self): 2017fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville first_proto = unittest_pb2.TestPackedTypes() 2018fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville second_proto = unittest_pb2.TestPackedTypes() 2019fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville test_util.SetAllPackedFields(first_proto) 2020fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville serialized = first_proto.SerializeToString() 2021fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(first_proto.ByteSize(), len(serialized)) 2022fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville bytes_read = second_proto.MergeFromString(serialized) 2023fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(second_proto.ByteSize(), bytes_read) 2024fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(first_proto, second_proto) 2025fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 2026fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testSerializeAllPackedExtensions(self): 2027fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville first_proto = unittest_pb2.TestPackedExtensions() 2028fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville second_proto = unittest_pb2.TestPackedExtensions() 2029fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville test_util.SetAllPackedExtensions(first_proto) 2030fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville serialized = first_proto.SerializeToString() 2031fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville bytes_read = second_proto.MergeFromString(serialized) 2032fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(second_proto.ByteSize(), bytes_read) 2033fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(first_proto, second_proto) 2034fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 2035fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testMergePackedFromStringWhenSomeFieldsAlreadySet(self): 2036fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville first_proto = unittest_pb2.TestPackedTypes() 2037fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville first_proto.packed_int32.extend([1, 2]) 2038fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville first_proto.packed_double.append(3.0) 2039fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville serialized = first_proto.SerializeToString() 2040fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 2041fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville second_proto = unittest_pb2.TestPackedTypes() 2042fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville second_proto.packed_int32.append(3) 2043fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville second_proto.packed_double.extend([1.0, 2.0]) 2044fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville second_proto.packed_sint32.append(4) 2045fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 2046fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville second_proto.MergeFromString(serialized) 2047fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual([3, 1, 2], second_proto.packed_int32) 2048fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual([1.0, 2.0, 3.0], second_proto.packed_double) 2049fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual([4], second_proto.packed_sint32) 2050fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 2051fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testPackedFieldsWireFormat(self): 2052fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestPackedTypes() 2053fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.packed_int32.extend([1, 2, 150, 3]) # 1 + 1 + 2 + 1 bytes 2054fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.packed_double.extend([1.0, 1000.0]) # 8 + 8 bytes 2055fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.packed_float.append(2.0) # 4 bytes, will be before double 2056fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville serialized = proto.SerializeToString() 2057fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(proto.ByteSize(), len(serialized)) 2058d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville d = _MiniDecoder(serialized) 2059fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville ReadTag = d.ReadFieldNumberAndWireType 2060fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual((90, wire_format.WIRETYPE_LENGTH_DELIMITED), ReadTag()) 2061fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(1+1+1+2, d.ReadInt32()) 2062fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(1, d.ReadInt32()) 2063fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(2, d.ReadInt32()) 2064fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(150, d.ReadInt32()) 2065fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(3, d.ReadInt32()) 2066fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual((100, wire_format.WIRETYPE_LENGTH_DELIMITED), ReadTag()) 2067fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(4, d.ReadInt32()) 2068fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(2.0, d.ReadFloat()) 2069fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual((101, wire_format.WIRETYPE_LENGTH_DELIMITED), ReadTag()) 2070fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(8+8, d.ReadInt32()) 2071fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(1.0, d.ReadDouble()) 2072fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(1000.0, d.ReadDouble()) 2073fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(d.EndOfStream()) 2074fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 2075d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def testParsePackedFromUnpacked(self): 2076d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unpacked = unittest_pb2.TestUnpackedTypes() 2077d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville test_util.SetAllUnpackedFields(unpacked) 2078d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville packed = unittest_pb2.TestPackedTypes() 2079d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville packed.MergeFromString(unpacked.SerializeToString()) 2080d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville expected = unittest_pb2.TestPackedTypes() 2081d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville test_util.SetAllPackedFields(expected) 2082d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEqual(expected, packed) 2083d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 2084d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def testParseUnpackedFromPacked(self): 2085d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville packed = unittest_pb2.TestPackedTypes() 2086d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville test_util.SetAllPackedFields(packed) 2087d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unpacked = unittest_pb2.TestUnpackedTypes() 2088d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unpacked.MergeFromString(packed.SerializeToString()) 2089d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville expected = unittest_pb2.TestUnpackedTypes() 2090d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville test_util.SetAllUnpackedFields(expected) 2091d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEqual(expected, unpacked) 2092d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 2093fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testFieldNumbers(self): 2094fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestAllTypes() 2095fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(unittest_pb2.TestAllTypes.NestedMessage.BB_FIELD_NUMBER, 1) 2096fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(unittest_pb2.TestAllTypes.OPTIONAL_INT32_FIELD_NUMBER, 1) 2097fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(unittest_pb2.TestAllTypes.OPTIONALGROUP_FIELD_NUMBER, 16) 2098fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual( 2099fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville unittest_pb2.TestAllTypes.OPTIONAL_NESTED_MESSAGE_FIELD_NUMBER, 18) 2100fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual( 2101fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville unittest_pb2.TestAllTypes.OPTIONAL_NESTED_ENUM_FIELD_NUMBER, 21) 2102fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(unittest_pb2.TestAllTypes.REPEATED_INT32_FIELD_NUMBER, 31) 2103fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(unittest_pb2.TestAllTypes.REPEATEDGROUP_FIELD_NUMBER, 46) 2104fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual( 2105fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville unittest_pb2.TestAllTypes.REPEATED_NESTED_MESSAGE_FIELD_NUMBER, 48) 2106fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual( 2107fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville unittest_pb2.TestAllTypes.REPEATED_NESTED_ENUM_FIELD_NUMBER, 51) 2108fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 2109fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testExtensionFieldNumbers(self): 2110fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(unittest_pb2.TestRequired.single.number, 1000) 2111fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(unittest_pb2.TestRequired.SINGLE_FIELD_NUMBER, 1000) 2112fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(unittest_pb2.TestRequired.multi.number, 1001) 2113fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(unittest_pb2.TestRequired.MULTI_FIELD_NUMBER, 1001) 2114fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(unittest_pb2.optional_int32_extension.number, 1) 2115fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(unittest_pb2.OPTIONAL_INT32_EXTENSION_FIELD_NUMBER, 1) 2116fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(unittest_pb2.optionalgroup_extension.number, 16) 2117fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(unittest_pb2.OPTIONALGROUP_EXTENSION_FIELD_NUMBER, 16) 2118fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(unittest_pb2.optional_nested_message_extension.number, 18) 2119fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual( 2120fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville unittest_pb2.OPTIONAL_NESTED_MESSAGE_EXTENSION_FIELD_NUMBER, 18) 2121fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(unittest_pb2.optional_nested_enum_extension.number, 21) 2122fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(unittest_pb2.OPTIONAL_NESTED_ENUM_EXTENSION_FIELD_NUMBER, 2123fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 21) 2124fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(unittest_pb2.repeated_int32_extension.number, 31) 2125fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(unittest_pb2.REPEATED_INT32_EXTENSION_FIELD_NUMBER, 31) 2126fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(unittest_pb2.repeatedgroup_extension.number, 46) 2127fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(unittest_pb2.REPEATEDGROUP_EXTENSION_FIELD_NUMBER, 46) 2128fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(unittest_pb2.repeated_nested_message_extension.number, 48) 2129fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual( 2130fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville unittest_pb2.REPEATED_NESTED_MESSAGE_EXTENSION_FIELD_NUMBER, 48) 2131fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(unittest_pb2.repeated_nested_enum_extension.number, 51) 2132fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(unittest_pb2.REPEATED_NESTED_ENUM_EXTENSION_FIELD_NUMBER, 2133fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 51) 2134fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 2135fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testInitKwargs(self): 2136fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestAllTypes( 2137fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville optional_int32=1, 2138fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville optional_string='foo', 2139fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville optional_bool=True, 2140fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville optional_bytes='bar', 2141fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville optional_nested_message=unittest_pb2.TestAllTypes.NestedMessage(bb=1), 2142fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville optional_foreign_message=unittest_pb2.ForeignMessage(c=1), 2143fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville optional_nested_enum=unittest_pb2.TestAllTypes.FOO, 2144fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville optional_foreign_enum=unittest_pb2.FOREIGN_FOO, 2145fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville repeated_int32=[1, 2, 3]) 2146fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(proto.IsInitialized()) 2147fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(proto.HasField('optional_int32')) 2148fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(proto.HasField('optional_string')) 2149fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(proto.HasField('optional_bool')) 2150fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(proto.HasField('optional_bytes')) 2151fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(proto.HasField('optional_nested_message')) 2152fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(proto.HasField('optional_foreign_message')) 2153fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(proto.HasField('optional_nested_enum')) 2154fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(proto.HasField('optional_foreign_enum')) 2155fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(1, proto.optional_int32) 2156fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual('foo', proto.optional_string) 2157fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(True, proto.optional_bool) 2158fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual('bar', proto.optional_bytes) 2159fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(1, proto.optional_nested_message.bb) 2160fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(1, proto.optional_foreign_message.c) 2161fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(unittest_pb2.TestAllTypes.FOO, 2162fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.optional_nested_enum) 2163fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(unittest_pb2.FOREIGN_FOO, proto.optional_foreign_enum) 2164fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual([1, 2, 3], proto.repeated_int32) 2165fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 2166fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testInitArgsUnknownFieldName(self): 2167fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def InitalizeEmptyMessageWithExtraKeywordArg(): 2168fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville unused_proto = unittest_pb2.TestEmptyMessage(unknown='unknown') 2169fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self._CheckRaises(ValueError, 2170fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville InitalizeEmptyMessageWithExtraKeywordArg, 2171fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'Protocol message has no "unknown" field.') 2172fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 2173fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testInitRequiredKwargs(self): 2174fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestRequired(a=1, b=1, c=1) 2175fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(proto.IsInitialized()) 2176fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(proto.HasField('a')) 2177fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(proto.HasField('b')) 2178fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(proto.HasField('c')) 2179fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not proto.HasField('dummy2')) 2180fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(1, proto.a) 2181fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(1, proto.b) 2182fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(1, proto.c) 2183fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 2184fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testInitRequiredForeignKwargs(self): 2185fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestRequiredForeign( 2186fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville optional_message=unittest_pb2.TestRequired(a=1, b=1, c=1)) 2187fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(proto.IsInitialized()) 2188fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(proto.HasField('optional_message')) 2189fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(proto.optional_message.IsInitialized()) 2190fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(proto.optional_message.HasField('a')) 2191fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(proto.optional_message.HasField('b')) 2192fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(proto.optional_message.HasField('c')) 2193fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not proto.optional_message.HasField('dummy2')) 2194fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(unittest_pb2.TestRequired(a=1, b=1, c=1), 2195fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.optional_message) 2196fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(1, proto.optional_message.a) 2197fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(1, proto.optional_message.b) 2198fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(1, proto.optional_message.c) 2199fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 2200fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testInitRepeatedKwargs(self): 2201fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestAllTypes(repeated_int32=[1, 2, 3]) 2202fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(proto.IsInitialized()) 2203fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(1, proto.repeated_int32[0]) 2204fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(2, proto.repeated_int32[1]) 2205fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(3, proto.repeated_int32[2]) 2206fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 2207fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 2208fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleclass OptionsTest(unittest.TestCase): 2209fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 2210fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testMessageOptions(self): 2211fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_mset_pb2.TestMessageSet() 2212fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(True, 2213fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.DESCRIPTOR.GetOptions().message_set_wire_format) 2214fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestAllTypes() 2215fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(False, 2216fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.DESCRIPTOR.GetOptions().message_set_wire_format) 2217fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 2218fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testPackedOptions(self): 2219fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestAllTypes() 2220fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.optional_int32 = 1 2221fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.optional_double = 3.0 2222fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville for field_descriptor, _ in proto.ListFields(): 2223fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(False, field_descriptor.GetOptions().packed) 2224fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 2225fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestPackedTypes() 2226fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.packed_int32.append(1) 2227fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto.packed_double.append(3.0) 2228fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville for field_descriptor, _ in proto.ListFields(): 2229fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(True, field_descriptor.GetOptions().packed) 2230fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(reflection._FieldDescriptor.LABEL_REPEATED, 2231fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville field_descriptor.label) 2232fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 2233fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 2234fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 2235fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleif __name__ == '__main__': 2236fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville unittest.main() 2237