aboutsummaryrefslogtreecommitdiff
path: root/csharp/src/Google.Protobuf.Test
diff options
context:
space:
mode:
Diffstat (limited to 'csharp/src/Google.Protobuf.Test')
-rw-r--r--csharp/src/Google.Protobuf.Test/Google.Protobuf.Test.csproj4
-rw-r--r--csharp/src/Google.Protobuf.Test/Reflection/DescriptorDeclarationTest.cs175
-rw-r--r--csharp/src/Google.Protobuf.Test/Reflection/DescriptorsTest.cs26
-rw-r--r--csharp/src/Google.Protobuf.Test/TestProtos/UnittestProto3.cs333
-rw-r--r--csharp/src/Google.Protobuf.Test/testprotos.pbbin0 -> 204268 bytes
5 files changed, 509 insertions, 29 deletions
diff --git a/csharp/src/Google.Protobuf.Test/Google.Protobuf.Test.csproj b/csharp/src/Google.Protobuf.Test/Google.Protobuf.Test.csproj
index 6a430116..f286e0aa 100644
--- a/csharp/src/Google.Protobuf.Test/Google.Protobuf.Test.csproj
+++ b/csharp/src/Google.Protobuf.Test/Google.Protobuf.Test.csproj
@@ -27,4 +27,8 @@
<TargetFrameworks>netcoreapp1.0</TargetFrameworks>
</PropertyGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="testprotos.pb" />
+ </ItemGroup>
+
</Project>
diff --git a/csharp/src/Google.Protobuf.Test/Reflection/DescriptorDeclarationTest.cs b/csharp/src/Google.Protobuf.Test/Reflection/DescriptorDeclarationTest.cs
new file mode 100644
index 00000000..d9d56672
--- /dev/null
+++ b/csharp/src/Google.Protobuf.Test/Reflection/DescriptorDeclarationTest.cs
@@ -0,0 +1,175 @@
+#region Copyright notice and license
+// Protocol Buffers - Google's data interchange format
+// Copyright 2018 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.
+#endregion
+
+using Google.Protobuf.Reflection;
+using NUnit.Framework;
+using System.Linq;
+using System.Reflection;
+
+namespace Google.Protobuf.Test.Reflection
+{
+ // In reality this isn't a test for DescriptorDeclaration so much as the way they're loaded.
+ public class DescriptorDeclarationTest
+ {
+ static readonly FileDescriptor unitTestProto3Descriptor = LoadProtos();
+
+ // Note: we don't expose a declaration for FileDescriptor as it doesn't have comments
+ // at the moment and the locations aren't terribly useful.
+
+ // The tests for most elements are quite basic: we don't test every aspect of every element.
+ // The code within the library falls into two categories:
+ // - Exposing the properties for *any* declaration
+ // - Finding the right declaration for an element from the descriptor data
+ // We have a per-element check to make sure we *are* finding the right declaration, and we
+ // check every property of declarations in at least one test, but we don't have a cross-product.
+ // That would effectively be testing protoc, which seems redundant here.
+
+ [Test]
+ public void ServiceComments()
+ {
+ var service = unitTestProto3Descriptor.FindTypeByName<ServiceDescriptor>("TestService");
+ Assert.NotNull(service.Declaration);
+ Assert.AreEqual(" This is a test service\n", service.Declaration.LeadingComments);
+ }
+
+ [Test]
+ public void MethodComments()
+ {
+ var service = unitTestProto3Descriptor.FindTypeByName<ServiceDescriptor>("TestService");
+ var method = service.FindMethodByName("Foo");
+ Assert.NotNull(method.Declaration);
+ Assert.AreEqual(" This is a test method\n", method.Declaration.LeadingComments);
+ }
+
+ [Test]
+ public void MessageComments()
+ {
+ var message = unitTestProto3Descriptor.FindTypeByName<MessageDescriptor>("CommentMessage");
+ Assert.NotNull(message.Declaration);
+ Assert.AreEqual(" This is a leading comment\n", message.Declaration.LeadingComments);
+ Assert.AreEqual(new[] { " This is leading detached comment 1\n", " This is leading detached comment 2\n" },
+ message.Declaration.LeadingDetachedComments);
+ }
+
+ // Note: this test is somewhat brittle; a change earlier in the proto will break it.
+ [Test]
+ public void MessageLocations()
+ {
+ var message = unitTestProto3Descriptor.FindTypeByName<MessageDescriptor>("CommentMessage");
+ Assert.NotNull(message.Declaration);
+ Assert.AreEqual(389, message.Declaration.StartLine);
+ Assert.AreEqual(1, message.Declaration.StartColumn);
+
+ Assert.AreEqual(404, message.Declaration.EndLine);
+ Assert.AreEqual(2, message.Declaration.EndColumn);
+ }
+
+ [Test]
+ public void EnumComments()
+ {
+ var descriptor = unitTestProto3Descriptor.FindTypeByName<EnumDescriptor>("CommentEnum");
+ Assert.NotNull(descriptor.Declaration);
+ Assert.AreEqual(" Leading enum comment\n", descriptor.Declaration.LeadingComments);
+ }
+
+ [Test]
+ public void NestedMessageComments()
+ {
+ var outer = unitTestProto3Descriptor.FindTypeByName<MessageDescriptor>("CommentMessage");
+ var nested = outer.FindDescriptor<MessageDescriptor>("NestedCommentMessage");
+ Assert.NotNull(nested.Declaration);
+ Assert.AreEqual(" Leading nested message comment\n", nested.Declaration.LeadingComments);
+ }
+
+ [Test]
+ public void NestedEnumComments()
+ {
+ var outer = unitTestProto3Descriptor.FindTypeByName<MessageDescriptor>("CommentMessage");
+ var nested = outer.FindDescriptor<EnumDescriptor>("NestedCommentEnum");
+ Assert.NotNull(nested.Declaration);
+ Assert.AreEqual(" Leading nested enum comment\n", nested.Declaration.LeadingComments);
+ }
+
+ [Test]
+ public void FieldComments()
+ {
+ var message = unitTestProto3Descriptor.FindTypeByName<MessageDescriptor>("CommentMessage");
+ var field = message.FindFieldByName("text");
+ Assert.NotNull(field.Declaration);
+ Assert.AreEqual(" Leading field comment\n", field.Declaration.LeadingComments);
+ Assert.AreEqual(" Trailing field comment\n", field.Declaration.TrailingComments);
+ }
+
+ [Test]
+ public void NestedMessageFieldComments()
+ {
+ var outer = unitTestProto3Descriptor.FindTypeByName<MessageDescriptor>("CommentMessage");
+ var nested = outer.FindDescriptor<MessageDescriptor>("NestedCommentMessage");
+ var field = nested.FindFieldByName("nested_text");
+ Assert.NotNull(field.Declaration);
+ Assert.AreEqual(" Leading nested message field comment\n", field.Declaration.LeadingComments);
+ }
+
+ [Test]
+ public void EnumValueComments()
+ {
+ var enumDescriptor = unitTestProto3Descriptor.FindTypeByName<EnumDescriptor>("CommentEnum");
+ var value = enumDescriptor.FindValueByName("ZERO_VALUE");
+ Assert.NotNull(value.Declaration);
+ Assert.AreEqual(" Zero value comment\n", value.Declaration.LeadingComments);
+ }
+
+ [Test]
+ public void NestedEnumValueComments()
+ {
+ var outer = unitTestProto3Descriptor.FindTypeByName<MessageDescriptor>("CommentMessage");
+ var nested = outer.FindDescriptor<EnumDescriptor>("NestedCommentEnum");
+ var value = nested.FindValueByName("ZERO_VALUE");
+ Assert.NotNull(value.Declaration);
+ Assert.AreEqual(" Zero value comment\n", value.Declaration.LeadingComments);
+ }
+
+ private static FileDescriptor LoadProtos()
+ {
+ var type = typeof(DescriptorDeclarationTest);
+ // TODO: Make this simpler :)
+ FileDescriptorSet descriptorSet;
+ using (var stream = type.GetTypeInfo().Assembly.GetManifestResourceStream($"Google.Protobuf.Test.testprotos.pb"))
+ {
+ descriptorSet = FileDescriptorSet.Parser.ParseFrom(stream);
+ }
+ var byteStrings = descriptorSet.File.Select(f => f.ToByteString()).ToList();
+ var descriptors = FileDescriptor.BuildFromByteStrings(byteStrings);
+ return descriptors.Single(d => d.Name == "unittest_proto3.proto");
+ }
+ }
+}
diff --git a/csharp/src/Google.Protobuf.Test/Reflection/DescriptorsTest.cs b/csharp/src/Google.Protobuf.Test/Reflection/DescriptorsTest.cs
index 586ab47a..8e1097aa 100644
--- a/csharp/src/Google.Protobuf.Test/Reflection/DescriptorsTest.cs
+++ b/csharp/src/Google.Protobuf.Test/Reflection/DescriptorsTest.cs
@@ -60,9 +60,9 @@ namespace Google.Protobuf.Reflection
// dependencies come before the descriptors depending on them.
var descriptorData = new List<ByteString>
{
- UnittestImportPublicProto3Reflection.Descriptor.Proto.ToByteString(),
- UnittestImportProto3Reflection.Descriptor.Proto.ToByteString(),
- UnittestProto3Reflection.Descriptor.Proto.ToByteString()
+ UnittestImportPublicProto3Reflection.Descriptor.SerializedData,
+ UnittestImportProto3Reflection.Descriptor.SerializedData,
+ UnittestProto3Reflection.Descriptor.SerializedData
};
var converted = FileDescriptor.BuildFromByteStrings(descriptorData);
Assert.AreEqual(3, converted.Count);
@@ -120,8 +120,8 @@ namespace Google.Protobuf.Reflection
{
var descriptorData = new List<ByteString>
{
- UnittestImportProto3Reflection.Descriptor.Proto.ToByteString(),
- UnittestProto3Reflection.Descriptor.Proto.ToByteString(),
+ UnittestImportProto3Reflection.Descriptor.SerializedData,
+ UnittestProto3Reflection.Descriptor.SerializedData,
};
// This will fail, because we're missing UnittestImportPublicProto3Reflection
Assert.Throws<ArgumentException>(() => FileDescriptor.BuildFromByteStrings(descriptorData));
@@ -132,8 +132,8 @@ namespace Google.Protobuf.Reflection
{
var descriptorData = new List<ByteString>
{
- UnittestImportPublicProto3Reflection.Descriptor.Proto.ToByteString(),
- UnittestImportPublicProto3Reflection.Descriptor.Proto.ToByteString(),
+ UnittestImportPublicProto3Reflection.Descriptor.SerializedData,
+ UnittestImportPublicProto3Reflection.Descriptor.SerializedData,
};
// This will fail due to the same name being used twice
Assert.Throws<ArgumentException>(() => FileDescriptor.BuildFromByteStrings(descriptorData));
@@ -144,9 +144,9 @@ namespace Google.Protobuf.Reflection
{
var descriptorData = new List<ByteString>
{
- UnittestProto3Reflection.Descriptor.Proto.ToByteString(),
- UnittestImportPublicProto3Reflection.Descriptor.Proto.ToByteString(),
- UnittestImportProto3Reflection.Descriptor.Proto.ToByteString()
+ UnittestProto3Reflection.Descriptor.SerializedData,
+ UnittestImportPublicProto3Reflection.Descriptor.SerializedData,
+ UnittestImportProto3Reflection.Descriptor.SerializedData
};
// This will fail, because the dependencies should come first
Assert.Throws<ArgumentException>(() => FileDescriptor.BuildFromByteStrings(descriptorData));
@@ -225,9 +225,9 @@ namespace Google.Protobuf.Reflection
// dependencies come before the descriptors depending on them.
var descriptorData = new List<ByteString>
{
- UnittestImportPublicProto3Reflection.Descriptor.Proto.ToByteString(),
- UnittestImportProto3Reflection.Descriptor.Proto.ToByteString(),
- UnittestProto3Reflection.Descriptor.Proto.ToByteString()
+ UnittestImportPublicProto3Reflection.Descriptor.SerializedData,
+ UnittestImportProto3Reflection.Descriptor.SerializedData,
+ UnittestProto3Reflection.Descriptor.SerializedData
};
var converted = FileDescriptor.BuildFromByteStrings(descriptorData);
TestFieldDescriptor(
diff --git a/csharp/src/Google.Protobuf.Test/TestProtos/UnittestProto3.cs b/csharp/src/Google.Protobuf.Test/TestProtos/UnittestProto3.cs
index d5dbe866..04221536 100644
--- a/csharp/src/Google.Protobuf.Test/TestProtos/UnittestProto3.cs
+++ b/csharp/src/Google.Protobuf.Test/TestProtos/UnittestProto3.cs
@@ -139,23 +139,26 @@ namespace Google.Protobuf.TestProtos {
"NBj//w8gAygEIigKG1Rlc3RDb21tZW50SW5qZWN0aW9uTWVzc2FnZRIJCgFh",
"GAEgASgJIgwKCkZvb1JlcXVlc3QiDQoLRm9vUmVzcG9uc2UiEgoQRm9vQ2xp",
"ZW50TWVzc2FnZSISChBGb29TZXJ2ZXJNZXNzYWdlIgwKCkJhclJlcXVlc3Qi",
- "DQoLQmFyUmVzcG9uc2UiEgoQVGVzdEVtcHR5TWVzc2FnZSpZCgtGb3JlaWdu",
- "RW51bRIXChNGT1JFSUdOX1VOU1BFQ0lGSUVEEAASDwoLRk9SRUlHTl9GT08Q",
- "BBIPCgtGT1JFSUdOX0JBUhAFEg8KC0ZPUkVJR05fQkFaEAYqdQoUVGVzdEVu",
- "dW1XaXRoRHVwVmFsdWUSKAokVEVTVF9FTlVNX1dJVEhfRFVQX1ZBTFVFX1VO",
- "U1BFQ0lGSUVEEAASCAoERk9PMRABEggKBEJBUjEQAhIHCgNCQVoQAxIICgRG",
- "T08yEAESCAoEQkFSMhACGgIQASqdAQoOVGVzdFNwYXJzZUVudW0SIAocVEVT",
- "VF9TUEFSU0VfRU5VTV9VTlNQRUNJRklFRBAAEgwKCFNQQVJTRV9BEHsSDgoI",
- "U1BBUlNFX0IQpucDEg8KCFNQQVJTRV9DELKxgAYSFQoIU1BBUlNFX0QQ8f//",
- "////////ARIVCghTUEFSU0VfRRC03vz///////8BEgwKCFNQQVJTRV9HEAIy",
- "nQEKC1Rlc3RTZXJ2aWNlEkYKA0ZvbxIeLnByb3RvYnVmX3VuaXR0ZXN0My5G",
- "b29SZXF1ZXN0Gh8ucHJvdG9idWZfdW5pdHRlc3QzLkZvb1Jlc3BvbnNlEkYK",
- "A0JhchIeLnByb3RvYnVmX3VuaXR0ZXN0My5CYXJSZXF1ZXN0Gh8ucHJvdG9i",
- "dWZfdW5pdHRlc3QzLkJhclJlc3BvbnNlQixCDVVuaXR0ZXN0UHJvdG+qAhpH",
- "b29nbGUuUHJvdG9idWYuVGVzdFByb3Rvc2IGcHJvdG8z"));
+ "DQoLQmFyUmVzcG9uc2UiEgoQVGVzdEVtcHR5TWVzc2FnZSJwCg5Db21tZW50",
+ "TWVzc2FnZRIMCgR0ZXh0GAEgASgJGisKFE5lc3RlZENvbW1lbnRNZXNzYWdl",
+ "EhMKC25lc3RlZF90ZXh0GAEgASgJIiMKEU5lc3RlZENvbW1lbnRFbnVtEg4K",
+ "ClpFUk9fVkFMVUUQACpZCgtGb3JlaWduRW51bRIXChNGT1JFSUdOX1VOU1BF",
+ "Q0lGSUVEEAASDwoLRk9SRUlHTl9GT08QBBIPCgtGT1JFSUdOX0JBUhAFEg8K",
+ "C0ZPUkVJR05fQkFaEAYqdQoUVGVzdEVudW1XaXRoRHVwVmFsdWUSKAokVEVT",
+ "VF9FTlVNX1dJVEhfRFVQX1ZBTFVFX1VOU1BFQ0lGSUVEEAASCAoERk9PMRAB",
+ "EggKBEJBUjEQAhIHCgNCQVoQAxIICgRGT08yEAESCAoEQkFSMhACGgIQASqd",
+ "AQoOVGVzdFNwYXJzZUVudW0SIAocVEVTVF9TUEFSU0VfRU5VTV9VTlNQRUNJ",
+ "RklFRBAAEgwKCFNQQVJTRV9BEHsSDgoIU1BBUlNFX0IQpucDEg8KCFNQQVJT",
+ "RV9DELKxgAYSFQoIU1BBUlNFX0QQ8f//////////ARIVCghTUEFSU0VfRRC0",
+ "3vz///////8BEgwKCFNQQVJTRV9HEAIqHQoLQ29tbWVudEVudW0SDgoKWkVS",
+ "T19WQUxVRRAAMp0BCgtUZXN0U2VydmljZRJGCgNGb28SHi5wcm90b2J1Zl91",
+ "bml0dGVzdDMuRm9vUmVxdWVzdBofLnByb3RvYnVmX3VuaXR0ZXN0My5Gb29S",
+ "ZXNwb25zZRJGCgNCYXISHi5wcm90b2J1Zl91bml0dGVzdDMuQmFyUmVxdWVz",
+ "dBofLnByb3RvYnVmX3VuaXR0ZXN0My5CYXJSZXNwb25zZUIsQg1Vbml0dGVz",
+ "dFByb3RvqgIaR29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3NiBnByb3RvMw=="));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { global::Google.Protobuf.TestProtos.UnittestImportProto3Reflection.Descriptor, },
- new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Google.Protobuf.TestProtos.ForeignEnum), typeof(global::Google.Protobuf.TestProtos.TestEnumWithDupValue), typeof(global::Google.Protobuf.TestProtos.TestSparseEnum), }, new pbr::GeneratedClrTypeInfo[] {
+ new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Google.Protobuf.TestProtos.ForeignEnum), typeof(global::Google.Protobuf.TestProtos.TestEnumWithDupValue), typeof(global::Google.Protobuf.TestProtos.TestSparseEnum), typeof(global::Google.Protobuf.TestProtos.CommentEnum), }, new pbr::GeneratedClrTypeInfo[] {
new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.TestProtos.TestAllTypes), global::Google.Protobuf.TestProtos.TestAllTypes.Parser, new[]{ "SingleInt32", "SingleInt64", "SingleUint32", "SingleUint64", "SingleSint32", "SingleSint64", "SingleFixed32", "SingleFixed64", "SingleSfixed32", "SingleSfixed64", "SingleFloat", "SingleDouble", "SingleBool", "SingleString", "SingleBytes", "SingleNestedMessage", "SingleForeignMessage", "SingleImportMessage", "SingleNestedEnum", "SingleForeignEnum", "SingleImportEnum", "SinglePublicImportMessage", "RepeatedInt32", "RepeatedInt64", "RepeatedUint32", "RepeatedUint64", "RepeatedSint32", "RepeatedSint64", "RepeatedFixed32", "RepeatedFixed64", "RepeatedSfixed32", "RepeatedSfixed64", "RepeatedFloat", "RepeatedDouble", "RepeatedBool", "RepeatedString", "RepeatedBytes", "RepeatedNestedMessage", "RepeatedForeignMessage", "RepeatedImportMessage", "RepeatedNestedEnum", "RepeatedForeignEnum", "RepeatedImportEnum", "RepeatedPublicImportMessage", "OneofUint32", "OneofNestedMessage", "OneofString", "OneofBytes" }, new[]{ "OneofField" }, new[]{ typeof(global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedEnum) }, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage), global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage.Parser, new[]{ "Bb" }, null, null, null)}),
new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.TestProtos.NestedTestAllTypes), global::Google.Protobuf.TestProtos.NestedTestAllTypes.Parser, new[]{ "Child", "Payload", "RepeatedChild" }, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.TestProtos.TestDeprecatedFields), global::Google.Protobuf.TestProtos.TestDeprecatedFields.Parser, new[]{ "DeprecatedInt32" }, null, null, null),
@@ -190,7 +193,8 @@ namespace Google.Protobuf.TestProtos {
new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.TestProtos.FooServerMessage), global::Google.Protobuf.TestProtos.FooServerMessage.Parser, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.TestProtos.BarRequest), global::Google.Protobuf.TestProtos.BarRequest.Parser, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.TestProtos.BarResponse), global::Google.Protobuf.TestProtos.BarResponse.Parser, null, null, null, null),
- new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.TestProtos.TestEmptyMessage), global::Google.Protobuf.TestProtos.TestEmptyMessage.Parser, null, null, null, null)
+ new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.TestProtos.TestEmptyMessage), global::Google.Protobuf.TestProtos.TestEmptyMessage.Parser, null, null, null, null),
+ new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.TestProtos.CommentMessage), global::Google.Protobuf.TestProtos.CommentMessage.Parser, new[]{ "Text" }, null, new[]{ typeof(global::Google.Protobuf.TestProtos.CommentMessage.Types.NestedCommentEnum) }, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::Google.Protobuf.TestProtos.CommentMessage.Types.NestedCommentMessage), global::Google.Protobuf.TestProtos.CommentMessage.Types.NestedCommentMessage.Parser, new[]{ "NestedText" }, null, null, null)})
}));
}
#endregion
@@ -233,6 +237,16 @@ namespace Google.Protobuf.TestProtos {
[pbr::OriginalName("SPARSE_G")] SparseG = 2,
}
+ /// <summary>
+ /// Leading enum comment
+ /// </summary>
+ public enum CommentEnum {
+ /// <summary>
+ /// Zero value comment
+ /// </summary>
+ [pbr::OriginalName("ZERO_VALUE")] ZeroValue = 0,
+ }
+
#endregion
#region Messages
@@ -7301,6 +7315,293 @@ namespace Google.Protobuf.TestProtos {
}
+ /// <summary>
+ /// This is a leading comment
+ /// </summary>
+ public sealed partial class CommentMessage : pb::IMessage<CommentMessage> {
+ private static readonly pb::MessageParser<CommentMessage> _parser = new pb::MessageParser<CommentMessage>(() => new CommentMessage());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser<CommentMessage> Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Google.Protobuf.TestProtos.UnittestProto3Reflection.Descriptor.MessageTypes[35]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public CommentMessage() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public CommentMessage(CommentMessage other) : this() {
+ text_ = other.text_;
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public CommentMessage Clone() {
+ return new CommentMessage(this);
+ }
+
+ /// <summary>Field number for the "text" field.</summary>
+ public const int TextFieldNumber = 1;
+ private string text_ = "";
+ /// <summary>
+ /// Leading field comment
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string Text {
+ get { return text_; }
+ set {
+ text_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as CommentMessage);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(CommentMessage other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (Text != other.Text) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (Text.Length != 0) hash ^= Text.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (Text.Length != 0) {
+ output.WriteRawTag(10);
+ output.WriteString(Text);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ if (Text.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(Text);
+ }
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(CommentMessage other) {
+ if (other == null) {
+ return;
+ }
+ if (other.Text.Length != 0) {
+ Text = other.Text;
+ }
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 10: {
+ Text = input.ReadString();
+ break;
+ }
+ }
+ }
+ }
+
+ #region Nested types
+ /// <summary>Container for nested types declared in the CommentMessage message type.</summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static partial class Types {
+ /// <summary>
+ /// Leading nested enum comment
+ /// </summary>
+ public enum NestedCommentEnum {
+ /// <summary>
+ /// Zero value comment
+ /// </summary>
+ [pbr::OriginalName("ZERO_VALUE")] ZeroValue = 0,
+ }
+
+ /// <summary>
+ /// Leading nested message comment
+ /// </summary>
+ public sealed partial class NestedCommentMessage : pb::IMessage<NestedCommentMessage> {
+ private static readonly pb::MessageParser<NestedCommentMessage> _parser = new pb::MessageParser<NestedCommentMessage>(() => new NestedCommentMessage());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser<NestedCommentMessage> Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Google.Protobuf.TestProtos.CommentMessage.Descriptor.NestedTypes[0]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public NestedCommentMessage() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public NestedCommentMessage(NestedCommentMessage other) : this() {
+ nestedText_ = other.nestedText_;
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public NestedCommentMessage Clone() {
+ return new NestedCommentMessage(this);
+ }
+
+ /// <summary>Field number for the "nested_text" field.</summary>
+ public const int NestedTextFieldNumber = 1;
+ private string nestedText_ = "";
+ /// <summary>
+ /// Leading nested message field comment
+ /// </summary>
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string NestedText {
+ get { return nestedText_; }
+ set {
+ nestedText_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as NestedCommentMessage);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(NestedCommentMessage other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (NestedText != other.NestedText) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (NestedText.Length != 0) hash ^= NestedText.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (NestedText.Length != 0) {
+ output.WriteRawTag(10);
+ output.WriteString(NestedText);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ if (NestedText.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(NestedText);
+ }
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(NestedCommentMessage other) {
+ if (other == null) {
+ return;
+ }
+ if (other.NestedText.Length != 0) {
+ NestedText = other.NestedText;
+ }
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 10: {
+ NestedText = input.ReadString();
+ break;
+ }
+ }
+ }
+ }
+
+ }
+
+ }
+ #endregion
+
+ }
+
#endregion
}
diff --git a/csharp/src/Google.Protobuf.Test/testprotos.pb b/csharp/src/Google.Protobuf.Test/testprotos.pb
new file mode 100644
index 00000000..94ff3817
--- /dev/null
+++ b/csharp/src/Google.Protobuf.Test/testprotos.pb
Binary files differ