|
|
|
@ -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); |
|
|
|
|
} |
|
|
|
|