From ad6903fe33ca0a79e7618a25e83de769438d18ce Mon Sep 17 00:00:00 2001 From: Jon Skeet Date: Tue, 19 Aug 2008 21:24:21 +0100 Subject: Fix to constructor access for nested types, and first pass at streaming. --- .../ProtocolBuffers.Test/CodedOutputStreamTest.cs | 8 +- .../MessageStreamIteratorTest.cs | 23 ++ .../MessageStreamWriterTest.cs | 36 ++ .../ProtocolBuffers.Test.csproj | 6 +- .../TestProtos/MessageWithNoOuter.cs | 4 +- .../UnitTestEmbedOptimizeForProtoFile.cs | 2 +- .../TestProtos/UnitTestImportProtoFile.cs | 2 +- .../TestProtos/UnitTestMessageSetProtoFile.cs | 12 +- .../TestProtos/UnitTestOptimizeForProtoFile.cs | 2 +- .../TestProtos/UnitTestProtoFile.cs | 58 +-- csharp/ProtocolBuffers.Test/TestUtil.cs | 404 +++++++++++---------- csharp/ProtocolBuffers/Delegates.cs | 8 + .../DescriptorProtos/DescriptorProtoFile.cs | 32 +- .../FieldAccess/RepeatedMessageAccessor.cs | 2 +- .../FieldAccess/SingleMessageAccessor.cs | 4 +- .../InvalidProtocolBufferException.cs | 5 + csharp/ProtocolBuffers/MessageStreamIterator.cs | 124 +++++++ csharp/ProtocolBuffers/MessageStreamWriter.cs | 33 ++ csharp/ProtocolBuffers/ProtocolBuffers.csproj | 5 +- 19 files changed, 503 insertions(+), 267 deletions(-) create mode 100644 csharp/ProtocolBuffers.Test/MessageStreamIteratorTest.cs create mode 100644 csharp/ProtocolBuffers.Test/MessageStreamWriterTest.cs create mode 100644 csharp/ProtocolBuffers/Delegates.cs create mode 100644 csharp/ProtocolBuffers/MessageStreamIterator.cs create mode 100644 csharp/ProtocolBuffers/MessageStreamWriter.cs (limited to 'csharp') diff --git a/csharp/ProtocolBuffers.Test/CodedOutputStreamTest.cs b/csharp/ProtocolBuffers.Test/CodedOutputStreamTest.cs index 41b7b4b3..d6a4e672 100644 --- a/csharp/ProtocolBuffers.Test/CodedOutputStreamTest.cs +++ b/csharp/ProtocolBuffers.Test/CodedOutputStreamTest.cs @@ -21,10 +21,6 @@ namespace Google.ProtocolBuffers { [TestFixture] public class CodedOutputStreamTest { - private static void AssertEqualBytes(byte[] a, byte[] b) { - Assert.AreEqual(ByteString.CopyFrom(a), ByteString.CopyFrom(b)); - } - /// /// Writes the given value using WriteRawVarint32() and WriteRawVarint64() and /// checks that the result matches the given bytes @@ -171,7 +167,7 @@ namespace Google.ProtocolBuffers { TestAllTypes message = TestUtil.GetAllSet(); byte[] rawBytes = message.ToByteArray(); - AssertEqualBytes(TestUtil.GoldenMessage.ToByteArray(), rawBytes); + TestUtil.AssertEqualBytes(TestUtil.GoldenMessage.ToByteArray(), rawBytes); // Try different block sizes. for (int blockSize = 1; blockSize < 256; blockSize *= 2) { @@ -180,7 +176,7 @@ namespace Google.ProtocolBuffers { CodedOutputStream.CreateInstance(rawOutput, blockSize); message.WriteTo(output); output.Flush(); - AssertEqualBytes(rawBytes, rawOutput.ToArray()); + TestUtil.AssertEqualBytes(rawBytes, rawOutput.ToArray()); } } diff --git a/csharp/ProtocolBuffers.Test/MessageStreamIteratorTest.cs b/csharp/ProtocolBuffers.Test/MessageStreamIteratorTest.cs new file mode 100644 index 00000000..063f06d5 --- /dev/null +++ b/csharp/ProtocolBuffers.Test/MessageStreamIteratorTest.cs @@ -0,0 +1,23 @@ +using System.Collections; +using System.Collections.Generic; +using System.IO; +using NUnit.Framework; +using NestedMessage = Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage; + +namespace Google.ProtocolBuffers { + [TestFixture] + public class MessageStreamIteratorTest { + + [Test] + public void ThreeMessagesInMemory() { + MemoryStream stream = new MemoryStream(MessageStreamWriterTest.ThreeMessageData); + IEnumerable iterator = MessageStreamIterator.FromStreamProvider(() => stream); + List messages = new List(iterator); + + Assert.AreEqual(3, messages.Count); + Assert.AreEqual(5, messages[0].Bb); + Assert.AreEqual(1500, messages[1].Bb); + Assert.IsFalse(messages[2].HasBb); + } + } +} diff --git a/csharp/ProtocolBuffers.Test/MessageStreamWriterTest.cs b/csharp/ProtocolBuffers.Test/MessageStreamWriterTest.cs new file mode 100644 index 00000000..9cbe2b33 --- /dev/null +++ b/csharp/ProtocolBuffers.Test/MessageStreamWriterTest.cs @@ -0,0 +1,36 @@ +using System.IO; +using NUnit.Framework; +using NestedMessage = Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage; + +namespace Google.ProtocolBuffers { + [TestFixture] + public class MessageStreamWriterTest { + + internal static readonly byte[] ThreeMessageData = new byte[] { + (1 << 3) | 2, 2, // Field 1, 2 bytes long (first message) + (1 << 3) | 0, 5, // Field 1, value 5 + (1 << 3) | 2, 3, // Field 1, 3 bytes long (second message) + (1 << 3) | 0, (1500 & 0x7f) | 0x80, 1500 >> 7, // Field 1, value 1500 + (1 << 3) | 2, 0, // Field 1, no data (third message) + }; + + [Test] + public void ThreeMessages() { + NestedMessage message1 = new NestedMessage.Builder { Bb = 5 }.Build(); + NestedMessage message2 = new NestedMessage.Builder { Bb = 1500 }.Build(); + NestedMessage message3 = new NestedMessage.Builder().Build(); + + byte[] data; + using (MemoryStream stream = new MemoryStream()) { + MessageStreamWriter writer = new MessageStreamWriter(stream); + writer.Write(message1); + writer.Write(message2); + writer.Write(message3); + writer.Flush(); + data = stream.ToArray(); + } + + TestUtil.AssertEqualBytes(ThreeMessageData, data); + } + } +} diff --git a/csharp/ProtocolBuffers.Test/ProtocolBuffers.Test.csproj b/csharp/ProtocolBuffers.Test/ProtocolBuffers.Test.csproj index 5b3a6f14..027a159f 100644 --- a/csharp/ProtocolBuffers.Test/ProtocolBuffers.Test.csproj +++ b/csharp/ProtocolBuffers.Test/ProtocolBuffers.Test.csproj @@ -3,7 +3,7 @@ Debug AnyCPU - 9.0.21022 + 9.0.30729 2.0 {DD01ED24-3750-4567-9A23-1DB676A15610} Library @@ -42,6 +42,8 @@ lib\Rhino.Mocks.dll + + @@ -51,6 +53,8 @@ + + diff --git a/csharp/ProtocolBuffers.Test/TestProtos/MessageWithNoOuter.cs b/csharp/ProtocolBuffers.Test/TestProtos/MessageWithNoOuter.cs index fc54b4ba..6e44a0c9 100644 --- a/csharp/ProtocolBuffers.Test/TestProtos/MessageWithNoOuter.cs +++ b/csharp/ProtocolBuffers.Test/TestProtos/MessageWithNoOuter.cs @@ -112,7 +112,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.MessageWithNoOuter.Types.NestedMessage.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.MessageWithNoOuter.Types.NestedMessage result = new global::Google.ProtocolBuffers.TestProtos.MessageWithNoOuter.Types.NestedMessage(); @@ -252,7 +252,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.MessageWithNoOuter.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.MessageWithNoOuter result = new global::Google.ProtocolBuffers.TestProtos.MessageWithNoOuter(); diff --git a/csharp/ProtocolBuffers.Test/TestProtos/UnitTestEmbedOptimizeForProtoFile.cs b/csharp/ProtocolBuffers.Test/TestProtos/UnitTestEmbedOptimizeForProtoFile.cs index dbb446e0..cae05bf8 100644 --- a/csharp/ProtocolBuffers.Test/TestProtos/UnitTestEmbedOptimizeForProtoFile.cs +++ b/csharp/ProtocolBuffers.Test/TestProtos/UnitTestEmbedOptimizeForProtoFile.cs @@ -185,7 +185,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.TestEmbedOptimizedForSize.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.TestEmbedOptimizedForSize result = new global::Google.ProtocolBuffers.TestProtos.TestEmbedOptimizedForSize(); diff --git a/csharp/ProtocolBuffers.Test/TestProtos/UnitTestImportProtoFile.cs b/csharp/ProtocolBuffers.Test/TestProtos/UnitTestImportProtoFile.cs index 8a73c0db..5713e1c9 100644 --- a/csharp/ProtocolBuffers.Test/TestProtos/UnitTestImportProtoFile.cs +++ b/csharp/ProtocolBuffers.Test/TestProtos/UnitTestImportProtoFile.cs @@ -161,7 +161,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.ImportMessage.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.ImportMessage result = new global::Google.ProtocolBuffers.TestProtos.ImportMessage(); diff --git a/csharp/ProtocolBuffers.Test/TestProtos/UnitTestMessageSetProtoFile.cs b/csharp/ProtocolBuffers.Test/TestProtos/UnitTestMessageSetProtoFile.cs index cdeebd20..b3b53adf 100644 --- a/csharp/ProtocolBuffers.Test/TestProtos/UnitTestMessageSetProtoFile.cs +++ b/csharp/ProtocolBuffers.Test/TestProtos/UnitTestMessageSetProtoFile.cs @@ -189,7 +189,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.TestMessageSet.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.TestMessageSet result = new global::Google.ProtocolBuffers.TestProtos.TestMessageSet(); @@ -373,7 +373,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.TestMessageSetContainer.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.TestMessageSetContainer result = new global::Google.ProtocolBuffers.TestProtos.TestMessageSetContainer(); @@ -608,7 +608,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension1.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension1 result = new global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension1(); @@ -822,7 +822,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension2.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension2 result = new global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension2(); @@ -1071,7 +1071,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item result = new global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item(); @@ -1290,7 +1290,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.RawMessageSet.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.RawMessageSet result = new global::Google.ProtocolBuffers.TestProtos.RawMessageSet(); diff --git a/csharp/ProtocolBuffers.Test/TestProtos/UnitTestOptimizeForProtoFile.cs b/csharp/ProtocolBuffers.Test/TestProtos/UnitTestOptimizeForProtoFile.cs index 2272e2b7..52143f2c 100644 --- a/csharp/ProtocolBuffers.Test/TestProtos/UnitTestOptimizeForProtoFile.cs +++ b/csharp/ProtocolBuffers.Test/TestProtos/UnitTestOptimizeForProtoFile.cs @@ -148,7 +148,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize result = new global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize(); diff --git a/csharp/ProtocolBuffers.Test/TestProtos/UnitTestProtoFile.cs b/csharp/ProtocolBuffers.Test/TestProtos/UnitTestProtoFile.cs index 4cce6eee..167f8718 100644 --- a/csharp/ProtocolBuffers.Test/TestProtos/UnitTestProtoFile.cs +++ b/csharp/ProtocolBuffers.Test/TestProtos/UnitTestProtoFile.cs @@ -1111,7 +1111,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage result = new global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage(); @@ -1318,7 +1318,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup result = new global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup(); @@ -1525,7 +1525,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup result = new global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup(); @@ -2847,7 +2847,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.TestAllTypes.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.TestAllTypes result = new global::Google.ProtocolBuffers.TestProtos.TestAllTypes(); @@ -5420,7 +5420,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.ForeignMessage.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.ForeignMessage result = new global::Google.ProtocolBuffers.TestProtos.ForeignMessage(); @@ -5615,7 +5615,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.TestAllExtensions.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.TestAllExtensions result = new global::Google.ProtocolBuffers.TestProtos.TestAllExtensions(); @@ -5796,7 +5796,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension result = new global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension(); @@ -6003,7 +6003,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension result = new global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension(); @@ -6735,7 +6735,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.TestRequired.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.TestRequired result = new global::Google.ProtocolBuffers.TestProtos.TestRequired(); @@ -7814,7 +7814,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.TestRequiredForeign.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.TestRequiredForeign result = new global::Google.ProtocolBuffers.TestProtos.TestRequiredForeign(); @@ -8127,7 +8127,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.TestForeignNested.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.TestForeignNested result = new global::Google.ProtocolBuffers.TestProtos.TestForeignNested(); @@ -8339,7 +8339,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.TestEmptyMessage.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.TestEmptyMessage result = new global::Google.ProtocolBuffers.TestProtos.TestEmptyMessage(); @@ -8508,7 +8508,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.TestEmptyMessageWithExtensions.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.TestEmptyMessageWithExtensions result = new global::Google.ProtocolBuffers.TestProtos.TestEmptyMessageWithExtensions(); @@ -8705,7 +8705,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.TestReallyLargeTagNumber.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.TestReallyLargeTagNumber result = new global::Google.ProtocolBuffers.TestProtos.TestReallyLargeTagNumber(); @@ -8954,7 +8954,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage result = new global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage(); @@ -9208,7 +9208,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA result = new global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA(); @@ -9452,7 +9452,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB result = new global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB(); @@ -9730,7 +9730,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo result = new global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo(); @@ -9937,7 +9937,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar result = new global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar(); @@ -10157,7 +10157,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber result = new global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber(); @@ -10503,7 +10503,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage result = new global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage(); @@ -10768,7 +10768,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits result = new global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits(); @@ -11188,7 +11188,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.TestCamelCaseFieldNames.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.TestCamelCaseFieldNames result = new global::Google.ProtocolBuffers.TestProtos.TestCamelCaseFieldNames(); @@ -11873,7 +11873,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings result = new global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings(); @@ -12212,7 +12212,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues result = new global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues(); @@ -12533,7 +12533,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.FooRequest.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.FooRequest result = new global::Google.ProtocolBuffers.TestProtos.FooRequest(); @@ -12698,7 +12698,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.FooResponse.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.FooResponse result = new global::Google.ProtocolBuffers.TestProtos.FooResponse(); @@ -12863,7 +12863,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.BarRequest.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.BarRequest result = new global::Google.ProtocolBuffers.TestProtos.BarRequest(); @@ -13028,7 +13028,7 @@ namespace Google.ProtocolBuffers.TestProtos { } // Construct using global::Google.ProtocolBuffers.TestProtos.BarResponse.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.TestProtos.BarResponse result = new global::Google.ProtocolBuffers.TestProtos.BarResponse(); diff --git a/csharp/ProtocolBuffers.Test/TestUtil.cs b/csharp/ProtocolBuffers.Test/TestUtil.cs index f155af6d..f884b3d2 100644 --- a/csharp/ProtocolBuffers.Test/TestUtil.cs +++ b/csharp/ProtocolBuffers.Test/TestUtil.cs @@ -755,7 +755,7 @@ namespace Google.ProtocolBuffers { message.SetExtension(UnitTestProtoFile.DefaultCordExtension, "425"); } - public static void ModifyRepeatedFields(TestAllTypes.Builder message) { + internal static void ModifyRepeatedFields(TestAllTypes.Builder message) { message.SetRepeatedInt32(1, 501); message.SetRepeatedInt64(1, 502); message.SetRepeatedUint32(1, 503); @@ -785,7 +785,7 @@ namespace Google.ProtocolBuffers { message.SetRepeatedCord(1, "525"); } - public static void AssertRepeatedFieldsModified(TestAllTypes message) { + internal static void AssertRepeatedFieldsModified(TestAllTypes message) { // ModifyRepeatedFields only sets the second repeated element of each // field. In addition to verifying this, we also verify that the first // element and size were *not* modified. @@ -877,7 +877,7 @@ namespace Google.ProtocolBuffers { /// /// Helper to assert that sequences are equal. /// - public static void AssertEqual(IEnumerable first, IEnumerable second) { + internal static void AssertEqual(IEnumerable first, IEnumerable second) { using (IEnumerator firstEnumerator = first.GetEnumerator()) { foreach (T secondElement in second) { Assert.IsTrue(firstEnumerator.MoveNext(), "First enumerator ran out of elements too early."); @@ -887,207 +887,211 @@ namespace Google.ProtocolBuffers { } } - public static void AssertAllExtensionsSet(TestAllExtensions message) { - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalInt32Extension )); - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalInt64Extension )); - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalUint32Extension )); - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalUint64Extension )); - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalSint32Extension )); - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalSint64Extension )); - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalFixed32Extension )); - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalFixed64Extension )); - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalSfixed32Extension)); - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalSfixed64Extension)); - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalFloatExtension )); - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalDoubleExtension )); - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalBoolExtension )); - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalStringExtension )); - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalBytesExtension )); - - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalGroupExtension )); - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalNestedMessageExtension )); - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalForeignMessageExtension)); - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalImportMessageExtension )); - - Assert.IsTrue(message.GetExtension(UnitTestProtoFile.OptionalGroupExtension ).HasA); - Assert.IsTrue(message.GetExtension(UnitTestProtoFile.OptionalNestedMessageExtension ).HasBb); - Assert.IsTrue(message.GetExtension(UnitTestProtoFile.OptionalForeignMessageExtension).HasC); - Assert.IsTrue(message.GetExtension(UnitTestProtoFile.OptionalImportMessageExtension ).HasD); - - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalNestedEnumExtension )); - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalForeignEnumExtension)); - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalImportEnumExtension )); - - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalStringPieceExtension)); - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalCordExtension)); - - Assert.AreEqual(101 , message.GetExtension(UnitTestProtoFile.OptionalInt32Extension )); - Assert.AreEqual(102L , message.GetExtension(UnitTestProtoFile.OptionalInt64Extension )); - Assert.AreEqual(103U , message.GetExtension(UnitTestProtoFile.OptionalUint32Extension )); - Assert.AreEqual(104UL , message.GetExtension(UnitTestProtoFile.OptionalUint64Extension )); - Assert.AreEqual(105 , message.GetExtension(UnitTestProtoFile.OptionalSint32Extension )); - Assert.AreEqual(106L , message.GetExtension(UnitTestProtoFile.OptionalSint64Extension )); - Assert.AreEqual(107U , message.GetExtension(UnitTestProtoFile.OptionalFixed32Extension )); - Assert.AreEqual(108UL , message.GetExtension(UnitTestProtoFile.OptionalFixed64Extension )); - Assert.AreEqual(109 , message.GetExtension(UnitTestProtoFile.OptionalSfixed32Extension)); - Assert.AreEqual(110L , message.GetExtension(UnitTestProtoFile.OptionalSfixed64Extension)); - Assert.AreEqual(111F , message.GetExtension(UnitTestProtoFile.OptionalFloatExtension )); - Assert.AreEqual(112D , message.GetExtension(UnitTestProtoFile.OptionalDoubleExtension )); - Assert.AreEqual(true , message.GetExtension(UnitTestProtoFile.OptionalBoolExtension )); - Assert.AreEqual("115", message.GetExtension(UnitTestProtoFile.OptionalStringExtension )); - Assert.AreEqual(ToBytes("116"), message.GetExtension(UnitTestProtoFile.OptionalBytesExtension)); - - Assert.AreEqual(117, message.GetExtension(UnitTestProtoFile.OptionalGroupExtension ).A); - Assert.AreEqual(118, message.GetExtension(UnitTestProtoFile.OptionalNestedMessageExtension ).Bb); - Assert.AreEqual(119, message.GetExtension(UnitTestProtoFile.OptionalForeignMessageExtension).C); - Assert.AreEqual(120, message.GetExtension(UnitTestProtoFile.OptionalImportMessageExtension ).D); - - Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAZ, message.GetExtension(UnitTestProtoFile.OptionalNestedEnumExtension)); - Assert.AreEqual(ForeignEnum.FOREIGN_BAZ, message.GetExtension(UnitTestProtoFile.OptionalForeignEnumExtension)); - Assert.AreEqual(ImportEnum.IMPORT_BAZ, message.GetExtension(UnitTestProtoFile.OptionalImportEnumExtension)); - - Assert.AreEqual("124", message.GetExtension(UnitTestProtoFile.OptionalStringPieceExtension)); - Assert.AreEqual("125", message.GetExtension(UnitTestProtoFile.OptionalCordExtension)); - - // ----------------------------------------------------------------- - - Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedInt32Extension )); - Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedInt64Extension )); - Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedUint32Extension )); - Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedUint64Extension )); - Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedSint32Extension )); - Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedSint64Extension )); - Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedFixed32Extension )); - Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedFixed64Extension )); - Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedSfixed32Extension)); - Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedSfixed64Extension)); - Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedFloatExtension )); - Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedDoubleExtension )); - Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedBoolExtension )); - Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedStringExtension )); - Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedBytesExtension )); - - Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedGroupExtension )); - Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedNestedMessageExtension )); - Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedForeignMessageExtension)); - Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedImportMessageExtension )); - Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedNestedEnumExtension )); - Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedForeignEnumExtension )); - Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedImportEnumExtension )); - - Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedStringPieceExtension)); - Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedCordExtension)); - - Assert.AreEqual(201 , message.GetExtension(UnitTestProtoFile.RepeatedInt32Extension , 0)); - Assert.AreEqual(202L , message.GetExtension(UnitTestProtoFile.RepeatedInt64Extension , 0)); - Assert.AreEqual(203U , message.GetExtension(UnitTestProtoFile.RepeatedUint32Extension , 0)); - Assert.AreEqual(204UL , message.GetExtension(UnitTestProtoFile.RepeatedUint64Extension , 0)); - Assert.AreEqual(205 , message.GetExtension(UnitTestProtoFile.RepeatedSint32Extension , 0)); - Assert.AreEqual(206L , message.GetExtension(UnitTestProtoFile.RepeatedSint64Extension , 0)); - Assert.AreEqual(207U , message.GetExtension(UnitTestProtoFile.RepeatedFixed32Extension , 0)); - Assert.AreEqual(208UL , message.GetExtension(UnitTestProtoFile.RepeatedFixed64Extension , 0)); - Assert.AreEqual(209 , message.GetExtension(UnitTestProtoFile.RepeatedSfixed32Extension, 0)); - Assert.AreEqual(210L , message.GetExtension(UnitTestProtoFile.RepeatedSfixed64Extension, 0)); - Assert.AreEqual(211F , message.GetExtension(UnitTestProtoFile.RepeatedFloatExtension , 0)); - Assert.AreEqual(212D , message.GetExtension(UnitTestProtoFile.RepeatedDoubleExtension , 0)); - Assert.AreEqual(true , message.GetExtension(UnitTestProtoFile.RepeatedBoolExtension , 0)); - Assert.AreEqual("215", message.GetExtension(UnitTestProtoFile.RepeatedStringExtension , 0)); - Assert.AreEqual(ToBytes("216"), message.GetExtension(UnitTestProtoFile.RepeatedBytesExtension, 0)); - - Assert.AreEqual(217, message.GetExtension(UnitTestProtoFile.RepeatedGroupExtension , 0).A); - Assert.AreEqual(218, message.GetExtension(UnitTestProtoFile.RepeatedNestedMessageExtension , 0).Bb); - Assert.AreEqual(219, message.GetExtension(UnitTestProtoFile.RepeatedForeignMessageExtension, 0).C); - Assert.AreEqual(220, message.GetExtension(UnitTestProtoFile.RepeatedImportMessageExtension , 0).D); - - Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAR, message.GetExtension(UnitTestProtoFile.RepeatedNestedEnumExtension, 0)); - Assert.AreEqual(ForeignEnum.FOREIGN_BAR, message.GetExtension(UnitTestProtoFile.RepeatedForeignEnumExtension, 0)); - Assert.AreEqual(ImportEnum.IMPORT_BAR, message.GetExtension(UnitTestProtoFile.RepeatedImportEnumExtension, 0)); - - Assert.AreEqual("224", message.GetExtension(UnitTestProtoFile.RepeatedStringPieceExtension, 0)); - Assert.AreEqual("225", message.GetExtension(UnitTestProtoFile.RepeatedCordExtension, 0)); - - Assert.AreEqual(301 , message.GetExtension(UnitTestProtoFile.RepeatedInt32Extension , 1)); - Assert.AreEqual(302L , message.GetExtension(UnitTestProtoFile.RepeatedInt64Extension , 1)); - Assert.AreEqual(303U , message.GetExtension(UnitTestProtoFile.RepeatedUint32Extension , 1)); - Assert.AreEqual(304UL , message.GetExtension(UnitTestProtoFile.RepeatedUint64Extension , 1)); - Assert.AreEqual(305 , message.GetExtension(UnitTestProtoFile.RepeatedSint32Extension , 1)); - Assert.AreEqual(306L , message.GetExtension(UnitTestProtoFile.RepeatedSint64Extension , 1)); - Assert.AreEqual(307U , message.GetExtension(UnitTestProtoFile.RepeatedFixed32Extension , 1)); - Assert.AreEqual(308UL , message.GetExtension(UnitTestProtoFile.RepeatedFixed64Extension , 1)); - Assert.AreEqual(309 , message.GetExtension(UnitTestProtoFile.RepeatedSfixed32Extension, 1)); - Assert.AreEqual(310L , message.GetExtension(UnitTestProtoFile.RepeatedSfixed64Extension, 1)); - Assert.AreEqual(311F , message.GetExtension(UnitTestProtoFile.RepeatedFloatExtension , 1)); - Assert.AreEqual(312D , message.GetExtension(UnitTestProtoFile.RepeatedDoubleExtension , 1)); - Assert.AreEqual(false, message.GetExtension(UnitTestProtoFile.RepeatedBoolExtension , 1)); - Assert.AreEqual("315", message.GetExtension(UnitTestProtoFile.RepeatedStringExtension , 1)); - Assert.AreEqual(ToBytes("316"), message.GetExtension(UnitTestProtoFile.RepeatedBytesExtension, 1)); - - Assert.AreEqual(317, message.GetExtension(UnitTestProtoFile.RepeatedGroupExtension , 1).A); - Assert.AreEqual(318, message.GetExtension(UnitTestProtoFile.RepeatedNestedMessageExtension , 1).Bb); - Assert.AreEqual(319, message.GetExtension(UnitTestProtoFile.RepeatedForeignMessageExtension, 1).C); - Assert.AreEqual(320, message.GetExtension(UnitTestProtoFile.RepeatedImportMessageExtension , 1).D); - - Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAZ, message.GetExtension(UnitTestProtoFile.RepeatedNestedEnumExtension, 1)); - Assert.AreEqual(ForeignEnum.FOREIGN_BAZ, message.GetExtension(UnitTestProtoFile.RepeatedForeignEnumExtension, 1)); - Assert.AreEqual(ImportEnum.IMPORT_BAZ, message.GetExtension(UnitTestProtoFile.RepeatedImportEnumExtension, 1)); - - Assert.AreEqual("324", message.GetExtension(UnitTestProtoFile.RepeatedStringPieceExtension, 1)); - Assert.AreEqual("325", message.GetExtension(UnitTestProtoFile.RepeatedCordExtension, 1)); - - // ----------------------------------------------------------------- - - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultInt32Extension )); - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultInt64Extension )); - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultUint32Extension )); - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultUint64Extension )); - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultSint32Extension )); - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultSint64Extension )); - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultFixed32Extension )); - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultFixed64Extension )); - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultSfixed32Extension)); - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultSfixed64Extension)); - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultFloatExtension )); - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultDoubleExtension )); - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultBoolExtension )); - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultStringExtension )); - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultBytesExtension )); - - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultNestedEnumExtension )); - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultForeignEnumExtension)); - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultImportEnumExtension )); - - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultStringPieceExtension)); - Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultCordExtension)); - - Assert.AreEqual(401 , message.GetExtension(UnitTestProtoFile.DefaultInt32Extension )); - Assert.AreEqual(402L , message.GetExtension(UnitTestProtoFile.DefaultInt64Extension )); - Assert.AreEqual(403U , message.GetExtension(UnitTestProtoFile.DefaultUint32Extension )); - Assert.AreEqual(404UL , message.GetExtension(UnitTestProtoFile.DefaultUint64Extension )); - Assert.AreEqual(405 , message.GetExtension(UnitTestProtoFile.DefaultSint32Extension )); - Assert.AreEqual(406L , message.GetExtension(UnitTestProtoFile.DefaultSint64Extension )); - Assert.AreEqual(407U , message.GetExtension(UnitTestProtoFile.DefaultFixed32Extension )); - Assert.AreEqual(408UL , message.GetExtension(UnitTestProtoFile.DefaultFixed64Extension )); - Assert.AreEqual(409 , message.GetExtension(UnitTestProtoFile.DefaultSfixed32Extension)); - Assert.AreEqual(410L , message.GetExtension(UnitTestProtoFile.DefaultSfixed64Extension)); - Assert.AreEqual(411F , message.GetExtension(UnitTestProtoFile.DefaultFloatExtension )); - Assert.AreEqual(412D , message.GetExtension(UnitTestProtoFile.DefaultDoubleExtension )); - Assert.AreEqual(false, message.GetExtension(UnitTestProtoFile.DefaultBoolExtension )); - Assert.AreEqual("415", message.GetExtension(UnitTestProtoFile.DefaultStringExtension )); - Assert.AreEqual(ToBytes("416"), message.GetExtension(UnitTestProtoFile.DefaultBytesExtension)); - - Assert.AreEqual(TestAllTypes.Types.NestedEnum.FOO, message.GetExtension(UnitTestProtoFile.DefaultNestedEnumExtension )); - Assert.AreEqual(ForeignEnum.FOREIGN_FOO, message.GetExtension(UnitTestProtoFile.DefaultForeignEnumExtension)); - Assert.AreEqual(ImportEnum.IMPORT_FOO, message.GetExtension(UnitTestProtoFile.DefaultImportEnumExtension)); - - Assert.AreEqual("424", message.GetExtension(UnitTestProtoFile.DefaultStringPieceExtension)); - Assert.AreEqual("425", message.GetExtension(UnitTestProtoFile.DefaultCordExtension)); + internal static void AssertEqualBytes(byte[] expected, byte[] actual) { + Assert.AreEqual(ByteString.CopyFrom(expected), ByteString.CopyFrom(actual)); + } + + internal static void AssertAllExtensionsSet(TestAllExtensions message) { + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalInt32Extension )); + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalInt64Extension )); + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalUint32Extension )); + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalUint64Extension )); + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalSint32Extension )); + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalSint64Extension )); + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalFixed32Extension )); + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalFixed64Extension )); + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalSfixed32Extension)); + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalSfixed64Extension)); + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalFloatExtension )); + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalDoubleExtension )); + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalBoolExtension )); + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalStringExtension )); + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalBytesExtension )); + + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalGroupExtension )); + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalNestedMessageExtension )); + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalForeignMessageExtension)); + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalImportMessageExtension )); + + Assert.IsTrue(message.GetExtension(UnitTestProtoFile.OptionalGroupExtension ).HasA); + Assert.IsTrue(message.GetExtension(UnitTestProtoFile.OptionalNestedMessageExtension ).HasBb); + Assert.IsTrue(message.GetExtension(UnitTestProtoFile.OptionalForeignMessageExtension).HasC); + Assert.IsTrue(message.GetExtension(UnitTestProtoFile.OptionalImportMessageExtension ).HasD); + + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalNestedEnumExtension )); + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalForeignEnumExtension)); + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalImportEnumExtension )); + + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalStringPieceExtension)); + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalCordExtension)); + + Assert.AreEqual(101 , message.GetExtension(UnitTestProtoFile.OptionalInt32Extension )); + Assert.AreEqual(102L , message.GetExtension(UnitTestProtoFile.OptionalInt64Extension )); + Assert.AreEqual(103U , message.GetExtension(UnitTestProtoFile.OptionalUint32Extension )); + Assert.AreEqual(104UL , message.GetExtension(UnitTestProtoFile.OptionalUint64Extension )); + Assert.AreEqual(105 , message.GetExtension(UnitTestProtoFile.OptionalSint32Extension )); + Assert.AreEqual(106L , message.GetExtension(UnitTestProtoFile.OptionalSint64Extension )); + Assert.AreEqual(107U , message.GetExtension(UnitTestProtoFile.OptionalFixed32Extension )); + Assert.AreEqual(108UL , message.GetExtension(UnitTestProtoFile.OptionalFixed64Extension )); + Assert.AreEqual(109 , message.GetExtension(UnitTestProtoFile.OptionalSfixed32Extension)); + Assert.AreEqual(110L , message.GetExtension(UnitTestProtoFile.OptionalSfixed64Extension)); + Assert.AreEqual(111F , message.GetExtension(UnitTestProtoFile.OptionalFloatExtension )); + Assert.AreEqual(112D , message.GetExtension(UnitTestProtoFile.OptionalDoubleExtension )); + Assert.AreEqual(true , message.GetExtension(UnitTestProtoFile.OptionalBoolExtension )); + Assert.AreEqual("115", message.GetExtension(UnitTestProtoFile.OptionalStringExtension )); + Assert.AreEqual(ToBytes("116"), message.GetExtension(UnitTestProtoFile.OptionalBytesExtension)); + + Assert.AreEqual(117, message.GetExtension(UnitTestProtoFile.OptionalGroupExtension ).A); + Assert.AreEqual(118, message.GetExtension(UnitTestProtoFile.OptionalNestedMessageExtension ).Bb); + Assert.AreEqual(119, message.GetExtension(UnitTestProtoFile.OptionalForeignMessageExtension).C); + Assert.AreEqual(120, message.GetExtension(UnitTestProtoFile.OptionalImportMessageExtension ).D); + + Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAZ, message.GetExtension(UnitTestProtoFile.OptionalNestedEnumExtension)); + Assert.AreEqual(ForeignEnum.FOREIGN_BAZ, message.GetExtension(UnitTestProtoFile.OptionalForeignEnumExtension)); + Assert.AreEqual(ImportEnum.IMPORT_BAZ, message.GetExtension(UnitTestProtoFile.OptionalImportEnumExtension)); + + Assert.AreEqual("124", message.GetExtension(UnitTestProtoFile.OptionalStringPieceExtension)); + Assert.AreEqual("125", message.GetExtension(UnitTestProtoFile.OptionalCordExtension)); + + // ----------------------------------------------------------------- + + Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedInt32Extension )); + Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedInt64Extension )); + Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedUint32Extension )); + Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedUint64Extension )); + Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedSint32Extension )); + Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedSint64Extension )); + Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedFixed32Extension )); + Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedFixed64Extension )); + Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedSfixed32Extension)); + Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedSfixed64Extension)); + Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedFloatExtension )); + Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedDoubleExtension )); + Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedBoolExtension )); + Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedStringExtension )); + Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedBytesExtension )); + + Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedGroupExtension )); + Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedNestedMessageExtension )); + Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedForeignMessageExtension)); + Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedImportMessageExtension )); + Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedNestedEnumExtension )); + Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedForeignEnumExtension )); + Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedImportEnumExtension )); + + Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedStringPieceExtension)); + Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedCordExtension)); + + Assert.AreEqual(201 , message.GetExtension(UnitTestProtoFile.RepeatedInt32Extension , 0)); + Assert.AreEqual(202L , message.GetExtension(UnitTestProtoFile.RepeatedInt64Extension , 0)); + Assert.AreEqual(203U , message.GetExtension(UnitTestProtoFile.RepeatedUint32Extension , 0)); + Assert.AreEqual(204UL , message.GetExtension(UnitTestProtoFile.RepeatedUint64Extension , 0)); + Assert.AreEqual(205 , message.GetExtension(UnitTestProtoFile.RepeatedSint32Extension , 0)); + Assert.AreEqual(206L , message.GetExtension(UnitTestProtoFile.RepeatedSint64Extension , 0)); + Assert.AreEqual(207U , message.GetExtension(UnitTestProtoFile.RepeatedFixed32Extension , 0)); + Assert.AreEqual(208UL , message.GetExtension(UnitTestProtoFile.RepeatedFixed64Extension , 0)); + Assert.AreEqual(209 , message.GetExtension(UnitTestProtoFile.RepeatedSfixed32Extension, 0)); + Assert.AreEqual(210L , message.GetExtension(UnitTestProtoFile.RepeatedSfixed64Extension, 0)); + Assert.AreEqual(211F , message.GetExtension(UnitTestProtoFile.RepeatedFloatExtension , 0)); + Assert.AreEqual(212D , message.GetExtension(UnitTestProtoFile.RepeatedDoubleExtension , 0)); + Assert.AreEqual(true , message.GetExtension(UnitTestProtoFile.RepeatedBoolExtension , 0)); + Assert.AreEqual("215", message.GetExtension(UnitTestProtoFile.RepeatedStringExtension , 0)); + Assert.AreEqual(ToBytes("216"), message.GetExtension(UnitTestProtoFile.RepeatedBytesExtension, 0)); + + Assert.AreEqual(217, message.GetExtension(UnitTestProtoFile.RepeatedGroupExtension , 0).A); + Assert.AreEqual(218, message.GetExtension(UnitTestProtoFile.RepeatedNestedMessageExtension , 0).Bb); + Assert.AreEqual(219, message.GetExtension(UnitTestProtoFile.RepeatedForeignMessageExtension, 0).C); + Assert.AreEqual(220, message.GetExtension(UnitTestProtoFile.RepeatedImportMessageExtension , 0).D); + + Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAR, message.GetExtension(UnitTestProtoFile.RepeatedNestedEnumExtension, 0)); + Assert.AreEqual(ForeignEnum.FOREIGN_BAR, message.GetExtension(UnitTestProtoFile.RepeatedForeignEnumExtension, 0)); + Assert.AreEqual(ImportEnum.IMPORT_BAR, message.GetExtension(UnitTestProtoFile.RepeatedImportEnumExtension, 0)); + + Assert.AreEqual("224", message.GetExtension(UnitTestProtoFile.RepeatedStringPieceExtension, 0)); + Assert.AreEqual("225", message.GetExtension(UnitTestProtoFile.RepeatedCordExtension, 0)); + + Assert.AreEqual(301 , message.GetExtension(UnitTestProtoFile.RepeatedInt32Extension , 1)); + Assert.AreEqual(302L , message.GetExtension(UnitTestProtoFile.RepeatedInt64Extension , 1)); + Assert.AreEqual(303U , message.GetExtension(UnitTestProtoFile.RepeatedUint32Extension , 1)); + Assert.AreEqual(304UL , message.GetExtension(UnitTestProtoFile.RepeatedUint64Extension , 1)); + Assert.AreEqual(305 , message.GetExtension(UnitTestProtoFile.RepeatedSint32Extension , 1)); + Assert.AreEqual(306L , message.GetExtension(UnitTestProtoFile.RepeatedSint64Extension , 1)); + Assert.AreEqual(307U , message.GetExtension(UnitTestProtoFile.RepeatedFixed32Extension , 1)); + Assert.AreEqual(308UL , message.GetExtension(UnitTestProtoFile.RepeatedFixed64Extension , 1)); + Assert.AreEqual(309 , message.GetExtension(UnitTestProtoFile.RepeatedSfixed32Extension, 1)); + Assert.AreEqual(310L , message.GetExtension(UnitTestProtoFile.RepeatedSfixed64Extension, 1)); + Assert.AreEqual(311F , message.GetExtension(UnitTestProtoFile.RepeatedFloatExtension , 1)); + Assert.AreEqual(312D , message.GetExtension(UnitTestProtoFile.RepeatedDoubleExtension , 1)); + Assert.AreEqual(false, message.GetExtension(UnitTestProtoFile.RepeatedBoolExtension , 1)); + Assert.AreEqual("315", message.GetExtension(UnitTestProtoFile.RepeatedStringExtension , 1)); + Assert.AreEqual(ToBytes("316"), message.GetExtension(UnitTestProtoFile.RepeatedBytesExtension, 1)); + + Assert.AreEqual(317, message.GetExtension(UnitTestProtoFile.RepeatedGroupExtension , 1).A); + Assert.AreEqual(318, message.GetExtension(UnitTestProtoFile.RepeatedNestedMessageExtension , 1).Bb); + Assert.AreEqual(319, message.GetExtension(UnitTestProtoFile.RepeatedForeignMessageExtension, 1).C); + Assert.AreEqual(320, message.GetExtension(UnitTestProtoFile.RepeatedImportMessageExtension , 1).D); + + Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAZ, message.GetExtension(UnitTestProtoFile.RepeatedNestedEnumExtension, 1)); + Assert.AreEqual(ForeignEnum.FOREIGN_BAZ, message.GetExtension(UnitTestProtoFile.RepeatedForeignEnumExtension, 1)); + Assert.AreEqual(ImportEnum.IMPORT_BAZ, message.GetExtension(UnitTestProtoFile.RepeatedImportEnumExtension, 1)); + + Assert.AreEqual("324", message.GetExtension(UnitTestProtoFile.RepeatedStringPieceExtension, 1)); + Assert.AreEqual("325", message.GetExtension(UnitTestProtoFile.RepeatedCordExtension, 1)); + + // ----------------------------------------------------------------- + + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultInt32Extension )); + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultInt64Extension )); + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultUint32Extension )); + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultUint64Extension )); + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultSint32Extension )); + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultSint64Extension )); + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultFixed32Extension )); + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultFixed64Extension )); + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultSfixed32Extension)); + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultSfixed64Extension)); + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultFloatExtension )); + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultDoubleExtension )); + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultBoolExtension )); + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultStringExtension )); + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultBytesExtension )); + + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultNestedEnumExtension )); + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultForeignEnumExtension)); + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultImportEnumExtension )); + + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultStringPieceExtension)); + Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultCordExtension)); + + Assert.AreEqual(401 , message.GetExtension(UnitTestProtoFile.DefaultInt32Extension )); + Assert.AreEqual(402L , message.GetExtension(UnitTestProtoFile.DefaultInt64Extension )); + Assert.AreEqual(403U , message.GetExtension(UnitTestProtoFile.DefaultUint32Extension )); + Assert.AreEqual(404UL , message.GetExtension(UnitTestProtoFile.DefaultUint64Extension )); + Assert.AreEqual(405 , message.GetExtension(UnitTestProtoFile.DefaultSint32Extension )); + Assert.AreEqual(406L , message.GetExtension(UnitTestProtoFile.DefaultSint64Extension )); + Assert.AreEqual(407U , message.GetExtension(UnitTestProtoFile.DefaultFixed32Extension )); + Assert.AreEqual(408UL , message.GetExtension(UnitTestProtoFile.DefaultFixed64Extension )); + Assert.AreEqual(409 , message.GetExtension(UnitTestProtoFile.DefaultSfixed32Extension)); + Assert.AreEqual(410L , message.GetExtension(UnitTestProtoFile.DefaultSfixed64Extension)); + Assert.AreEqual(411F , message.GetExtension(UnitTestProtoFile.DefaultFloatExtension )); + Assert.AreEqual(412D , message.GetExtension(UnitTestProtoFile.DefaultDoubleExtension )); + Assert.AreEqual(false, message.GetExtension(UnitTestProtoFile.DefaultBoolExtension )); + Assert.AreEqual("415", message.GetExtension(UnitTestProtoFile.DefaultStringExtension )); + Assert.AreEqual(ToBytes("416"), message.GetExtension(UnitTestProtoFile.DefaultBytesExtension)); + + Assert.AreEqual(TestAllTypes.Types.NestedEnum.FOO, message.GetExtension(UnitTestProtoFile.DefaultNestedEnumExtension )); + Assert.AreEqual(ForeignEnum.FOREIGN_FOO, message.GetExtension(UnitTestProtoFile.DefaultForeignEnumExtension)); + Assert.AreEqual(ImportEnum.IMPORT_FOO, message.GetExtension(UnitTestProtoFile.DefaultImportEnumExtension)); + + Assert.AreEqual("424", message.GetExtension(UnitTestProtoFile.DefaultStringPieceExtension)); + Assert.AreEqual("425", message.GetExtension(UnitTestProtoFile.DefaultCordExtension)); } /// /// Modifies the repeated extensions of the given message to contain the values /// expected by AssertRepeatedExtensionsModified. /// - public static void ModifyRepeatedExtensions(TestAllExtensions.Builder message) { + internal static void ModifyRepeatedExtensions(TestAllExtensions.Builder message) { message.SetExtension(UnitTestProtoFile.RepeatedInt32Extension, 1, 501); message.SetExtension(UnitTestProtoFile.RepeatedInt64Extension, 1, 502L); message.SetExtension(UnitTestProtoFile.RepeatedUint32Extension, 1, 503U); @@ -1121,7 +1125,7 @@ namespace Google.ProtocolBuffers { /// Asserts that all repeated extensions are set to the values assigned by /// SetAllExtensions follwed by ModifyRepeatedExtensions. /// - public static void AssertRepeatedExtensionsModified(TestAllExtensions message) { + internal static void AssertRepeatedExtensionsModified(TestAllExtensions message) { // ModifyRepeatedFields only sets the second repeated element of each // field. In addition to verifying this, we also verify that the first // element and size were *not* modified. @@ -1210,7 +1214,7 @@ namespace Google.ProtocolBuffers { Assert.AreEqual("525", message.GetExtension(UnitTestProtoFile.RepeatedCordExtension, 1)); } - public static void AssertExtensionsClear(TestAllExtensions message) { + internal static void AssertExtensionsClear(TestAllExtensions message) { // HasBlah() should initially be false for all optional fields. Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalInt32Extension)); Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalInt64Extension)); diff --git a/csharp/ProtocolBuffers/Delegates.cs b/csharp/ProtocolBuffers/Delegates.cs new file mode 100644 index 00000000..2aa440b1 --- /dev/null +++ b/csharp/ProtocolBuffers/Delegates.cs @@ -0,0 +1,8 @@ +using System.IO; +namespace Google.ProtocolBuffers { + + /// + /// Delegate to return a stream when asked, used by MessageStreamIterator. + /// + public delegate Stream StreamProvider(); +} diff --git a/csharp/ProtocolBuffers/DescriptorProtos/DescriptorProtoFile.cs b/csharp/ProtocolBuffers/DescriptorProtos/DescriptorProtoFile.cs index c103cb19..e42c36f3 100644 --- a/csharp/ProtocolBuffers/DescriptorProtos/DescriptorProtoFile.cs +++ b/csharp/ProtocolBuffers/DescriptorProtos/DescriptorProtoFile.cs @@ -363,7 +363,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { } // Construct using global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorSet.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorSet result = new global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorSet(); @@ -726,7 +726,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { } // Construct using global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto result = new global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto(); @@ -1326,7 +1326,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { } // Construct using global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange result = new global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange(); @@ -1646,7 +1646,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { } // Construct using global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto result = new global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto(); @@ -2337,7 +2337,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { } // Construct using global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto result = new global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto(); @@ -2791,7 +2791,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { } // Construct using global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto result = new global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto(); @@ -3136,7 +3136,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { } // Construct using global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto result = new global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto(); @@ -3450,7 +3450,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { } // Construct using global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto result = new global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto(); @@ -3811,7 +3811,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { } // Construct using global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto result = new global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto(); @@ -4254,7 +4254,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { } // Construct using global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.DescriptorProtos.FileOptions result = new global::Google.ProtocolBuffers.DescriptorProtos.FileOptions(); @@ -4674,7 +4674,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { } // Construct using global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions result = new global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions(); @@ -4906,7 +4906,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { } // Construct using global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions result = new global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions(); @@ -5128,7 +5128,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { } // Construct using global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions result = new global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions(); @@ -5293,7 +5293,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { } // Construct using global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions result = new global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions(); @@ -5458,7 +5458,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { } // Construct using global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions result = new global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions(); @@ -5623,7 +5623,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { } // Construct using global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.CreateBuilder() - internal Builder() {} + public Builder() {} global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions result = new global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions(); diff --git a/csharp/ProtocolBuffers/FieldAccess/RepeatedMessageAccessor.cs b/csharp/ProtocolBuffers/FieldAccess/RepeatedMessageAccessor.cs index fe801182..35d7b1a8 100644 --- a/csharp/ProtocolBuffers/FieldAccess/RepeatedMessageAccessor.cs +++ b/csharp/ProtocolBuffers/FieldAccess/RepeatedMessageAccessor.cs @@ -36,7 +36,7 @@ namespace Google.ProtocolBuffers.FieldAccess { private readonly Func createBuilderDelegate; internal RepeatedMessageAccessor(string name) : base(name) { - MethodInfo createBuilderMethod = ClrType.GetMethod("CreateBuilder", new Type[0]); + MethodInfo createBuilderMethod = ClrType.GetMethod("CreateBuilder", Type.EmptyTypes); if (createBuilderMethod == null) { throw new ArgumentException("No public static CreateBuilder method declared in " + ClrType.Name); } diff --git a/csharp/ProtocolBuffers/FieldAccess/SingleMessageAccessor.cs b/csharp/ProtocolBuffers/FieldAccess/SingleMessageAccessor.cs index 931848b5..5aa9f777 100644 --- a/csharp/ProtocolBuffers/FieldAccess/SingleMessageAccessor.cs +++ b/csharp/ProtocolBuffers/FieldAccess/SingleMessageAccessor.cs @@ -31,8 +31,8 @@ namespace Google.ProtocolBuffers.FieldAccess { /// private readonly Func createBuilderDelegate; - internal SingleMessageAccessor(string name) : base(name) { - MethodInfo createBuilderMethod = ClrType.GetMethod("CreateBuilder", new Type[0]); + internal SingleMessageAccessor(string name) : base(name) { + MethodInfo createBuilderMethod = ClrType.GetMethod("CreateBuilder", Type.EmptyTypes); if (createBuilderMethod == null) { throw new ArgumentException("No public static CreateBuilder method declared in " + ClrType.Name); } diff --git a/csharp/ProtocolBuffers/InvalidProtocolBufferException.cs b/csharp/ProtocolBuffers/InvalidProtocolBufferException.cs index 10257542..4f1b1a92 100644 --- a/csharp/ProtocolBuffers/InvalidProtocolBufferException.cs +++ b/csharp/ProtocolBuffers/InvalidProtocolBufferException.cs @@ -71,5 +71,10 @@ namespace Google.ProtocolBuffers { "Protocol message was too large. May be malicious. " + "Use CodedInputStream.SetSizeLimit() to increase the size limit."); } + + internal static InvalidProtocolBufferException InvalidMessageStreamTag() { + return new InvalidProtocolBufferException( + "Stream of protocol messages had invalid tag. Expected tag is length-delimited field 1."); + } } } diff --git a/csharp/ProtocolBuffers/MessageStreamIterator.cs b/csharp/ProtocolBuffers/MessageStreamIterator.cs new file mode 100644 index 00000000..4944e5ce --- /dev/null +++ b/csharp/ProtocolBuffers/MessageStreamIterator.cs @@ -0,0 +1,124 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections; +using System.IO; +using System.Reflection; + +namespace Google.ProtocolBuffers { + + /// + /// Helper class to create MessageStreamIterators without explicitly specifying + /// the builder type. The concrete builder type is determined by reflection, based + /// on the message type. The reflection step looks for a CreateBuilder method + /// in the message type which is public and static, and uses the return type of that + /// method as the builder type. This will work for all generated messages, whether + /// optimised for size or speed. It won't work for dynamic messages. + /// + /// TODO(jonskeet): This also won't work for non-public protos :( + /// Pass in delegate to create a builder? + /// + public static class MessageStreamIterator { + + public static IEnumerable FromFile(string file) + where TMessage : IMessage { + return FromStreamProvider(() => File.OpenRead(file)); + } + + public static IEnumerable FromStreamProvider(StreamProvider streamProvider) + where TMessage : IMessage { + MethodInfo createBuilderMethod = typeof(TMessage).GetMethod("CreateBuilder", Type.EmptyTypes); + if (createBuilderMethod == null) { + throw new ArgumentException("Message type " + typeof(TMessage).FullName + " has no CreateBuilder method."); + } + if (createBuilderMethod.ReturnType == typeof(void)) { + throw new ArgumentException("CreateBuilder method in " + typeof(TMessage).FullName + " has void return type"); + } + Type builderType = createBuilderMethod.ReturnType; + if (builderType.GetConstructor(Type.EmptyTypes) == null) { + throw new ArgumentException("Builder type " + builderType.FullName + " has no public parameterless constructor."); + } + Type messageInterface = typeof(IMessage<,>).MakeGenericType(typeof(TMessage), builderType); + Type builderInterface = typeof(IBuilder<,>).MakeGenericType(typeof(TMessage), builderType); + if (Array.IndexOf(typeof (TMessage).GetInterfaces(), messageInterface) == -1) { + throw new ArgumentException("Message type " + typeof(TMessage) + " doesn't implement " + messageInterface.FullName); + } + if (Array.IndexOf(builderType.GetInterfaces(), builderInterface) == -1) { + throw new ArgumentException("Builder type " + typeof(TMessage) + " doesn't implement " + builderInterface.FullName); + } + Type iteratorType = typeof(MessageStreamIterator<,>).MakeGenericType(typeof(TMessage), builderType); + MethodInfo factoryMethod = iteratorType.GetMethod("FromStreamProvider", new Type[] { typeof(StreamProvider) }); + return (IEnumerable) factoryMethod.Invoke(null, new object[] { streamProvider }); + } + } + + /// + /// Iterates over data created using a . + /// Unlike MessageStreamWriter, this class is not usually constructed directly with + /// a stream; instead it is provided with a way of opening a stream when iteration + /// is started. The stream is closed when the iteration is completed or the enumerator + /// is disposed. (This occurs naturally when using foreach.) + /// This type is generic in both the message type and the builder type; if only the + /// iteration is required (i.e. just ) then the static + /// generic methods in the nongeneric class are more appropriate. + /// + public sealed class MessageStreamIterator : IEnumerable + where TMessage : IMessage + where TBuilder : IBuilder, new() { + + private readonly StreamProvider streamProvider; + private readonly ExtensionRegistry extensionRegistry; + private static readonly uint ExpectedTag = WireFormat.MakeTag(1, WireFormat.WireType.LengthDelimited); + + private MessageStreamIterator(StreamProvider streamProvider, ExtensionRegistry extensionRegistry) { + this.streamProvider = streamProvider; + this.extensionRegistry = extensionRegistry; + } + + /// + /// Creates an instance which opens the specified file when it begins + /// iterating. No extension registry is used when reading messages. + /// + public static MessageStreamIterator FromFile(string file) { + return new MessageStreamIterator(() => File.OpenRead(file), ExtensionRegistry.Empty); + } + + /// + /// Creates an instance which calls the given delegate when it begins + /// iterating. No extension registry is used when reading messages. + /// + public static MessageStreamIterator FromStreamProvider(StreamProvider streamProvider) { + return new MessageStreamIterator(streamProvider, ExtensionRegistry.Empty); + } + + /// + /// Creates a new instance which uses the same stream provider as this one, + /// but the specified extension registry. + /// + public MessageStreamIterator WithExtensionRegistry(ExtensionRegistry newRegistry) { + return new MessageStreamIterator(streamProvider, newRegistry); + } + + public IEnumerator GetEnumerator() { + using (Stream stream = streamProvider()) { + CodedInputStream input = CodedInputStream.CreateInstance(stream); + uint tag; + while ((tag = input.ReadTag()) != 0) { + if (tag != ExpectedTag) { + throw InvalidProtocolBufferException.InvalidMessageStreamTag(); + } + TBuilder builder = new TBuilder(); + input.ReadMessage(builder, extensionRegistry); + yield return builder.Build(); + } + } + } + + /// + /// Explicit implementation of nongeneric IEnumerable interface. + /// + IEnumerator IEnumerable.GetEnumerator() { + return GetEnumerator(); + } + } +} diff --git a/csharp/ProtocolBuffers/MessageStreamWriter.cs b/csharp/ProtocolBuffers/MessageStreamWriter.cs new file mode 100644 index 00000000..9ff33b05 --- /dev/null +++ b/csharp/ProtocolBuffers/MessageStreamWriter.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; + +namespace Google.ProtocolBuffers { + /// + /// Writes multiple messages to the same stream. Each message is written + /// as if it were an element of a repeated field 1 in a larger protocol buffer. + /// This class takes no ownership of the stream it is given; it never closes the + /// stream. + /// + public sealed class MessageStreamWriter where T : IMessage { + + private readonly CodedOutputStream codedOutput; + + /// + /// Creates an instance which writes to the given stream. + /// + /// Stream to write messages to. + public MessageStreamWriter(Stream output) { + codedOutput = CodedOutputStream.CreateInstance(output); + } + + public void Write(T message) { + codedOutput.WriteMessage(1, message); + } + + public void Flush() { + codedOutput.Flush(); + } + } +} diff --git a/csharp/ProtocolBuffers/ProtocolBuffers.csproj b/csharp/ProtocolBuffers/ProtocolBuffers.csproj index 88a21226..25f7cdbb 100644 --- a/csharp/ProtocolBuffers/ProtocolBuffers.csproj +++ b/csharp/ProtocolBuffers/ProtocolBuffers.csproj @@ -3,7 +3,7 @@ Debug AnyCPU - 9.0.21022 + 9.0.30729 2.0 {6908BDCE-D925-43F3-94AC-A531E6DF2591} Library @@ -41,6 +41,7 @@ + @@ -93,6 +94,8 @@ + + -- cgit v1.2.3