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,317 @@
|
|
|
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
|
+
// Author: kenton@google.com (Kenton Varda)
|
|
32
|
+
// Based on original Protocol Buffers design by
|
|
33
|
+
// Sanjay Ghemawat, Jeff Dean, and others.
|
|
34
|
+
//
|
|
35
|
+
// This file is the public interface to the .proto file parser.
|
|
36
|
+
|
|
37
|
+
#ifndef GOOGLE_PROTOBUF_COMPILER_IMPORTER_H__
|
|
38
|
+
#define GOOGLE_PROTOBUF_COMPILER_IMPORTER_H__
|
|
39
|
+
|
|
40
|
+
#include <string>
|
|
41
|
+
#include <vector>
|
|
42
|
+
#include <set>
|
|
43
|
+
#include <utility>
|
|
44
|
+
#include <google/protobuf/descriptor.h>
|
|
45
|
+
#include <google/protobuf/descriptor_database.h>
|
|
46
|
+
#include <google/protobuf/compiler/parser.h>
|
|
47
|
+
|
|
48
|
+
namespace google {
|
|
49
|
+
namespace protobuf {
|
|
50
|
+
|
|
51
|
+
namespace io { class ZeroCopyInputStream; }
|
|
52
|
+
|
|
53
|
+
namespace compiler {
|
|
54
|
+
|
|
55
|
+
// Defined in this file.
|
|
56
|
+
class Importer;
|
|
57
|
+
class MultiFileErrorCollector;
|
|
58
|
+
class SourceTree;
|
|
59
|
+
class DiskSourceTree;
|
|
60
|
+
|
|
61
|
+
// TODO(kenton): Move all SourceTree stuff to a separate file?
|
|
62
|
+
|
|
63
|
+
// An implementation of DescriptorDatabase which loads files from a SourceTree
|
|
64
|
+
// and parses them.
|
|
65
|
+
//
|
|
66
|
+
// Note: This class is not thread-safe since it maintains a table of source
|
|
67
|
+
// code locations for error reporting. However, when a DescriptorPool wraps
|
|
68
|
+
// a DescriptorDatabase, it uses mutex locking to make sure only one method
|
|
69
|
+
// of the database is called at a time, even if the DescriptorPool is used
|
|
70
|
+
// from multiple threads. Therefore, there is only a problem if you create
|
|
71
|
+
// multiple DescriptorPools wrapping the same SourceTreeDescriptorDatabase
|
|
72
|
+
// and use them from multiple threads.
|
|
73
|
+
//
|
|
74
|
+
// Note: This class does not implement FindFileContainingSymbol() or
|
|
75
|
+
// FindFileContainingExtension(); these will always return false.
|
|
76
|
+
class LIBPROTOBUF_EXPORT SourceTreeDescriptorDatabase : public DescriptorDatabase {
|
|
77
|
+
public:
|
|
78
|
+
SourceTreeDescriptorDatabase(SourceTree* source_tree);
|
|
79
|
+
~SourceTreeDescriptorDatabase();
|
|
80
|
+
|
|
81
|
+
// Instructs the SourceTreeDescriptorDatabase to report any parse errors
|
|
82
|
+
// to the given MultiFileErrorCollector. This should be called before
|
|
83
|
+
// parsing. error_collector must remain valid until either this method
|
|
84
|
+
// is called again or the SourceTreeDescriptorDatabase is destroyed.
|
|
85
|
+
void RecordErrorsTo(MultiFileErrorCollector* error_collector) {
|
|
86
|
+
error_collector_ = error_collector;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// Gets a DescriptorPool::ErrorCollector which records errors to the
|
|
90
|
+
// MultiFileErrorCollector specified with RecordErrorsTo(). This collector
|
|
91
|
+
// has the ability to determine exact line and column numbers of errors
|
|
92
|
+
// from the information given to it by the DescriptorPool.
|
|
93
|
+
DescriptorPool::ErrorCollector* GetValidationErrorCollector() {
|
|
94
|
+
using_validation_error_collector_ = true;
|
|
95
|
+
return &validation_error_collector_;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// implements DescriptorDatabase -----------------------------------
|
|
99
|
+
bool FindFileByName(const string& filename, FileDescriptorProto* output);
|
|
100
|
+
bool FindFileContainingSymbol(const string& symbol_name,
|
|
101
|
+
FileDescriptorProto* output);
|
|
102
|
+
bool FindFileContainingExtension(const string& containing_type,
|
|
103
|
+
int field_number,
|
|
104
|
+
FileDescriptorProto* output);
|
|
105
|
+
|
|
106
|
+
private:
|
|
107
|
+
class SingleFileErrorCollector;
|
|
108
|
+
|
|
109
|
+
SourceTree* source_tree_;
|
|
110
|
+
MultiFileErrorCollector* error_collector_;
|
|
111
|
+
|
|
112
|
+
class LIBPROTOBUF_EXPORT ValidationErrorCollector : public DescriptorPool::ErrorCollector {
|
|
113
|
+
public:
|
|
114
|
+
ValidationErrorCollector(SourceTreeDescriptorDatabase* owner);
|
|
115
|
+
~ValidationErrorCollector();
|
|
116
|
+
|
|
117
|
+
// implements ErrorCollector ---------------------------------------
|
|
118
|
+
void AddError(const string& filename,
|
|
119
|
+
const string& element_name,
|
|
120
|
+
const Message* descriptor,
|
|
121
|
+
ErrorLocation location,
|
|
122
|
+
const string& message);
|
|
123
|
+
|
|
124
|
+
private:
|
|
125
|
+
SourceTreeDescriptorDatabase* owner_;
|
|
126
|
+
};
|
|
127
|
+
friend class ValidationErrorCollector;
|
|
128
|
+
|
|
129
|
+
bool using_validation_error_collector_;
|
|
130
|
+
SourceLocationTable source_locations_;
|
|
131
|
+
ValidationErrorCollector validation_error_collector_;
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
// Simple interface for parsing .proto files. This wraps the process
|
|
135
|
+
// of opening the file, parsing it with a Parser, recursively parsing all its
|
|
136
|
+
// imports, and then cross-linking the results to produce a FileDescriptor.
|
|
137
|
+
//
|
|
138
|
+
// This is really just a thin wrapper around SourceTreeDescriptorDatabase.
|
|
139
|
+
// You may find that SourceTreeDescriptorDatabase is more flexible.
|
|
140
|
+
//
|
|
141
|
+
// TODO(kenton): I feel like this class is not well-named.
|
|
142
|
+
class LIBPROTOBUF_EXPORT Importer {
|
|
143
|
+
public:
|
|
144
|
+
Importer(SourceTree* source_tree,
|
|
145
|
+
MultiFileErrorCollector* error_collector);
|
|
146
|
+
~Importer();
|
|
147
|
+
|
|
148
|
+
// Import the given file and build a FileDescriptor representing it. If
|
|
149
|
+
// the file is already in the DescriptorPool, the existing FileDescriptor
|
|
150
|
+
// will be returned. The FileDescriptor is property of the DescriptorPool,
|
|
151
|
+
// and will remain valid until it is destroyed. If any errors occur, they
|
|
152
|
+
// will be reported using the error collector and Import() will return NULL.
|
|
153
|
+
//
|
|
154
|
+
// A particular Importer object will only report errors for a particular
|
|
155
|
+
// file once. All future attempts to import the same file will return NULL
|
|
156
|
+
// without reporting any errors. The idea is that you might want to import
|
|
157
|
+
// a lot of files without seeing the same errors over and over again. If
|
|
158
|
+
// you want to see errors for the same files repeatedly, you can use a
|
|
159
|
+
// separate Importer object to import each one (but use the same
|
|
160
|
+
// DescriptorPool so that they can be cross-linked).
|
|
161
|
+
const FileDescriptor* Import(const string& filename);
|
|
162
|
+
|
|
163
|
+
// The DescriptorPool in which all imported FileDescriptors and their
|
|
164
|
+
// contents are stored.
|
|
165
|
+
inline const DescriptorPool* pool() const {
|
|
166
|
+
return &pool_;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
void AddUnusedImportTrackFile(const string& file_name);
|
|
170
|
+
void ClearUnusedImportTrackFiles();
|
|
171
|
+
|
|
172
|
+
private:
|
|
173
|
+
SourceTreeDescriptorDatabase database_;
|
|
174
|
+
DescriptorPool pool_;
|
|
175
|
+
|
|
176
|
+
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(Importer);
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
// If the importer encounters problems while trying to import the proto files,
|
|
180
|
+
// it reports them to a MultiFileErrorCollector.
|
|
181
|
+
class LIBPROTOBUF_EXPORT MultiFileErrorCollector {
|
|
182
|
+
public:
|
|
183
|
+
inline MultiFileErrorCollector() {}
|
|
184
|
+
virtual ~MultiFileErrorCollector();
|
|
185
|
+
|
|
186
|
+
// Line and column numbers are zero-based. A line number of -1 indicates
|
|
187
|
+
// an error with the entire file (e.g. "not found").
|
|
188
|
+
virtual void AddError(const string& filename, int line, int column,
|
|
189
|
+
const string& message) = 0;
|
|
190
|
+
|
|
191
|
+
private:
|
|
192
|
+
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MultiFileErrorCollector);
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
// Abstract interface which represents a directory tree containing proto files.
|
|
196
|
+
// Used by the default implementation of Importer to resolve import statements
|
|
197
|
+
// Most users will probably want to use the DiskSourceTree implementation,
|
|
198
|
+
// below.
|
|
199
|
+
class LIBPROTOBUF_EXPORT SourceTree {
|
|
200
|
+
public:
|
|
201
|
+
inline SourceTree() {}
|
|
202
|
+
virtual ~SourceTree();
|
|
203
|
+
|
|
204
|
+
// Open the given file and return a stream that reads it, or NULL if not
|
|
205
|
+
// found. The caller takes ownership of the returned object. The filename
|
|
206
|
+
// must be a path relative to the root of the source tree and must not
|
|
207
|
+
// contain "." or ".." components.
|
|
208
|
+
virtual io::ZeroCopyInputStream* Open(const string& filename) = 0;
|
|
209
|
+
|
|
210
|
+
// If Open() returns NULL, calling this method immediately will return an
|
|
211
|
+
// description of the error.
|
|
212
|
+
// Subclasses should implement this method and return a meaningful value for
|
|
213
|
+
// better error reporting.
|
|
214
|
+
// TODO(xiaofeng): change this to a pure virtual function.
|
|
215
|
+
virtual string GetLastErrorMessage();
|
|
216
|
+
|
|
217
|
+
private:
|
|
218
|
+
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(SourceTree);
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
// An implementation of SourceTree which loads files from locations on disk.
|
|
222
|
+
// Multiple mappings can be set up to map locations in the DiskSourceTree to
|
|
223
|
+
// locations in the physical filesystem.
|
|
224
|
+
class LIBPROTOBUF_EXPORT DiskSourceTree : public SourceTree {
|
|
225
|
+
public:
|
|
226
|
+
DiskSourceTree();
|
|
227
|
+
~DiskSourceTree();
|
|
228
|
+
|
|
229
|
+
// Map a path on disk to a location in the SourceTree. The path may be
|
|
230
|
+
// either a file or a directory. If it is a directory, the entire tree
|
|
231
|
+
// under it will be mapped to the given virtual location. To map a directory
|
|
232
|
+
// to the root of the source tree, pass an empty string for virtual_path.
|
|
233
|
+
//
|
|
234
|
+
// If multiple mapped paths apply when opening a file, they will be searched
|
|
235
|
+
// in order. For example, if you do:
|
|
236
|
+
// MapPath("bar", "foo/bar");
|
|
237
|
+
// MapPath("", "baz");
|
|
238
|
+
// and then you do:
|
|
239
|
+
// Open("bar/qux");
|
|
240
|
+
// the DiskSourceTree will first try to open foo/bar/qux, then baz/bar/qux,
|
|
241
|
+
// returning the first one that opens successfuly.
|
|
242
|
+
//
|
|
243
|
+
// disk_path may be an absolute path or relative to the current directory,
|
|
244
|
+
// just like a path you'd pass to open().
|
|
245
|
+
void MapPath(const string& virtual_path, const string& disk_path);
|
|
246
|
+
|
|
247
|
+
// Return type for DiskFileToVirtualFile().
|
|
248
|
+
enum DiskFileToVirtualFileResult {
|
|
249
|
+
SUCCESS,
|
|
250
|
+
SHADOWED,
|
|
251
|
+
CANNOT_OPEN,
|
|
252
|
+
NO_MAPPING
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
// Given a path to a file on disk, find a virtual path mapping to that
|
|
256
|
+
// file. The first mapping created with MapPath() whose disk_path contains
|
|
257
|
+
// the filename is used. However, that virtual path may not actually be
|
|
258
|
+
// usable to open the given file. Possible return values are:
|
|
259
|
+
// * SUCCESS: The mapping was found. *virtual_file is filled in so that
|
|
260
|
+
// calling Open(*virtual_file) will open the file named by disk_file.
|
|
261
|
+
// * SHADOWED: A mapping was found, but using Open() to open this virtual
|
|
262
|
+
// path will end up returning some different file. This is because some
|
|
263
|
+
// other mapping with a higher precedence also matches this virtual path
|
|
264
|
+
// and maps it to a different file that exists on disk. *virtual_file
|
|
265
|
+
// is filled in as it would be in the SUCCESS case. *shadowing_disk_file
|
|
266
|
+
// is filled in with the disk path of the file which would be opened if
|
|
267
|
+
// you were to call Open(*virtual_file).
|
|
268
|
+
// * CANNOT_OPEN: The mapping was found and was not shadowed, but the
|
|
269
|
+
// file specified cannot be opened. When this value is returned,
|
|
270
|
+
// errno will indicate the reason the file cannot be opened. *virtual_file
|
|
271
|
+
// will be set to the virtual path as in the SUCCESS case, even though
|
|
272
|
+
// it is not useful.
|
|
273
|
+
// * NO_MAPPING: Indicates that no mapping was found which contains this
|
|
274
|
+
// file.
|
|
275
|
+
DiskFileToVirtualFileResult
|
|
276
|
+
DiskFileToVirtualFile(const string& disk_file,
|
|
277
|
+
string* virtual_file,
|
|
278
|
+
string* shadowing_disk_file);
|
|
279
|
+
|
|
280
|
+
// Given a virtual path, find the path to the file on disk.
|
|
281
|
+
// Return true and update disk_file with the on-disk path if the file exists.
|
|
282
|
+
// Return false and leave disk_file untouched if the file doesn't exist.
|
|
283
|
+
bool VirtualFileToDiskFile(const string& virtual_file, string* disk_file);
|
|
284
|
+
|
|
285
|
+
// implements SourceTree -------------------------------------------
|
|
286
|
+
virtual io::ZeroCopyInputStream* Open(const string& filename);
|
|
287
|
+
|
|
288
|
+
virtual string GetLastErrorMessage();
|
|
289
|
+
|
|
290
|
+
private:
|
|
291
|
+
struct Mapping {
|
|
292
|
+
string virtual_path;
|
|
293
|
+
string disk_path;
|
|
294
|
+
|
|
295
|
+
inline Mapping(const string& virtual_path_param,
|
|
296
|
+
const string& disk_path_param)
|
|
297
|
+
: virtual_path(virtual_path_param), disk_path(disk_path_param) {}
|
|
298
|
+
};
|
|
299
|
+
vector<Mapping> mappings_;
|
|
300
|
+
string last_error_message_;
|
|
301
|
+
|
|
302
|
+
// Like Open(), but returns the on-disk path in disk_file if disk_file is
|
|
303
|
+
// non-NULL and the file could be successfully opened.
|
|
304
|
+
io::ZeroCopyInputStream* OpenVirtualFile(const string& virtual_file,
|
|
305
|
+
string* disk_file);
|
|
306
|
+
|
|
307
|
+
// Like Open() but given the actual on-disk path.
|
|
308
|
+
io::ZeroCopyInputStream* OpenDiskFile(const string& filename);
|
|
309
|
+
|
|
310
|
+
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(DiskSourceTree);
|
|
311
|
+
};
|
|
312
|
+
|
|
313
|
+
} // namespace compiler
|
|
314
|
+
} // namespace protobuf
|
|
315
|
+
|
|
316
|
+
} // namespace google
|
|
317
|
+
#endif // GOOGLE_PROTOBUF_COMPILER_IMPORTER_H__
|
|
@@ -0,0 +1,617 @@
|
|
|
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
|
+
// Author: kenton@google.com (Kenton Varda)
|
|
32
|
+
// Based on original Protocol Buffers design by
|
|
33
|
+
// Sanjay Ghemawat, Jeff Dean, and others.
|
|
34
|
+
|
|
35
|
+
#include <google/protobuf/stubs/hash.h>
|
|
36
|
+
#include <memory>
|
|
37
|
+
|
|
38
|
+
#include <google/protobuf/compiler/importer.h>
|
|
39
|
+
#include <google/protobuf/descriptor.h>
|
|
40
|
+
#include <google/protobuf/io/zero_copy_stream_impl.h>
|
|
41
|
+
|
|
42
|
+
#include <google/protobuf/stubs/map_util.h>
|
|
43
|
+
#include <google/protobuf/stubs/common.h>
|
|
44
|
+
#include <google/protobuf/testing/file.h>
|
|
45
|
+
#include <google/protobuf/stubs/strutil.h>
|
|
46
|
+
#include <google/protobuf/stubs/substitute.h>
|
|
47
|
+
#include <google/protobuf/testing/googletest.h>
|
|
48
|
+
#include <gtest/gtest.h>
|
|
49
|
+
|
|
50
|
+
namespace google {
|
|
51
|
+
namespace protobuf {
|
|
52
|
+
namespace compiler {
|
|
53
|
+
|
|
54
|
+
namespace {
|
|
55
|
+
|
|
56
|
+
#define EXPECT_SUBSTRING(needle, haystack) \
|
|
57
|
+
EXPECT_PRED_FORMAT2(testing::IsSubstring, (needle), (haystack))
|
|
58
|
+
|
|
59
|
+
class MockErrorCollector : public MultiFileErrorCollector {
|
|
60
|
+
public:
|
|
61
|
+
MockErrorCollector() {}
|
|
62
|
+
~MockErrorCollector() {}
|
|
63
|
+
|
|
64
|
+
string text_;
|
|
65
|
+
|
|
66
|
+
// implements ErrorCollector ---------------------------------------
|
|
67
|
+
void AddError(const string& filename, int line, int column,
|
|
68
|
+
const string& message) {
|
|
69
|
+
strings::SubstituteAndAppend(&text_, "$0:$1:$2: $3\n",
|
|
70
|
+
filename, line, column, message);
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
// -------------------------------------------------------------------
|
|
75
|
+
|
|
76
|
+
// A dummy implementation of SourceTree backed by a simple map.
|
|
77
|
+
class MockSourceTree : public SourceTree {
|
|
78
|
+
public:
|
|
79
|
+
MockSourceTree() {}
|
|
80
|
+
~MockSourceTree() {}
|
|
81
|
+
|
|
82
|
+
void AddFile(const string& name, const char* contents) {
|
|
83
|
+
files_[name] = contents;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// implements SourceTree -------------------------------------------
|
|
87
|
+
io::ZeroCopyInputStream* Open(const string& filename) {
|
|
88
|
+
const char* contents = FindPtrOrNull(files_, filename);
|
|
89
|
+
if (contents == NULL) {
|
|
90
|
+
return NULL;
|
|
91
|
+
} else {
|
|
92
|
+
return new io::ArrayInputStream(contents, strlen(contents));
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
string GetLastErrorMessage() {
|
|
97
|
+
return "File not found.";
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
private:
|
|
101
|
+
hash_map<string, const char*> files_;
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
// ===================================================================
|
|
105
|
+
|
|
106
|
+
class ImporterTest : public testing::Test {
|
|
107
|
+
protected:
|
|
108
|
+
ImporterTest()
|
|
109
|
+
: importer_(&source_tree_, &error_collector_) {}
|
|
110
|
+
|
|
111
|
+
void AddFile(const string& filename, const char* text) {
|
|
112
|
+
source_tree_.AddFile(filename, text);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// Return the collected error text
|
|
116
|
+
string error() const { return error_collector_.text_; }
|
|
117
|
+
|
|
118
|
+
MockErrorCollector error_collector_;
|
|
119
|
+
MockSourceTree source_tree_;
|
|
120
|
+
Importer importer_;
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
TEST_F(ImporterTest, Import) {
|
|
124
|
+
// Test normal importing.
|
|
125
|
+
AddFile("foo.proto",
|
|
126
|
+
"syntax = \"proto2\";\n"
|
|
127
|
+
"message Foo {}\n");
|
|
128
|
+
|
|
129
|
+
const FileDescriptor* file = importer_.Import("foo.proto");
|
|
130
|
+
EXPECT_EQ("", error_collector_.text_);
|
|
131
|
+
ASSERT_TRUE(file != NULL);
|
|
132
|
+
|
|
133
|
+
ASSERT_EQ(1, file->message_type_count());
|
|
134
|
+
EXPECT_EQ("Foo", file->message_type(0)->name());
|
|
135
|
+
|
|
136
|
+
// Importing again should return same object.
|
|
137
|
+
EXPECT_EQ(file, importer_.Import("foo.proto"));
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
TEST_F(ImporterTest, ImportNested) {
|
|
141
|
+
// Test that importing a file which imports another file works.
|
|
142
|
+
AddFile("foo.proto",
|
|
143
|
+
"syntax = \"proto2\";\n"
|
|
144
|
+
"import \"bar.proto\";\n"
|
|
145
|
+
"message Foo {\n"
|
|
146
|
+
" optional Bar bar = 1;\n"
|
|
147
|
+
"}\n");
|
|
148
|
+
AddFile("bar.proto",
|
|
149
|
+
"syntax = \"proto2\";\n"
|
|
150
|
+
"message Bar {}\n");
|
|
151
|
+
|
|
152
|
+
// Note that both files are actually parsed by the first call to Import()
|
|
153
|
+
// here, since foo.proto imports bar.proto. The second call just returns
|
|
154
|
+
// the same ProtoFile for bar.proto which was constructed while importing
|
|
155
|
+
// foo.proto. We test that this is the case below by checking that bar
|
|
156
|
+
// is among foo's dependencies (by pointer).
|
|
157
|
+
const FileDescriptor* foo = importer_.Import("foo.proto");
|
|
158
|
+
const FileDescriptor* bar = importer_.Import("bar.proto");
|
|
159
|
+
EXPECT_EQ("", error_collector_.text_);
|
|
160
|
+
ASSERT_TRUE(foo != NULL);
|
|
161
|
+
ASSERT_TRUE(bar != NULL);
|
|
162
|
+
|
|
163
|
+
// Check that foo's dependency is the same object as bar.
|
|
164
|
+
ASSERT_EQ(1, foo->dependency_count());
|
|
165
|
+
EXPECT_EQ(bar, foo->dependency(0));
|
|
166
|
+
|
|
167
|
+
// Check that foo properly cross-links bar.
|
|
168
|
+
ASSERT_EQ(1, foo->message_type_count());
|
|
169
|
+
ASSERT_EQ(1, bar->message_type_count());
|
|
170
|
+
ASSERT_EQ(1, foo->message_type(0)->field_count());
|
|
171
|
+
ASSERT_EQ(FieldDescriptor::TYPE_MESSAGE,
|
|
172
|
+
foo->message_type(0)->field(0)->type());
|
|
173
|
+
EXPECT_EQ(bar->message_type(0),
|
|
174
|
+
foo->message_type(0)->field(0)->message_type());
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
TEST_F(ImporterTest, FileNotFound) {
|
|
178
|
+
// Error: Parsing a file that doesn't exist.
|
|
179
|
+
EXPECT_TRUE(importer_.Import("foo.proto") == NULL);
|
|
180
|
+
EXPECT_EQ(
|
|
181
|
+
"foo.proto:-1:0: File not found.\n",
|
|
182
|
+
error_collector_.text_);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
TEST_F(ImporterTest, ImportNotFound) {
|
|
186
|
+
// Error: Importing a file that doesn't exist.
|
|
187
|
+
AddFile("foo.proto",
|
|
188
|
+
"syntax = \"proto2\";\n"
|
|
189
|
+
"import \"bar.proto\";\n");
|
|
190
|
+
|
|
191
|
+
EXPECT_TRUE(importer_.Import("foo.proto") == NULL);
|
|
192
|
+
EXPECT_EQ(
|
|
193
|
+
"bar.proto:-1:0: File not found.\n"
|
|
194
|
+
"foo.proto:-1:0: Import \"bar.proto\" was not found or had errors.\n",
|
|
195
|
+
error_collector_.text_);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
TEST_F(ImporterTest, RecursiveImport) {
|
|
199
|
+
// Error: Recursive import.
|
|
200
|
+
AddFile("recursive1.proto",
|
|
201
|
+
"syntax = \"proto2\";\n"
|
|
202
|
+
"import \"recursive2.proto\";\n");
|
|
203
|
+
AddFile("recursive2.proto",
|
|
204
|
+
"syntax = \"proto2\";\n"
|
|
205
|
+
"import \"recursive1.proto\";\n");
|
|
206
|
+
|
|
207
|
+
EXPECT_TRUE(importer_.Import("recursive1.proto") == NULL);
|
|
208
|
+
EXPECT_EQ(
|
|
209
|
+
"recursive1.proto:-1:0: File recursively imports itself: recursive1.proto "
|
|
210
|
+
"-> recursive2.proto -> recursive1.proto\n"
|
|
211
|
+
"recursive2.proto:-1:0: Import \"recursive1.proto\" was not found "
|
|
212
|
+
"or had errors.\n"
|
|
213
|
+
"recursive1.proto:-1:0: Import \"recursive2.proto\" was not found "
|
|
214
|
+
"or had errors.\n",
|
|
215
|
+
error_collector_.text_);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
// TODO(sanjay): The MapField tests below more properly belong in
|
|
219
|
+
// descriptor_unittest, but are more convenient to test here.
|
|
220
|
+
TEST_F(ImporterTest, MapFieldValid) {
|
|
221
|
+
AddFile(
|
|
222
|
+
"map.proto",
|
|
223
|
+
"syntax = \"proto2\";\n"
|
|
224
|
+
"message Item {\n"
|
|
225
|
+
" required string key = 1;\n"
|
|
226
|
+
"}\n"
|
|
227
|
+
"message Map {\n"
|
|
228
|
+
" repeated Item items = 1 [experimental_map_key = \"key\"];\n"
|
|
229
|
+
"}\n"
|
|
230
|
+
);
|
|
231
|
+
const FileDescriptor* file = importer_.Import("map.proto");
|
|
232
|
+
ASSERT_TRUE(file != NULL) << error_collector_.text_;
|
|
233
|
+
EXPECT_EQ("", error_collector_.text_);
|
|
234
|
+
|
|
235
|
+
// Check that Map::items points to Item::key
|
|
236
|
+
const Descriptor* item_type = file->FindMessageTypeByName("Item");
|
|
237
|
+
ASSERT_TRUE(item_type != NULL);
|
|
238
|
+
const Descriptor* map_type = file->FindMessageTypeByName("Map");
|
|
239
|
+
ASSERT_TRUE(map_type != NULL);
|
|
240
|
+
const FieldDescriptor* key_field = item_type->FindFieldByName("key");
|
|
241
|
+
ASSERT_TRUE(key_field != NULL);
|
|
242
|
+
const FieldDescriptor* items_field = map_type->FindFieldByName("items");
|
|
243
|
+
ASSERT_TRUE(items_field != NULL);
|
|
244
|
+
EXPECT_EQ(items_field->experimental_map_key(), key_field);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
TEST_F(ImporterTest, MapFieldNotRepeated) {
|
|
248
|
+
AddFile(
|
|
249
|
+
"map.proto",
|
|
250
|
+
"syntax = \"proto2\";\n"
|
|
251
|
+
"message Item {\n"
|
|
252
|
+
" required string key = 1;\n"
|
|
253
|
+
"}\n"
|
|
254
|
+
"message Map {\n"
|
|
255
|
+
" required Item items = 1 [experimental_map_key = \"key\"];\n"
|
|
256
|
+
"}\n"
|
|
257
|
+
);
|
|
258
|
+
EXPECT_TRUE(importer_.Import("map.proto") == NULL);
|
|
259
|
+
EXPECT_SUBSTRING("only allowed for repeated fields", error());
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
TEST_F(ImporterTest, MapFieldNotMessageType) {
|
|
263
|
+
AddFile(
|
|
264
|
+
"map.proto",
|
|
265
|
+
"syntax = \"proto2\";\n"
|
|
266
|
+
"message Map {\n"
|
|
267
|
+
" repeated int32 items = 1 [experimental_map_key = \"key\"];\n"
|
|
268
|
+
"}\n"
|
|
269
|
+
);
|
|
270
|
+
EXPECT_TRUE(importer_.Import("map.proto") == NULL);
|
|
271
|
+
EXPECT_SUBSTRING("only allowed for fields with a message type", error());
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
TEST_F(ImporterTest, MapFieldTypeNotFound) {
|
|
275
|
+
AddFile(
|
|
276
|
+
"map.proto",
|
|
277
|
+
"syntax = \"proto2\";\n"
|
|
278
|
+
"message Map {\n"
|
|
279
|
+
" repeated Unknown items = 1 [experimental_map_key = \"key\"];\n"
|
|
280
|
+
"}\n"
|
|
281
|
+
);
|
|
282
|
+
EXPECT_TRUE(importer_.Import("map.proto") == NULL);
|
|
283
|
+
EXPECT_SUBSTRING("not defined", error());
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
TEST_F(ImporterTest, MapFieldKeyNotFound) {
|
|
287
|
+
AddFile(
|
|
288
|
+
"map.proto",
|
|
289
|
+
"syntax = \"proto2\";\n"
|
|
290
|
+
"message Item {\n"
|
|
291
|
+
" required string key = 1;\n"
|
|
292
|
+
"}\n"
|
|
293
|
+
"message Map {\n"
|
|
294
|
+
" repeated Item items = 1 [experimental_map_key = \"badkey\"];\n"
|
|
295
|
+
"}\n"
|
|
296
|
+
);
|
|
297
|
+
EXPECT_TRUE(importer_.Import("map.proto") == NULL);
|
|
298
|
+
EXPECT_SUBSTRING("Could not find field", error());
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
TEST_F(ImporterTest, MapFieldKeyRepeated) {
|
|
302
|
+
AddFile(
|
|
303
|
+
"map.proto",
|
|
304
|
+
"syntax = \"proto2\";\n"
|
|
305
|
+
"message Item {\n"
|
|
306
|
+
" repeated string key = 1;\n"
|
|
307
|
+
"}\n"
|
|
308
|
+
"message Map {\n"
|
|
309
|
+
" repeated Item items = 1 [experimental_map_key = \"key\"];\n"
|
|
310
|
+
"}\n"
|
|
311
|
+
);
|
|
312
|
+
EXPECT_TRUE(importer_.Import("map.proto") == NULL);
|
|
313
|
+
EXPECT_SUBSTRING("must not name a repeated field", error());
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
TEST_F(ImporterTest, MapFieldKeyNotScalar) {
|
|
317
|
+
AddFile(
|
|
318
|
+
"map.proto",
|
|
319
|
+
"syntax = \"proto2\";\n"
|
|
320
|
+
"message ItemKey { }\n"
|
|
321
|
+
"message Item {\n"
|
|
322
|
+
" required ItemKey key = 1;\n"
|
|
323
|
+
"}\n"
|
|
324
|
+
"message Map {\n"
|
|
325
|
+
" repeated Item items = 1 [experimental_map_key = \"key\"];\n"
|
|
326
|
+
"}\n"
|
|
327
|
+
);
|
|
328
|
+
EXPECT_TRUE(importer_.Import("map.proto") == NULL);
|
|
329
|
+
EXPECT_SUBSTRING("must name a scalar or string", error());
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
|
|
333
|
+
// ===================================================================
|
|
334
|
+
|
|
335
|
+
class DiskSourceTreeTest : public testing::Test {
|
|
336
|
+
protected:
|
|
337
|
+
virtual void SetUp() {
|
|
338
|
+
dirnames_.push_back(TestTempDir() + "/test_proto2_import_path_1");
|
|
339
|
+
dirnames_.push_back(TestTempDir() + "/test_proto2_import_path_2");
|
|
340
|
+
|
|
341
|
+
for (int i = 0; i < dirnames_.size(); i++) {
|
|
342
|
+
if (File::Exists(dirnames_[i])) {
|
|
343
|
+
File::DeleteRecursively(dirnames_[i], NULL, NULL);
|
|
344
|
+
}
|
|
345
|
+
GOOGLE_CHECK_OK(File::CreateDir(dirnames_[i], 0777));
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
virtual void TearDown() {
|
|
350
|
+
for (int i = 0; i < dirnames_.size(); i++) {
|
|
351
|
+
File::DeleteRecursively(dirnames_[i], NULL, NULL);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
void AddFile(const string& filename, const char* contents) {
|
|
356
|
+
GOOGLE_CHECK_OK(File::SetContents(filename, contents, true));
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
void AddSubdir(const string& dirname) {
|
|
360
|
+
GOOGLE_CHECK_OK(File::CreateDir(dirname, 0777));
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
void ExpectFileContents(const string& filename,
|
|
364
|
+
const char* expected_contents) {
|
|
365
|
+
scoped_ptr<io::ZeroCopyInputStream> input(source_tree_.Open(filename));
|
|
366
|
+
|
|
367
|
+
ASSERT_FALSE(input == NULL);
|
|
368
|
+
|
|
369
|
+
// Read all the data from the file.
|
|
370
|
+
string file_contents;
|
|
371
|
+
const void* data;
|
|
372
|
+
int size;
|
|
373
|
+
while (input->Next(&data, &size)) {
|
|
374
|
+
file_contents.append(reinterpret_cast<const char*>(data), size);
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
EXPECT_EQ(expected_contents, file_contents);
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
void ExpectCannotOpenFile(const string& filename,
|
|
381
|
+
const string& error_message) {
|
|
382
|
+
scoped_ptr<io::ZeroCopyInputStream> input(source_tree_.Open(filename));
|
|
383
|
+
EXPECT_TRUE(input == NULL);
|
|
384
|
+
EXPECT_EQ(error_message, source_tree_.GetLastErrorMessage());
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
DiskSourceTree source_tree_;
|
|
388
|
+
|
|
389
|
+
// Paths of two on-disk directories to use during the test.
|
|
390
|
+
vector<string> dirnames_;
|
|
391
|
+
};
|
|
392
|
+
|
|
393
|
+
TEST_F(DiskSourceTreeTest, MapRoot) {
|
|
394
|
+
// Test opening a file in a directory that is mapped to the root of the
|
|
395
|
+
// source tree.
|
|
396
|
+
AddFile(dirnames_[0] + "/foo", "Hello World!");
|
|
397
|
+
source_tree_.MapPath("", dirnames_[0]);
|
|
398
|
+
|
|
399
|
+
ExpectFileContents("foo", "Hello World!");
|
|
400
|
+
ExpectCannotOpenFile("bar", "File not found.");
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
TEST_F(DiskSourceTreeTest, MapDirectory) {
|
|
404
|
+
// Test opening a file in a directory that is mapped to somewhere other
|
|
405
|
+
// than the root of the source tree.
|
|
406
|
+
|
|
407
|
+
AddFile(dirnames_[0] + "/foo", "Hello World!");
|
|
408
|
+
source_tree_.MapPath("baz", dirnames_[0]);
|
|
409
|
+
|
|
410
|
+
ExpectFileContents("baz/foo", "Hello World!");
|
|
411
|
+
ExpectCannotOpenFile("baz/bar", "File not found.");
|
|
412
|
+
ExpectCannotOpenFile("foo", "File not found.");
|
|
413
|
+
ExpectCannotOpenFile("bar", "File not found.");
|
|
414
|
+
|
|
415
|
+
// Non-canonical file names should not work.
|
|
416
|
+
ExpectCannotOpenFile("baz//foo",
|
|
417
|
+
"Backslashes, consecutive slashes, \".\", or \"..\" are "
|
|
418
|
+
"not allowed in the virtual path");
|
|
419
|
+
ExpectCannotOpenFile("baz/../baz/foo",
|
|
420
|
+
"Backslashes, consecutive slashes, \".\", or \"..\" are "
|
|
421
|
+
"not allowed in the virtual path");
|
|
422
|
+
ExpectCannotOpenFile("baz/./foo",
|
|
423
|
+
"Backslashes, consecutive slashes, \".\", or \"..\" are "
|
|
424
|
+
"not allowed in the virtual path");
|
|
425
|
+
ExpectCannotOpenFile("baz/foo/", "File not found.");
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
TEST_F(DiskSourceTreeTest, NoParent) {
|
|
429
|
+
// Test that we cannot open files in a parent of a mapped directory.
|
|
430
|
+
|
|
431
|
+
AddFile(dirnames_[0] + "/foo", "Hello World!");
|
|
432
|
+
AddSubdir(dirnames_[0] + "/bar");
|
|
433
|
+
AddFile(dirnames_[0] + "/bar/baz", "Blah.");
|
|
434
|
+
source_tree_.MapPath("", dirnames_[0] + "/bar");
|
|
435
|
+
|
|
436
|
+
ExpectFileContents("baz", "Blah.");
|
|
437
|
+
ExpectCannotOpenFile("../foo",
|
|
438
|
+
"Backslashes, consecutive slashes, \".\", or \"..\" are "
|
|
439
|
+
"not allowed in the virtual path");
|
|
440
|
+
ExpectCannotOpenFile("../bar/baz",
|
|
441
|
+
"Backslashes, consecutive slashes, \".\", or \"..\" are "
|
|
442
|
+
"not allowed in the virtual path");
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
TEST_F(DiskSourceTreeTest, MapFile) {
|
|
446
|
+
// Test opening a file that is mapped directly into the source tree.
|
|
447
|
+
|
|
448
|
+
AddFile(dirnames_[0] + "/foo", "Hello World!");
|
|
449
|
+
source_tree_.MapPath("foo", dirnames_[0] + "/foo");
|
|
450
|
+
|
|
451
|
+
ExpectFileContents("foo", "Hello World!");
|
|
452
|
+
ExpectCannotOpenFile("bar", "File not found.");
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
TEST_F(DiskSourceTreeTest, SearchMultipleDirectories) {
|
|
456
|
+
// Test mapping and searching multiple directories.
|
|
457
|
+
|
|
458
|
+
AddFile(dirnames_[0] + "/foo", "Hello World!");
|
|
459
|
+
AddFile(dirnames_[1] + "/foo", "This file should be hidden.");
|
|
460
|
+
AddFile(dirnames_[1] + "/bar", "Goodbye World!");
|
|
461
|
+
source_tree_.MapPath("", dirnames_[0]);
|
|
462
|
+
source_tree_.MapPath("", dirnames_[1]);
|
|
463
|
+
|
|
464
|
+
ExpectFileContents("foo", "Hello World!");
|
|
465
|
+
ExpectFileContents("bar", "Goodbye World!");
|
|
466
|
+
ExpectCannotOpenFile("baz", "File not found.");
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
TEST_F(DiskSourceTreeTest, OrderingTrumpsSpecificity) {
|
|
470
|
+
// Test that directories are always searched in order, even when a latter
|
|
471
|
+
// directory is more-specific than a former one.
|
|
472
|
+
|
|
473
|
+
// Create the "bar" directory so we can put a file in it.
|
|
474
|
+
GOOGLE_CHECK_OK(File::CreateDir(dirnames_[0] + "/bar", 0777));
|
|
475
|
+
|
|
476
|
+
// Add files and map paths.
|
|
477
|
+
AddFile(dirnames_[0] + "/bar/foo", "Hello World!");
|
|
478
|
+
AddFile(dirnames_[1] + "/foo", "This file should be hidden.");
|
|
479
|
+
source_tree_.MapPath("", dirnames_[0]);
|
|
480
|
+
source_tree_.MapPath("bar", dirnames_[1]);
|
|
481
|
+
|
|
482
|
+
// Check.
|
|
483
|
+
ExpectFileContents("bar/foo", "Hello World!");
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
TEST_F(DiskSourceTreeTest, DiskFileToVirtualFile) {
|
|
487
|
+
// Test DiskFileToVirtualFile.
|
|
488
|
+
|
|
489
|
+
AddFile(dirnames_[0] + "/foo", "Hello World!");
|
|
490
|
+
AddFile(dirnames_[1] + "/foo", "This file should be hidden.");
|
|
491
|
+
source_tree_.MapPath("bar", dirnames_[0]);
|
|
492
|
+
source_tree_.MapPath("bar", dirnames_[1]);
|
|
493
|
+
|
|
494
|
+
string virtual_file;
|
|
495
|
+
string shadowing_disk_file;
|
|
496
|
+
|
|
497
|
+
EXPECT_EQ(DiskSourceTree::NO_MAPPING,
|
|
498
|
+
source_tree_.DiskFileToVirtualFile(
|
|
499
|
+
"/foo", &virtual_file, &shadowing_disk_file));
|
|
500
|
+
|
|
501
|
+
EXPECT_EQ(DiskSourceTree::SHADOWED,
|
|
502
|
+
source_tree_.DiskFileToVirtualFile(
|
|
503
|
+
dirnames_[1] + "/foo", &virtual_file, &shadowing_disk_file));
|
|
504
|
+
EXPECT_EQ("bar/foo", virtual_file);
|
|
505
|
+
EXPECT_EQ(dirnames_[0] + "/foo", shadowing_disk_file);
|
|
506
|
+
|
|
507
|
+
EXPECT_EQ(DiskSourceTree::CANNOT_OPEN,
|
|
508
|
+
source_tree_.DiskFileToVirtualFile(
|
|
509
|
+
dirnames_[1] + "/baz", &virtual_file, &shadowing_disk_file));
|
|
510
|
+
EXPECT_EQ("bar/baz", virtual_file);
|
|
511
|
+
|
|
512
|
+
EXPECT_EQ(DiskSourceTree::SUCCESS,
|
|
513
|
+
source_tree_.DiskFileToVirtualFile(
|
|
514
|
+
dirnames_[0] + "/foo", &virtual_file, &shadowing_disk_file));
|
|
515
|
+
EXPECT_EQ("bar/foo", virtual_file);
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
TEST_F(DiskSourceTreeTest, DiskFileToVirtualFileCanonicalization) {
|
|
519
|
+
// Test handling of "..", ".", etc. in DiskFileToVirtualFile().
|
|
520
|
+
|
|
521
|
+
source_tree_.MapPath("dir1", "..");
|
|
522
|
+
source_tree_.MapPath("dir2", "../../foo");
|
|
523
|
+
source_tree_.MapPath("dir3", "./foo/bar/.");
|
|
524
|
+
source_tree_.MapPath("dir4", ".");
|
|
525
|
+
source_tree_.MapPath("", "/qux");
|
|
526
|
+
source_tree_.MapPath("dir5", "/quux/");
|
|
527
|
+
|
|
528
|
+
string virtual_file;
|
|
529
|
+
string shadowing_disk_file;
|
|
530
|
+
|
|
531
|
+
// "../.." should not be considered to be under "..".
|
|
532
|
+
EXPECT_EQ(DiskSourceTree::NO_MAPPING,
|
|
533
|
+
source_tree_.DiskFileToVirtualFile(
|
|
534
|
+
"../../baz", &virtual_file, &shadowing_disk_file));
|
|
535
|
+
|
|
536
|
+
// "/foo" is not mapped (it should not be misintepreted as being under ".").
|
|
537
|
+
EXPECT_EQ(DiskSourceTree::NO_MAPPING,
|
|
538
|
+
source_tree_.DiskFileToVirtualFile(
|
|
539
|
+
"/foo", &virtual_file, &shadowing_disk_file));
|
|
540
|
+
|
|
541
|
+
#ifdef WIN32
|
|
542
|
+
// "C:\foo" is not mapped (it should not be misintepreted as being under ".").
|
|
543
|
+
EXPECT_EQ(DiskSourceTree::NO_MAPPING,
|
|
544
|
+
source_tree_.DiskFileToVirtualFile(
|
|
545
|
+
"C:\\foo", &virtual_file, &shadowing_disk_file));
|
|
546
|
+
#endif // WIN32
|
|
547
|
+
|
|
548
|
+
// But "../baz" should be.
|
|
549
|
+
EXPECT_EQ(DiskSourceTree::CANNOT_OPEN,
|
|
550
|
+
source_tree_.DiskFileToVirtualFile(
|
|
551
|
+
"../baz", &virtual_file, &shadowing_disk_file));
|
|
552
|
+
EXPECT_EQ("dir1/baz", virtual_file);
|
|
553
|
+
|
|
554
|
+
// "../../foo/baz" is under "../../foo".
|
|
555
|
+
EXPECT_EQ(DiskSourceTree::CANNOT_OPEN,
|
|
556
|
+
source_tree_.DiskFileToVirtualFile(
|
|
557
|
+
"../../foo/baz", &virtual_file, &shadowing_disk_file));
|
|
558
|
+
EXPECT_EQ("dir2/baz", virtual_file);
|
|
559
|
+
|
|
560
|
+
// "foo/./bar/baz" is under "./foo/bar/.".
|
|
561
|
+
EXPECT_EQ(DiskSourceTree::CANNOT_OPEN,
|
|
562
|
+
source_tree_.DiskFileToVirtualFile(
|
|
563
|
+
"foo/bar/baz", &virtual_file, &shadowing_disk_file));
|
|
564
|
+
EXPECT_EQ("dir3/baz", virtual_file);
|
|
565
|
+
|
|
566
|
+
// "bar" is under ".".
|
|
567
|
+
EXPECT_EQ(DiskSourceTree::CANNOT_OPEN,
|
|
568
|
+
source_tree_.DiskFileToVirtualFile(
|
|
569
|
+
"bar", &virtual_file, &shadowing_disk_file));
|
|
570
|
+
EXPECT_EQ("dir4/bar", virtual_file);
|
|
571
|
+
|
|
572
|
+
// "/qux/baz" is under "/qux".
|
|
573
|
+
EXPECT_EQ(DiskSourceTree::CANNOT_OPEN,
|
|
574
|
+
source_tree_.DiskFileToVirtualFile(
|
|
575
|
+
"/qux/baz", &virtual_file, &shadowing_disk_file));
|
|
576
|
+
EXPECT_EQ("baz", virtual_file);
|
|
577
|
+
|
|
578
|
+
// "/quux/bar" is under "/quux".
|
|
579
|
+
EXPECT_EQ(DiskSourceTree::CANNOT_OPEN,
|
|
580
|
+
source_tree_.DiskFileToVirtualFile(
|
|
581
|
+
"/quux/bar", &virtual_file, &shadowing_disk_file));
|
|
582
|
+
EXPECT_EQ("dir5/bar", virtual_file);
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
TEST_F(DiskSourceTreeTest, VirtualFileToDiskFile) {
|
|
586
|
+
// Test VirtualFileToDiskFile.
|
|
587
|
+
|
|
588
|
+
AddFile(dirnames_[0] + "/foo", "Hello World!");
|
|
589
|
+
AddFile(dirnames_[1] + "/foo", "This file should be hidden.");
|
|
590
|
+
AddFile(dirnames_[1] + "/quux", "This file should not be hidden.");
|
|
591
|
+
source_tree_.MapPath("bar", dirnames_[0]);
|
|
592
|
+
source_tree_.MapPath("bar", dirnames_[1]);
|
|
593
|
+
|
|
594
|
+
// Existent files, shadowed and non-shadowed case.
|
|
595
|
+
string disk_file;
|
|
596
|
+
EXPECT_TRUE(source_tree_.VirtualFileToDiskFile("bar/foo", &disk_file));
|
|
597
|
+
EXPECT_EQ(dirnames_[0] + "/foo", disk_file);
|
|
598
|
+
EXPECT_TRUE(source_tree_.VirtualFileToDiskFile("bar/quux", &disk_file));
|
|
599
|
+
EXPECT_EQ(dirnames_[1] + "/quux", disk_file);
|
|
600
|
+
|
|
601
|
+
// Nonexistent file in existent directory and vice versa.
|
|
602
|
+
string not_touched = "not touched";
|
|
603
|
+
EXPECT_FALSE(source_tree_.VirtualFileToDiskFile("bar/baz", ¬_touched));
|
|
604
|
+
EXPECT_EQ("not touched", not_touched);
|
|
605
|
+
EXPECT_FALSE(source_tree_.VirtualFileToDiskFile("baz/foo", ¬_touched));
|
|
606
|
+
EXPECT_EQ("not touched", not_touched);
|
|
607
|
+
|
|
608
|
+
// Accept NULL as output parameter.
|
|
609
|
+
EXPECT_TRUE(source_tree_.VirtualFileToDiskFile("bar/foo", NULL));
|
|
610
|
+
EXPECT_FALSE(source_tree_.VirtualFileToDiskFile("baz/foo", NULL));
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
} // namespace
|
|
614
|
+
|
|
615
|
+
} // namespace compiler
|
|
616
|
+
} // namespace protobuf
|
|
617
|
+
} // namespace google
|