コード例 #1
0
    def testRoundTripExoticAsOneLine(self):
        message = unittest_pb2.TestAllTypes()
        message.repeated_int64.append(-9223372036854775808)
        message.repeated_uint64.append(18446744073709551615)
        message.repeated_double.append(123.456)
        message.repeated_double.append(1.23e22)
        message.repeated_double.append(1.23e-18)
        message.repeated_string.append('\000\001\a\b\f\n\r\t\v\\\'"')
        message.repeated_string.append(u('\u00fc\ua71f'))

        # Test as_utf8 = False.
        wire_text = text_format.MessageToString(message,
                                                as_one_line=True,
                                                as_utf8=False)
        parsed_message = unittest_pb2.TestAllTypes()
        text_format.Merge(wire_text, parsed_message)
        self.assertEqual(message, parsed_message)

        # Test as_utf8 = True.
        wire_text = text_format.MessageToString(message,
                                                as_one_line=True,
                                                as_utf8=True)
        parsed_message = unittest_pb2.TestAllTypes()
        text_format.Merge(wire_text, parsed_message)
        self.assertEqual(message, parsed_message)
コード例 #2
0
 def testPrintRawUtf8String(self):
     message = unittest_pb2.TestAllTypes()
     message.repeated_string.append(u('\u00fc\ua71f'))
     text = text_format.MessageToString(message, as_utf8=True)
     self.CompareToGoldenText(
         text, b('repeated_string: "\303\274\352\234\237"\n'))
     parsed_message = unittest_pb2.TestAllTypes()
     text_format.Merge(text, parsed_message)
     self.assertEqual(message, parsed_message)
コード例 #3
0
    def testMergeExotic(self):
        message = unittest_pb2.TestAllTypes()
        text = (b('repeated_int64: -9223372036854775808\n') +
                b('repeated_uint64: 18446744073709551615\n') +
                b('repeated_double: 123.456\n') +
                b('repeated_double: 1.23e+22\n') +
                b('repeated_double: 1.23e-18\n') + b('repeated_string: \n') +
                b('"\\000\\001\\007\\010\\014\\n\\r\\t\\013\\\\\\\'\\""\n') +
                b('repeated_string: "foo" \'corge\' "grault"\n') +
                b('repeated_string: "\\303\\274\\352\\234\\237"\n') +
                b('repeated_string: "\\xc3\\xbc"\n') +
                b('repeated_string: "\xc3\xbc"\n'))
        text_format.Merge(text, message)

        self.assertEqual(-9223372036854775808, message.repeated_int64[0])
        self.assertEqual(18446744073709551615, message.repeated_uint64[0])
        self.assertEqual(123.456, message.repeated_double[0])
        self.assertEqual(1.23e22, message.repeated_double[1])
        self.assertEqual(1.23e-18, message.repeated_double[2])
        self.assertEqual('\000\001\a\b\f\n\r\t\v\\\'"',
                         message.repeated_string[0])
        self.assertEqual('foocorgegrault', message.repeated_string[1])
        self.assertEqual(u('\u00fc\ua71f'), message.repeated_string[2])
        self.assertEqual(u('\u00fc'), message.repeated_string[3])
コード例 #4
0
 def testPrintExoticAsOneLine(self):
     message = unittest_pb2.TestAllTypes()
     message.repeated_int64.append(-9223372036854775808)
     message.repeated_uint64.append(18446744073709551615)
     message.repeated_double.append(123.456)
     message.repeated_double.append(1.23e22)
     message.repeated_double.append(1.23e-18)
     message.repeated_string.append('\000\001\a\b\f\n\r\t\v\\\'"')
     message.repeated_string.append(u('\u00fc\ua71f'))
     self.CompareToGoldenText(
         self.RemoveRedundantZeros(
             text_format.MessageToString(message, as_one_line=True)),
         b('repeated_int64: -9223372036854775808') +
         b(' repeated_uint64: 18446744073709551615') +
         b(' repeated_double: 123.456') + b(' repeated_double: 1.23e+22') +
         b(' repeated_double: 1.23e-18') + b(' repeated_string: ') +
         b('"\\000\\001\\007\\010\\014\\n\\r\\t\\013\\\\\\\'\\""') +
         b(' repeated_string: "\\303\\274\\352\\234\\237"'))
コード例 #5
0
    def testByteSizeFunctions(self):
        # Test all numeric *ByteSize() functions.
        NUMERIC_ARGS = [
            # Int32ByteSize().
            [wire_format.Int32ByteSize, 0, 1],
            [wire_format.Int32ByteSize, 127, 1],
            [wire_format.Int32ByteSize, 128, 2],
            [wire_format.Int32ByteSize, -1, 10],
            # Int64ByteSize().
            [wire_format.Int64ByteSize, 0, 1],
            [wire_format.Int64ByteSize, 127, 1],
            [wire_format.Int64ByteSize, 128, 2],
            [wire_format.Int64ByteSize, -1, 10],
            # UInt32ByteSize().
            [wire_format.UInt32ByteSize, 0, 1],
            [wire_format.UInt32ByteSize, 127, 1],
            [wire_format.UInt32ByteSize, 128, 2],
            [wire_format.UInt32ByteSize, wire_format.UINT32_MAX, 5],
            # UInt64ByteSize().
            [wire_format.UInt64ByteSize, 0, 1],
            [wire_format.UInt64ByteSize, 127, 1],
            [wire_format.UInt64ByteSize, 128, 2],
            [wire_format.UInt64ByteSize, wire_format.UINT64_MAX, 10],
            # SInt32ByteSize().
            [wire_format.SInt32ByteSize, 0, 1],
            [wire_format.SInt32ByteSize, -1, 1],
            [wire_format.SInt32ByteSize, 1, 1],
            [wire_format.SInt32ByteSize, -63, 1],
            [wire_format.SInt32ByteSize, 63, 1],
            [wire_format.SInt32ByteSize, -64, 1],
            [wire_format.SInt32ByteSize, 64, 2],
            # SInt64ByteSize().
            [wire_format.SInt64ByteSize, 0, 1],
            [wire_format.SInt64ByteSize, -1, 1],
            [wire_format.SInt64ByteSize, 1, 1],
            [wire_format.SInt64ByteSize, -63, 1],
            [wire_format.SInt64ByteSize, 63, 1],
            [wire_format.SInt64ByteSize, -64, 1],
            [wire_format.SInt64ByteSize, 64, 2],
            # Fixed32ByteSize().
            [wire_format.Fixed32ByteSize, 0, 4],
            [wire_format.Fixed32ByteSize, wire_format.UINT32_MAX, 4],
            # Fixed64ByteSize().
            [wire_format.Fixed64ByteSize, 0, 8],
            [wire_format.Fixed64ByteSize, wire_format.UINT64_MAX, 8],
            # SFixed32ByteSize().
            [wire_format.SFixed32ByteSize, 0, 4],
            [wire_format.SFixed32ByteSize, wire_format.INT32_MIN, 4],
            [wire_format.SFixed32ByteSize, wire_format.INT32_MAX, 4],
            # SFixed64ByteSize().
            [wire_format.SFixed64ByteSize, 0, 8],
            [wire_format.SFixed64ByteSize, wire_format.INT64_MIN, 8],
            [wire_format.SFixed64ByteSize, wire_format.INT64_MAX, 8],
            # FloatByteSize().
            [wire_format.FloatByteSize, 0.0, 4],
            [wire_format.FloatByteSize, 1000000000.0, 4],
            [wire_format.FloatByteSize, -1000000000.0, 4],
            # DoubleByteSize().
            [wire_format.DoubleByteSize, 0.0, 8],
            [wire_format.DoubleByteSize, 1000000000.0, 8],
            [wire_format.DoubleByteSize, -1000000000.0, 8],
            # BoolByteSize().
            [wire_format.BoolByteSize, False, 1],
            [wire_format.BoolByteSize, True, 1],
            # EnumByteSize().
            [wire_format.EnumByteSize, 0, 1],
            [wire_format.EnumByteSize, 127, 1],
            [wire_format.EnumByteSize, 128, 2],
            [wire_format.EnumByteSize, wire_format.UINT32_MAX, 5],
        ]
        for args in NUMERIC_ARGS:
            self.NumericByteSizeTestHelper(*args)

        # Test strings and bytes.
        for byte_size_fn in (wire_format.StringByteSize,
                             wire_format.BytesByteSize):
            # 1 byte for tag, 1 byte for length, 3 bytes for contents.
            self.assertEqual(5, byte_size_fn(10, 'abc'))
            # 2 bytes for tag, 1 byte for length, 3 bytes for contents.
            self.assertEqual(6, byte_size_fn(16, 'abc'))
            # 2 bytes for tag, 2 bytes for length, 128 bytes for contents.
            self.assertEqual(132, byte_size_fn(16, 'a' * 128))

        # Test UTF-8 string byte size calculation.
        # 1 byte for tag, 1 byte for length, 8 bytes for content.
        self.assertEqual(
            10,
            wire_format.StringByteSize(5,
                                       u('\xd0\xa2\xd0\xb5\xd1\x81\xd1\x82')))

        class MockMessage(object):
            def __init__(self, byte_size):
                self.byte_size = byte_size

            def ByteSize(self):
                return self.byte_size

        message_byte_size = 10
        mock_message = MockMessage(byte_size=message_byte_size)
        # Test groups.
        # (2 * 1) bytes for begin and end tags, plus message_byte_size.
        self.assertEqual(2 + message_byte_size,
                         wire_format.GroupByteSize(1, mock_message))
        # (2 * 2) bytes for begin and end tags, plus message_byte_size.
        self.assertEqual(4 + message_byte_size,
                         wire_format.GroupByteSize(16, mock_message))

        # Test messages.
        # 1 byte for tag, plus 1 byte for length, plus contents.
        self.assertEqual(2 + mock_message.byte_size,
                         wire_format.MessageByteSize(1, mock_message))
        # 2 bytes for tag, plus 1 byte for length, plus contents.
        self.assertEqual(3 + mock_message.byte_size,
                         wire_format.MessageByteSize(16, mock_message))
        # 2 bytes for tag, plus 2 bytes for length, plus contents.
        mock_message.byte_size = 128
        self.assertEqual(4 + mock_message.byte_size,
                         wire_format.MessageByteSize(16, mock_message))

        # Test message set item byte size.
        # 4 bytes for tags, plus 1 byte for length, plus 1 byte for type_id,
        # plus contents.
        mock_message.byte_size = 10
        self.assertEqual(mock_message.byte_size + 6,
                         wire_format.MessageSetItemByteSize(1, mock_message))

        # 4 bytes for tags, plus 2 bytes for length, plus 1 byte for type_id,
        # plus contents.
        mock_message.byte_size = 128
        self.assertEqual(mock_message.byte_size + 7,
                         wire_format.MessageSetItemByteSize(1, mock_message))

        # 4 bytes for tags, plus 2 bytes for length, plus 2 byte for type_id,
        # plus contents.
        self.assertEqual(mock_message.byte_size + 8,
                         wire_format.MessageSetItemByteSize(128, mock_message))

        # Too-long varint.
        self.assertRaises(message.EncodeError, wire_format.UInt64ByteSize, 1,
                          1 << 128)
コード例 #6
0
  def testByteSizeFunctions(self):
    # Test all numeric *ByteSize() functions.
    NUMERIC_ARGS = [
        # Int32ByteSize().
        [wire_format.Int32ByteSize, 0, 1],
        [wire_format.Int32ByteSize, 127, 1],
        [wire_format.Int32ByteSize, 128, 2],
        [wire_format.Int32ByteSize, -1, 10],
        # Int64ByteSize().
        [wire_format.Int64ByteSize, 0, 1],
        [wire_format.Int64ByteSize, 127, 1],
        [wire_format.Int64ByteSize, 128, 2],
        [wire_format.Int64ByteSize, -1, 10],
        # UInt32ByteSize().
        [wire_format.UInt32ByteSize, 0, 1],
        [wire_format.UInt32ByteSize, 127, 1],
        [wire_format.UInt32ByteSize, 128, 2],
        [wire_format.UInt32ByteSize, wire_format.UINT32_MAX, 5],
        # UInt64ByteSize().
        [wire_format.UInt64ByteSize, 0, 1],
        [wire_format.UInt64ByteSize, 127, 1],
        [wire_format.UInt64ByteSize, 128, 2],
        [wire_format.UInt64ByteSize, wire_format.UINT64_MAX, 10],
        # SInt32ByteSize().
        [wire_format.SInt32ByteSize, 0, 1],
        [wire_format.SInt32ByteSize, -1, 1],
        [wire_format.SInt32ByteSize, 1, 1],
        [wire_format.SInt32ByteSize, -63, 1],
        [wire_format.SInt32ByteSize, 63, 1],
        [wire_format.SInt32ByteSize, -64, 1],
        [wire_format.SInt32ByteSize, 64, 2],
        # SInt64ByteSize().
        [wire_format.SInt64ByteSize, 0, 1],
        [wire_format.SInt64ByteSize, -1, 1],
        [wire_format.SInt64ByteSize, 1, 1],
        [wire_format.SInt64ByteSize, -63, 1],
        [wire_format.SInt64ByteSize, 63, 1],
        [wire_format.SInt64ByteSize, -64, 1],
        [wire_format.SInt64ByteSize, 64, 2],
        # Fixed32ByteSize().
        [wire_format.Fixed32ByteSize, 0, 4],
        [wire_format.Fixed32ByteSize, wire_format.UINT32_MAX, 4],
        # Fixed64ByteSize().
        [wire_format.Fixed64ByteSize, 0, 8],
        [wire_format.Fixed64ByteSize, wire_format.UINT64_MAX, 8],
        # SFixed32ByteSize().
        [wire_format.SFixed32ByteSize, 0, 4],
        [wire_format.SFixed32ByteSize, wire_format.INT32_MIN, 4],
        [wire_format.SFixed32ByteSize, wire_format.INT32_MAX, 4],
        # SFixed64ByteSize().
        [wire_format.SFixed64ByteSize, 0, 8],
        [wire_format.SFixed64ByteSize, wire_format.INT64_MIN, 8],
        [wire_format.SFixed64ByteSize, wire_format.INT64_MAX, 8],
        # FloatByteSize().
        [wire_format.FloatByteSize, 0.0, 4],
        [wire_format.FloatByteSize, 1000000000.0, 4],
        [wire_format.FloatByteSize, -1000000000.0, 4],
        # DoubleByteSize().
        [wire_format.DoubleByteSize, 0.0, 8],
        [wire_format.DoubleByteSize, 1000000000.0, 8],
        [wire_format.DoubleByteSize, -1000000000.0, 8],
        # BoolByteSize().
        [wire_format.BoolByteSize, False, 1],
        [wire_format.BoolByteSize, True, 1],
        # EnumByteSize().
        [wire_format.EnumByteSize, 0, 1],
        [wire_format.EnumByteSize, 127, 1],
        [wire_format.EnumByteSize, 128, 2],
        [wire_format.EnumByteSize, wire_format.UINT32_MAX, 5],
        ]
    for args in NUMERIC_ARGS:
      self.NumericByteSizeTestHelper(*args)

    # Test strings and bytes.
    for byte_size_fn in (wire_format.StringByteSize, wire_format.BytesByteSize):
      # 1 byte for tag, 1 byte for length, 3 bytes for contents.
      self.assertEqual(5, byte_size_fn(10, 'abc'))
      # 2 bytes for tag, 1 byte for length, 3 bytes for contents.
      self.assertEqual(6, byte_size_fn(16, 'abc'))
      # 2 bytes for tag, 2 bytes for length, 128 bytes for contents.
      self.assertEqual(132, byte_size_fn(16, 'a' * 128))

    # Test UTF-8 string byte size calculation.
    # 1 byte for tag, 1 byte for length, 8 bytes for content.
    self.assertEqual(10, wire_format.StringByteSize(
        5, u('\xd0\xa2\xd0\xb5\xd1\x81\xd1\x82')))

    class MockMessage(object):
      def __init__(self, byte_size):
        self.byte_size = byte_size
      def ByteSize(self):
        return self.byte_size

    message_byte_size = 10
    mock_message = MockMessage(byte_size=message_byte_size)
    # Test groups.
    # (2 * 1) bytes for begin and end tags, plus message_byte_size.
    self.assertEqual(2 + message_byte_size,
                     wire_format.GroupByteSize(1, mock_message))
    # (2 * 2) bytes for begin and end tags, plus message_byte_size.
    self.assertEqual(4 + message_byte_size,
                     wire_format.GroupByteSize(16, mock_message))

    # Test messages.
    # 1 byte for tag, plus 1 byte for length, plus contents.
    self.assertEqual(2 + mock_message.byte_size,
                     wire_format.MessageByteSize(1, mock_message))
    # 2 bytes for tag, plus 1 byte for length, plus contents.
    self.assertEqual(3 + mock_message.byte_size,
                     wire_format.MessageByteSize(16, mock_message))
    # 2 bytes for tag, plus 2 bytes for length, plus contents.
    mock_message.byte_size = 128
    self.assertEqual(4 + mock_message.byte_size,
                     wire_format.MessageByteSize(16, mock_message))


    # Test message set item byte size.
    # 4 bytes for tags, plus 1 byte for length, plus 1 byte for type_id,
    # plus contents.
    mock_message.byte_size = 10
    self.assertEqual(mock_message.byte_size + 6,
                     wire_format.MessageSetItemByteSize(1, mock_message))

    # 4 bytes for tags, plus 2 bytes for length, plus 1 byte for type_id,
    # plus contents.
    mock_message.byte_size = 128
    self.assertEqual(mock_message.byte_size + 7,
                     wire_format.MessageSetItemByteSize(1, mock_message))

    # 4 bytes for tags, plus 2 bytes for length, plus 2 byte for type_id,
    # plus contents.
    self.assertEqual(mock_message.byte_size + 8,
                     wire_format.MessageSetItemByteSize(128, mock_message))

    # Too-long varint.
    self.assertRaises(message.EncodeError,
                      wire_format.UInt64ByteSize, 1, 1 << 128)