1fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#! /usr/bin/python 2fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# 3fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# Protocol Buffers - Google's data interchange format 4fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# Copyright 2008 Google Inc. All rights reserved. 5afb4b72037e3f13db208590fc782c4bc8e27f862Jeff Davidson# https://developers.google.com/protocol-buffers/ 6fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# 7fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# Redistribution and use in source and binary forms, with or without 8fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# modification, are permitted provided that the following conditions are 9fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# met: 10fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# 11fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# * Redistributions of source code must retain the above copyright 12fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# notice, this list of conditions and the following disclaimer. 13fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# * Redistributions in binary form must reproduce the above 14fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# copyright notice, this list of conditions and the following disclaimer 15fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# in the documentation and/or other materials provided with the 16fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# distribution. 17fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# * Neither the name of Google Inc. nor the names of its 18fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# contributors may be used to endorse or promote products derived from 19fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# this software without specific prior written permission. 20fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# 21fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 24fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 25fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 26fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 27fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 31fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 33fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville"""Test for google.protobuf.internal.wire_format.""" 34fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 35fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville__author__ = 'robinson@google.com (Will Robinson)' 36fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 37a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonfrom google.apputils import basetest 38fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillefrom google.protobuf import message 39fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillefrom google.protobuf.internal import wire_format 40fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 41fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 42a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonclass WireFormatTest(basetest.TestCase): 43fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 44fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testPackTag(self): 45fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville field_number = 0xabc 46fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville tag_type = 2 47fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual((field_number << 3) | tag_type, 48fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville wire_format.PackTag(field_number, tag_type)) 49fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville PackTag = wire_format.PackTag 50fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Number too high. 51fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(message.EncodeError, PackTag, field_number, 6) 52fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Number too low. 53fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(message.EncodeError, PackTag, field_number, -1) 54fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 55fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testUnpackTag(self): 56fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test field numbers that will require various varint sizes. 57fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville for expected_field_number in (1, 15, 16, 2047, 2048): 58fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville for expected_wire_type in range(6): # Highest-numbered wiretype is 5. 59fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville field_number, wire_type = wire_format.UnpackTag( 60fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville wire_format.PackTag(expected_field_number, expected_wire_type)) 61fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(expected_field_number, field_number) 62fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(expected_wire_type, wire_type) 63fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 64fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(TypeError, wire_format.UnpackTag, None) 65fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(TypeError, wire_format.UnpackTag, 'abc') 66fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(TypeError, wire_format.UnpackTag, 0.0) 67fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(TypeError, wire_format.UnpackTag, object()) 68fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 69fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testZigZagEncode(self): 70fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Z = wire_format.ZigZagEncode 71fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, Z(0)) 72fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(1, Z(-1)) 73fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(2, Z(1)) 74fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(3, Z(-2)) 75fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(4, Z(2)) 76fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0xfffffffe, Z(0x7fffffff)) 77fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0xffffffff, Z(-0x80000000)) 78fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0xfffffffffffffffe, Z(0x7fffffffffffffff)) 79fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0xffffffffffffffff, Z(-0x8000000000000000)) 80fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 81fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(TypeError, Z, None) 82fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(TypeError, Z, 'abcd') 83fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(TypeError, Z, 0.0) 84fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(TypeError, Z, object()) 85fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 86fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testZigZagDecode(self): 87fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Z = wire_format.ZigZagDecode 88fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0, Z(0)) 89fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(-1, Z(1)) 90fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(1, Z(2)) 91fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(-2, Z(3)) 92fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(2, Z(4)) 93fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0x7fffffff, Z(0xfffffffe)) 94fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(-0x80000000, Z(0xffffffff)) 95fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(0x7fffffffffffffff, Z(0xfffffffffffffffe)) 96fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(-0x8000000000000000, Z(0xffffffffffffffff)) 97fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 98fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(TypeError, Z, None) 99fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(TypeError, Z, 'abcd') 100fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(TypeError, Z, 0.0) 101fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(TypeError, Z, object()) 102fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 103fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def NumericByteSizeTestHelper(self, byte_size_fn, value, expected_value_size): 104fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Use field numbers that cause various byte sizes for the tag information. 105fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville for field_number, tag_bytes in ((15, 1), (16, 2), (2047, 2), (2048, 3)): 106fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville expected_size = expected_value_size + tag_bytes 107fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville actual_size = byte_size_fn(field_number, value) 108fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(expected_size, actual_size, 109fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'byte_size_fn: %s, field_number: %d, value: %r\n' 110fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 'Expected: %d, Actual: %d'% ( 111fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville byte_size_fn, field_number, value, expected_size, actual_size)) 112fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 113fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testByteSizeFunctions(self): 114fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test all numeric *ByteSize() functions. 115fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville NUMERIC_ARGS = [ 116fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Int32ByteSize(). 117fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.Int32ByteSize, 0, 1], 118fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.Int32ByteSize, 127, 1], 119fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.Int32ByteSize, 128, 2], 120fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.Int32ByteSize, -1, 10], 121fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Int64ByteSize(). 122fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.Int64ByteSize, 0, 1], 123fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.Int64ByteSize, 127, 1], 124fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.Int64ByteSize, 128, 2], 125fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.Int64ByteSize, -1, 10], 126fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # UInt32ByteSize(). 127fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.UInt32ByteSize, 0, 1], 128fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.UInt32ByteSize, 127, 1], 129fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.UInt32ByteSize, 128, 2], 130fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.UInt32ByteSize, wire_format.UINT32_MAX, 5], 131fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # UInt64ByteSize(). 132fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.UInt64ByteSize, 0, 1], 133fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.UInt64ByteSize, 127, 1], 134fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.UInt64ByteSize, 128, 2], 135fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.UInt64ByteSize, wire_format.UINT64_MAX, 10], 136fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # SInt32ByteSize(). 137fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.SInt32ByteSize, 0, 1], 138fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.SInt32ByteSize, -1, 1], 139fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.SInt32ByteSize, 1, 1], 140fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.SInt32ByteSize, -63, 1], 141fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.SInt32ByteSize, 63, 1], 142fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.SInt32ByteSize, -64, 1], 143fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.SInt32ByteSize, 64, 2], 144fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # SInt64ByteSize(). 145fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.SInt64ByteSize, 0, 1], 146fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.SInt64ByteSize, -1, 1], 147fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.SInt64ByteSize, 1, 1], 148fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.SInt64ByteSize, -63, 1], 149fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.SInt64ByteSize, 63, 1], 150fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.SInt64ByteSize, -64, 1], 151fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.SInt64ByteSize, 64, 2], 152fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Fixed32ByteSize(). 153fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.Fixed32ByteSize, 0, 4], 154fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.Fixed32ByteSize, wire_format.UINT32_MAX, 4], 155fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Fixed64ByteSize(). 156fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.Fixed64ByteSize, 0, 8], 157fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.Fixed64ByteSize, wire_format.UINT64_MAX, 8], 158fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # SFixed32ByteSize(). 159fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.SFixed32ByteSize, 0, 4], 160fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.SFixed32ByteSize, wire_format.INT32_MIN, 4], 161fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.SFixed32ByteSize, wire_format.INT32_MAX, 4], 162fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # SFixed64ByteSize(). 163fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.SFixed64ByteSize, 0, 8], 164fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.SFixed64ByteSize, wire_format.INT64_MIN, 8], 165fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.SFixed64ByteSize, wire_format.INT64_MAX, 8], 166fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # FloatByteSize(). 167fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.FloatByteSize, 0.0, 4], 168fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.FloatByteSize, 1000000000.0, 4], 169fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.FloatByteSize, -1000000000.0, 4], 170fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # DoubleByteSize(). 171fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.DoubleByteSize, 0.0, 8], 172fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.DoubleByteSize, 1000000000.0, 8], 173fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.DoubleByteSize, -1000000000.0, 8], 174fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # BoolByteSize(). 175fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.BoolByteSize, False, 1], 176fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.BoolByteSize, True, 1], 177fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # EnumByteSize(). 178fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.EnumByteSize, 0, 1], 179fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.EnumByteSize, 127, 1], 180fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.EnumByteSize, 128, 2], 181fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville [wire_format.EnumByteSize, wire_format.UINT32_MAX, 5], 182fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville ] 183fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville for args in NUMERIC_ARGS: 184fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.NumericByteSizeTestHelper(*args) 185fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 186fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test strings and bytes. 187fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville for byte_size_fn in (wire_format.StringByteSize, wire_format.BytesByteSize): 188fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # 1 byte for tag, 1 byte for length, 3 bytes for contents. 189fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(5, byte_size_fn(10, 'abc')) 190fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # 2 bytes for tag, 1 byte for length, 3 bytes for contents. 191fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(6, byte_size_fn(16, 'abc')) 192fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # 2 bytes for tag, 2 bytes for length, 128 bytes for contents. 193fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(132, byte_size_fn(16, 'a' * 128)) 194fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 195fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test UTF-8 string byte size calculation. 196fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # 1 byte for tag, 1 byte for length, 8 bytes for content. 197fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(10, wire_format.StringByteSize( 198a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 5, b'\xd0\xa2\xd0\xb5\xd1\x81\xd1\x82'.decode('utf-8'))) 199fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 200fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville class MockMessage(object): 201fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def __init__(self, byte_size): 202fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.byte_size = byte_size 203fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def ByteSize(self): 204fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return self.byte_size 205fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 206fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message_byte_size = 10 207fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville mock_message = MockMessage(byte_size=message_byte_size) 208fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test groups. 209fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # (2 * 1) bytes for begin and end tags, plus message_byte_size. 210fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(2 + message_byte_size, 211fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville wire_format.GroupByteSize(1, mock_message)) 212fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # (2 * 2) bytes for begin and end tags, plus message_byte_size. 213fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(4 + message_byte_size, 214fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville wire_format.GroupByteSize(16, mock_message)) 215fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 216fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test messages. 217fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # 1 byte for tag, plus 1 byte for length, plus contents. 218fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(2 + mock_message.byte_size, 219fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville wire_format.MessageByteSize(1, mock_message)) 220fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # 2 bytes for tag, plus 1 byte for length, plus contents. 221fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(3 + mock_message.byte_size, 222fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville wire_format.MessageByteSize(16, mock_message)) 223fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # 2 bytes for tag, plus 2 bytes for length, plus contents. 224fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville mock_message.byte_size = 128 225fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(4 + mock_message.byte_size, 226fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville wire_format.MessageByteSize(16, mock_message)) 227fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 228fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 229fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Test message set item byte size. 230fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # 4 bytes for tags, plus 1 byte for length, plus 1 byte for type_id, 231fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # plus contents. 232fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville mock_message.byte_size = 10 233fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(mock_message.byte_size + 6, 234fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville wire_format.MessageSetItemByteSize(1, mock_message)) 235fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 236fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # 4 bytes for tags, plus 2 bytes for length, plus 1 byte for type_id, 237fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # plus contents. 238fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville mock_message.byte_size = 128 239fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(mock_message.byte_size + 7, 240fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville wire_format.MessageSetItemByteSize(1, mock_message)) 241fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 242fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # 4 bytes for tags, plus 2 bytes for length, plus 2 byte for type_id, 243fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # plus contents. 244fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(mock_message.byte_size + 8, 245fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville wire_format.MessageSetItemByteSize(128, mock_message)) 246fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 247fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # Too-long varint. 248fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertRaises(message.EncodeError, 249fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville wire_format.UInt64ByteSize, 1, 1 << 128) 250fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 251fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 252fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleif __name__ == '__main__': 253a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson basetest.main() 254