|
@@ -83,44 +83,52 @@ namespace Google.Protobuf.Conformance
|
|
|
|
|
|
private static ConformanceResponse PerformRequest(ConformanceRequest request, TypeRegistry typeRegistry)
|
|
|
{
|
|
|
+ ExtensionRegistry proto2ExtensionRegistry = new ExtensionRegistry
|
|
|
+ {
|
|
|
+ ProtobufTestMessages.Proto2.TestMessagesProto2Extensions.ExtensionInt32,
|
|
|
+ ProtobufTestMessages.Proto2.TestAllTypesProto2.Types.MessageSetCorrectExtension1.Extensions.MessageSetExtension,
|
|
|
+ ProtobufTestMessages.Proto2.TestAllTypesProto2.Types.MessageSetCorrectExtension2.Extensions.MessageSetExtension
|
|
|
+ };
|
|
|
IMessage message;
|
|
|
try
|
|
|
{
|
|
|
switch (request.PayloadCase)
|
|
|
{
|
|
|
case ConformanceRequest.PayloadOneofCase.JsonPayload:
|
|
|
- if (request.TestCategory == global::Conformance.TestCategory.JsonIgnoreUnknownParsingTest) {
|
|
|
+ if (request.TestCategory == global::Conformance.TestCategory.JsonIgnoreUnknownParsingTest)
|
|
|
+ {
|
|
|
return new ConformanceResponse { Skipped = "CSharp doesn't support skipping unknown fields in json parsing." };
|
|
|
}
|
|
|
var parser = new JsonParser(new JsonParser.Settings(20, typeRegistry));
|
|
|
- message = parser.Parse<ProtobufTestMessages.Proto3.TestAllTypesProto3>(request.JsonPayload);
|
|
|
- break;
|
|
|
- case ConformanceRequest.PayloadOneofCase.ProtobufPayload:
|
|
|
- {
|
|
|
- if (request.MessageType.Equals("protobuf_test_messages.proto3.TestAllTypesProto3"))
|
|
|
+ switch (request.MessageType)
|
|
|
{
|
|
|
- message = ProtobufTestMessages.Proto3.TestAllTypesProto3.Parser.ParseFrom(request.ProtobufPayload);
|
|
|
+ case "protobuf_test_messages.proto3.TestAllTypesProto3":
|
|
|
+ message = parser.Parse<ProtobufTestMessages.Proto3.TestAllTypesProto3>(request.JsonPayload);
|
|
|
+ break;
|
|
|
+ case "protobuf_test_messages.proto2.TestAllTypesProto2":
|
|
|
+ message = parser.Parse<ProtobufTestMessages.Proto2.TestAllTypesProto2>(request.JsonPayload);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ throw new Exception($" Protobuf request doesn't have specific payload type ({request.MessageType})");
|
|
|
}
|
|
|
- else if (request.MessageType.Equals("protobuf_test_messages.proto2.TestAllTypesProto2"))
|
|
|
- {
|
|
|
- ExtensionRegistry registry = new ExtensionRegistry()
|
|
|
- {
|
|
|
- ProtobufTestMessages.Proto2.TestMessagesProto2Extensions.ExtensionInt32,
|
|
|
- ProtobufTestMessages.Proto2.TestAllTypesProto2.Types.MessageSetCorrectExtension1.Extensions.MessageSetExtension,
|
|
|
- ProtobufTestMessages.Proto2.TestAllTypesProto2.Types.MessageSetCorrectExtension2.Extensions.MessageSetExtension
|
|
|
- };
|
|
|
- message = ProtobufTestMessages.Proto2.TestAllTypesProto2.Parser.WithExtensionRegistry(registry).ParseFrom(request.ProtobufPayload);
|
|
|
- }
|
|
|
- else
|
|
|
+ break;
|
|
|
+ case ConformanceRequest.PayloadOneofCase.ProtobufPayload:
|
|
|
+ switch (request.MessageType)
|
|
|
{
|
|
|
- throw new Exception(" Protobuf request doesn't have specific payload type");
|
|
|
+ case "protobuf_test_messages.proto3.TestAllTypesProto3":
|
|
|
+ message = ProtobufTestMessages.Proto3.TestAllTypesProto3.Parser.ParseFrom(request.ProtobufPayload);
|
|
|
+ break;
|
|
|
+ case "protobuf_test_messages.proto2.TestAllTypesProto2":
|
|
|
+ message = ProtobufTestMessages.Proto2.TestAllTypesProto2.Parser
|
|
|
+ .WithExtensionRegistry(proto2ExtensionRegistry)
|
|
|
+ .ParseFrom(request.ProtobufPayload);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ throw new Exception($" Protobuf request doesn't have specific payload type ({request.MessageType})");
|
|
|
}
|
|
|
break;
|
|
|
- }
|
|
|
case ConformanceRequest.PayloadOneofCase.TextPayload:
|
|
|
- {
|
|
|
return new ConformanceResponse { Skipped = "CSharp doesn't support text format" };
|
|
|
- }
|
|
|
default:
|
|
|
throw new Exception("Unsupported request payload: " + request.PayloadCase);
|
|
|
}
|