aboutsummaryrefslogtreecommitdiff
path: root/csharp
diff options
context:
space:
mode:
authorJon Skeet <skeet@pobox.com>2008-08-19 21:24:21 +0100
committerJon Skeet <skeet@pobox.com>2008-08-19 21:24:21 +0100
commitad6903fe33ca0a79e7618a25e83de769438d18ce (patch)
treed6fe0b324922129167108298d6c0458607ac030b /csharp
parentf09fed217f86d1fdb2db97631178060d6d50cda1 (diff)
downloadprotobuf-ad6903fe33ca0a79e7618a25e83de769438d18ce.tar.gz
protobuf-ad6903fe33ca0a79e7618a25e83de769438d18ce.tar.bz2
protobuf-ad6903fe33ca0a79e7618a25e83de769438d18ce.zip
Fix to constructor access for nested types, and first pass at streaming.
Diffstat (limited to 'csharp')
-rw-r--r--csharp/ProtocolBuffers.Test/CodedOutputStreamTest.cs8
-rw-r--r--csharp/ProtocolBuffers.Test/MessageStreamIteratorTest.cs23
-rw-r--r--csharp/ProtocolBuffers.Test/MessageStreamWriterTest.cs36
-rw-r--r--csharp/ProtocolBuffers.Test/ProtocolBuffers.Test.csproj6
-rw-r--r--csharp/ProtocolBuffers.Test/TestProtos/MessageWithNoOuter.cs4
-rw-r--r--csharp/ProtocolBuffers.Test/TestProtos/UnitTestEmbedOptimizeForProtoFile.cs2
-rw-r--r--csharp/ProtocolBuffers.Test/TestProtos/UnitTestImportProtoFile.cs2
-rw-r--r--csharp/ProtocolBuffers.Test/TestProtos/UnitTestMessageSetProtoFile.cs12
-rw-r--r--csharp/ProtocolBuffers.Test/TestProtos/UnitTestOptimizeForProtoFile.cs2
-rw-r--r--csharp/ProtocolBuffers.Test/TestProtos/UnitTestProtoFile.cs58
-rw-r--r--csharp/ProtocolBuffers.Test/TestUtil.cs404
-rw-r--r--csharp/ProtocolBuffers/Delegates.cs8
-rw-r--r--csharp/ProtocolBuffers/DescriptorProtos/DescriptorProtoFile.cs32
-rw-r--r--csharp/ProtocolBuffers/FieldAccess/RepeatedMessageAccessor.cs2
-rw-r--r--csharp/ProtocolBuffers/FieldAccess/SingleMessageAccessor.cs4
-rw-r--r--csharp/ProtocolBuffers/InvalidProtocolBufferException.cs5
-rw-r--r--csharp/ProtocolBuffers/MessageStreamIterator.cs124
-rw-r--r--csharp/ProtocolBuffers/MessageStreamWriter.cs33
-rw-r--r--csharp/ProtocolBuffers/ProtocolBuffers.csproj5
19 files changed, 503 insertions, 267 deletions
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));
- }
-
/// <summary>
/// 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<NestedMessage> iterator = MessageStreamIterator.FromStreamProvider<NestedMessage>(() => stream);
+ List<NestedMessage> messages = new List<NestedMessage>(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<NestedMessage> writer = new MessageStreamWriter<NestedMessage>(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 @@
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProductVersion>9.0.21022</ProductVersion>
+ <ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{DD01ED24-3750-4567-9A23-1DB676A15610}</ProjectGuid>
<OutputType>Library</OutputType>
@@ -42,6 +42,8 @@
<HintPath>lib\Rhino.Mocks.dll</HintPath>
</Reference>
<Reference Include="System" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="AbstractMessageTest.cs" />
@@ -51,6 +53,8 @@
<Compile Include="DescriptorsTest.cs" />
<Compile Include="DynamicMessageTest.cs" />
<Compile Include="GeneratedMessageTest.cs" />
+ <Compile Include="MessageStreamIteratorTest.cs" />
+ <Compile Include="MessageStreamWriterTest.cs" />
<Compile Include="MessageTest.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="ReflectionTester.cs" />
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 {
/// <summary>
/// Helper to assert that sequences are equal.
/// </summary>
- public static void AssertEqual<T>(IEnumerable<T> first, IEnumerable<T> second) {
+ internal static void AssertEqual<T>(IEnumerable<T> first, IEnumerable<T> second) {
using (IEnumerator<T> 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));
}
/// <summary>
/// Modifies the repeated extensions of the given message to contain the values
/// expected by AssertRepeatedExtensionsModified.
/// </summary>
- 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.
/// </summary>
- 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 {
+
+ /// <summary>
+ /// Delegate to return a stream when asked, used by MessageStreamIterator.
+ /// </summary>
+ 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<IBuilder> 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 {
/// </summary>
private readonly Func<IBuilder> 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 {
+
+ /// <summary>
+ /// 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 <c>CreateBuilder</c> 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?
+ /// </summary>
+ public static class MessageStreamIterator {
+
+ public static IEnumerable<TMessage> FromFile<TMessage>(string file)
+ where TMessage : IMessage<TMessage> {
+ return FromStreamProvider<TMessage>(() => File.OpenRead(file));
+ }
+
+ public static IEnumerable<TMessage> FromStreamProvider<TMessage>(StreamProvider streamProvider)
+ where TMessage : IMessage<TMessage> {
+ 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<TMessage>) factoryMethod.Invoke(null, new object[] { streamProvider });
+ }
+ }
+
+ /// <summary>
+ /// Iterates over data created using a <see cref="MessageStreamWriter{T}" />.
+ /// 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 <c>foreach</c>.)
+ /// This type is generic in both the message type and the builder type; if only the
+ /// iteration is required (i.e. just <see cref="IEnumerable{T}" />) then the static
+ /// generic methods in the nongeneric class are more appropriate.
+ /// </summary>
+ public sealed class MessageStreamIterator<TMessage, TBuilder> : IEnumerable<TMessage>
+ where TMessage : IMessage<TMessage, TBuilder>
+ where TBuilder : IBuilder<TMessage, TBuilder>, 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;
+ }
+
+ /// <summary>
+ /// Creates an instance which opens the specified file when it begins
+ /// iterating. No extension registry is used when reading messages.
+ /// </summary>
+ public static MessageStreamIterator<TMessage, TBuilder> FromFile(string file) {
+ return new MessageStreamIterator<TMessage, TBuilder>(() => File.OpenRead(file), ExtensionRegistry.Empty);
+ }
+
+ /// <summary>
+ /// Creates an instance which calls the given delegate when it begins
+ /// iterating. No extension registry is used when reading messages.
+ /// </summary>
+ public static MessageStreamIterator<TMessage, TBuilder> FromStreamProvider(StreamProvider streamProvider) {
+ return new MessageStreamIterator<TMessage, TBuilder>(streamProvider, ExtensionRegistry.Empty);
+ }
+
+ /// <summary>
+ /// Creates a new instance which uses the same stream provider as this one,
+ /// but the specified extension registry.
+ /// </summary>
+ public MessageStreamIterator<TMessage, TBuilder> WithExtensionRegistry(ExtensionRegistry newRegistry) {
+ return new MessageStreamIterator<TMessage, TBuilder>(streamProvider, newRegistry);
+ }
+
+ public IEnumerator<TMessage> 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();
+ }
+ }
+ }
+
+ /// <summary>
+ /// Explicit implementation of nongeneric IEnumerable interface.
+ /// </summary>
+ 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 {
+ /// <summary>
+ /// 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.
+ /// </summary>
+ public sealed class MessageStreamWriter<T> where T : IMessage<T> {
+
+ private readonly CodedOutputStream codedOutput;
+
+ /// <summary>
+ /// Creates an instance which writes to the given stream.
+ /// </summary>
+ /// <param name="output">Stream to write messages to.</param>
+ 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 @@
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProductVersion>9.0.21022</ProductVersion>
+ <ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</ProjectGuid>
<OutputType>Library</OutputType>
@@ -41,6 +41,7 @@
<Compile Include="AbstractBuilder.cs" />
<Compile Include="AbstractMessage.cs" />
<Compile Include="ByteString.cs" />
+ <Compile Include="Delegates.cs" />
<Compile Include="CodedInputStream.cs" />
<Compile Include="CodedOutputStream.cs" />
<Compile Include="Collections\Dictionaries.cs" />
@@ -93,6 +94,8 @@
<Compile Include="IRpcChannel.cs" />
<Compile Include="IRpcController.cs" />
<Compile Include="IService.cs" />
+ <Compile Include="MessageStreamIterator.cs" />
+ <Compile Include="MessageStreamWriter.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="RpcUtil.cs" />
<Compile Include="TextFormat.cs" />