protoc 2.6.1.1 → 2.6.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/protoc/Makefile.in +10 -13
- data/ext/protoc/extconf.rb +0 -1
- data/ext/protoc/protobuf/CHANGES.txt +593 -0
- data/ext/protoc/protobuf/CONTRIBUTORS.txt +93 -0
- data/ext/protoc/protobuf/INSTALL.txt +237 -0
- data/ext/protoc/protobuf/LICENSE +33 -0
- data/ext/protoc/protobuf/Makefile.am +267 -0
- data/ext/protoc/protobuf/README.md +167 -0
- data/ext/protoc/protobuf/autogen.sh +41 -0
- data/ext/protoc/protobuf/benchmarks/ProtoBench.java +203 -0
- data/ext/protoc/protobuf/benchmarks/google_message1.dat +0 -0
- data/ext/protoc/protobuf/benchmarks/google_message2.dat +0 -0
- data/ext/protoc/protobuf/benchmarks/google_size.proto +136 -0
- data/ext/protoc/protobuf/benchmarks/google_speed.proto +136 -0
- data/ext/protoc/protobuf/benchmarks/readme.txt +50 -0
- data/ext/protoc/protobuf/configure.ac +159 -0
- data/ext/protoc/protobuf/editors/README.txt +5 -0
- data/ext/protoc/protobuf/editors/proto.vim +105 -0
- data/ext/protoc/protobuf/editors/protobuf-mode.el +220 -0
- data/ext/protoc/protobuf/examples/AddPerson.java +95 -0
- data/ext/protoc/protobuf/examples/ListPeople.java +50 -0
- data/ext/protoc/protobuf/examples/Makefile +58 -0
- data/ext/protoc/protobuf/examples/README.txt +29 -0
- data/ext/protoc/protobuf/examples/add_person.cc +95 -0
- data/ext/protoc/protobuf/examples/add_person.py +58 -0
- data/ext/protoc/protobuf/examples/addressbook.proto +30 -0
- data/ext/protoc/protobuf/examples/list_people.cc +68 -0
- data/ext/protoc/protobuf/examples/list_people.py +38 -0
- data/ext/protoc/protobuf/generate_descriptor_proto.sh +33 -0
- data/ext/protoc/protobuf/java/README.txt +96 -0
- data/ext/protoc/protobuf/java/pom.xml +217 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/AbstractMessage.java +466 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/AbstractMessageLite.java +355 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/AbstractParser.java +253 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/BlockingRpcChannel.java +51 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/BlockingService.java +64 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/BoundedByteString.java +163 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ByteString.java +1022 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/CodedInputStream.java +1311 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/CodedOutputStream.java +1297 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Descriptors.java +2238 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/DynamicMessage.java +622 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Extension.java +96 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ExtensionRegistry.java +392 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ExtensionRegistryLite.java +185 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/FieldSet.java +907 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/GeneratedMessage.java +2213 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/GeneratedMessageLite.java +949 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Internal.java +391 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/InvalidProtocolBufferException.java +122 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LazyField.java +154 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LazyFieldLite.java +176 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LazyStringArrayList.java +367 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LazyStringList.java +163 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LiteralByteString.java +362 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Message.java +244 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/MessageLite.java +320 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/MessageLiteOrBuilder.java +60 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/MessageOrBuilder.java +143 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/MessageReflection.java +931 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Parser.java +261 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ProtocolMessageEnum.java +58 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ProtocolStringList.java +48 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RepeatedFieldBuilder.java +696 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RopeByteString.java +957 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RpcCallback.java +47 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RpcChannel.java +71 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RpcController.java +118 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RpcUtil.java +134 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Service.java +117 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ServiceException.java +52 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/SingleFieldBuilder.java +241 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/SmallSortedMap.java +618 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/TextFormat.java +1984 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/UninitializedMessageException.java +99 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/UnknownFieldSet.java +995 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/UnmodifiableLazyStringList.java +205 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Utf8.java +349 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/WireFormat.java +163 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/AbstractMessageTest.java +527 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/BoundedByteStringTest.java +68 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/ByteStringTest.java +759 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/CheckUtf8Test.java +141 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/CodedInputStreamTest.java +769 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/CodedOutputStreamTest.java +401 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/DeprecatedFieldTest.java +80 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/DescriptorsTest.java +735 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/DynamicMessageTest.java +326 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/ForceFieldBuildersPreRun.java +48 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/GeneratedMessageTest.java +1515 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/IsValidUtf8Test.java +180 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/IsValidUtf8TestUtil.java +421 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyFieldLiteTest.java +134 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyFieldTest.java +121 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyMessageLiteTest.java +319 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyStringArrayListTest.java +174 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyStringEndToEndTest.java +143 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LiteEqualsAndHashTest.java +85 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LiteTest.java +148 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LiteralByteStringTest.java +396 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/MessageTest.java +353 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/NestedBuildersTest.java +185 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/ParserTest.java +381 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/RepeatedFieldBuilderTest.java +190 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/RopeByteStringSubstringTest.java +97 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/RopeByteStringTest.java +115 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/ServiceTest.java +320 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/SingleFieldBuilderTest.java +155 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/SmallSortedMapTest.java +420 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/TestBadIdentifiers.java +96 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/TestUtil.java +4124 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/TextFormatTest.java +994 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/UnknownFieldSetTest.java +653 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/UnmodifiableLazyStringListTest.java +227 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/WireFormatTest.java +606 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/lazy_fields_lite.proto +61 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/lite_equals_and_hash.proto +55 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/multiple_files_test.proto +77 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/nested_builders_test.proto +53 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/nested_extension.proto +46 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/nested_extension_lite.proto +48 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/non_nested_extension.proto +49 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/non_nested_extension_lite.proto +50 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/outer_class_name_test.proto +38 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/outer_class_name_test2.proto +42 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/outer_class_name_test3.proto +43 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_bad_identifiers.proto +157 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_check_utf8.proto +50 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_check_utf8_size.proto +51 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_custom_options.proto +43 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_extra_interfaces.proto +60 -0
- data/ext/protoc/protobuf/m4/ac_system_extensions.m4 +37 -0
- data/ext/protoc/protobuf/m4/acx_check_suncc.m4 +75 -0
- data/ext/protoc/protobuf/m4/acx_pthread.m4 +397 -0
- data/ext/protoc/protobuf/m4/stl_hash.m4 +72 -0
- data/ext/protoc/protobuf/more_tests/Makefile +41 -0
- data/ext/protoc/protobuf/post_process_dist.sh +60 -0
- data/ext/protoc/protobuf/protobuf-lite.pc.in +13 -0
- data/ext/protoc/protobuf/protobuf.pc.in +14 -0
- data/ext/protoc/protobuf/python/README.txt +105 -0
- data/ext/protoc/protobuf/python/ez_setup.py +284 -0
- data/ext/protoc/protobuf/python/google/__init__.py +1 -0
- data/ext/protoc/protobuf/python/google/protobuf/__init__.py +0 -0
- data/ext/protoc/protobuf/python/google/protobuf/descriptor.py +849 -0
- data/ext/protoc/protobuf/python/google/protobuf/descriptor_database.py +137 -0
- data/ext/protoc/protobuf/python/google/protobuf/descriptor_pool.py +643 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/__init__.py +0 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/api_implementation.cc +139 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/api_implementation.py +89 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/api_implementation_default_test.py +63 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/containers.py +269 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/cpp_message.py +663 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/decoder.py +831 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_database_test.py +63 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_pool_test.py +564 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_pool_test1.proto +94 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_pool_test2.proto +70 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_python_test.py +54 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_test.py +669 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/encoder.py +788 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/enum_type_wrapper.py +89 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/factory_test1.proto +57 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/factory_test2.proto +92 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/generator_test.py +343 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/message_factory_python_test.py +54 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/message_factory_test.py +131 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/message_listener.py +78 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/message_python_test.py +54 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/message_test.py +681 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/missing_enum_values.proto +50 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/more_extensions.proto +58 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/more_extensions_dynamic.proto +49 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/more_messages.proto +51 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/python_message.py +1251 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/reflection_test.py +2934 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/service_reflection_test.py +136 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/symbol_database_test.py +120 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/test_bad_identifiers.proto +52 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/test_util.py +662 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/text_encoding_test.py +68 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/text_format_test.py +743 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/type_checkers.py +328 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/unknown_fields_test.py +231 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/wire_format.py +268 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/wire_format_test.py +253 -0
- data/ext/protoc/protobuf/python/google/protobuf/message.py +284 -0
- data/ext/protoc/protobuf/python/google/protobuf/message_factory.py +155 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/README +6 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/__init__.py +0 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/cpp_message.py +61 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/descriptor.cc +357 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/descriptor.h +96 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/descriptor_cpp2_test.py +58 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/extension_dict.cc +338 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/extension_dict.h +123 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/message.cc +2561 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/message.h +305 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/message_factory_cpp2_test.py +56 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/proto2_api_test.proto +38 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/python.proto +66 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/python_protobuf.h +57 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/reflection_cpp2_generated_test.py +94 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/repeated_composite_container.cc +763 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/repeated_composite_container.h +172 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/repeated_scalar_container.cc +825 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/repeated_scalar_container.h +112 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/scoped_pyobject_ptr.h +95 -0
- data/ext/protoc/protobuf/python/google/protobuf/reflection.py +205 -0
- data/ext/protoc/protobuf/python/google/protobuf/service.py +226 -0
- data/ext/protoc/protobuf/python/google/protobuf/service_reflection.py +284 -0
- data/ext/protoc/protobuf/python/google/protobuf/symbol_database.py +185 -0
- data/ext/protoc/protobuf/python/google/protobuf/text_encoding.py +110 -0
- data/ext/protoc/protobuf/python/google/protobuf/text_format.py +873 -0
- data/ext/protoc/protobuf/python/mox.py +1401 -0
- data/ext/protoc/protobuf/python/setup.py +201 -0
- data/ext/protoc/protobuf/python/stubout.py +140 -0
- data/ext/protoc/protobuf/src/Makefile.am +418 -0
- data/ext/protoc/protobuf/src/google/protobuf/SEBS +240 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/code_generator.cc +84 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/code_generator.h +145 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/command_line_interface.cc +1603 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/command_line_interface.h +378 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/command_line_interface_unittest.cc +1654 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc +158 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_enum.cc +288 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_enum.h +103 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_enum_field.cc +431 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_enum_field.h +122 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_extension.cc +210 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_extension.h +86 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_field.cc +166 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_field.h +185 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_file.cc +665 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_file.h +99 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_generator.cc +125 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_generator.h +72 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_helpers.cc +494 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_helpers.h +206 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_message.cc +2645 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_message.h +175 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_message_field.cc +375 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_message_field.h +121 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_options.h +58 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_plugin_unittest.cc +123 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_primitive_field.cc +451 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_primitive_field.h +123 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_service.cc +334 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_service.h +118 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_string_field.cc +642 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_string_field.h +127 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_test_bad_identifiers.proto +132 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_unittest.cc +2074 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_unittest.h +51 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/importer.cc +480 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/importer.h +317 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/importer_unittest.cc +617 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_context.cc +195 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_context.h +95 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_doc_comment.cc +233 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_doc_comment.h +69 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_doc_comment_unittest.cc +67 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_enum.cc +333 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_enum.h +99 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_enum_field.cc +778 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_enum_field.h +158 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_extension.cc +207 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_extension.h +109 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_field.cc +213 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_field.h +162 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_file.cc +534 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_file.h +115 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_generator.cc +158 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_generator.h +72 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_generator_factory.cc +77 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_generator_factory.h +101 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_helpers.cc +737 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_helpers.h +322 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_lazy_message_field.cc +826 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_lazy_message_field.h +121 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_message.cc +1666 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_message.h +140 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_message_field.cc +1343 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_message_field.h +173 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_name_resolver.cc +266 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_name_resolver.h +124 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_plugin_unittest.cc +124 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_primitive_field.cc +877 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_primitive_field.h +160 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_service.cc +473 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_service.h +135 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_shared_code_generator.cc +201 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_shared_code_generator.h +90 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_string_field.cc +1056 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_string_field.h +160 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/main.cc +61 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/mock_code_generator.cc +240 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/mock_code_generator.h +117 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/package_info.h +64 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/parser.cc +1750 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/parser.h +522 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/parser_unittest.cc +2612 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.cc +163 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.h +72 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.pb.cc +1148 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.pb.h +897 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.proto +147 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/python/python_generator.cc +1262 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/python/python_generator.h +166 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/python/python_plugin_unittest.cc +118 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/subprocess.cc +463 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/subprocess.h +108 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/test_plugin.cc +51 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/zip_output_unittest.sh +91 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/zip_writer.cc +218 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/zip_writer.h +93 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor.cc +5420 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor.h +1691 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor.pb.cc +9135 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor.pb.h +6761 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor.proto +687 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor_database.cc +543 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor_database.h +369 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor_database_unittest.cc +748 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor_pb2_test.py +54 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor_unittest.cc +5501 -0
- data/ext/protoc/protobuf/src/google/protobuf/dynamic_message.cc +764 -0
- data/ext/protoc/protobuf/src/google/protobuf/dynamic_message.h +148 -0
- data/ext/protoc/protobuf/src/google/protobuf/dynamic_message_unittest.cc +230 -0
- data/ext/protoc/protobuf/src/google/protobuf/extension_set.cc +1663 -0
- data/ext/protoc/protobuf/src/google/protobuf/extension_set.h +1234 -0
- data/ext/protoc/protobuf/src/google/protobuf/extension_set_heavy.cc +734 -0
- data/ext/protoc/protobuf/src/google/protobuf/extension_set_unittest.cc +1095 -0
- data/ext/protoc/protobuf/src/google/protobuf/generated_enum_reflection.h +91 -0
- data/ext/protoc/protobuf/src/google/protobuf/generated_message_reflection.cc +1683 -0
- data/ext/protoc/protobuf/src/google/protobuf/generated_message_reflection.h +504 -0
- data/ext/protoc/protobuf/src/google/protobuf/generated_message_reflection_unittest.cc +795 -0
- data/ext/protoc/protobuf/src/google/protobuf/generated_message_util.cc +65 -0
- data/ext/protoc/protobuf/src/google/protobuf/generated_message_util.h +113 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/coded_stream.cc +914 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/coded_stream.h +1220 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/coded_stream_inl.h +69 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/coded_stream_unittest.cc +1378 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/gzip_stream.cc +326 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/gzip_stream.h +209 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/gzip_stream_unittest.sh +44 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/package_info.h +54 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/printer.cc +198 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/printer.h +136 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/printer_unittest.cc +285 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/strtod.cc +113 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/strtod.h +50 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/tokenizer.cc +1127 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/tokenizer.h +402 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/tokenizer_unittest.cc +999 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream.cc +57 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream.h +248 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_impl.cc +473 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_impl.h +358 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_impl_lite.cc +405 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_impl_lite.h +354 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_unittest.cc +965 -0
- data/ext/protoc/protobuf/src/google/protobuf/lite_unittest.cc +350 -0
- data/ext/protoc/protobuf/src/google/protobuf/message.cc +358 -0
- data/ext/protoc/protobuf/src/google/protobuf/message.h +866 -0
- data/ext/protoc/protobuf/src/google/protobuf/message_lite.cc +335 -0
- data/ext/protoc/protobuf/src/google/protobuf/message_lite.h +247 -0
- data/ext/protoc/protobuf/src/google/protobuf/message_unittest.cc +427 -0
- data/ext/protoc/protobuf/src/google/protobuf/package_info.h +64 -0
- data/ext/protoc/protobuf/src/google/protobuf/reflection_ops.cc +269 -0
- data/ext/protoc/protobuf/src/google/protobuf/reflection_ops.h +81 -0
- data/ext/protoc/protobuf/src/google/protobuf/reflection_ops_unittest.cc +475 -0
- data/ext/protoc/protobuf/src/google/protobuf/repeated_field.cc +87 -0
- data/ext/protoc/protobuf/src/google/protobuf/repeated_field.h +1603 -0
- data/ext/protoc/protobuf/src/google/protobuf/repeated_field_reflection_unittest.cc +195 -0
- data/ext/protoc/protobuf/src/google/protobuf/repeated_field_unittest.cc +1442 -0
- data/ext/protoc/protobuf/src/google/protobuf/service.cc +46 -0
- data/ext/protoc/protobuf/src/google/protobuf/service.h +291 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops.h +227 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_arm64_gcc.h +325 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_arm_gcc.h +151 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_arm_qnx.h +146 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_atomicword_compat.h +122 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_generic_gcc.h +137 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_macosx.h +225 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_mips_gcc.h +313 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_pnacl.h +73 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_solaris.h +188 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_tsan.h +219 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_x86_gcc.cc +137 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_x86_gcc.h +293 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_x86_msvc.cc +112 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_x86_msvc.h +150 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/common.cc +395 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/common.h +1226 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/common_unittest.cc +357 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/hash.h +232 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/map_util.h +771 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/once.cc +99 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/once.h +166 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/once_unittest.cc +253 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/platform_macros.h +103 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/shared_ptr.h +470 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/stl_util.h +121 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/stringprintf.cc +175 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/stringprintf.h +76 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/stringprintf_unittest.cc +152 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/structurally_valid.cc +536 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/structurally_valid_unittest.cc +40 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/strutil.cc +1279 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/strutil.h +562 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/strutil_unittest.cc +73 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/substitute.cc +134 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/substitute.h +170 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/template_util.h +138 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/template_util_unittest.cc +130 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/type_traits.h +336 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/type_traits_unittest.cc +628 -0
- data/ext/protoc/protobuf/src/google/protobuf/test_util.cc +3345 -0
- data/ext/protoc/protobuf/src/google/protobuf/test_util.h +215 -0
- data/ext/protoc/protobuf/src/google/protobuf/test_util_lite.cc +1585 -0
- data/ext/protoc/protobuf/src/google/protobuf/test_util_lite.h +101 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/bad_utf8_string +1 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/golden_message +0 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/golden_message_oneof_implemented +0 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/golden_packed_fields_message +0 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_data.txt +134 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_data_oneof_implemented.txt +129 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_data_pointy.txt +134 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_data_pointy_oneof.txt +129 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_extensions_data.txt +134 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_extensions_data_pointy.txt +134 -0
- data/ext/protoc/protobuf/src/google/protobuf/testing/file.cc +194 -0
- data/ext/protoc/protobuf/src/google/protobuf/testing/file.h +97 -0
- data/ext/protoc/protobuf/src/google/protobuf/testing/googletest.cc +255 -0
- data/ext/protoc/protobuf/src/google/protobuf/testing/googletest.h +102 -0
- data/ext/protoc/protobuf/src/google/protobuf/testing/zcgunzip.cc +73 -0
- data/ext/protoc/protobuf/src/google/protobuf/testing/zcgzip.cc +79 -0
- data/ext/protoc/protobuf/src/google/protobuf/text_format.cc +1746 -0
- data/ext/protoc/protobuf/src/google/protobuf/text_format.h +473 -0
- data/ext/protoc/protobuf/src/google/protobuf/text_format_unittest.cc +1479 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest.proto +861 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_custom_options.proto +393 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_embed_optimize_for.proto +50 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_empty.proto +37 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_enormous_descriptor.proto +1046 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_import.proto +64 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_import_lite.proto +51 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_import_public.proto +40 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_import_public_lite.proto +42 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_lite.proto +384 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_lite_imports_nonlite.proto +43 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_mset.proto +83 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_no_generic_services.proto +53 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_optimize_for.proto +66 -0
- data/ext/protoc/protobuf/src/google/protobuf/unknown_field_set.cc +265 -0
- data/ext/protoc/protobuf/src/google/protobuf/unknown_field_set.h +318 -0
- data/ext/protoc/protobuf/src/google/protobuf/unknown_field_set_unittest.cc +599 -0
- data/ext/protoc/protobuf/src/google/protobuf/wire_format.cc +1101 -0
- data/ext/protoc/protobuf/src/google/protobuf/wire_format.h +336 -0
- data/ext/protoc/protobuf/src/google/protobuf/wire_format_lite.cc +471 -0
- data/ext/protoc/protobuf/src/google/protobuf/wire_format_lite.h +661 -0
- data/ext/protoc/protobuf/src/google/protobuf/wire_format_lite_inl.h +860 -0
- data/ext/protoc/protobuf/src/google/protobuf/wire_format_unittest.cc +1120 -0
- data/ext/protoc/protobuf/src/solaris/libstdc++.la +51 -0
- data/ext/protoc/protobuf/vsprojects/config.h +29 -0
- data/ext/protoc/protobuf/vsprojects/convert2008to2005.sh +20 -0
- data/ext/protoc/protobuf/vsprojects/extract_includes.bat +50 -0
- data/ext/protoc/protobuf/vsprojects/libprotobuf-lite.vcproj +302 -0
- data/ext/protoc/protobuf/vsprojects/libprotobuf.vcproj +470 -0
- data/ext/protoc/protobuf/vsprojects/libprotoc.vcproj +466 -0
- data/ext/protoc/protobuf/vsprojects/lite-test.vcproj +305 -0
- data/ext/protoc/protobuf/vsprojects/protobuf.sln +92 -0
- data/ext/protoc/protobuf/vsprojects/protoc.vcproj +192 -0
- data/ext/protoc/protobuf/vsprojects/readme.txt +114 -0
- data/ext/protoc/protobuf/vsprojects/test_plugin.vcproj +209 -0
- data/ext/protoc/protobuf/vsprojects/tests.vcproj +681 -0
- data/lib/protoc/version.rb +1 -1
- metadata +480 -3
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
#! /usr/bin/python
|
|
2
|
+
#
|
|
3
|
+
# Protocol Buffers - Google's data interchange format
|
|
4
|
+
# Copyright 2008 Google Inc. All rights reserved.
|
|
5
|
+
# https://developers.google.com/protocol-buffers/
|
|
6
|
+
#
|
|
7
|
+
# Redistribution and use in source and binary forms, with or without
|
|
8
|
+
# modification, are permitted provided that the following conditions are
|
|
9
|
+
# met:
|
|
10
|
+
#
|
|
11
|
+
# * Redistributions of source code must retain the above copyright
|
|
12
|
+
# notice, this list of conditions and the following disclaimer.
|
|
13
|
+
# * Redistributions in binary form must reproduce the above
|
|
14
|
+
# copyright notice, this list of conditions and the following disclaimer
|
|
15
|
+
# in the documentation and/or other materials provided with the
|
|
16
|
+
# distribution.
|
|
17
|
+
# * Neither the name of Google Inc. nor the names of its
|
|
18
|
+
# contributors may be used to endorse or promote products derived from
|
|
19
|
+
# this software without specific prior written permission.
|
|
20
|
+
#
|
|
21
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
22
|
+
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
23
|
+
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
24
|
+
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
25
|
+
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
26
|
+
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
27
|
+
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
28
|
+
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
29
|
+
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
30
|
+
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
31
|
+
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
32
|
+
|
|
33
|
+
"""Tests for ..public.message_factory for the pure Python implementation."""
|
|
34
|
+
|
|
35
|
+
import os
|
|
36
|
+
os.environ['PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION'] = 'python'
|
|
37
|
+
|
|
38
|
+
# We must set the implementation version above before the google3 imports.
|
|
39
|
+
# pylint: disable=g-import-not-at-top
|
|
40
|
+
from google.apputils import basetest
|
|
41
|
+
from google.protobuf.internal import api_implementation
|
|
42
|
+
# Run all tests from the original module by putting them in our namespace.
|
|
43
|
+
# pylint: disable=wildcard-import
|
|
44
|
+
from google.protobuf.internal.message_factory_test import *
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class ConfirmPurePythonTest(basetest.TestCase):
|
|
48
|
+
|
|
49
|
+
def testImplementationSetting(self):
|
|
50
|
+
self.assertEqual('python', api_implementation.Type())
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
if __name__ == '__main__':
|
|
54
|
+
basetest.main()
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
#! /usr/bin/python
|
|
2
|
+
#
|
|
3
|
+
# Protocol Buffers - Google's data interchange format
|
|
4
|
+
# Copyright 2008 Google Inc. All rights reserved.
|
|
5
|
+
# https://developers.google.com/protocol-buffers/
|
|
6
|
+
#
|
|
7
|
+
# Redistribution and use in source and binary forms, with or without
|
|
8
|
+
# modification, are permitted provided that the following conditions are
|
|
9
|
+
# met:
|
|
10
|
+
#
|
|
11
|
+
# * Redistributions of source code must retain the above copyright
|
|
12
|
+
# notice, this list of conditions and the following disclaimer.
|
|
13
|
+
# * Redistributions in binary form must reproduce the above
|
|
14
|
+
# copyright notice, this list of conditions and the following disclaimer
|
|
15
|
+
# in the documentation and/or other materials provided with the
|
|
16
|
+
# distribution.
|
|
17
|
+
# * Neither the name of Google Inc. nor the names of its
|
|
18
|
+
# contributors may be used to endorse or promote products derived from
|
|
19
|
+
# this software without specific prior written permission.
|
|
20
|
+
#
|
|
21
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
22
|
+
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
23
|
+
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
24
|
+
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
25
|
+
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
26
|
+
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
27
|
+
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
28
|
+
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
29
|
+
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
30
|
+
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
31
|
+
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
32
|
+
|
|
33
|
+
"""Tests for google.protobuf.message_factory."""
|
|
34
|
+
|
|
35
|
+
__author__ = 'matthewtoia@google.com (Matt Toia)'
|
|
36
|
+
|
|
37
|
+
from google.apputils import basetest
|
|
38
|
+
from google.protobuf import descriptor_pb2
|
|
39
|
+
from google.protobuf.internal import factory_test1_pb2
|
|
40
|
+
from google.protobuf.internal import factory_test2_pb2
|
|
41
|
+
from google.protobuf import descriptor_database
|
|
42
|
+
from google.protobuf import descriptor_pool
|
|
43
|
+
from google.protobuf import message_factory
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
class MessageFactoryTest(basetest.TestCase):
|
|
47
|
+
|
|
48
|
+
def setUp(self):
|
|
49
|
+
self.factory_test1_fd = descriptor_pb2.FileDescriptorProto.FromString(
|
|
50
|
+
factory_test1_pb2.DESCRIPTOR.serialized_pb)
|
|
51
|
+
self.factory_test2_fd = descriptor_pb2.FileDescriptorProto.FromString(
|
|
52
|
+
factory_test2_pb2.DESCRIPTOR.serialized_pb)
|
|
53
|
+
|
|
54
|
+
def _ExerciseDynamicClass(self, cls):
|
|
55
|
+
msg = cls()
|
|
56
|
+
msg.mandatory = 42
|
|
57
|
+
msg.nested_factory_2_enum = 0
|
|
58
|
+
msg.nested_factory_2_message.value = 'nested message value'
|
|
59
|
+
msg.factory_1_message.factory_1_enum = 1
|
|
60
|
+
msg.factory_1_message.nested_factory_1_enum = 0
|
|
61
|
+
msg.factory_1_message.nested_factory_1_message.value = (
|
|
62
|
+
'nested message value')
|
|
63
|
+
msg.factory_1_message.scalar_value = 22
|
|
64
|
+
msg.factory_1_message.list_value.extend([u'one', u'two', u'three'])
|
|
65
|
+
msg.factory_1_message.list_value.append(u'four')
|
|
66
|
+
msg.factory_1_enum = 1
|
|
67
|
+
msg.nested_factory_1_enum = 0
|
|
68
|
+
msg.nested_factory_1_message.value = 'nested message value'
|
|
69
|
+
msg.circular_message.mandatory = 1
|
|
70
|
+
msg.circular_message.circular_message.mandatory = 2
|
|
71
|
+
msg.circular_message.scalar_value = 'one deep'
|
|
72
|
+
msg.scalar_value = 'zero deep'
|
|
73
|
+
msg.list_value.extend([u'four', u'three', u'two'])
|
|
74
|
+
msg.list_value.append(u'one')
|
|
75
|
+
msg.grouped.add()
|
|
76
|
+
msg.grouped[0].part_1 = 'hello'
|
|
77
|
+
msg.grouped[0].part_2 = 'world'
|
|
78
|
+
msg.grouped.add(part_1='testing', part_2='123')
|
|
79
|
+
msg.loop.loop.mandatory = 2
|
|
80
|
+
msg.loop.loop.loop.loop.mandatory = 4
|
|
81
|
+
serialized = msg.SerializeToString()
|
|
82
|
+
converted = factory_test2_pb2.Factory2Message.FromString(serialized)
|
|
83
|
+
reserialized = converted.SerializeToString()
|
|
84
|
+
self.assertEquals(serialized, reserialized)
|
|
85
|
+
result = cls.FromString(reserialized)
|
|
86
|
+
self.assertEquals(msg, result)
|
|
87
|
+
|
|
88
|
+
def testGetPrototype(self):
|
|
89
|
+
db = descriptor_database.DescriptorDatabase()
|
|
90
|
+
pool = descriptor_pool.DescriptorPool(db)
|
|
91
|
+
db.Add(self.factory_test1_fd)
|
|
92
|
+
db.Add(self.factory_test2_fd)
|
|
93
|
+
factory = message_factory.MessageFactory()
|
|
94
|
+
cls = factory.GetPrototype(pool.FindMessageTypeByName(
|
|
95
|
+
'google.protobuf.python.internal.Factory2Message'))
|
|
96
|
+
self.assertIsNot(cls, factory_test2_pb2.Factory2Message)
|
|
97
|
+
self._ExerciseDynamicClass(cls)
|
|
98
|
+
cls2 = factory.GetPrototype(pool.FindMessageTypeByName(
|
|
99
|
+
'google.protobuf.python.internal.Factory2Message'))
|
|
100
|
+
self.assertIs(cls, cls2)
|
|
101
|
+
|
|
102
|
+
def testGetMessages(self):
|
|
103
|
+
# performed twice because multiple calls with the same input must be allowed
|
|
104
|
+
for _ in range(2):
|
|
105
|
+
messages = message_factory.GetMessages([self.factory_test2_fd,
|
|
106
|
+
self.factory_test1_fd])
|
|
107
|
+
self.assertContainsSubset(
|
|
108
|
+
['google.protobuf.python.internal.Factory2Message',
|
|
109
|
+
'google.protobuf.python.internal.Factory1Message'],
|
|
110
|
+
messages.keys())
|
|
111
|
+
self._ExerciseDynamicClass(
|
|
112
|
+
messages['google.protobuf.python.internal.Factory2Message'])
|
|
113
|
+
self.assertContainsSubset(
|
|
114
|
+
['google.protobuf.python.internal.Factory2Message.one_more_field',
|
|
115
|
+
'google.protobuf.python.internal.another_field'],
|
|
116
|
+
(messages['google.protobuf.python.internal.Factory1Message']
|
|
117
|
+
._extensions_by_name.keys()))
|
|
118
|
+
factory_msg1 = messages['google.protobuf.python.internal.Factory1Message']
|
|
119
|
+
msg1 = messages['google.protobuf.python.internal.Factory1Message']()
|
|
120
|
+
ext1 = factory_msg1._extensions_by_name[
|
|
121
|
+
'google.protobuf.python.internal.Factory2Message.one_more_field']
|
|
122
|
+
ext2 = factory_msg1._extensions_by_name[
|
|
123
|
+
'google.protobuf.python.internal.another_field']
|
|
124
|
+
msg1.Extensions[ext1] = 'test1'
|
|
125
|
+
msg1.Extensions[ext2] = 'test2'
|
|
126
|
+
self.assertEquals('test1', msg1.Extensions[ext1])
|
|
127
|
+
self.assertEquals('test2', msg1.Extensions[ext2])
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
if __name__ == '__main__':
|
|
131
|
+
basetest.main()
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Protocol Buffers - Google's data interchange format
|
|
2
|
+
# Copyright 2008 Google Inc. All rights reserved.
|
|
3
|
+
# https://developers.google.com/protocol-buffers/
|
|
4
|
+
#
|
|
5
|
+
# Redistribution and use in source and binary forms, with or without
|
|
6
|
+
# modification, are permitted provided that the following conditions are
|
|
7
|
+
# met:
|
|
8
|
+
#
|
|
9
|
+
# * Redistributions of source code must retain the above copyright
|
|
10
|
+
# notice, this list of conditions and the following disclaimer.
|
|
11
|
+
# * Redistributions in binary form must reproduce the above
|
|
12
|
+
# copyright notice, this list of conditions and the following disclaimer
|
|
13
|
+
# in the documentation and/or other materials provided with the
|
|
14
|
+
# distribution.
|
|
15
|
+
# * Neither the name of Google Inc. nor the names of its
|
|
16
|
+
# contributors may be used to endorse or promote products derived from
|
|
17
|
+
# this software without specific prior written permission.
|
|
18
|
+
#
|
|
19
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
20
|
+
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
21
|
+
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
22
|
+
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
23
|
+
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
24
|
+
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
25
|
+
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
26
|
+
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
27
|
+
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
28
|
+
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
29
|
+
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
30
|
+
|
|
31
|
+
"""Defines a listener interface for observing certain
|
|
32
|
+
state transitions on Message objects.
|
|
33
|
+
|
|
34
|
+
Also defines a null implementation of this interface.
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
__author__ = 'robinson@google.com (Will Robinson)'
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class MessageListener(object):
|
|
41
|
+
|
|
42
|
+
"""Listens for modifications made to a message. Meant to be registered via
|
|
43
|
+
Message._SetListener().
|
|
44
|
+
|
|
45
|
+
Attributes:
|
|
46
|
+
dirty: If True, then calling Modified() would be a no-op. This can be
|
|
47
|
+
used to avoid these calls entirely in the common case.
|
|
48
|
+
"""
|
|
49
|
+
|
|
50
|
+
def Modified(self):
|
|
51
|
+
"""Called every time the message is modified in such a way that the parent
|
|
52
|
+
message may need to be updated. This currently means either:
|
|
53
|
+
(a) The message was modified for the first time, so the parent message
|
|
54
|
+
should henceforth mark the message as present.
|
|
55
|
+
(b) The message's cached byte size became dirty -- i.e. the message was
|
|
56
|
+
modified for the first time after a previous call to ByteSize().
|
|
57
|
+
Therefore the parent should also mark its byte size as dirty.
|
|
58
|
+
Note that (a) implies (b), since new objects start out with a client cached
|
|
59
|
+
size (zero). However, we document (a) explicitly because it is important.
|
|
60
|
+
|
|
61
|
+
Modified() will *only* be called in response to one of these two events --
|
|
62
|
+
not every time the sub-message is modified.
|
|
63
|
+
|
|
64
|
+
Note that if the listener's |dirty| attribute is true, then calling
|
|
65
|
+
Modified at the moment would be a no-op, so it can be skipped. Performance-
|
|
66
|
+
sensitive callers should check this attribute directly before calling since
|
|
67
|
+
it will be true most of the time.
|
|
68
|
+
"""
|
|
69
|
+
|
|
70
|
+
raise NotImplementedError
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
class NullMessageListener(object):
|
|
74
|
+
|
|
75
|
+
"""No-op MessageListener implementation."""
|
|
76
|
+
|
|
77
|
+
def Modified(self):
|
|
78
|
+
pass
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
#! /usr/bin/python
|
|
2
|
+
#
|
|
3
|
+
# Protocol Buffers - Google's data interchange format
|
|
4
|
+
# Copyright 2008 Google Inc. All rights reserved.
|
|
5
|
+
# https://developers.google.com/protocol-buffers/
|
|
6
|
+
#
|
|
7
|
+
# Redistribution and use in source and binary forms, with or without
|
|
8
|
+
# modification, are permitted provided that the following conditions are
|
|
9
|
+
# met:
|
|
10
|
+
#
|
|
11
|
+
# * Redistributions of source code must retain the above copyright
|
|
12
|
+
# notice, this list of conditions and the following disclaimer.
|
|
13
|
+
# * Redistributions in binary form must reproduce the above
|
|
14
|
+
# copyright notice, this list of conditions and the following disclaimer
|
|
15
|
+
# in the documentation and/or other materials provided with the
|
|
16
|
+
# distribution.
|
|
17
|
+
# * Neither the name of Google Inc. nor the names of its
|
|
18
|
+
# contributors may be used to endorse or promote products derived from
|
|
19
|
+
# this software without specific prior written permission.
|
|
20
|
+
#
|
|
21
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
22
|
+
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
23
|
+
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
24
|
+
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
25
|
+
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
26
|
+
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
27
|
+
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
28
|
+
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
29
|
+
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
30
|
+
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
31
|
+
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
32
|
+
|
|
33
|
+
"""Tests for ..public.message for the pure Python implementation."""
|
|
34
|
+
|
|
35
|
+
import os
|
|
36
|
+
os.environ['PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION'] = 'python'
|
|
37
|
+
|
|
38
|
+
# We must set the implementation version above before the google3 imports.
|
|
39
|
+
# pylint: disable=g-import-not-at-top
|
|
40
|
+
from google.apputils import basetest
|
|
41
|
+
from google.protobuf.internal import api_implementation
|
|
42
|
+
# Run all tests from the original module by putting them in our namespace.
|
|
43
|
+
# pylint: disable=wildcard-import
|
|
44
|
+
from google.protobuf.internal.message_test import *
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class ConfirmPurePythonTest(basetest.TestCase):
|
|
48
|
+
|
|
49
|
+
def testImplementationSetting(self):
|
|
50
|
+
self.assertEqual('python', api_implementation.Type())
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
if __name__ == '__main__':
|
|
54
|
+
basetest.main()
|
|
@@ -0,0 +1,681 @@
|
|
|
1
|
+
#! /usr/bin/python
|
|
2
|
+
#
|
|
3
|
+
# Protocol Buffers - Google's data interchange format
|
|
4
|
+
# Copyright 2008 Google Inc. All rights reserved.
|
|
5
|
+
# https://developers.google.com/protocol-buffers/
|
|
6
|
+
#
|
|
7
|
+
# Redistribution and use in source and binary forms, with or without
|
|
8
|
+
# modification, are permitted provided that the following conditions are
|
|
9
|
+
# met:
|
|
10
|
+
#
|
|
11
|
+
# * Redistributions of source code must retain the above copyright
|
|
12
|
+
# notice, this list of conditions and the following disclaimer.
|
|
13
|
+
# * Redistributions in binary form must reproduce the above
|
|
14
|
+
# copyright notice, this list of conditions and the following disclaimer
|
|
15
|
+
# in the documentation and/or other materials provided with the
|
|
16
|
+
# distribution.
|
|
17
|
+
# * Neither the name of Google Inc. nor the names of its
|
|
18
|
+
# contributors may be used to endorse or promote products derived from
|
|
19
|
+
# this software without specific prior written permission.
|
|
20
|
+
#
|
|
21
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
22
|
+
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
23
|
+
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
24
|
+
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
25
|
+
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
26
|
+
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
27
|
+
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
28
|
+
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
29
|
+
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
30
|
+
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
31
|
+
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
32
|
+
|
|
33
|
+
"""Tests python protocol buffers against the golden message.
|
|
34
|
+
|
|
35
|
+
Note that the golden messages exercise every known field type, thus this
|
|
36
|
+
test ends up exercising and verifying nearly all of the parsing and
|
|
37
|
+
serialization code in the whole library.
|
|
38
|
+
|
|
39
|
+
TODO(kenton): Merge with wire_format_test? It doesn't make a whole lot of
|
|
40
|
+
sense to call this a test of the "message" module, which only declares an
|
|
41
|
+
abstract interface.
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
__author__ = 'gps@google.com (Gregory P. Smith)'
|
|
45
|
+
|
|
46
|
+
import copy
|
|
47
|
+
import math
|
|
48
|
+
import operator
|
|
49
|
+
import pickle
|
|
50
|
+
import sys
|
|
51
|
+
|
|
52
|
+
from google.apputils import basetest
|
|
53
|
+
from google.protobuf import unittest_pb2
|
|
54
|
+
from google.protobuf.internal import api_implementation
|
|
55
|
+
from google.protobuf.internal import test_util
|
|
56
|
+
from google.protobuf import message
|
|
57
|
+
|
|
58
|
+
# Python pre-2.6 does not have isinf() or isnan() functions, so we have
|
|
59
|
+
# to provide our own.
|
|
60
|
+
def isnan(val):
|
|
61
|
+
# NaN is never equal to itself.
|
|
62
|
+
return val != val
|
|
63
|
+
def isinf(val):
|
|
64
|
+
# Infinity times zero equals NaN.
|
|
65
|
+
return not isnan(val) and isnan(val * 0)
|
|
66
|
+
def IsPosInf(val):
|
|
67
|
+
return isinf(val) and (val > 0)
|
|
68
|
+
def IsNegInf(val):
|
|
69
|
+
return isinf(val) and (val < 0)
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
class MessageTest(basetest.TestCase):
|
|
73
|
+
|
|
74
|
+
def testBadUtf8String(self):
|
|
75
|
+
if api_implementation.Type() != 'python':
|
|
76
|
+
self.skipTest("Skipping testBadUtf8String, currently only the python "
|
|
77
|
+
"api implementation raises UnicodeDecodeError when a "
|
|
78
|
+
"string field contains bad utf-8.")
|
|
79
|
+
bad_utf8_data = test_util.GoldenFileData('bad_utf8_string')
|
|
80
|
+
with self.assertRaises(UnicodeDecodeError) as context:
|
|
81
|
+
unittest_pb2.TestAllTypes.FromString(bad_utf8_data)
|
|
82
|
+
self.assertIn('field: protobuf_unittest.TestAllTypes.optional_string',
|
|
83
|
+
str(context.exception))
|
|
84
|
+
|
|
85
|
+
def testGoldenMessage(self):
|
|
86
|
+
golden_data = test_util.GoldenFileData(
|
|
87
|
+
'golden_message_oneof_implemented')
|
|
88
|
+
golden_message = unittest_pb2.TestAllTypes()
|
|
89
|
+
golden_message.ParseFromString(golden_data)
|
|
90
|
+
test_util.ExpectAllFieldsSet(self, golden_message)
|
|
91
|
+
self.assertEqual(golden_data, golden_message.SerializeToString())
|
|
92
|
+
golden_copy = copy.deepcopy(golden_message)
|
|
93
|
+
self.assertEqual(golden_data, golden_copy.SerializeToString())
|
|
94
|
+
|
|
95
|
+
def testGoldenExtensions(self):
|
|
96
|
+
golden_data = test_util.GoldenFileData('golden_message')
|
|
97
|
+
golden_message = unittest_pb2.TestAllExtensions()
|
|
98
|
+
golden_message.ParseFromString(golden_data)
|
|
99
|
+
all_set = unittest_pb2.TestAllExtensions()
|
|
100
|
+
test_util.SetAllExtensions(all_set)
|
|
101
|
+
self.assertEquals(all_set, golden_message)
|
|
102
|
+
self.assertEqual(golden_data, golden_message.SerializeToString())
|
|
103
|
+
golden_copy = copy.deepcopy(golden_message)
|
|
104
|
+
self.assertEqual(golden_data, golden_copy.SerializeToString())
|
|
105
|
+
|
|
106
|
+
def testGoldenPackedMessage(self):
|
|
107
|
+
golden_data = test_util.GoldenFileData('golden_packed_fields_message')
|
|
108
|
+
golden_message = unittest_pb2.TestPackedTypes()
|
|
109
|
+
golden_message.ParseFromString(golden_data)
|
|
110
|
+
all_set = unittest_pb2.TestPackedTypes()
|
|
111
|
+
test_util.SetAllPackedFields(all_set)
|
|
112
|
+
self.assertEquals(all_set, golden_message)
|
|
113
|
+
self.assertEqual(golden_data, all_set.SerializeToString())
|
|
114
|
+
golden_copy = copy.deepcopy(golden_message)
|
|
115
|
+
self.assertEqual(golden_data, golden_copy.SerializeToString())
|
|
116
|
+
|
|
117
|
+
def testGoldenPackedExtensions(self):
|
|
118
|
+
golden_data = test_util.GoldenFileData('golden_packed_fields_message')
|
|
119
|
+
golden_message = unittest_pb2.TestPackedExtensions()
|
|
120
|
+
golden_message.ParseFromString(golden_data)
|
|
121
|
+
all_set = unittest_pb2.TestPackedExtensions()
|
|
122
|
+
test_util.SetAllPackedExtensions(all_set)
|
|
123
|
+
self.assertEquals(all_set, golden_message)
|
|
124
|
+
self.assertEqual(golden_data, all_set.SerializeToString())
|
|
125
|
+
golden_copy = copy.deepcopy(golden_message)
|
|
126
|
+
self.assertEqual(golden_data, golden_copy.SerializeToString())
|
|
127
|
+
|
|
128
|
+
def testPickleSupport(self):
|
|
129
|
+
golden_data = test_util.GoldenFileData('golden_message')
|
|
130
|
+
golden_message = unittest_pb2.TestAllTypes()
|
|
131
|
+
golden_message.ParseFromString(golden_data)
|
|
132
|
+
pickled_message = pickle.dumps(golden_message)
|
|
133
|
+
|
|
134
|
+
unpickled_message = pickle.loads(pickled_message)
|
|
135
|
+
self.assertEquals(unpickled_message, golden_message)
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
def testPickleIncompleteProto(self):
|
|
139
|
+
golden_message = unittest_pb2.TestRequired(a=1)
|
|
140
|
+
pickled_message = pickle.dumps(golden_message)
|
|
141
|
+
|
|
142
|
+
unpickled_message = pickle.loads(pickled_message)
|
|
143
|
+
self.assertEquals(unpickled_message, golden_message)
|
|
144
|
+
self.assertEquals(unpickled_message.a, 1)
|
|
145
|
+
# This is still an incomplete proto - so serializing should fail
|
|
146
|
+
self.assertRaises(message.EncodeError, unpickled_message.SerializeToString)
|
|
147
|
+
|
|
148
|
+
def testPositiveInfinity(self):
|
|
149
|
+
golden_data = (b'\x5D\x00\x00\x80\x7F'
|
|
150
|
+
b'\x61\x00\x00\x00\x00\x00\x00\xF0\x7F'
|
|
151
|
+
b'\xCD\x02\x00\x00\x80\x7F'
|
|
152
|
+
b'\xD1\x02\x00\x00\x00\x00\x00\x00\xF0\x7F')
|
|
153
|
+
golden_message = unittest_pb2.TestAllTypes()
|
|
154
|
+
golden_message.ParseFromString(golden_data)
|
|
155
|
+
self.assertTrue(IsPosInf(golden_message.optional_float))
|
|
156
|
+
self.assertTrue(IsPosInf(golden_message.optional_double))
|
|
157
|
+
self.assertTrue(IsPosInf(golden_message.repeated_float[0]))
|
|
158
|
+
self.assertTrue(IsPosInf(golden_message.repeated_double[0]))
|
|
159
|
+
self.assertEqual(golden_data, golden_message.SerializeToString())
|
|
160
|
+
|
|
161
|
+
def testNegativeInfinity(self):
|
|
162
|
+
golden_data = (b'\x5D\x00\x00\x80\xFF'
|
|
163
|
+
b'\x61\x00\x00\x00\x00\x00\x00\xF0\xFF'
|
|
164
|
+
b'\xCD\x02\x00\x00\x80\xFF'
|
|
165
|
+
b'\xD1\x02\x00\x00\x00\x00\x00\x00\xF0\xFF')
|
|
166
|
+
golden_message = unittest_pb2.TestAllTypes()
|
|
167
|
+
golden_message.ParseFromString(golden_data)
|
|
168
|
+
self.assertTrue(IsNegInf(golden_message.optional_float))
|
|
169
|
+
self.assertTrue(IsNegInf(golden_message.optional_double))
|
|
170
|
+
self.assertTrue(IsNegInf(golden_message.repeated_float[0]))
|
|
171
|
+
self.assertTrue(IsNegInf(golden_message.repeated_double[0]))
|
|
172
|
+
self.assertEqual(golden_data, golden_message.SerializeToString())
|
|
173
|
+
|
|
174
|
+
def testNotANumber(self):
|
|
175
|
+
golden_data = (b'\x5D\x00\x00\xC0\x7F'
|
|
176
|
+
b'\x61\x00\x00\x00\x00\x00\x00\xF8\x7F'
|
|
177
|
+
b'\xCD\x02\x00\x00\xC0\x7F'
|
|
178
|
+
b'\xD1\x02\x00\x00\x00\x00\x00\x00\xF8\x7F')
|
|
179
|
+
golden_message = unittest_pb2.TestAllTypes()
|
|
180
|
+
golden_message.ParseFromString(golden_data)
|
|
181
|
+
self.assertTrue(isnan(golden_message.optional_float))
|
|
182
|
+
self.assertTrue(isnan(golden_message.optional_double))
|
|
183
|
+
self.assertTrue(isnan(golden_message.repeated_float[0]))
|
|
184
|
+
self.assertTrue(isnan(golden_message.repeated_double[0]))
|
|
185
|
+
|
|
186
|
+
# The protocol buffer may serialize to any one of multiple different
|
|
187
|
+
# representations of a NaN. Rather than verify a specific representation,
|
|
188
|
+
# verify the serialized string can be converted into a correctly
|
|
189
|
+
# behaving protocol buffer.
|
|
190
|
+
serialized = golden_message.SerializeToString()
|
|
191
|
+
message = unittest_pb2.TestAllTypes()
|
|
192
|
+
message.ParseFromString(serialized)
|
|
193
|
+
self.assertTrue(isnan(message.optional_float))
|
|
194
|
+
self.assertTrue(isnan(message.optional_double))
|
|
195
|
+
self.assertTrue(isnan(message.repeated_float[0]))
|
|
196
|
+
self.assertTrue(isnan(message.repeated_double[0]))
|
|
197
|
+
|
|
198
|
+
def testPositiveInfinityPacked(self):
|
|
199
|
+
golden_data = (b'\xA2\x06\x04\x00\x00\x80\x7F'
|
|
200
|
+
b'\xAA\x06\x08\x00\x00\x00\x00\x00\x00\xF0\x7F')
|
|
201
|
+
golden_message = unittest_pb2.TestPackedTypes()
|
|
202
|
+
golden_message.ParseFromString(golden_data)
|
|
203
|
+
self.assertTrue(IsPosInf(golden_message.packed_float[0]))
|
|
204
|
+
self.assertTrue(IsPosInf(golden_message.packed_double[0]))
|
|
205
|
+
self.assertEqual(golden_data, golden_message.SerializeToString())
|
|
206
|
+
|
|
207
|
+
def testNegativeInfinityPacked(self):
|
|
208
|
+
golden_data = (b'\xA2\x06\x04\x00\x00\x80\xFF'
|
|
209
|
+
b'\xAA\x06\x08\x00\x00\x00\x00\x00\x00\xF0\xFF')
|
|
210
|
+
golden_message = unittest_pb2.TestPackedTypes()
|
|
211
|
+
golden_message.ParseFromString(golden_data)
|
|
212
|
+
self.assertTrue(IsNegInf(golden_message.packed_float[0]))
|
|
213
|
+
self.assertTrue(IsNegInf(golden_message.packed_double[0]))
|
|
214
|
+
self.assertEqual(golden_data, golden_message.SerializeToString())
|
|
215
|
+
|
|
216
|
+
def testNotANumberPacked(self):
|
|
217
|
+
golden_data = (b'\xA2\x06\x04\x00\x00\xC0\x7F'
|
|
218
|
+
b'\xAA\x06\x08\x00\x00\x00\x00\x00\x00\xF8\x7F')
|
|
219
|
+
golden_message = unittest_pb2.TestPackedTypes()
|
|
220
|
+
golden_message.ParseFromString(golden_data)
|
|
221
|
+
self.assertTrue(isnan(golden_message.packed_float[0]))
|
|
222
|
+
self.assertTrue(isnan(golden_message.packed_double[0]))
|
|
223
|
+
|
|
224
|
+
serialized = golden_message.SerializeToString()
|
|
225
|
+
message = unittest_pb2.TestPackedTypes()
|
|
226
|
+
message.ParseFromString(serialized)
|
|
227
|
+
self.assertTrue(isnan(message.packed_float[0]))
|
|
228
|
+
self.assertTrue(isnan(message.packed_double[0]))
|
|
229
|
+
|
|
230
|
+
def testExtremeFloatValues(self):
|
|
231
|
+
message = unittest_pb2.TestAllTypes()
|
|
232
|
+
|
|
233
|
+
# Most positive exponent, no significand bits set.
|
|
234
|
+
kMostPosExponentNoSigBits = math.pow(2, 127)
|
|
235
|
+
message.optional_float = kMostPosExponentNoSigBits
|
|
236
|
+
message.ParseFromString(message.SerializeToString())
|
|
237
|
+
self.assertTrue(message.optional_float == kMostPosExponentNoSigBits)
|
|
238
|
+
|
|
239
|
+
# Most positive exponent, one significand bit set.
|
|
240
|
+
kMostPosExponentOneSigBit = 1.5 * math.pow(2, 127)
|
|
241
|
+
message.optional_float = kMostPosExponentOneSigBit
|
|
242
|
+
message.ParseFromString(message.SerializeToString())
|
|
243
|
+
self.assertTrue(message.optional_float == kMostPosExponentOneSigBit)
|
|
244
|
+
|
|
245
|
+
# Repeat last two cases with values of same magnitude, but negative.
|
|
246
|
+
message.optional_float = -kMostPosExponentNoSigBits
|
|
247
|
+
message.ParseFromString(message.SerializeToString())
|
|
248
|
+
self.assertTrue(message.optional_float == -kMostPosExponentNoSigBits)
|
|
249
|
+
|
|
250
|
+
message.optional_float = -kMostPosExponentOneSigBit
|
|
251
|
+
message.ParseFromString(message.SerializeToString())
|
|
252
|
+
self.assertTrue(message.optional_float == -kMostPosExponentOneSigBit)
|
|
253
|
+
|
|
254
|
+
# Most negative exponent, no significand bits set.
|
|
255
|
+
kMostNegExponentNoSigBits = math.pow(2, -127)
|
|
256
|
+
message.optional_float = kMostNegExponentNoSigBits
|
|
257
|
+
message.ParseFromString(message.SerializeToString())
|
|
258
|
+
self.assertTrue(message.optional_float == kMostNegExponentNoSigBits)
|
|
259
|
+
|
|
260
|
+
# Most negative exponent, one significand bit set.
|
|
261
|
+
kMostNegExponentOneSigBit = 1.5 * math.pow(2, -127)
|
|
262
|
+
message.optional_float = kMostNegExponentOneSigBit
|
|
263
|
+
message.ParseFromString(message.SerializeToString())
|
|
264
|
+
self.assertTrue(message.optional_float == kMostNegExponentOneSigBit)
|
|
265
|
+
|
|
266
|
+
# Repeat last two cases with values of the same magnitude, but negative.
|
|
267
|
+
message.optional_float = -kMostNegExponentNoSigBits
|
|
268
|
+
message.ParseFromString(message.SerializeToString())
|
|
269
|
+
self.assertTrue(message.optional_float == -kMostNegExponentNoSigBits)
|
|
270
|
+
|
|
271
|
+
message.optional_float = -kMostNegExponentOneSigBit
|
|
272
|
+
message.ParseFromString(message.SerializeToString())
|
|
273
|
+
self.assertTrue(message.optional_float == -kMostNegExponentOneSigBit)
|
|
274
|
+
|
|
275
|
+
def testExtremeDoubleValues(self):
|
|
276
|
+
message = unittest_pb2.TestAllTypes()
|
|
277
|
+
|
|
278
|
+
# Most positive exponent, no significand bits set.
|
|
279
|
+
kMostPosExponentNoSigBits = math.pow(2, 1023)
|
|
280
|
+
message.optional_double = kMostPosExponentNoSigBits
|
|
281
|
+
message.ParseFromString(message.SerializeToString())
|
|
282
|
+
self.assertTrue(message.optional_double == kMostPosExponentNoSigBits)
|
|
283
|
+
|
|
284
|
+
# Most positive exponent, one significand bit set.
|
|
285
|
+
kMostPosExponentOneSigBit = 1.5 * math.pow(2, 1023)
|
|
286
|
+
message.optional_double = kMostPosExponentOneSigBit
|
|
287
|
+
message.ParseFromString(message.SerializeToString())
|
|
288
|
+
self.assertTrue(message.optional_double == kMostPosExponentOneSigBit)
|
|
289
|
+
|
|
290
|
+
# Repeat last two cases with values of same magnitude, but negative.
|
|
291
|
+
message.optional_double = -kMostPosExponentNoSigBits
|
|
292
|
+
message.ParseFromString(message.SerializeToString())
|
|
293
|
+
self.assertTrue(message.optional_double == -kMostPosExponentNoSigBits)
|
|
294
|
+
|
|
295
|
+
message.optional_double = -kMostPosExponentOneSigBit
|
|
296
|
+
message.ParseFromString(message.SerializeToString())
|
|
297
|
+
self.assertTrue(message.optional_double == -kMostPosExponentOneSigBit)
|
|
298
|
+
|
|
299
|
+
# Most negative exponent, no significand bits set.
|
|
300
|
+
kMostNegExponentNoSigBits = math.pow(2, -1023)
|
|
301
|
+
message.optional_double = kMostNegExponentNoSigBits
|
|
302
|
+
message.ParseFromString(message.SerializeToString())
|
|
303
|
+
self.assertTrue(message.optional_double == kMostNegExponentNoSigBits)
|
|
304
|
+
|
|
305
|
+
# Most negative exponent, one significand bit set.
|
|
306
|
+
kMostNegExponentOneSigBit = 1.5 * math.pow(2, -1023)
|
|
307
|
+
message.optional_double = kMostNegExponentOneSigBit
|
|
308
|
+
message.ParseFromString(message.SerializeToString())
|
|
309
|
+
self.assertTrue(message.optional_double == kMostNegExponentOneSigBit)
|
|
310
|
+
|
|
311
|
+
# Repeat last two cases with values of the same magnitude, but negative.
|
|
312
|
+
message.optional_double = -kMostNegExponentNoSigBits
|
|
313
|
+
message.ParseFromString(message.SerializeToString())
|
|
314
|
+
self.assertTrue(message.optional_double == -kMostNegExponentNoSigBits)
|
|
315
|
+
|
|
316
|
+
message.optional_double = -kMostNegExponentOneSigBit
|
|
317
|
+
message.ParseFromString(message.SerializeToString())
|
|
318
|
+
self.assertTrue(message.optional_double == -kMostNegExponentOneSigBit)
|
|
319
|
+
|
|
320
|
+
def testFloatPrinting(self):
|
|
321
|
+
message = unittest_pb2.TestAllTypes()
|
|
322
|
+
message.optional_float = 2.0
|
|
323
|
+
self.assertEqual(str(message), 'optional_float: 2.0\n')
|
|
324
|
+
|
|
325
|
+
def testHighPrecisionFloatPrinting(self):
|
|
326
|
+
message = unittest_pb2.TestAllTypes()
|
|
327
|
+
message.optional_double = 0.12345678912345678
|
|
328
|
+
if sys.version_info.major >= 3:
|
|
329
|
+
self.assertEqual(str(message), 'optional_double: 0.12345678912345678\n')
|
|
330
|
+
else:
|
|
331
|
+
self.assertEqual(str(message), 'optional_double: 0.123456789123\n')
|
|
332
|
+
|
|
333
|
+
def testUnknownFieldPrinting(self):
|
|
334
|
+
populated = unittest_pb2.TestAllTypes()
|
|
335
|
+
test_util.SetAllNonLazyFields(populated)
|
|
336
|
+
empty = unittest_pb2.TestEmptyMessage()
|
|
337
|
+
empty.ParseFromString(populated.SerializeToString())
|
|
338
|
+
self.assertEqual(str(empty), '')
|
|
339
|
+
|
|
340
|
+
def testSortingRepeatedScalarFieldsDefaultComparator(self):
|
|
341
|
+
"""Check some different types with the default comparator."""
|
|
342
|
+
message = unittest_pb2.TestAllTypes()
|
|
343
|
+
|
|
344
|
+
# TODO(mattp): would testing more scalar types strengthen test?
|
|
345
|
+
message.repeated_int32.append(1)
|
|
346
|
+
message.repeated_int32.append(3)
|
|
347
|
+
message.repeated_int32.append(2)
|
|
348
|
+
message.repeated_int32.sort()
|
|
349
|
+
self.assertEqual(message.repeated_int32[0], 1)
|
|
350
|
+
self.assertEqual(message.repeated_int32[1], 2)
|
|
351
|
+
self.assertEqual(message.repeated_int32[2], 3)
|
|
352
|
+
|
|
353
|
+
message.repeated_float.append(1.1)
|
|
354
|
+
message.repeated_float.append(1.3)
|
|
355
|
+
message.repeated_float.append(1.2)
|
|
356
|
+
message.repeated_float.sort()
|
|
357
|
+
self.assertAlmostEqual(message.repeated_float[0], 1.1)
|
|
358
|
+
self.assertAlmostEqual(message.repeated_float[1], 1.2)
|
|
359
|
+
self.assertAlmostEqual(message.repeated_float[2], 1.3)
|
|
360
|
+
|
|
361
|
+
message.repeated_string.append('a')
|
|
362
|
+
message.repeated_string.append('c')
|
|
363
|
+
message.repeated_string.append('b')
|
|
364
|
+
message.repeated_string.sort()
|
|
365
|
+
self.assertEqual(message.repeated_string[0], 'a')
|
|
366
|
+
self.assertEqual(message.repeated_string[1], 'b')
|
|
367
|
+
self.assertEqual(message.repeated_string[2], 'c')
|
|
368
|
+
|
|
369
|
+
message.repeated_bytes.append(b'a')
|
|
370
|
+
message.repeated_bytes.append(b'c')
|
|
371
|
+
message.repeated_bytes.append(b'b')
|
|
372
|
+
message.repeated_bytes.sort()
|
|
373
|
+
self.assertEqual(message.repeated_bytes[0], b'a')
|
|
374
|
+
self.assertEqual(message.repeated_bytes[1], b'b')
|
|
375
|
+
self.assertEqual(message.repeated_bytes[2], b'c')
|
|
376
|
+
|
|
377
|
+
def testSortingRepeatedScalarFieldsCustomComparator(self):
|
|
378
|
+
"""Check some different types with custom comparator."""
|
|
379
|
+
message = unittest_pb2.TestAllTypes()
|
|
380
|
+
|
|
381
|
+
message.repeated_int32.append(-3)
|
|
382
|
+
message.repeated_int32.append(-2)
|
|
383
|
+
message.repeated_int32.append(-1)
|
|
384
|
+
message.repeated_int32.sort(key=abs)
|
|
385
|
+
self.assertEqual(message.repeated_int32[0], -1)
|
|
386
|
+
self.assertEqual(message.repeated_int32[1], -2)
|
|
387
|
+
self.assertEqual(message.repeated_int32[2], -3)
|
|
388
|
+
|
|
389
|
+
message.repeated_string.append('aaa')
|
|
390
|
+
message.repeated_string.append('bb')
|
|
391
|
+
message.repeated_string.append('c')
|
|
392
|
+
message.repeated_string.sort(key=len)
|
|
393
|
+
self.assertEqual(message.repeated_string[0], 'c')
|
|
394
|
+
self.assertEqual(message.repeated_string[1], 'bb')
|
|
395
|
+
self.assertEqual(message.repeated_string[2], 'aaa')
|
|
396
|
+
|
|
397
|
+
def testSortingRepeatedCompositeFieldsCustomComparator(self):
|
|
398
|
+
"""Check passing a custom comparator to sort a repeated composite field."""
|
|
399
|
+
message = unittest_pb2.TestAllTypes()
|
|
400
|
+
|
|
401
|
+
message.repeated_nested_message.add().bb = 1
|
|
402
|
+
message.repeated_nested_message.add().bb = 3
|
|
403
|
+
message.repeated_nested_message.add().bb = 2
|
|
404
|
+
message.repeated_nested_message.add().bb = 6
|
|
405
|
+
message.repeated_nested_message.add().bb = 5
|
|
406
|
+
message.repeated_nested_message.add().bb = 4
|
|
407
|
+
message.repeated_nested_message.sort(key=operator.attrgetter('bb'))
|
|
408
|
+
self.assertEqual(message.repeated_nested_message[0].bb, 1)
|
|
409
|
+
self.assertEqual(message.repeated_nested_message[1].bb, 2)
|
|
410
|
+
self.assertEqual(message.repeated_nested_message[2].bb, 3)
|
|
411
|
+
self.assertEqual(message.repeated_nested_message[3].bb, 4)
|
|
412
|
+
self.assertEqual(message.repeated_nested_message[4].bb, 5)
|
|
413
|
+
self.assertEqual(message.repeated_nested_message[5].bb, 6)
|
|
414
|
+
|
|
415
|
+
def testRepeatedCompositeFieldSortArguments(self):
|
|
416
|
+
"""Check sorting a repeated composite field using list.sort() arguments."""
|
|
417
|
+
message = unittest_pb2.TestAllTypes()
|
|
418
|
+
|
|
419
|
+
get_bb = operator.attrgetter('bb')
|
|
420
|
+
cmp_bb = lambda a, b: cmp(a.bb, b.bb)
|
|
421
|
+
message.repeated_nested_message.add().bb = 1
|
|
422
|
+
message.repeated_nested_message.add().bb = 3
|
|
423
|
+
message.repeated_nested_message.add().bb = 2
|
|
424
|
+
message.repeated_nested_message.add().bb = 6
|
|
425
|
+
message.repeated_nested_message.add().bb = 5
|
|
426
|
+
message.repeated_nested_message.add().bb = 4
|
|
427
|
+
message.repeated_nested_message.sort(key=get_bb)
|
|
428
|
+
self.assertEqual([k.bb for k in message.repeated_nested_message],
|
|
429
|
+
[1, 2, 3, 4, 5, 6])
|
|
430
|
+
message.repeated_nested_message.sort(key=get_bb, reverse=True)
|
|
431
|
+
self.assertEqual([k.bb for k in message.repeated_nested_message],
|
|
432
|
+
[6, 5, 4, 3, 2, 1])
|
|
433
|
+
if sys.version_info.major >= 3: return # No cmp sorting in PY3.
|
|
434
|
+
message.repeated_nested_message.sort(sort_function=cmp_bb)
|
|
435
|
+
self.assertEqual([k.bb for k in message.repeated_nested_message],
|
|
436
|
+
[1, 2, 3, 4, 5, 6])
|
|
437
|
+
message.repeated_nested_message.sort(cmp=cmp_bb, reverse=True)
|
|
438
|
+
self.assertEqual([k.bb for k in message.repeated_nested_message],
|
|
439
|
+
[6, 5, 4, 3, 2, 1])
|
|
440
|
+
|
|
441
|
+
def testRepeatedScalarFieldSortArguments(self):
|
|
442
|
+
"""Check sorting a scalar field using list.sort() arguments."""
|
|
443
|
+
message = unittest_pb2.TestAllTypes()
|
|
444
|
+
|
|
445
|
+
message.repeated_int32.append(-3)
|
|
446
|
+
message.repeated_int32.append(-2)
|
|
447
|
+
message.repeated_int32.append(-1)
|
|
448
|
+
message.repeated_int32.sort(key=abs)
|
|
449
|
+
self.assertEqual(list(message.repeated_int32), [-1, -2, -3])
|
|
450
|
+
message.repeated_int32.sort(key=abs, reverse=True)
|
|
451
|
+
self.assertEqual(list(message.repeated_int32), [-3, -2, -1])
|
|
452
|
+
if sys.version_info.major < 3: # No cmp sorting in PY3.
|
|
453
|
+
abs_cmp = lambda a, b: cmp(abs(a), abs(b))
|
|
454
|
+
message.repeated_int32.sort(sort_function=abs_cmp)
|
|
455
|
+
self.assertEqual(list(message.repeated_int32), [-1, -2, -3])
|
|
456
|
+
message.repeated_int32.sort(cmp=abs_cmp, reverse=True)
|
|
457
|
+
self.assertEqual(list(message.repeated_int32), [-3, -2, -1])
|
|
458
|
+
|
|
459
|
+
message.repeated_string.append('aaa')
|
|
460
|
+
message.repeated_string.append('bb')
|
|
461
|
+
message.repeated_string.append('c')
|
|
462
|
+
message.repeated_string.sort(key=len)
|
|
463
|
+
self.assertEqual(list(message.repeated_string), ['c', 'bb', 'aaa'])
|
|
464
|
+
message.repeated_string.sort(key=len, reverse=True)
|
|
465
|
+
self.assertEqual(list(message.repeated_string), ['aaa', 'bb', 'c'])
|
|
466
|
+
if sys.version_info.major < 3: # No cmp sorting in PY3.
|
|
467
|
+
len_cmp = lambda a, b: cmp(len(a), len(b))
|
|
468
|
+
message.repeated_string.sort(sort_function=len_cmp)
|
|
469
|
+
self.assertEqual(list(message.repeated_string), ['c', 'bb', 'aaa'])
|
|
470
|
+
message.repeated_string.sort(cmp=len_cmp, reverse=True)
|
|
471
|
+
self.assertEqual(list(message.repeated_string), ['aaa', 'bb', 'c'])
|
|
472
|
+
|
|
473
|
+
def testRepeatedFieldsComparable(self):
|
|
474
|
+
m1 = unittest_pb2.TestAllTypes()
|
|
475
|
+
m2 = unittest_pb2.TestAllTypes()
|
|
476
|
+
m1.repeated_int32.append(0)
|
|
477
|
+
m1.repeated_int32.append(1)
|
|
478
|
+
m1.repeated_int32.append(2)
|
|
479
|
+
m2.repeated_int32.append(0)
|
|
480
|
+
m2.repeated_int32.append(1)
|
|
481
|
+
m2.repeated_int32.append(2)
|
|
482
|
+
m1.repeated_nested_message.add().bb = 1
|
|
483
|
+
m1.repeated_nested_message.add().bb = 2
|
|
484
|
+
m1.repeated_nested_message.add().bb = 3
|
|
485
|
+
m2.repeated_nested_message.add().bb = 1
|
|
486
|
+
m2.repeated_nested_message.add().bb = 2
|
|
487
|
+
m2.repeated_nested_message.add().bb = 3
|
|
488
|
+
|
|
489
|
+
if sys.version_info.major >= 3: return # No cmp() in PY3.
|
|
490
|
+
|
|
491
|
+
# These comparisons should not raise errors.
|
|
492
|
+
_ = m1 < m2
|
|
493
|
+
_ = m1.repeated_nested_message < m2.repeated_nested_message
|
|
494
|
+
|
|
495
|
+
# Make sure cmp always works. If it wasn't defined, these would be
|
|
496
|
+
# id() comparisons and would all fail.
|
|
497
|
+
self.assertEqual(cmp(m1, m2), 0)
|
|
498
|
+
self.assertEqual(cmp(m1.repeated_int32, m2.repeated_int32), 0)
|
|
499
|
+
self.assertEqual(cmp(m1.repeated_int32, [0, 1, 2]), 0)
|
|
500
|
+
self.assertEqual(cmp(m1.repeated_nested_message,
|
|
501
|
+
m2.repeated_nested_message), 0)
|
|
502
|
+
with self.assertRaises(TypeError):
|
|
503
|
+
# Can't compare repeated composite containers to lists.
|
|
504
|
+
cmp(m1.repeated_nested_message, m2.repeated_nested_message[:])
|
|
505
|
+
|
|
506
|
+
# TODO(anuraag): Implement extensiondict comparison in C++ and then add test
|
|
507
|
+
|
|
508
|
+
def testParsingMerge(self):
|
|
509
|
+
"""Check the merge behavior when a required or optional field appears
|
|
510
|
+
multiple times in the input."""
|
|
511
|
+
messages = [
|
|
512
|
+
unittest_pb2.TestAllTypes(),
|
|
513
|
+
unittest_pb2.TestAllTypes(),
|
|
514
|
+
unittest_pb2.TestAllTypes() ]
|
|
515
|
+
messages[0].optional_int32 = 1
|
|
516
|
+
messages[1].optional_int64 = 2
|
|
517
|
+
messages[2].optional_int32 = 3
|
|
518
|
+
messages[2].optional_string = 'hello'
|
|
519
|
+
|
|
520
|
+
merged_message = unittest_pb2.TestAllTypes()
|
|
521
|
+
merged_message.optional_int32 = 3
|
|
522
|
+
merged_message.optional_int64 = 2
|
|
523
|
+
merged_message.optional_string = 'hello'
|
|
524
|
+
|
|
525
|
+
generator = unittest_pb2.TestParsingMerge.RepeatedFieldsGenerator()
|
|
526
|
+
generator.field1.extend(messages)
|
|
527
|
+
generator.field2.extend(messages)
|
|
528
|
+
generator.field3.extend(messages)
|
|
529
|
+
generator.ext1.extend(messages)
|
|
530
|
+
generator.ext2.extend(messages)
|
|
531
|
+
generator.group1.add().field1.MergeFrom(messages[0])
|
|
532
|
+
generator.group1.add().field1.MergeFrom(messages[1])
|
|
533
|
+
generator.group1.add().field1.MergeFrom(messages[2])
|
|
534
|
+
generator.group2.add().field1.MergeFrom(messages[0])
|
|
535
|
+
generator.group2.add().field1.MergeFrom(messages[1])
|
|
536
|
+
generator.group2.add().field1.MergeFrom(messages[2])
|
|
537
|
+
|
|
538
|
+
data = generator.SerializeToString()
|
|
539
|
+
parsing_merge = unittest_pb2.TestParsingMerge()
|
|
540
|
+
parsing_merge.ParseFromString(data)
|
|
541
|
+
|
|
542
|
+
# Required and optional fields should be merged.
|
|
543
|
+
self.assertEqual(parsing_merge.required_all_types, merged_message)
|
|
544
|
+
self.assertEqual(parsing_merge.optional_all_types, merged_message)
|
|
545
|
+
self.assertEqual(parsing_merge.optionalgroup.optional_group_all_types,
|
|
546
|
+
merged_message)
|
|
547
|
+
self.assertEqual(parsing_merge.Extensions[
|
|
548
|
+
unittest_pb2.TestParsingMerge.optional_ext],
|
|
549
|
+
merged_message)
|
|
550
|
+
|
|
551
|
+
# Repeated fields should not be merged.
|
|
552
|
+
self.assertEqual(len(parsing_merge.repeated_all_types), 3)
|
|
553
|
+
self.assertEqual(len(parsing_merge.repeatedgroup), 3)
|
|
554
|
+
self.assertEqual(len(parsing_merge.Extensions[
|
|
555
|
+
unittest_pb2.TestParsingMerge.repeated_ext]), 3)
|
|
556
|
+
|
|
557
|
+
def ensureNestedMessageExists(self, msg, attribute):
|
|
558
|
+
"""Make sure that a nested message object exists.
|
|
559
|
+
|
|
560
|
+
As soon as a nested message attribute is accessed, it will be present in the
|
|
561
|
+
_fields dict, without being marked as actually being set.
|
|
562
|
+
"""
|
|
563
|
+
getattr(msg, attribute)
|
|
564
|
+
self.assertFalse(msg.HasField(attribute))
|
|
565
|
+
|
|
566
|
+
def testOneofGetCaseNonexistingField(self):
|
|
567
|
+
m = unittest_pb2.TestAllTypes()
|
|
568
|
+
self.assertRaises(ValueError, m.WhichOneof, 'no_such_oneof_field')
|
|
569
|
+
|
|
570
|
+
def testOneofSemantics(self):
|
|
571
|
+
m = unittest_pb2.TestAllTypes()
|
|
572
|
+
self.assertIs(None, m.WhichOneof('oneof_field'))
|
|
573
|
+
|
|
574
|
+
m.oneof_uint32 = 11
|
|
575
|
+
self.assertEqual('oneof_uint32', m.WhichOneof('oneof_field'))
|
|
576
|
+
self.assertTrue(m.HasField('oneof_uint32'))
|
|
577
|
+
|
|
578
|
+
m.oneof_string = u'foo'
|
|
579
|
+
self.assertEqual('oneof_string', m.WhichOneof('oneof_field'))
|
|
580
|
+
self.assertFalse(m.HasField('oneof_uint32'))
|
|
581
|
+
self.assertTrue(m.HasField('oneof_string'))
|
|
582
|
+
|
|
583
|
+
m.oneof_nested_message.bb = 11
|
|
584
|
+
self.assertEqual('oneof_nested_message', m.WhichOneof('oneof_field'))
|
|
585
|
+
self.assertFalse(m.HasField('oneof_string'))
|
|
586
|
+
self.assertTrue(m.HasField('oneof_nested_message'))
|
|
587
|
+
|
|
588
|
+
m.oneof_bytes = b'bb'
|
|
589
|
+
self.assertEqual('oneof_bytes', m.WhichOneof('oneof_field'))
|
|
590
|
+
self.assertFalse(m.HasField('oneof_nested_message'))
|
|
591
|
+
self.assertTrue(m.HasField('oneof_bytes'))
|
|
592
|
+
|
|
593
|
+
def testOneofCompositeFieldReadAccess(self):
|
|
594
|
+
m = unittest_pb2.TestAllTypes()
|
|
595
|
+
m.oneof_uint32 = 11
|
|
596
|
+
|
|
597
|
+
self.ensureNestedMessageExists(m, 'oneof_nested_message')
|
|
598
|
+
self.assertEqual('oneof_uint32', m.WhichOneof('oneof_field'))
|
|
599
|
+
self.assertEqual(11, m.oneof_uint32)
|
|
600
|
+
|
|
601
|
+
def testOneofHasField(self):
|
|
602
|
+
m = unittest_pb2.TestAllTypes()
|
|
603
|
+
self.assertFalse(m.HasField('oneof_field'))
|
|
604
|
+
m.oneof_uint32 = 11
|
|
605
|
+
self.assertTrue(m.HasField('oneof_field'))
|
|
606
|
+
m.oneof_bytes = b'bb'
|
|
607
|
+
self.assertTrue(m.HasField('oneof_field'))
|
|
608
|
+
m.ClearField('oneof_bytes')
|
|
609
|
+
self.assertFalse(m.HasField('oneof_field'))
|
|
610
|
+
|
|
611
|
+
def testOneofClearField(self):
|
|
612
|
+
m = unittest_pb2.TestAllTypes()
|
|
613
|
+
m.oneof_uint32 = 11
|
|
614
|
+
m.ClearField('oneof_field')
|
|
615
|
+
self.assertFalse(m.HasField('oneof_field'))
|
|
616
|
+
self.assertFalse(m.HasField('oneof_uint32'))
|
|
617
|
+
self.assertIs(None, m.WhichOneof('oneof_field'))
|
|
618
|
+
|
|
619
|
+
def testOneofClearSetField(self):
|
|
620
|
+
m = unittest_pb2.TestAllTypes()
|
|
621
|
+
m.oneof_uint32 = 11
|
|
622
|
+
m.ClearField('oneof_uint32')
|
|
623
|
+
self.assertFalse(m.HasField('oneof_field'))
|
|
624
|
+
self.assertFalse(m.HasField('oneof_uint32'))
|
|
625
|
+
self.assertIs(None, m.WhichOneof('oneof_field'))
|
|
626
|
+
|
|
627
|
+
def testOneofClearUnsetField(self):
|
|
628
|
+
m = unittest_pb2.TestAllTypes()
|
|
629
|
+
m.oneof_uint32 = 11
|
|
630
|
+
self.ensureNestedMessageExists(m, 'oneof_nested_message')
|
|
631
|
+
m.ClearField('oneof_nested_message')
|
|
632
|
+
self.assertEqual(11, m.oneof_uint32)
|
|
633
|
+
self.assertTrue(m.HasField('oneof_field'))
|
|
634
|
+
self.assertTrue(m.HasField('oneof_uint32'))
|
|
635
|
+
self.assertEqual('oneof_uint32', m.WhichOneof('oneof_field'))
|
|
636
|
+
|
|
637
|
+
def testOneofDeserialize(self):
|
|
638
|
+
m = unittest_pb2.TestAllTypes()
|
|
639
|
+
m.oneof_uint32 = 11
|
|
640
|
+
m2 = unittest_pb2.TestAllTypes()
|
|
641
|
+
m2.ParseFromString(m.SerializeToString())
|
|
642
|
+
self.assertEqual('oneof_uint32', m2.WhichOneof('oneof_field'))
|
|
643
|
+
|
|
644
|
+
def testSortEmptyRepeatedCompositeContainer(self):
|
|
645
|
+
"""Exercise a scenario that has led to segfaults in the past.
|
|
646
|
+
"""
|
|
647
|
+
m = unittest_pb2.TestAllTypes()
|
|
648
|
+
m.repeated_nested_message.sort()
|
|
649
|
+
|
|
650
|
+
def testHasFieldOnRepeatedField(self):
|
|
651
|
+
"""Using HasField on a repeated field should raise an exception.
|
|
652
|
+
"""
|
|
653
|
+
m = unittest_pb2.TestAllTypes()
|
|
654
|
+
with self.assertRaises(ValueError) as _:
|
|
655
|
+
m.HasField('repeated_int32')
|
|
656
|
+
|
|
657
|
+
|
|
658
|
+
class ValidTypeNamesTest(basetest.TestCase):
|
|
659
|
+
|
|
660
|
+
def assertImportFromName(self, msg, base_name):
|
|
661
|
+
# Parse <type 'module.class_name'> to extra 'some.name' as a string.
|
|
662
|
+
tp_name = str(type(msg)).split("'")[1]
|
|
663
|
+
valid_names = ('Repeated%sContainer' % base_name,
|
|
664
|
+
'Repeated%sFieldContainer' % base_name)
|
|
665
|
+
self.assertTrue(any(tp_name.endswith(v) for v in valid_names),
|
|
666
|
+
'%r does end with any of %r' % (tp_name, valid_names))
|
|
667
|
+
|
|
668
|
+
parts = tp_name.split('.')
|
|
669
|
+
class_name = parts[-1]
|
|
670
|
+
module_name = '.'.join(parts[:-1])
|
|
671
|
+
__import__(module_name, fromlist=[class_name])
|
|
672
|
+
|
|
673
|
+
def testTypeNamesCanBeImported(self):
|
|
674
|
+
# If import doesn't work, pickling won't work either.
|
|
675
|
+
pb = unittest_pb2.TestAllTypes()
|
|
676
|
+
self.assertImportFromName(pb.repeated_int32, 'Scalar')
|
|
677
|
+
self.assertImportFromName(pb.repeated_nested_message, 'Composite')
|
|
678
|
+
|
|
679
|
+
|
|
680
|
+
if __name__ == '__main__':
|
|
681
|
+
basetest.main()
|