Jelajahi Sumber

Factored Conformance and Benchmark test messages into shared test schema. (#1971)

* Factored Conformance test messages into shared test schema.

* Updated benchmarks to use new proto3 message locations.

* Fixed include path.

* Conformance: fixed include of Python test messages.

* Make maven in Rakefile use --batch-mode.

* Revert changes to benchmarks.

On second thought I think a separate schema for
CPU benchmarking makes sense.

* Try regenerating C# protos for new test protos.

* Removed benchmark messages from test proto.

* Added Jon Skeet's fixes for C#.

* Removed duplicate/old test messages C# file.

* C# fixes for test schema move.

* Fixed C# to use the correct TestAllTypes message.

* Fixes for Objective C test schema move.

* Added missing EXTRA_DIST file.
Joshua Haberman 8 tahun lalu
induk
melakukan
f1ce60e7b4

+ 1 - 0
Makefile.am

@@ -100,6 +100,7 @@ csharp_EXTRA_DIST=                                                           \
   csharp/src/Google.Protobuf.Test/TestCornerCases.cs                         \
   csharp/src/Google.Protobuf.Test/TestProtos/ForeignMessagePartial.cs        \
   csharp/src/Google.Protobuf.Test/TestProtos/MapUnittestProto3.cs            \
+  csharp/src/Google.Protobuf.Test/TestProtos/TestMessagesProto3.cs           \
   csharp/src/Google.Protobuf.Test/TestProtos/UnittestImportProto3.cs         \
   csharp/src/Google.Protobuf.Test/TestProtos/UnittestImportPublicProto3.cs   \
   csharp/src/Google.Protobuf.Test/TestProtos/UnittestIssues.cs               \

+ 24 - 23
conformance/ConformanceJava.java

@@ -1,9 +1,10 @@
 import com.google.protobuf.ByteString;
 import com.google.protobuf.CodedInputStream;
-import com.google.protobuf.InvalidProtocolBufferException;
 import com.google.protobuf.conformance.Conformance;
-import com.google.protobuf.util.JsonFormat.TypeRegistry;
+import com.google.protobuf.InvalidProtocolBufferException;
+import com.google.protobuf_test_messages.proto3.TestMessagesProto3;
 import com.google.protobuf.util.JsonFormat;
+import com.google.protobuf.util.JsonFormat.TypeRegistry;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 
@@ -53,27 +54,27 @@ class ConformanceJava {
   private enum BinaryDecoder {
     BYTE_STRING_DECODER() {
       @Override
-      public Conformance.TestAllTypes parse(ByteString bytes)
+      public TestMessagesProto3.TestAllTypes parse(ByteString bytes)
           throws InvalidProtocolBufferException {
-        return Conformance.TestAllTypes.parseFrom(bytes);
+        return TestMessagesProto3.TestAllTypes.parseFrom(bytes);
       }
     },
     BYTE_ARRAY_DECODER() {
       @Override
-      public Conformance.TestAllTypes parse(ByteString bytes)
+      public TestMessagesProto3.TestAllTypes parse(ByteString bytes)
           throws InvalidProtocolBufferException {
-        return Conformance.TestAllTypes.parseFrom(bytes.toByteArray());
+        return TestMessagesProto3.TestAllTypes.parseFrom(bytes.toByteArray());
       }
     },
     ARRAY_BYTE_BUFFER_DECODER() {
       @Override
-      public Conformance.TestAllTypes parse(ByteString bytes)
+      public TestMessagesProto3.TestAllTypes parse(ByteString bytes)
           throws InvalidProtocolBufferException {
         ByteBuffer buffer = ByteBuffer.allocate(bytes.size());
         bytes.copyTo(buffer);
         buffer.flip();
         try {
-          return Conformance.TestAllTypes.parseFrom(CodedInputStream.newInstance(buffer));
+          return TestMessagesProto3.TestAllTypes.parseFrom(CodedInputStream.newInstance(buffer));
         } catch (InvalidProtocolBufferException e) {
           throw e;
         } catch (IOException e) {
@@ -84,10 +85,10 @@ class ConformanceJava {
     },
     READONLY_ARRAY_BYTE_BUFFER_DECODER() {
       @Override
-      public Conformance.TestAllTypes parse(ByteString bytes)
+      public TestMessagesProto3.TestAllTypes parse(ByteString bytes)
           throws InvalidProtocolBufferException {
         try {
-          return Conformance.TestAllTypes.parseFrom(
+          return TestMessagesProto3.TestAllTypes.parseFrom(
               CodedInputStream.newInstance(bytes.asReadOnlyByteBuffer()));
         } catch (InvalidProtocolBufferException e) {
           throw e;
@@ -99,13 +100,13 @@ class ConformanceJava {
     },
     DIRECT_BYTE_BUFFER_DECODER() {
       @Override
-      public Conformance.TestAllTypes parse(ByteString bytes)
+      public TestMessagesProto3.TestAllTypes parse(ByteString bytes)
           throws InvalidProtocolBufferException {
         ByteBuffer buffer = ByteBuffer.allocateDirect(bytes.size());
         bytes.copyTo(buffer);
         buffer.flip();
         try {
-          return Conformance.TestAllTypes.parseFrom(CodedInputStream.newInstance(buffer));
+          return TestMessagesProto3.TestAllTypes.parseFrom(CodedInputStream.newInstance(buffer));
         } catch (InvalidProtocolBufferException e) {
           throw e;
         } catch (IOException e) {
@@ -116,13 +117,13 @@ class ConformanceJava {
     },
     READONLY_DIRECT_BYTE_BUFFER_DECODER() {
       @Override
-      public Conformance.TestAllTypes parse(ByteString bytes)
+      public TestMessagesProto3.TestAllTypes parse(ByteString bytes)
           throws InvalidProtocolBufferException {
         ByteBuffer buffer = ByteBuffer.allocateDirect(bytes.size());
         bytes.copyTo(buffer);
         buffer.flip();
         try {
-          return Conformance.TestAllTypes.parseFrom(
+          return TestMessagesProto3.TestAllTypes.parseFrom(
               CodedInputStream.newInstance(buffer.asReadOnlyBuffer()));
         } catch (InvalidProtocolBufferException e) {
           throw e;
@@ -134,10 +135,10 @@ class ConformanceJava {
     },
     INPUT_STREAM_DECODER() {
       @Override
-      public Conformance.TestAllTypes parse(ByteString bytes)
+      public TestMessagesProto3.TestAllTypes parse(ByteString bytes)
           throws InvalidProtocolBufferException {
         try {
-          return Conformance.TestAllTypes.parseFrom(bytes.newInput());
+          return TestMessagesProto3.TestAllTypes.parseFrom(bytes.newInput());
         } catch (InvalidProtocolBufferException e) {
           throw e;
         } catch (IOException e) {
@@ -147,14 +148,14 @@ class ConformanceJava {
       }
     };
 
-    public abstract Conformance.TestAllTypes parse(ByteString bytes)
+    public abstract TestMessagesProto3.TestAllTypes parse(ByteString bytes)
         throws InvalidProtocolBufferException;
   }
 
-  private Conformance.TestAllTypes parseBinary(ByteString bytes)
+  private TestMessagesProto3.TestAllTypes parseBinary(ByteString bytes)
       throws InvalidProtocolBufferException {
-    Conformance.TestAllTypes[] messages =
-        new Conformance.TestAllTypes[BinaryDecoder.values().length];
+    TestMessagesProto3.TestAllTypes[] messages =
+        new TestMessagesProto3.TestAllTypes[BinaryDecoder.values().length];
     InvalidProtocolBufferException[] exceptions =
         new InvalidProtocolBufferException[BinaryDecoder.values().length];
 
@@ -220,7 +221,7 @@ class ConformanceJava {
   }
 
   private Conformance.ConformanceResponse doTest(Conformance.ConformanceRequest request) {
-    Conformance.TestAllTypes testMessage;
+    TestMessagesProto3.TestAllTypes testMessage;
 
     switch (request.getPayloadCase()) {
       case PROTOBUF_PAYLOAD: {
@@ -233,7 +234,7 @@ class ConformanceJava {
       }
       case JSON_PAYLOAD: {
         try {
-          Conformance.TestAllTypes.Builder builder = Conformance.TestAllTypes.newBuilder();
+          TestMessagesProto3.TestAllTypes.Builder builder = TestMessagesProto3.TestAllTypes.newBuilder();
           JsonFormat.parser().usingTypeRegistry(typeRegistry)
               .merge(request.getJsonPayload(), builder);
           testMessage = builder.build();
@@ -299,7 +300,7 @@ class ConformanceJava {
 
   public void run() throws Exception {
     typeRegistry = TypeRegistry.newBuilder().add(
-        Conformance.TestAllTypes.getDescriptor()).build();
+        TestMessagesProto3.TestAllTypes.getDescriptor()).build();
     while (doTestIo()) {
       this.testCount++;
     }

+ 14 - 6
conformance/Makefile.am

@@ -1,7 +1,8 @@
 ## Process this file with automake to produce Makefile.in
 
 conformance_protoc_inputs =                                    \
-  conformance.proto
+  conformance.proto                                            \
+  $(top_srcdir)/src/google/protobuf/test_messages_proto3.proto
 
 well_known_type_protoc_inputs =                                \
   $(top_srcdir)/src/google/protobuf/any.proto                  \
@@ -61,6 +62,7 @@ other_language_protoc_outputs =                                \
   com/google/protobuf/Value.java                               \
   com/google/protobuf/ValueOrBuilder.java                      \
   com/google/protobuf/WrappersProto.java                       \
+  com/google/protobuf_test_messages/proto3/TestMessagesProto3.java \
   google/protobuf/any.pb.cc                                    \
   google/protobuf/any.pb.h                                     \
   google/protobuf/any.rb                                       \
@@ -77,6 +79,12 @@ other_language_protoc_outputs =                                \
   google/protobuf/struct.pb.h                                  \
   google/protobuf/struct.rb                                    \
   google/protobuf/struct_pb2.py                                \
+  google/protobuf/TestMessagesProto3.pbobjc.h                  \
+  google/protobuf/TestMessagesProto3.pbobjc.m                  \
+  google/protobuf/test_messages_proto3.pb.cc                   \
+  google/protobuf/test_messages_proto3.pb.h                    \
+  google/protobuf/test_messages_proto3_pb.rb                   \
+  google/protobuf/test_messages_proto3_pb2.py                  \
   google/protobuf/timestamp.pb.cc                              \
   google/protobuf/timestamp.pb.h                               \
   google/protobuf/timestamp.rb                                 \
@@ -152,7 +160,7 @@ conformance_test_runner_SOURCES = conformance_test.h conformance_test.cc \
                                   conformance_test_runner.cc             \
                                   third_party/jsoncpp/json.h             \
                                   third_party/jsoncpp/jsoncpp.cpp
-nodist_conformance_test_runner_SOURCES = conformance.pb.cc
+nodist_conformance_test_runner_SOURCES = conformance.pb.cc google/protobuf/test_messages_proto3.pb.cc
 conformance_test_runner_CPPFLAGS = -I$(top_srcdir)/src -I$(srcdir)
 conformance_test_runner_CXXFLAGS = -std=c++11
 # Explicit deps beacuse BUILT_SOURCES are only done before a "make all/check"
@@ -162,7 +170,7 @@ conformance_test_runner-conformance_test_runner.$(OBJEXT): conformance.pb.h
 
 conformance_cpp_LDADD = $(top_srcdir)/src/libprotobuf.la
 conformance_cpp_SOURCES = conformance_cpp.cc
-nodist_conformance_cpp_SOURCES = conformance.pb.cc
+nodist_conformance_cpp_SOURCES = conformance.pb.cc google/protobuf/test_messages_proto3.pb.cc
 conformance_cpp_CPPFLAGS = -I$(top_srcdir)/src
 # Explicit dep beacuse BUILT_SOURCES are only done before a "make all/check"
 # so a direct "make test_cpp" could fail if parallel enough.
@@ -173,7 +181,7 @@ if OBJC_CONFORMANCE_TEST
 bin_PROGRAMS += conformance-objc
 
 conformance_objc_SOURCES = conformance_objc.m ../objectivec/GPBProtocolBuffers.m
-nodist_conformance_objc_SOURCES = Conformance.pbobjc.m
+nodist_conformance_objc_SOURCES = Conformance.pbobjc.m google/protobuf/TestMessagesProto3.pbobjc.m
 # On travis, the build fails without the isysroot because whatever system
 # headers are being found don't include generics support for
 # NSArray/NSDictionary, the only guess is their image at one time had an odd
@@ -182,7 +190,7 @@ conformance_objc_CPPFLAGS = -I$(top_srcdir)/objectivec -isysroot `xcrun --sdk ma
 conformance_objc_LDFLAGS = -framework Foundation
 # Explicit dep beacuse BUILT_SOURCES are only done before a "make all/check"
 # so a direct "make test_objc" could fail if parallel enough.
-conformance_objc-conformance_objc.$(OBJEXT): Conformance.pbobjc.h
+conformance_objc-conformance_objc.$(OBJEXT): Conformance.pbobjc.h google/protobuf/TestMessagesProto3.pbobjc.h
 
 endif
 
@@ -221,7 +229,7 @@ MAINTAINERCLEANFILES =   \
   Makefile.in
 
 javac_middleman: ConformanceJava.java protoc_middleman $(other_language_protoc_outputs)
-	jar=`ls ../java/util/target/*jar-with-dependencies.jar` && javac -classpath ../java/target/classes:$$jar ConformanceJava.java com/google/protobuf/conformance/Conformance.java
+	jar=`ls ../java/util/target/*jar-with-dependencies.jar` && javac -classpath ../java/target/classes:$$jar ConformanceJava.java com/google/protobuf/conformance/Conformance.java com/google/protobuf_test_messages/proto3/TestMessagesProto3.java
 	@touch javac_middleman
 
 conformance-java: javac_middleman

+ 7 - 178
conformance/conformance.proto

@@ -32,13 +32,6 @@ syntax = "proto3";
 package conformance;
 option java_package = "com.google.protobuf.conformance";
 
-import "google/protobuf/any.proto";
-import "google/protobuf/duration.proto";
-import "google/protobuf/field_mask.proto";
-import "google/protobuf/struct.proto";
-import "google/protobuf/timestamp.proto";
-import "google/protobuf/wrappers.proto";
-
 // This defines the conformance testing protocol.  This protocol exists between
 // the conformance test suite itself and the code being tested.  For each test,
 // the suite will send a ConformanceRequest message and expect a
@@ -70,8 +63,13 @@ enum WireFormat {
 //   2. parse the protobuf or JSON payload in "payload" (which may fail)
 //   3. if the parse succeeded, serialize the message in the requested format.
 message ConformanceRequest {
-  // The payload (whether protobuf of JSON) is always for a TestAllTypes proto
-  // (see below).
+  // The payload (whether protobuf of JSON) is always for a
+  // protobuf_test_messages.proto3.TestAllTypes proto (as defined in
+  // src/google/protobuf/proto3_test_messages.proto).
+  //
+  // TODO(haberman): if/when we expand the conformance tests to support proto2,
+  // we will want to include a field that lets the payload/response be a
+  // protobuf_test_messages.proto2.TestAllTypes message instead.
   oneof payload {
     bytes protobuf_payload = 1;
     string json_payload = 2;
@@ -114,172 +112,3 @@ message ConformanceResponse {
     string skipped = 5;
   }
 }
-
-// This proto includes every type of field in both singular and repeated
-// forms.
-message TestAllTypes {
-  message NestedMessage {
-    int32 a = 1;
-    TestAllTypes corecursive = 2;
-  }
-
-  enum NestedEnum {
-    FOO = 0;
-    BAR = 1;
-    BAZ = 2;
-    NEG = -1;  // Intentionally negative.
-  }
-
-  // Singular
-  int32 optional_int32    =  1;
-  int64 optional_int64    =  2;
-  uint32 optional_uint32   =  3;
-  uint64 optional_uint64   =  4;
-  sint32 optional_sint32   =  5;
-  sint64 optional_sint64   =  6;
-  fixed32 optional_fixed32  =  7;
-  fixed64 optional_fixed64  =  8;
-  sfixed32 optional_sfixed32 =  9;
-  sfixed64 optional_sfixed64 = 10;
-  float optional_float    = 11;
-  double optional_double   = 12;
-  bool optional_bool     = 13;
-  string optional_string   = 14;
-  bytes optional_bytes    = 15;
-
-  NestedMessage                        optional_nested_message  = 18;
-  ForeignMessage                       optional_foreign_message = 19;
-
-  NestedEnum                           optional_nested_enum     = 21;
-  ForeignEnum                          optional_foreign_enum    = 22;
-
-  string optional_string_piece = 24 [ctype=STRING_PIECE];
-  string optional_cord = 25 [ctype=CORD];
-
-  TestAllTypes recursive_message = 27;
-
-  // Repeated
-  repeated    int32 repeated_int32    = 31;
-  repeated    int64 repeated_int64    = 32;
-  repeated   uint32 repeated_uint32   = 33;
-  repeated   uint64 repeated_uint64   = 34;
-  repeated   sint32 repeated_sint32   = 35;
-  repeated   sint64 repeated_sint64   = 36;
-  repeated  fixed32 repeated_fixed32  = 37;
-  repeated  fixed64 repeated_fixed64  = 38;
-  repeated sfixed32 repeated_sfixed32 = 39;
-  repeated sfixed64 repeated_sfixed64 = 40;
-  repeated    float repeated_float    = 41;
-  repeated   double repeated_double   = 42;
-  repeated     bool repeated_bool     = 43;
-  repeated   string repeated_string   = 44;
-  repeated    bytes repeated_bytes    = 45;
-
-  repeated NestedMessage                        repeated_nested_message  = 48;
-  repeated ForeignMessage                       repeated_foreign_message = 49;
-
-  repeated NestedEnum                           repeated_nested_enum     = 51;
-  repeated ForeignEnum                          repeated_foreign_enum    = 52;
-
-  repeated string repeated_string_piece = 54 [ctype=STRING_PIECE];
-  repeated string repeated_cord = 55 [ctype=CORD];
-
-  // Map
-  map <   int32, int32>    map_int32_int32 = 56;
-  map <   int64, int64>    map_int64_int64 = 57;
-  map <  uint32, uint32>   map_uint32_uint32 = 58;
-  map <  uint64, uint64>   map_uint64_uint64 = 59;
-  map <  sint32, sint32>   map_sint32_sint32 = 60;
-  map <  sint64, sint64>   map_sint64_sint64 = 61;
-  map < fixed32, fixed32>  map_fixed32_fixed32 = 62;
-  map < fixed64, fixed64>  map_fixed64_fixed64 = 63;
-  map <sfixed32, sfixed32> map_sfixed32_sfixed32 = 64;
-  map <sfixed64, sfixed64> map_sfixed64_sfixed64 = 65;
-  map <   int32, float>    map_int32_float = 66;
-  map <   int32, double>   map_int32_double = 67;
-  map <    bool, bool>     map_bool_bool = 68;
-  map <  string, string>   map_string_string = 69;
-  map <  string, bytes>    map_string_bytes = 70;
-  map <  string, NestedMessage>  map_string_nested_message = 71;
-  map <  string, ForeignMessage> map_string_foreign_message = 72;
-  map <  string, NestedEnum>     map_string_nested_enum = 73;
-  map <  string, ForeignEnum>    map_string_foreign_enum = 74;
-
-  oneof oneof_field {
-    uint32 oneof_uint32 = 111;
-    NestedMessage oneof_nested_message = 112;
-    string oneof_string = 113;
-    bytes oneof_bytes = 114;
-    bool oneof_bool = 115;
-    uint64 oneof_uint64 = 116;
-    float oneof_float = 117;
-    double oneof_double = 118;
-    NestedEnum oneof_enum = 119;
-  }
-
-  // Well-known types
-  google.protobuf.BoolValue optional_bool_wrapper = 201;
-  google.protobuf.Int32Value optional_int32_wrapper = 202;
-  google.protobuf.Int64Value optional_int64_wrapper = 203;
-  google.protobuf.UInt32Value optional_uint32_wrapper = 204;
-  google.protobuf.UInt64Value optional_uint64_wrapper = 205;
-  google.protobuf.FloatValue optional_float_wrapper = 206;
-  google.protobuf.DoubleValue optional_double_wrapper = 207;
-  google.protobuf.StringValue optional_string_wrapper = 208;
-  google.protobuf.BytesValue optional_bytes_wrapper = 209;
-
-  repeated google.protobuf.BoolValue repeated_bool_wrapper = 211;
-  repeated google.protobuf.Int32Value repeated_int32_wrapper = 212;
-  repeated google.protobuf.Int64Value repeated_int64_wrapper = 213;
-  repeated google.protobuf.UInt32Value repeated_uint32_wrapper = 214;
-  repeated google.protobuf.UInt64Value repeated_uint64_wrapper = 215;
-  repeated google.protobuf.FloatValue repeated_float_wrapper = 216;
-  repeated google.protobuf.DoubleValue repeated_double_wrapper = 217;
-  repeated google.protobuf.StringValue repeated_string_wrapper = 218;
-  repeated google.protobuf.BytesValue repeated_bytes_wrapper = 219;
-
-  google.protobuf.Duration optional_duration = 301;
-  google.protobuf.Timestamp optional_timestamp = 302;
-  google.protobuf.FieldMask optional_field_mask = 303;
-  google.protobuf.Struct optional_struct = 304;
-  google.protobuf.Any optional_any = 305;
-  google.protobuf.Value optional_value = 306;
-
-  repeated google.protobuf.Duration repeated_duration = 311;
-  repeated google.protobuf.Timestamp repeated_timestamp = 312;
-  repeated google.protobuf.FieldMask repeated_fieldmask = 313;
-  repeated google.protobuf.Struct repeated_struct = 324;
-  repeated google.protobuf.Any repeated_any = 315;
-  repeated google.protobuf.Value repeated_value = 316;
-
-  // Test field-name-to-JSON-name convention.
-  // (protobuf says names can be any valid C/C++ identifier.)
-  int32 fieldname1 = 401;
-  int32 field_name2 = 402;
-  int32 _field_name3 = 403;
-  int32 field__name4_ = 404;
-  int32 field0name5 = 405;
-  int32 field_0_name6 = 406;
-  int32 fieldName7 = 407;
-  int32 FieldName8 = 408;
-  int32 field_Name9 = 409;
-  int32 Field_Name10 = 410;
-  int32 FIELD_NAME11 = 411;
-  int32 FIELD_name12 = 412;
-  int32 __field_name13 = 413;
-  int32 __Field_name14 = 414;
-  int32 field__name15 = 415;
-  int32 field__Name16 = 416;
-  int32 field_name17__ = 417;
-  int32 Field_name18__ = 418;
-}
-
-message ForeignMessage {
-  int32 c = 1;
-}
-
-enum ForeignEnum {
-  FOREIGN_FOO = 0;
-  FOREIGN_BAR = 1;
-  FOREIGN_BAZ = 2;
-}

+ 2 - 1
conformance/conformance_cpp.cc

@@ -33,12 +33,12 @@
 #include <unistd.h>
 
 #include "conformance.pb.h"
+#include "google/protobuf/test_messages_proto3.pb.h"
 #include <google/protobuf/util/json_util.h>
 #include <google/protobuf/util/type_resolver_util.h>
 
 using conformance::ConformanceRequest;
 using conformance::ConformanceResponse;
-using conformance::TestAllTypes;
 using google::protobuf::Descriptor;
 using google::protobuf::DescriptorPool;
 using google::protobuf::internal::scoped_ptr;
@@ -47,6 +47,7 @@ using google::protobuf::util::JsonToBinaryString;
 using google::protobuf::util::NewTypeResolverForDescriptorPool;
 using google::protobuf::util::Status;
 using google::protobuf::util::TypeResolver;
+using protobuf_test_messages::proto3::TestAllTypes;
 using std::string;
 
 static const char kTypeUrlPrefix[] = "type.googleapis.com";

+ 1 - 0
conformance/conformance_objc.m

@@ -31,6 +31,7 @@
 #import <Foundation/Foundation.h>
 
 #import "Conformance.pbobjc.h"
+#import "google/protobuf/TestMessagesProto3.pbobjc.h"
 
 static void Die(NSString *format, ...) __dead2;
 

+ 4 - 3
conformance/conformance_python.py

@@ -38,8 +38,9 @@ See conformance.proto for more information.
 import struct
 import sys
 import os
-from google.protobuf import message
 from google.protobuf import json_format
+from google.protobuf import message
+from google.protobuf import test_messages_proto3_pb2
 import conformance_pb2
 
 sys.stdout = os.fdopen(sys.stdout.fileno(), 'wb', 0)
@@ -52,9 +53,9 @@ class ProtocolError(Exception):
   pass
 
 def do_test(request):
-  test_message = conformance_pb2.TestAllTypes()
+  test_message = test_messages_proto3_pb2.TestAllTypes()
   response = conformance_pb2.ConformanceResponse()
-  test_message = conformance_pb2.TestAllTypes()
+  test_message = test_messages_proto3_pb2.TestAllTypes()
 
   try:
     if request.WhichOneof('payload') == 'protobuf_payload':

+ 6 - 4
conformance/conformance_ruby.rb

@@ -31,20 +31,21 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 require 'conformance_pb'
+require 'google/protobuf/test_messages_proto3_pb'
 
 $test_count = 0
 $verbose = false
 
 def do_test(request)
-  test_message = Conformance::TestAllTypes.new
+  test_message = ProtobufTestMessages::Proto3::TestAllTypes.new
   response = Conformance::ConformanceResponse.new
 
   begin
     case request.payload
     when :protobuf_payload
       begin
-        test_message =
-          Conformance::TestAllTypes.decode(request.protobuf_payload)
+        test_message = ProtobufTestMessages::Proto3::TestAllTypes.decode(
+            request.protobuf_payload)
       rescue Google::Protobuf::ParseError => err
         response.parse_error = err.message.encode('utf-8')
         return response
@@ -52,7 +53,8 @@ def do_test(request)
 
     when :json_payload
       begin
-        test_message = Conformance::TestAllTypes.decode_json(request.json_payload)
+        test_message = ProtobufTestMessages::Proto3::TestAllTypes.decode_json(
+            request.json_payload)
       rescue Google::Protobuf::ParseError => err
         response.parse_error = err.message.encode('utf-8')
         return response

+ 10 - 8
conformance/conformance_test.cc

@@ -34,11 +34,13 @@
 
 #include "conformance.pb.h"
 #include "conformance_test.h"
+#include "google/protobuf/test_messages_proto3.pb.h"
+
 #include <google/protobuf/stubs/common.h>
 #include <google/protobuf/stubs/stringprintf.h>
 #include <google/protobuf/text_format.h>
-#include <google/protobuf/util/json_util.h>
 #include <google/protobuf/util/field_comparator.h>
+#include <google/protobuf/util/json_util.h>
 #include <google/protobuf/util/message_differencer.h>
 #include <google/protobuf/util/type_resolver_util.h>
 #include <google/protobuf/wire_format_lite.h>
@@ -47,7 +49,6 @@
 
 using conformance::ConformanceRequest;
 using conformance::ConformanceResponse;
-using conformance::TestAllTypes;
 using conformance::WireFormat;
 using google::protobuf::Descriptor;
 using google::protobuf::FieldDescriptor;
@@ -58,6 +59,7 @@ using google::protobuf::util::JsonToBinaryString;
 using google::protobuf::util::MessageDifferencer;
 using google::protobuf::util::NewTypeResolverForDescriptorPool;
 using google::protobuf::util::Status;
+using protobuf_test_messages::proto3::TestAllTypes;
 using std::string;
 
 namespace {
@@ -2040,13 +2042,13 @@ bool ConformanceTestSuite::RunSuite(ConformanceTestRunner* runner,
       "Any", REQUIRED,
       R"({
         "optionalAny": {
-          "@type": "type.googleapis.com/conformance.TestAllTypes",
+          "@type": "type.googleapis.com/protobuf_test_messages.proto3.TestAllTypes",
           "optionalInt32": 12345
         }
       })",
       R"(
         optional_any: {
-          [type.googleapis.com/conformance.TestAllTypes] {
+          [type.googleapis.com/protobuf_test_messages.proto3.TestAllTypes] {
             optional_int32: 12345
           }
         }
@@ -2057,7 +2059,7 @@ bool ConformanceTestSuite::RunSuite(ConformanceTestRunner* runner,
         "optionalAny": {
           "@type": "type.googleapis.com/google.protobuf.Any",
           "value": {
-            "@type": "type.googleapis.com/conformance.TestAllTypes",
+            "@type": "type.googleapis.com/protobuf_test_messages.proto3.TestAllTypes",
             "optionalInt32": 12345
           }
         }
@@ -2065,7 +2067,7 @@ bool ConformanceTestSuite::RunSuite(ConformanceTestRunner* runner,
       R"(
         optional_any: {
           [type.googleapis.com/google.protobuf.Any] {
-            [type.googleapis.com/conformance.TestAllTypes] {
+            [type.googleapis.com/protobuf_test_messages.proto3.TestAllTypes] {
               optional_int32: 12345
             }
           }
@@ -2077,12 +2079,12 @@ bool ConformanceTestSuite::RunSuite(ConformanceTestRunner* runner,
       R"({
         "optionalAny": {
           "optionalInt32": 12345,
-          "@type": "type.googleapis.com/conformance.TestAllTypes"
+          "@type": "type.googleapis.com/protobuf_test_messages.proto3.TestAllTypes"
         }
       })",
       R"(
         optional_any: {
-          [type.googleapis.com/conformance.TestAllTypes] {
+          [type.googleapis.com/protobuf_test_messages.proto3.TestAllTypes] {
             optional_int32: 12345
           }
         }

+ 16 - 9
conformance/conformance_test.h

@@ -49,9 +49,14 @@
 namespace conformance {
 class ConformanceRequest;
 class ConformanceResponse;
-class TestAllTypes;
 }  // namespace conformance
 
+namespace protobuf_test_messages {
+namespace proto3 {
+class TestAllTypes;
+}  // namespace proto3
+}  // namespace protobuf_test_messages
+
 namespace google {
 namespace protobuf {
 
@@ -165,14 +170,16 @@ class ConformanceTestSuite {
                         ConformanceLevel level,
                         const string& input_json,
                         const string& equivalent_text_format);
-  void RunValidJsonTestWithProtobufInput(const string& test_name,
-                                         ConformanceLevel level,
-                                         const conformance::TestAllTypes& input,
-                                         const string& equivalent_text_format);
-  void RunValidProtobufTest(const string& test_name,
-                            ConformanceLevel level,
-                            const conformance::TestAllTypes& input,
-                            const string& equivalent_text_format);
+  void RunValidJsonTestWithProtobufInput(
+      const string& test_name,
+      ConformanceLevel level,
+      const protobuf_test_messages::proto3::TestAllTypes& input,
+      const string& equivalent_text_format);
+  void RunValidProtobufTest(
+      const string& test_name,
+      ConformanceLevel level,
+      const protobuf_test_messages::proto3::TestAllTypes& input,
+      const string& equivalent_text_format);
 
   typedef std::function<bool(const Json::Value&)> Validator;
   void RunValidJsonTestWithValidator(const string& test_name,

+ 5 - 0
csharp/generate_protos.sh

@@ -54,6 +54,11 @@ $PROTOC -Icsharp/protos --csharp_out=csharp/src/Google.Protobuf.Test \
     --csharp_opt=base_namespace=UnitTest.Issues \
     csharp/protos/unittest_issues.proto
 
+# Don't specify a base namespace at all; we just want to make sure the
+# results end up in TestProtos.
+$PROTOC -Isrc --csharp_out=csharp/src/Google.Protobuf.Test/TestProtos \
+    src/google/protobuf/test_messages_proto3.proto
+
 # AddressBook sample protos
 $PROTOC -Iexamples --csharp_out=csharp/src/AddressBook \
     examples/addressbook.proto

File diff ditekan karena terlalu besar
+ 13 - 171
csharp/src/Google.Protobuf.Conformance/Conformance.cs


+ 4 - 4
csharp/src/Google.Protobuf.Conformance/Program.cs

@@ -48,7 +48,7 @@ namespace Google.Protobuf.Conformance
             // This way we get the binary streams instead of readers/writers.
             var input = new BinaryReader(Console.OpenStandardInput());
             var output = new BinaryWriter(Console.OpenStandardOutput());
-            var typeRegistry = TypeRegistry.FromMessages(TestAllTypes.Descriptor);
+            var typeRegistry = TypeRegistry.FromMessages(ProtobufTestMessages.Proto3.TestAllTypes.Descriptor);
 
             int count = 0;
             while (RunTest(input, output, typeRegistry))
@@ -81,17 +81,17 @@ namespace Google.Protobuf.Conformance
 
         private static ConformanceResponse PerformRequest(ConformanceRequest request, TypeRegistry typeRegistry)
         {
-            TestAllTypes message;
+            ProtobufTestMessages.Proto3.TestAllTypes message;
             try
             {
                 switch (request.PayloadCase)
                 {
                     case ConformanceRequest.PayloadOneofCase.JsonPayload:
                         var parser = new JsonParser(new JsonParser.Settings(20, typeRegistry));
-                        message = parser.Parse<TestAllTypes>(request.JsonPayload);
+                        message = parser.Parse<ProtobufTestMessages.Proto3.TestAllTypes>(request.JsonPayload);
                         break;
                     case ConformanceRequest.PayloadOneofCase.ProtobufPayload:
-                        message = TestAllTypes.Parser.ParseFrom(request.ProtobufPayload);
+                        message = ProtobufTestMessages.Proto3.TestAllTypes.Parser.ParseFrom(request.ProtobufPayload);
                         break;
                     default:
                         throw new Exception("Unsupported request payload: " + request.PayloadCase);

+ 3 - 1
csharp/src/Google.Protobuf.Conformance/project.json

@@ -4,10 +4,12 @@
     "emitEntryPoint": true
   },
   "dependencies": {
-    "Google.Protobuf": { "target": "project" }
+    "Google.Protobuf": { "target": "project" },
+    "Google.Protobuf.Test": { "target": "project" }
   },
   "frameworks": {
     "netcoreapp1.0": {
+      "imports": [ "dnxcore50", "netcoreapp1.0", "portable-net45+win8" ],
       "dependencies": {
         "Microsoft.NETCore.App": {
           "type": "platform",

+ 3 - 1
csharp/src/Google.Protobuf.Test/Google.Protobuf.Test.xproj

@@ -11,9 +11,11 @@
     <BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)'=='' ">.\obj</BaseIntermediateOutputPath>
     <OutputPath Condition="'$(OutputPath)'=='' ">.\bin\</OutputPath>
   </PropertyGroup>
-
   <PropertyGroup>
     <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
+  <ItemGroup>
+    <Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
+  </ItemGroup>
   <Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.targets" Condition="'$(VSToolsPath)' != ''" />
 </Project>

File diff ditekan karena terlalu besar
+ 202 - 0
csharp/src/Google.Protobuf.Test/TestProtos/TestMessagesProto3.cs


+ 1 - 0
python/setup.py

@@ -78,6 +78,7 @@ def generate_proto(source, require = True):
 def GenerateUnittestProtos():
   generate_proto("../src/google/protobuf/any_test.proto", False)
   generate_proto("../src/google/protobuf/map_unittest.proto", False)
+  generate_proto("../src/google/protobuf/test_messages_proto3.proto", False)
   generate_proto("../src/google/protobuf/unittest_arena.proto", False)
   generate_proto("../src/google/protobuf/unittest_no_arena.proto", False)
   generate_proto("../src/google/protobuf/unittest_no_arena_import.proto", False)

+ 2 - 2
ruby/Rakefile

@@ -44,11 +44,11 @@ if RUBY_PLATFORM == "java"
     raise ArgumentError, "maven needs to be installed"
   end
   task :clean do
-    system("mvn clean")
+    system("mvn --batch-mode clean")
   end
 
   task :compile do
-    system("mvn package")
+    system("mvn --batch-mode package")
   end
 else
   Rake::ExtensionTask.new("protobuf_c", spec) do |ext|

+ 227 - 0
src/google/protobuf/test_messages_proto3.proto

@@ -0,0 +1,227 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2008 Google Inc.  All rights reserved.
+// https://developers.google.com/protocol-buffers/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// Test schema for proto3 messages.  This test schema is used by:
+//
+// - benchmarks
+// - fuzz tests
+// - conformance tests
+//
+
+syntax = "proto3";
+
+package protobuf_test_messages.proto3;
+option java_package = "com.google.protobuf_test_messages.proto3";
+
+// This is the default, but we specify it here explicitly.
+option optimize_for = SPEED;
+
+import "google/protobuf/any.proto";
+import "google/protobuf/duration.proto";
+import "google/protobuf/field_mask.proto";
+import "google/protobuf/struct.proto";
+import "google/protobuf/timestamp.proto";
+import "google/protobuf/wrappers.proto";
+
+option cc_enable_arenas = true;
+
+// This proto includes every type of field in both singular and repeated
+// forms.
+//
+// Also, crucially, all messages and enums in this file are eventually
+// submessages of this message.  So for example, a fuzz test of TestAllTypes
+// could trigger bugs that occur in any message type in this file.  We verify
+// this stays true in a unit test.
+message TestAllTypes {
+  message NestedMessage {
+    int32 a = 1;
+    TestAllTypes corecursive = 2;
+  }
+
+  enum NestedEnum {
+    FOO = 0;
+    BAR = 1;
+    BAZ = 2;
+    NEG = -1;  // Intentionally negative.
+  }
+
+  // Singular
+  int32 optional_int32    =  1;
+  int64 optional_int64    =  2;
+  uint32 optional_uint32   =  3;
+  uint64 optional_uint64   =  4;
+  sint32 optional_sint32   =  5;
+  sint64 optional_sint64   =  6;
+  fixed32 optional_fixed32  =  7;
+  fixed64 optional_fixed64  =  8;
+  sfixed32 optional_sfixed32 =  9;
+  sfixed64 optional_sfixed64 = 10;
+  float optional_float    = 11;
+  double optional_double   = 12;
+  bool optional_bool     = 13;
+  string optional_string   = 14;
+  bytes optional_bytes    = 15;
+
+  NestedMessage                        optional_nested_message  = 18;
+  ForeignMessage                       optional_foreign_message = 19;
+
+  NestedEnum                           optional_nested_enum     = 21;
+  ForeignEnum                          optional_foreign_enum    = 22;
+
+  string optional_string_piece = 24 [ctype=STRING_PIECE];
+  string optional_cord = 25 [ctype=CORD];
+
+  TestAllTypes recursive_message = 27;
+
+  // Repeated
+  repeated    int32 repeated_int32    = 31;
+  repeated    int64 repeated_int64    = 32;
+  repeated   uint32 repeated_uint32   = 33;
+  repeated   uint64 repeated_uint64   = 34;
+  repeated   sint32 repeated_sint32   = 35;
+  repeated   sint64 repeated_sint64   = 36;
+  repeated  fixed32 repeated_fixed32  = 37;
+  repeated  fixed64 repeated_fixed64  = 38;
+  repeated sfixed32 repeated_sfixed32 = 39;
+  repeated sfixed64 repeated_sfixed64 = 40;
+  repeated    float repeated_float    = 41;
+  repeated   double repeated_double   = 42;
+  repeated     bool repeated_bool     = 43;
+  repeated   string repeated_string   = 44;
+  repeated    bytes repeated_bytes    = 45;
+
+  repeated NestedMessage                        repeated_nested_message  = 48;
+  repeated ForeignMessage                       repeated_foreign_message = 49;
+
+  repeated NestedEnum                           repeated_nested_enum     = 51;
+  repeated ForeignEnum                          repeated_foreign_enum    = 52;
+
+  repeated string repeated_string_piece = 54 [ctype=STRING_PIECE];
+  repeated string repeated_cord = 55 [ctype=CORD];
+
+  // Map
+  map <   int32, int32>    map_int32_int32 = 56;
+  map <   int64, int64>    map_int64_int64 = 57;
+  map <  uint32, uint32>   map_uint32_uint32 = 58;
+  map <  uint64, uint64>   map_uint64_uint64 = 59;
+  map <  sint32, sint32>   map_sint32_sint32 = 60;
+  map <  sint64, sint64>   map_sint64_sint64 = 61;
+  map < fixed32, fixed32>  map_fixed32_fixed32 = 62;
+  map < fixed64, fixed64>  map_fixed64_fixed64 = 63;
+  map <sfixed32, sfixed32> map_sfixed32_sfixed32 = 64;
+  map <sfixed64, sfixed64> map_sfixed64_sfixed64 = 65;
+  map <   int32, float>    map_int32_float = 66;
+  map <   int32, double>   map_int32_double = 67;
+  map <    bool, bool>     map_bool_bool = 68;
+  map <  string, string>   map_string_string = 69;
+  map <  string, bytes>    map_string_bytes = 70;
+  map <  string, NestedMessage>  map_string_nested_message = 71;
+  map <  string, ForeignMessage> map_string_foreign_message = 72;
+  map <  string, NestedEnum>     map_string_nested_enum = 73;
+  map <  string, ForeignEnum>    map_string_foreign_enum = 74;
+
+  oneof oneof_field {
+    uint32 oneof_uint32 = 111;
+    NestedMessage oneof_nested_message = 112;
+    string oneof_string = 113;
+    bytes oneof_bytes = 114;
+    bool oneof_bool = 115;
+    uint64 oneof_uint64 = 116;
+    float oneof_float = 117;
+    double oneof_double = 118;
+    NestedEnum oneof_enum = 119;
+  }
+
+  // Well-known types
+  google.protobuf.BoolValue optional_bool_wrapper = 201;
+  google.protobuf.Int32Value optional_int32_wrapper = 202;
+  google.protobuf.Int64Value optional_int64_wrapper = 203;
+  google.protobuf.UInt32Value optional_uint32_wrapper = 204;
+  google.protobuf.UInt64Value optional_uint64_wrapper = 205;
+  google.protobuf.FloatValue optional_float_wrapper = 206;
+  google.protobuf.DoubleValue optional_double_wrapper = 207;
+  google.protobuf.StringValue optional_string_wrapper = 208;
+  google.protobuf.BytesValue optional_bytes_wrapper = 209;
+
+  repeated google.protobuf.BoolValue repeated_bool_wrapper = 211;
+  repeated google.protobuf.Int32Value repeated_int32_wrapper = 212;
+  repeated google.protobuf.Int64Value repeated_int64_wrapper = 213;
+  repeated google.protobuf.UInt32Value repeated_uint32_wrapper = 214;
+  repeated google.protobuf.UInt64Value repeated_uint64_wrapper = 215;
+  repeated google.protobuf.FloatValue repeated_float_wrapper = 216;
+  repeated google.protobuf.DoubleValue repeated_double_wrapper = 217;
+  repeated google.protobuf.StringValue repeated_string_wrapper = 218;
+  repeated google.protobuf.BytesValue repeated_bytes_wrapper = 219;
+
+  google.protobuf.Duration optional_duration = 301;
+  google.protobuf.Timestamp optional_timestamp = 302;
+  google.protobuf.FieldMask optional_field_mask = 303;
+  google.protobuf.Struct optional_struct = 304;
+  google.protobuf.Any optional_any = 305;
+  google.protobuf.Value optional_value = 306;
+
+  repeated google.protobuf.Duration repeated_duration = 311;
+  repeated google.protobuf.Timestamp repeated_timestamp = 312;
+  repeated google.protobuf.FieldMask repeated_fieldmask = 313;
+  repeated google.protobuf.Struct repeated_struct = 324;
+  repeated google.protobuf.Any repeated_any = 315;
+  repeated google.protobuf.Value repeated_value = 316;
+
+  // Test field-name-to-JSON-name convention.
+  // (protobuf says names can be any valid C/C++ identifier.)
+  int32 fieldname1 = 401;
+  int32 field_name2 = 402;
+  int32 _field_name3 = 403;
+  int32 field__name4_ = 404;
+  int32 field0name5 = 405;
+  int32 field_0_name6 = 406;
+  int32 fieldName7 = 407;
+  int32 FieldName8 = 408;
+  int32 field_Name9 = 409;
+  int32 Field_Name10 = 410;
+  int32 FIELD_NAME11 = 411;
+  int32 FIELD_name12 = 412;
+  int32 __field_name13 = 413;
+  int32 __Field_name14 = 414;
+  int32 field__name15 = 415;
+  int32 field__Name16 = 416;
+  int32 field_name17__ = 417;
+  int32 Field_name18__ = 418;
+}
+
+message ForeignMessage {
+  int32 c = 1;
+}
+
+enum ForeignEnum {
+  FOREIGN_FOO = 0;
+  FOREIGN_BAR = 1;
+  FOREIGN_BAZ = 2;
+}

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini