15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#! /usr/bin/python 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Protocol Buffers - Google's data interchange format 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright 2008 Google Inc. All rights reserved. 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# http://code.google.com/p/protobuf/ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Redistribution and use in source and binary forms, with or without 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# modification, are permitted provided that the following conditions are 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# met: 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# * Redistributions of source code must retain the above copyright 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# notice, this list of conditions and the following disclaimer. 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# * Redistributions in binary form must reproduce the above 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# copyright notice, this list of conditions and the following disclaimer 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# in the documentation and/or other materials provided with the 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# distribution. 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# * Neither the name of Google Inc. nor the names of its 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# contributors may be used to endorse or promote products derived from 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# this software without specific prior written permission. 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""Test for google.protobuf.text_format.""" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)__author__ = 'kenton@google.com (Kenton Varda)' 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import difflib 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import re 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import unittest 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from google.protobuf import text_format 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from google.protobuf.internal import test_util 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from google.protobuf import unittest_pb2 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from google.protobuf import unittest_mset_pb2 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TextFormatTest(unittest.TestCase): 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def ReadGolden(self, golden_filename): 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) f = test_util.GoldenFile(golden_filename) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) golden_lines = f.readlines() 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) f.close() 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return golden_lines 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def CompareToGoldenFile(self, text, golden_filename): 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) golden_lines = self.ReadGolden(golden_filename) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.CompareToGoldenLines(text, golden_lines) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def CompareToGoldenText(self, text, golden_text): 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.CompareToGoldenLines(text, golden_text.splitlines(1)) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def CompareToGoldenLines(self, text, golden_lines): 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) actual_lines = text.splitlines(1) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual(golden_lines, actual_lines, 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Text doesn't match golden. Diff:\n" + 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ''.join(difflib.ndiff(golden_lines, actual_lines))) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testPrintAllFields(self): 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message = unittest_pb2.TestAllTypes() 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_util.SetAllFields(message) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.CompareToGoldenFile( 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.RemoveRedundantZeros(text_format.MessageToString(message)), 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'text_format_unittest_data.txt') 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testPrintAllExtensions(self): 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message = unittest_pb2.TestAllExtensions() 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_util.SetAllExtensions(message) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.CompareToGoldenFile( 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.RemoveRedundantZeros(text_format.MessageToString(message)), 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'text_format_unittest_extensions_data.txt') 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testPrintMessageSet(self): 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message = unittest_mset_pb2.TestMessageSetContainer() 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ext1 = unittest_mset_pb2.TestMessageSetExtension1.message_set_extension 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ext2 = unittest_mset_pb2.TestMessageSetExtension2.message_set_extension 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message.message_set.Extensions[ext1].i = 23 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message.message_set.Extensions[ext2].str = 'foo' 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.CompareToGoldenText(text_format.MessageToString(message), 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'message_set {\n' 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ' [protobuf_unittest.TestMessageSetExtension1] {\n' 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ' i: 23\n' 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ' }\n' 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ' [protobuf_unittest.TestMessageSetExtension2] {\n' 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ' str: \"foo\"\n' 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ' }\n' 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) '}\n') 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 97ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch def testPrintBadEnumValue(self): 98ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch message = unittest_pb2.TestAllTypes() 99ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch message.optional_nested_enum = 100 100ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch message.optional_foreign_enum = 101 101ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch message.optional_import_enum = 102 102ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch self.CompareToGoldenText( 103ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch text_format.MessageToString(message), 104ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 'optional_nested_enum: 100\n' 105ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 'optional_foreign_enum: 101\n' 106ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 'optional_import_enum: 102\n') 107ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 108ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch def testPrintBadEnumValueExtensions(self): 109ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch message = unittest_pb2.TestAllExtensions() 110ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch message.Extensions[unittest_pb2.optional_nested_enum_extension] = 100 111ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch message.Extensions[unittest_pb2.optional_foreign_enum_extension] = 101 112ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch message.Extensions[unittest_pb2.optional_import_enum_extension] = 102 113ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch self.CompareToGoldenText( 114ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch text_format.MessageToString(message), 115ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch '[protobuf_unittest.optional_nested_enum_extension]: 100\n' 116ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch '[protobuf_unittest.optional_foreign_enum_extension]: 101\n' 117ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch '[protobuf_unittest.optional_import_enum_extension]: 102\n') 118ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testPrintExotic(self): 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message = unittest_pb2.TestAllTypes() 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message.repeated_int64.append(-9223372036854775808) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message.repeated_uint64.append(18446744073709551615) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message.repeated_double.append(123.456) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message.repeated_double.append(1.23e22) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message.repeated_double.append(1.23e-18) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message.repeated_string.append('\000\001\a\b\f\n\r\t\v\\\'"') 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message.repeated_string.append(u'\u00fc\ua71f') 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.CompareToGoldenText( 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.RemoveRedundantZeros(text_format.MessageToString(message)), 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'repeated_int64: -9223372036854775808\n' 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'repeated_uint64: 18446744073709551615\n' 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'repeated_double: 123.456\n' 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'repeated_double: 1.23e+22\n' 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'repeated_double: 1.23e-18\n' 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'repeated_string: ' 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) '"\\000\\001\\007\\010\\014\\n\\r\\t\\013\\\\\\\'\\""\n' 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'repeated_string: "\\303\\274\\352\\234\\237"\n') 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testPrintNestedMessageAsOneLine(self): 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message = unittest_pb2.TestAllTypes() 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) msg = message.repeated_nested_message.add() 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) msg.bb = 42; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.CompareToGoldenText( 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text_format.MessageToString(message, as_one_line=True), 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'repeated_nested_message { bb: 42 }') 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testPrintRepeatedFieldsAsOneLine(self): 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message = unittest_pb2.TestAllTypes() 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message.repeated_int32.append(1) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message.repeated_int32.append(1) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message.repeated_int32.append(3) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message.repeated_string.append("Google") 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message.repeated_string.append("Zurich") 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.CompareToGoldenText( 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text_format.MessageToString(message, as_one_line=True), 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'repeated_int32: 1 repeated_int32: 1 repeated_int32: 3 ' 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'repeated_string: "Google" repeated_string: "Zurich"') 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testPrintNestedNewLineInStringAsOneLine(self): 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message = unittest_pb2.TestAllTypes() 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message.optional_string = "a\nnew\nline" 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.CompareToGoldenText( 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text_format.MessageToString(message, as_one_line=True), 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'optional_string: "a\\nnew\\nline"') 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testPrintMessageSetAsOneLine(self): 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message = unittest_mset_pb2.TestMessageSetContainer() 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ext1 = unittest_mset_pb2.TestMessageSetExtension1.message_set_extension 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ext2 = unittest_mset_pb2.TestMessageSetExtension2.message_set_extension 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message.message_set.Extensions[ext1].i = 23 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message.message_set.Extensions[ext2].str = 'foo' 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.CompareToGoldenText( 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text_format.MessageToString(message, as_one_line=True), 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'message_set {' 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ' [protobuf_unittest.TestMessageSetExtension1] {' 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ' i: 23' 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ' }' 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ' [protobuf_unittest.TestMessageSetExtension2] {' 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ' str: \"foo\"' 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ' }' 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ' }') 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testPrintExoticAsOneLine(self): 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message = unittest_pb2.TestAllTypes() 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message.repeated_int64.append(-9223372036854775808) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message.repeated_uint64.append(18446744073709551615) 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message.repeated_double.append(123.456) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message.repeated_double.append(1.23e22) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message.repeated_double.append(1.23e-18) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message.repeated_string.append('\000\001\a\b\f\n\r\t\v\\\'"') 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message.repeated_string.append(u'\u00fc\ua71f') 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.CompareToGoldenText( 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.RemoveRedundantZeros( 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text_format.MessageToString(message, as_one_line=True)), 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'repeated_int64: -9223372036854775808' 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ' repeated_uint64: 18446744073709551615' 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ' repeated_double: 123.456' 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ' repeated_double: 1.23e+22' 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ' repeated_double: 1.23e-18' 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ' repeated_string: ' 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) '"\\000\\001\\007\\010\\014\\n\\r\\t\\013\\\\\\\'\\""' 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ' repeated_string: "\\303\\274\\352\\234\\237"') 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testRoundTripExoticAsOneLine(self): 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message = unittest_pb2.TestAllTypes() 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message.repeated_int64.append(-9223372036854775808) 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message.repeated_uint64.append(18446744073709551615) 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message.repeated_double.append(123.456) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message.repeated_double.append(1.23e22) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message.repeated_double.append(1.23e-18) 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message.repeated_string.append('\000\001\a\b\f\n\r\t\v\\\'"') 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message.repeated_string.append(u'\u00fc\ua71f') 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Test as_utf8 = False. 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) wire_text = text_format.MessageToString( 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message, as_one_line=True, as_utf8=False) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parsed_message = unittest_pb2.TestAllTypes() 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text_format.Merge(wire_text, parsed_message) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEquals(message, parsed_message) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Test as_utf8 = True. 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) wire_text = text_format.MessageToString( 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message, as_one_line=True, as_utf8=True) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parsed_message = unittest_pb2.TestAllTypes() 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text_format.Merge(wire_text, parsed_message) 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEquals(message, parsed_message) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testPrintRawUtf8String(self): 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message = unittest_pb2.TestAllTypes() 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message.repeated_string.append(u'\u00fc\ua71f') 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text = text_format.MessageToString(message, as_utf8 = True) 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.CompareToGoldenText(text, 'repeated_string: "\303\274\352\234\237"\n') 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parsed_message = unittest_pb2.TestAllTypes() 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text_format.Merge(text, parsed_message) 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEquals(message, parsed_message) 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testMessageToString(self): 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message = unittest_pb2.ForeignMessage() 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message.c = 123 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual('c: 123\n', str(message)) 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def RemoveRedundantZeros(self, text): 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Some platforms print 1e+5 as 1e+005. This is fine, but we need to remove 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # these zeros in order to match the golden file. 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text = text.replace('e+0','e+').replace('e+0','e+') \ 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .replace('e-0','e-').replace('e-0','e-') 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Floating point fields are printed with .0 suffix even if they are 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # actualy integer numbers. 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text = re.compile('\.0$', re.MULTILINE).sub('', text) 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return text 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testMergeGolden(self): 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) golden_text = '\n'.join(self.ReadGolden('text_format_unittest_data.txt')) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parsed_message = unittest_pb2.TestAllTypes() 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text_format.Merge(golden_text, parsed_message) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message = unittest_pb2.TestAllTypes() 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_util.SetAllFields(message) 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEquals(message, parsed_message) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testMergeGoldenExtensions(self): 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) golden_text = '\n'.join(self.ReadGolden( 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'text_format_unittest_extensions_data.txt')) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parsed_message = unittest_pb2.TestAllExtensions() 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text_format.Merge(golden_text, parsed_message) 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message = unittest_pb2.TestAllExtensions() 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_util.SetAllExtensions(message) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEquals(message, parsed_message) 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testMergeAllFields(self): 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message = unittest_pb2.TestAllTypes() 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_util.SetAllFields(message) 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ascii_text = text_format.MessageToString(message) 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parsed_message = unittest_pb2.TestAllTypes() 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text_format.Merge(ascii_text, parsed_message) 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual(message, parsed_message) 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_util.ExpectAllFieldsSet(self, message) 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testMergeAllExtensions(self): 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message = unittest_pb2.TestAllExtensions() 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_util.SetAllExtensions(message) 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ascii_text = text_format.MessageToString(message) 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parsed_message = unittest_pb2.TestAllExtensions() 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text_format.Merge(ascii_text, parsed_message) 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual(message, parsed_message) 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testMergeMessageSet(self): 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message = unittest_pb2.TestAllTypes() 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text = ('repeated_uint64: 1\n' 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'repeated_uint64: 2\n') 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text_format.Merge(text, message) 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual(1, message.repeated_uint64[0]) 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual(2, message.repeated_uint64[1]) 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message = unittest_mset_pb2.TestMessageSetContainer() 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text = ('message_set {\n' 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ' [protobuf_unittest.TestMessageSetExtension1] {\n' 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ' i: 23\n' 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ' }\n' 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ' [protobuf_unittest.TestMessageSetExtension2] {\n' 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ' str: \"foo\"\n' 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ' }\n' 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) '}\n') 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text_format.Merge(text, message) 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ext1 = unittest_mset_pb2.TestMessageSetExtension1.message_set_extension 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ext2 = unittest_mset_pb2.TestMessageSetExtension2.message_set_extension 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEquals(23, message.message_set.Extensions[ext1].i) 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEquals('foo', message.message_set.Extensions[ext2].str) 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testMergeExotic(self): 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message = unittest_pb2.TestAllTypes() 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text = ('repeated_int64: -9223372036854775808\n' 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'repeated_uint64: 18446744073709551615\n' 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'repeated_double: 123.456\n' 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'repeated_double: 1.23e+22\n' 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'repeated_double: 1.23e-18\n' 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'repeated_string: \n' 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) '"\\000\\001\\007\\010\\014\\n\\r\\t\\013\\\\\\\'\\""\n' 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'repeated_string: "foo" \'corge\' "grault"\n' 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'repeated_string: "\\303\\274\\352\\234\\237"\n' 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'repeated_string: "\\xc3\\xbc"\n' 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'repeated_string: "\xc3\xbc"\n') 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text_format.Merge(text, message) 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual(-9223372036854775808, message.repeated_int64[0]) 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual(18446744073709551615, message.repeated_uint64[0]) 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual(123.456, message.repeated_double[0]) 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual(1.23e22, message.repeated_double[1]) 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual(1.23e-18, message.repeated_double[2]) 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual( 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) '\000\001\a\b\f\n\r\t\v\\\'"', message.repeated_string[0]) 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual('foocorgegrault', message.repeated_string[1]) 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual(u'\u00fc\ua71f', message.repeated_string[2]) 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual(u'\u00fc', message.repeated_string[3]) 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testMergeEmptyText(self): 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message = unittest_pb2.TestAllTypes() 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text = '' 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text_format.Merge(text, message) 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEquals(unittest_pb2.TestAllTypes(), message) 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testMergeInvalidUtf8(self): 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message = unittest_pb2.TestAllTypes() 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text = 'repeated_string: "\\xc3\\xc3"' 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertRaises(text_format.ParseError, text_format.Merge, text, message) 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testMergeSingleWord(self): 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message = unittest_pb2.TestAllTypes() 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text = 'foo' 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertRaisesWithMessage( 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text_format.ParseError, 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ('1:1 : Message type "protobuf_unittest.TestAllTypes" has no field named ' 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) '"foo".'), 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text_format.Merge, text, message) 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testMergeUnknownField(self): 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message = unittest_pb2.TestAllTypes() 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text = 'unknown_field: 8\n' 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertRaisesWithMessage( 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text_format.ParseError, 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ('1:1 : Message type "protobuf_unittest.TestAllTypes" has no field named ' 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) '"unknown_field".'), 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text_format.Merge, text, message) 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testMergeBadExtension(self): 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message = unittest_pb2.TestAllExtensions() 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text = '[unknown_extension]: 8\n' 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertRaisesWithMessage( 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text_format.ParseError, 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) '1:2 : Extension "unknown_extension" not registered.', 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text_format.Merge, text, message) 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message = unittest_pb2.TestAllTypes() 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertRaisesWithMessage( 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text_format.ParseError, 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ('1:2 : Message type "protobuf_unittest.TestAllTypes" does not have ' 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'extensions.'), 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text_format.Merge, text, message) 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testMergeGroupNotClosed(self): 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message = unittest_pb2.TestAllTypes() 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text = 'RepeatedGroup: <' 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertRaisesWithMessage( 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text_format.ParseError, '1:16 : Expected ">".', 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text_format.Merge, text, message) 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text = 'RepeatedGroup: {' 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertRaisesWithMessage( 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text_format.ParseError, '1:16 : Expected "}".', 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text_format.Merge, text, message) 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testMergeEmptyGroup(self): 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message = unittest_pb2.TestAllTypes() 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text = 'OptionalGroup: {}' 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text_format.Merge(text, message) 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertTrue(message.HasField('optionalgroup')) 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message.Clear() 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message = unittest_pb2.TestAllTypes() 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text = 'OptionalGroup: <>' 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text_format.Merge(text, message) 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertTrue(message.HasField('optionalgroup')) 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testMergeBadEnumValue(self): 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message = unittest_pb2.TestAllTypes() 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text = 'optional_nested_enum: BARR' 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertRaisesWithMessage( 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text_format.ParseError, 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ('1:23 : Enum type "protobuf_unittest.TestAllTypes.NestedEnum" ' 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'has no value named BARR.'), 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text_format.Merge, text, message) 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message = unittest_pb2.TestAllTypes() 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text = 'optional_nested_enum: 100' 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertRaisesWithMessage( 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text_format.ParseError, 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ('1:23 : Enum type "protobuf_unittest.TestAllTypes.NestedEnum" ' 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'has no value with number 100.'), 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text_format.Merge, text, message) 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 424ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch def testMergeBadIntValue(self): 425ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch message = unittest_pb2.TestAllTypes() 426ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch text = 'optional_int32: bork' 427ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch self.assertRaisesWithMessage( 428ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch text_format.ParseError, 429ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ('1:17 : Couldn\'t parse integer: bork'), 430ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch text_format.Merge, text, message) 431ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def assertRaisesWithMessage(self, e_class, e, func, *args, **kwargs): 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Same as assertRaises, but also compares the exception message.""" 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if hasattr(e_class, '__name__'): 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exc_name = e_class.__name__ 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else: 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exc_name = str(e_class) 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) try: 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) func(*args, **kwargs) 441ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch except e_class as expr: 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if str(expr) != e: 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) msg = '%s raised, but with wrong message: "%s" instead of "%s"' 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) raise self.failureException(msg % (exc_name, 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str(expr).encode('string_escape'), 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) e.encode('string_escape'))) 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else: 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) raise self.failureException('%s not raised' % exc_name) 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TokenizerTest(unittest.TestCase): 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testSimpleTokenCases(self): 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text = ('identifier1:"string1"\n \n\n' 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'identifier2 : \n \n123 \n identifier3 :\'string\'\n' 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'identifiER_4 : 1.1e+2 ID5:-0.23 ID6:\'aaaa\\\'bbbb\'\n' 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'ID7 : "aa\\"bb"\n\n\n\n ID8: {A:inf B:-inf C:true D:false}\n' 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'ID9: 22 ID10: -111111111111111111 ID11: -22\n' 460ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 'ID12: 2222222222222222222 ID13: 1.23456f ID14: 1.2e+2f ' 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'false_bool: 0 true_BOOL:t \n true_bool1: 1 false_BOOL1:f ' ) 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tokenizer = text_format._Tokenizer(text) 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) methods = [(tokenizer.ConsumeIdentifier, 'identifier1'), 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ':', 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (tokenizer.ConsumeString, 'string1'), 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (tokenizer.ConsumeIdentifier, 'identifier2'), 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ':', 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (tokenizer.ConsumeInt32, 123), 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (tokenizer.ConsumeIdentifier, 'identifier3'), 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ':', 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (tokenizer.ConsumeString, 'string'), 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (tokenizer.ConsumeIdentifier, 'identifiER_4'), 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ':', 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (tokenizer.ConsumeFloat, 1.1e+2), 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (tokenizer.ConsumeIdentifier, 'ID5'), 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ':', 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (tokenizer.ConsumeFloat, -0.23), 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (tokenizer.ConsumeIdentifier, 'ID6'), 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ':', 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (tokenizer.ConsumeString, 'aaaa\'bbbb'), 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (tokenizer.ConsumeIdentifier, 'ID7'), 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ':', 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (tokenizer.ConsumeString, 'aa\"bb'), 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (tokenizer.ConsumeIdentifier, 'ID8'), 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ':', 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) '{', 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (tokenizer.ConsumeIdentifier, 'A'), 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ':', 489ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch (tokenizer.ConsumeFloat, float('inf')), 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (tokenizer.ConsumeIdentifier, 'B'), 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ':', 492ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch (tokenizer.ConsumeFloat, -float('inf')), 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (tokenizer.ConsumeIdentifier, 'C'), 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ':', 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (tokenizer.ConsumeBool, True), 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (tokenizer.ConsumeIdentifier, 'D'), 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ':', 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (tokenizer.ConsumeBool, False), 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) '}', 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (tokenizer.ConsumeIdentifier, 'ID9'), 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ':', 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (tokenizer.ConsumeUint32, 22), 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (tokenizer.ConsumeIdentifier, 'ID10'), 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ':', 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (tokenizer.ConsumeInt64, -111111111111111111), 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (tokenizer.ConsumeIdentifier, 'ID11'), 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ':', 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (tokenizer.ConsumeInt32, -22), 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (tokenizer.ConsumeIdentifier, 'ID12'), 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ':', 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (tokenizer.ConsumeUint64, 2222222222222222222), 512ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch (tokenizer.ConsumeIdentifier, 'ID13'), 513ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ':', 514ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch (tokenizer.ConsumeFloat, 1.23456), 515ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch (tokenizer.ConsumeIdentifier, 'ID14'), 516ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ':', 517ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch (tokenizer.ConsumeFloat, 1.2e+2), 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (tokenizer.ConsumeIdentifier, 'false_bool'), 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ':', 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (tokenizer.ConsumeBool, False), 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (tokenizer.ConsumeIdentifier, 'true_BOOL'), 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ':', 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (tokenizer.ConsumeBool, True), 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (tokenizer.ConsumeIdentifier, 'true_bool1'), 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ':', 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (tokenizer.ConsumeBool, True), 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (tokenizer.ConsumeIdentifier, 'false_BOOL1'), 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ':', 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (tokenizer.ConsumeBool, False)] 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i = 0 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while not tokenizer.AtEnd(): 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) m = methods[i] 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if type(m) == str: 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) token = tokenizer.token 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual(token, m) 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tokenizer.NextToken() 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else: 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual(m[1], m[0]()) 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i += 1 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testConsumeIntegers(self): 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # This test only tests the failures in the integer parsing methods as well 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # as the '0' special cases. 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64_max = (1 << 63) - 1 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_max = (1 << 32) - 1 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text = '-1 %d %d' % (uint32_max + 1, int64_max + 1) 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tokenizer = text_format._Tokenizer(text) 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertRaises(text_format.ParseError, tokenizer.ConsumeUint32) 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertRaises(text_format.ParseError, tokenizer.ConsumeUint64) 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual(-1, tokenizer.ConsumeInt32()) 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertRaises(text_format.ParseError, tokenizer.ConsumeUint32) 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertRaises(text_format.ParseError, tokenizer.ConsumeInt32) 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual(uint32_max + 1, tokenizer.ConsumeInt64()) 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertRaises(text_format.ParseError, tokenizer.ConsumeInt64) 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual(int64_max + 1, tokenizer.ConsumeUint64()) 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertTrue(tokenizer.AtEnd()) 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text = '-0 -0 0 0' 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tokenizer = text_format._Tokenizer(text) 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual(0, tokenizer.ConsumeUint32()) 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual(0, tokenizer.ConsumeUint64()) 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual(0, tokenizer.ConsumeUint32()) 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual(0, tokenizer.ConsumeUint64()) 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertTrue(tokenizer.AtEnd()) 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testConsumeByteString(self): 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text = '"string1\'' 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tokenizer = text_format._Tokenizer(text) 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertRaises(text_format.ParseError, tokenizer.ConsumeByteString) 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text = 'string1"' 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tokenizer = text_format._Tokenizer(text) 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertRaises(text_format.ParseError, tokenizer.ConsumeByteString) 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text = '\n"\\xt"' 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tokenizer = text_format._Tokenizer(text) 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertRaises(text_format.ParseError, tokenizer.ConsumeByteString) 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text = '\n"\\"' 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tokenizer = text_format._Tokenizer(text) 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertRaises(text_format.ParseError, tokenizer.ConsumeByteString) 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text = '\n"\\x"' 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tokenizer = text_format._Tokenizer(text) 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertRaises(text_format.ParseError, tokenizer.ConsumeByteString) 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testConsumeBool(self): 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text = 'not-a-bool' 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tokenizer = text_format._Tokenizer(text) 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertRaises(text_format.ParseError, tokenizer.ConsumeBool) 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if __name__ == '__main__': 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unittest.main() 598