Reorganize some tests
This commit is contained in:
parent
bf4f6c5431
commit
6b90ac13e0
268
csharp/src/Google.Protobuf.Test/GeneratedMessageTest.Proto2.cs
Normal file
268
csharp/src/Google.Protobuf.Test/GeneratedMessageTest.Proto2.cs
Normal file
@ -0,0 +1,268 @@
|
||||
using Google.Protobuf.TestProtos.Proto2;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace Google.Protobuf
|
||||
{
|
||||
/// <summary>
|
||||
/// Tests around the generated TestAllTypes message in unittest.proto
|
||||
/// </summary>
|
||||
public partial class GeneratedMessageTest
|
||||
{
|
||||
[Test]
|
||||
public void DefaultProto2Values()
|
||||
{
|
||||
var message = new TestAllTypes();
|
||||
Assert.AreEqual(false, message.OptionalBool);
|
||||
Assert.AreEqual(ByteString.Empty, message.OptionalBytes);
|
||||
Assert.AreEqual(0.0, message.OptionalDouble);
|
||||
Assert.AreEqual(0, message.OptionalFixed32);
|
||||
Assert.AreEqual(0L, message.OptionalFixed64);
|
||||
Assert.AreEqual(0.0f, message.OptionalFloat);
|
||||
Assert.AreEqual(ForeignEnum.ForeignFoo, message.OptionalForeignEnum);
|
||||
Assert.IsNull(message.OptionalForeignMessage);
|
||||
Assert.AreEqual(ImportEnum.ImportFoo, message.OptionalImportEnum);
|
||||
Assert.IsNull(message.OptionalImportMessage);
|
||||
Assert.AreEqual(0, message.OptionalInt32);
|
||||
Assert.AreEqual(0L, message.OptionalInt64);
|
||||
Assert.AreEqual(TestAllTypes.Types.NestedEnum.Foo, message.OptionalNestedEnum);
|
||||
Assert.IsNull(message.OptionalNestedMessage);
|
||||
Assert.IsNull(message.OptionalPublicImportMessage);
|
||||
Assert.AreEqual(0, message.OptionalSfixed32);
|
||||
Assert.AreEqual(0L, message.OptionalSfixed64);
|
||||
Assert.AreEqual(0, message.OptionalSint32);
|
||||
Assert.AreEqual(0L, message.OptionalSint64);
|
||||
Assert.AreEqual("", message.OptionalString);
|
||||
Assert.AreEqual(0U, message.OptionalUint32);
|
||||
Assert.AreEqual(0UL, message.OptionalUint64);
|
||||
|
||||
// Repeated fields
|
||||
Assert.AreEqual(0, message.RepeatedBool.Count);
|
||||
Assert.AreEqual(0, message.RepeatedBytes.Count);
|
||||
Assert.AreEqual(0, message.RepeatedDouble.Count);
|
||||
Assert.AreEqual(0, message.RepeatedFixed32.Count);
|
||||
Assert.AreEqual(0, message.RepeatedFixed64.Count);
|
||||
Assert.AreEqual(0, message.RepeatedFloat.Count);
|
||||
Assert.AreEqual(0, message.RepeatedForeignEnum.Count);
|
||||
Assert.AreEqual(0, message.RepeatedForeignMessage.Count);
|
||||
Assert.AreEqual(0, message.RepeatedImportEnum.Count);
|
||||
Assert.AreEqual(0, message.RepeatedImportMessage.Count);
|
||||
Assert.AreEqual(0, message.RepeatedNestedEnum.Count);
|
||||
Assert.AreEqual(0, message.RepeatedNestedMessage.Count);
|
||||
Assert.AreEqual(0, message.RepeatedSfixed32.Count);
|
||||
Assert.AreEqual(0, message.RepeatedSfixed64.Count);
|
||||
Assert.AreEqual(0, message.RepeatedSint32.Count);
|
||||
Assert.AreEqual(0, message.RepeatedSint64.Count);
|
||||
Assert.AreEqual(0, message.RepeatedString.Count);
|
||||
Assert.AreEqual(0, message.RepeatedUint32.Count);
|
||||
Assert.AreEqual(0, message.RepeatedUint64.Count);
|
||||
|
||||
// Oneof fields
|
||||
Assert.AreEqual(TestAllTypes.OneofFieldOneofCase.None, message.OneofFieldCase);
|
||||
Assert.AreEqual(0, message.OneofUint32);
|
||||
Assert.AreEqual("", message.OneofString);
|
||||
Assert.AreEqual(ByteString.Empty, message.OneofBytes);
|
||||
Assert.IsNull(message.OneofNestedMessage);
|
||||
|
||||
Assert.AreEqual(true, message.DefaultBool);
|
||||
Assert.AreEqual(ByteString.CopyFromUtf8("world"), message.DefaultBytes);
|
||||
Assert.AreEqual("123", message.DefaultCord);
|
||||
Assert.AreEqual(52e3, message.DefaultDouble);
|
||||
Assert.AreEqual(47, message.DefaultFixed32);
|
||||
Assert.AreEqual(48, message.DefaultFixed64);
|
||||
Assert.AreEqual(51.5, message.DefaultFloat);
|
||||
Assert.AreEqual(ForeignEnum.ForeignBar, message.DefaultForeignEnum);
|
||||
Assert.AreEqual(ImportEnum.ImportBar, message.DefaultImportEnum);
|
||||
Assert.AreEqual(41, message.DefaultInt32);
|
||||
Assert.AreEqual(42, message.DefaultInt64);
|
||||
Assert.AreEqual(TestAllTypes.Types.NestedEnum.Bar, message.DefaultNestedEnum);
|
||||
Assert.AreEqual(49, message.DefaultSfixed32);
|
||||
Assert.AreEqual(-50, message.DefaultSfixed64);
|
||||
Assert.AreEqual(-45, message.DefaultSint32);
|
||||
Assert.AreEqual(46, message.DefaultSint64);
|
||||
Assert.AreEqual("hello", message.DefaultString);
|
||||
Assert.AreEqual("abc", message.DefaultStringPiece);
|
||||
Assert.AreEqual(43, message.DefaultUint32);
|
||||
Assert.AreEqual(44, message.DefaultUint64);
|
||||
|
||||
Assert.False(message.HasDefaultBool);
|
||||
Assert.False(message.HasDefaultBytes);
|
||||
Assert.False(message.HasDefaultCord);
|
||||
Assert.False(message.HasDefaultDouble);
|
||||
Assert.False(message.HasDefaultFixed32);
|
||||
Assert.False(message.HasDefaultFixed64);
|
||||
Assert.False(message.HasDefaultFloat);
|
||||
Assert.False(message.HasDefaultForeignEnum);
|
||||
Assert.False(message.HasDefaultImportEnum);
|
||||
Assert.False(message.HasDefaultInt32);
|
||||
Assert.False(message.HasDefaultInt64);
|
||||
Assert.False(message.HasDefaultNestedEnum);
|
||||
Assert.False(message.HasDefaultSfixed32);
|
||||
Assert.False(message.HasDefaultSfixed64);
|
||||
Assert.False(message.HasDefaultSint32);
|
||||
Assert.False(message.HasDefaultSint64);
|
||||
Assert.False(message.HasDefaultString);
|
||||
Assert.False(message.HasDefaultStringPiece);
|
||||
Assert.False(message.HasDefaultUint32);
|
||||
Assert.False(message.HasDefaultUint64);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void FieldPresence()
|
||||
{
|
||||
var message = new TestAllTypes();
|
||||
|
||||
Assert.False(message.HasOptionalBool);
|
||||
Assert.False(message.OptionalBool);
|
||||
|
||||
message.OptionalBool = true;
|
||||
|
||||
Assert.True(message.HasOptionalBool);
|
||||
Assert.True(message.OptionalBool);
|
||||
|
||||
message.OptionalBool = false;
|
||||
|
||||
Assert.True(message.HasOptionalBool);
|
||||
Assert.False(message.OptionalBool);
|
||||
|
||||
message.ClearOptionalBool();
|
||||
|
||||
Assert.False(message.HasOptionalBool);
|
||||
Assert.False(message.OptionalBool);
|
||||
|
||||
Assert.False(message.HasDefaultBool);
|
||||
Assert.True(message.DefaultBool);
|
||||
|
||||
message.DefaultBool = false;
|
||||
|
||||
Assert.True(message.HasDefaultBool);
|
||||
Assert.False(message.DefaultBool);
|
||||
|
||||
message.DefaultBool = true;
|
||||
|
||||
Assert.True(message.HasDefaultBool);
|
||||
Assert.True(message.DefaultBool);
|
||||
|
||||
message.ClearDefaultBool();
|
||||
|
||||
Assert.False(message.HasDefaultBool);
|
||||
Assert.True(message.DefaultBool);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void RequiredFields()
|
||||
{
|
||||
var message = new TestRequired();
|
||||
Assert.False(message.IsInitialized());
|
||||
|
||||
message.A = 1;
|
||||
message.B = 2;
|
||||
message.C = 3;
|
||||
|
||||
Assert.True(message.IsInitialized());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void RequiredFieldsInExtensions()
|
||||
{
|
||||
var message = new TestAllExtensions();
|
||||
Assert.True(message.IsInitialized());
|
||||
|
||||
message.SetExtension(TestRequired.Extensions.Single, new TestRequired());
|
||||
|
||||
Assert.False(message.IsInitialized());
|
||||
|
||||
var extensionMessage = message.GetExtension(TestRequired.Extensions.Single);
|
||||
extensionMessage.A = 1;
|
||||
extensionMessage.B = 2;
|
||||
extensionMessage.C = 3;
|
||||
|
||||
Assert.True(message.IsInitialized());
|
||||
|
||||
message.GetOrRegisterExtension(TestRequired.Extensions.Multi);
|
||||
|
||||
Assert.True(message.IsInitialized());
|
||||
|
||||
message.GetExtension(TestRequired.Extensions.Multi).Add(new TestRequired());
|
||||
|
||||
Assert.False(message.IsInitialized());
|
||||
|
||||
extensionMessage = message.GetExtension(TestRequired.Extensions.Multi)[0];
|
||||
extensionMessage.A = 1;
|
||||
extensionMessage.B = 2;
|
||||
extensionMessage.C = 3;
|
||||
|
||||
Assert.True(message.IsInitialized());
|
||||
|
||||
message.SetExtension(UnittestExtensions.OptionalBoolExtension, true);
|
||||
|
||||
Assert.True(message.IsInitialized());
|
||||
|
||||
message.GetOrRegisterExtension(UnittestExtensions.RepeatedBoolExtension).Add(true);
|
||||
|
||||
Assert.True(message.IsInitialized());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void RequiredFieldInNestedMessageMapValue()
|
||||
{
|
||||
var message = new TestRequiredMap();
|
||||
message.Foo.Add(0, new TestRequiredMap.Types.NestedMessage());
|
||||
|
||||
Assert.False(message.IsInitialized());
|
||||
|
||||
message.Foo[0].RequiredInt32 = 12;
|
||||
|
||||
Assert.True(message.IsInitialized());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void RoundTrip_Groups()
|
||||
{
|
||||
var message = new TestAllTypes
|
||||
{
|
||||
OptionalGroup = new TestAllTypes.Types.OptionalGroup
|
||||
{
|
||||
A = 10
|
||||
},
|
||||
RepeatedGroup =
|
||||
{
|
||||
new TestAllTypes.Types.RepeatedGroup { A = 10 },
|
||||
new TestAllTypes.Types.RepeatedGroup { A = 20 },
|
||||
new TestAllTypes.Types.RepeatedGroup { A = 30 }
|
||||
}
|
||||
};
|
||||
|
||||
byte[] bytes = message.ToByteArray();
|
||||
TestAllTypes parsed = TestAllTypes.Parser.ParseFrom(bytes);
|
||||
Assert.AreEqual(message, parsed);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void RoundTrip_ExtensionGroups()
|
||||
{
|
||||
var message = new TestAllExtensions();
|
||||
message.SetExtension(UnittestExtensions.OptionalGroupExtension, new OptionalGroup_extension { A = 10 });
|
||||
message.GetOrRegisterExtension(UnittestExtensions.RepeatedGroupExtension).AddRange(new[]
|
||||
{
|
||||
new RepeatedGroup_extension { A = 10 },
|
||||
new RepeatedGroup_extension { A = 20 },
|
||||
new RepeatedGroup_extension { A = 30 }
|
||||
});
|
||||
|
||||
byte[] bytes = message.ToByteArray();
|
||||
TestAllExtensions extendable_parsed = TestAllExtensions.Parser.WithExtensionRegistry(new ExtensionRegistry() { UnittestExtensions.OptionalGroupExtension, UnittestExtensions.RepeatedGroupExtension }).ParseFrom(bytes);
|
||||
Assert.AreEqual(message, extendable_parsed);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void RoundTrip_NestedExtensionGroup()
|
||||
{
|
||||
var message = new TestGroupExtension();
|
||||
message.SetExtension(TestNestedExtension.Extensions.OptionalGroupExtension, new TestNestedExtension.Types.OptionalGroup_extension { A = 10 });
|
||||
|
||||
byte[] bytes = message.ToByteArray();
|
||||
TestGroupExtension extendable_parsed = TestGroupExtension.Parser.WithExtensionRegistry(new ExtensionRegistry() { TestNestedExtension.Extensions.OptionalGroupExtension }).ParseFrom(bytes);
|
||||
Assert.AreEqual(message, extendable_parsed);
|
||||
}
|
||||
}
|
||||
}
|
@ -45,7 +45,7 @@ namespace Google.Protobuf
|
||||
/// <summary>
|
||||
/// Tests around the generated TestAllTypes message.
|
||||
/// </summary>
|
||||
public class GeneratedMessageTest
|
||||
public partial class GeneratedMessageTest
|
||||
{
|
||||
[Test]
|
||||
public void EmptyMessageFieldDistinctFromMissingMessageField()
|
||||
@ -112,50 +112,6 @@ namespace Google.Protobuf
|
||||
Assert.AreEqual("", message.OneofString);
|
||||
Assert.AreEqual(ByteString.Empty, message.OneofBytes);
|
||||
Assert.IsNull(message.OneofNestedMessage);
|
||||
|
||||
// proto2 default values
|
||||
var message2 = new Proto2.TestAllTypes();
|
||||
Assert.AreEqual(true, message2.DefaultBool);
|
||||
Assert.AreEqual(ByteString.CopyFromUtf8("world"), message2.DefaultBytes);
|
||||
Assert.AreEqual("123", message2.DefaultCord);
|
||||
Assert.AreEqual(52e3, message2.DefaultDouble);
|
||||
Assert.AreEqual(47, message2.DefaultFixed32);
|
||||
Assert.AreEqual(48, message2.DefaultFixed64);
|
||||
Assert.AreEqual(51.5, message2.DefaultFloat);
|
||||
Assert.AreEqual(Proto2.ForeignEnum.ForeignBar, message2.DefaultForeignEnum);
|
||||
Assert.AreEqual(Proto2.ImportEnum.ImportBar, message2.DefaultImportEnum);
|
||||
Assert.AreEqual(41, message2.DefaultInt32);
|
||||
Assert.AreEqual(42, message2.DefaultInt64);
|
||||
Assert.AreEqual(Proto2.TestAllTypes.Types.NestedEnum.Bar, message2.DefaultNestedEnum);
|
||||
Assert.AreEqual(49, message2.DefaultSfixed32);
|
||||
Assert.AreEqual(-50, message2.DefaultSfixed64);
|
||||
Assert.AreEqual(-45, message2.DefaultSint32);
|
||||
Assert.AreEqual(46, message2.DefaultSint64);
|
||||
Assert.AreEqual("hello", message2.DefaultString);
|
||||
Assert.AreEqual("abc", message2.DefaultStringPiece);
|
||||
Assert.AreEqual(43, message2.DefaultUint32);
|
||||
Assert.AreEqual(44, message2.DefaultUint64);
|
||||
|
||||
Assert.False(message2.HasDefaultBool);
|
||||
Assert.False(message2.HasDefaultBytes);
|
||||
Assert.False(message2.HasDefaultCord);
|
||||
Assert.False(message2.HasDefaultDouble);
|
||||
Assert.False(message2.HasDefaultFixed32);
|
||||
Assert.False(message2.HasDefaultFixed64);
|
||||
Assert.False(message2.HasDefaultFloat);
|
||||
Assert.False(message2.HasDefaultForeignEnum);
|
||||
Assert.False(message2.HasDefaultImportEnum);
|
||||
Assert.False(message2.HasDefaultInt32);
|
||||
Assert.False(message2.HasDefaultInt64);
|
||||
Assert.False(message2.HasDefaultNestedEnum);
|
||||
Assert.False(message2.HasDefaultSfixed32);
|
||||
Assert.False(message2.HasDefaultSfixed64);
|
||||
Assert.False(message2.HasDefaultSint32);
|
||||
Assert.False(message2.HasDefaultSint64);
|
||||
Assert.False(message2.HasDefaultString);
|
||||
Assert.False(message2.HasDefaultStringPiece);
|
||||
Assert.False(message2.HasDefaultUint32);
|
||||
Assert.False(message2.HasDefaultUint64);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@ -168,115 +124,6 @@ namespace Google.Protobuf
|
||||
Assert.Throws<ArgumentNullException>(() => message.OneofBytes = null);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void FieldPresence()
|
||||
{
|
||||
var message = new Proto2.TestAllTypes();
|
||||
|
||||
Assert.False(message.HasOptionalBool);
|
||||
Assert.False(message.OptionalBool);
|
||||
|
||||
message.OptionalBool = true;
|
||||
|
||||
Assert.True(message.HasOptionalBool);
|
||||
Assert.True(message.OptionalBool);
|
||||
|
||||
message.OptionalBool = false;
|
||||
|
||||
Assert.True(message.HasOptionalBool);
|
||||
Assert.False(message.OptionalBool);
|
||||
|
||||
message.ClearOptionalBool();
|
||||
|
||||
Assert.False(message.HasOptionalBool);
|
||||
Assert.False(message.OptionalBool);
|
||||
|
||||
Assert.False(message.HasDefaultBool);
|
||||
Assert.True(message.DefaultBool);
|
||||
|
||||
message.DefaultBool = false;
|
||||
|
||||
Assert.True(message.HasDefaultBool);
|
||||
Assert.False(message.DefaultBool);
|
||||
|
||||
message.DefaultBool = true;
|
||||
|
||||
Assert.True(message.HasDefaultBool);
|
||||
Assert.True(message.DefaultBool);
|
||||
|
||||
message.ClearDefaultBool();
|
||||
|
||||
Assert.False(message.HasDefaultBool);
|
||||
Assert.True(message.DefaultBool);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void RequiredFields()
|
||||
{
|
||||
var message = new Proto2.TestRequired();
|
||||
Assert.False(message.IsInitialized());
|
||||
|
||||
message.A = 1;
|
||||
message.B = 2;
|
||||
message.C = 3;
|
||||
|
||||
Assert.True(message.IsInitialized());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void RequiredFieldsInExtensions()
|
||||
{
|
||||
var message = new Proto2.TestAllExtensions();
|
||||
Assert.True(message.IsInitialized());
|
||||
|
||||
message.SetExtension(Proto2.TestRequired.Extensions.Single, new Proto2.TestRequired());
|
||||
|
||||
Assert.False(message.IsInitialized());
|
||||
|
||||
var extensionMessage = message.GetExtension(Proto2.TestRequired.Extensions.Single);
|
||||
extensionMessage.A = 1;
|
||||
extensionMessage.B = 2;
|
||||
extensionMessage.C = 3;
|
||||
|
||||
Assert.True(message.IsInitialized());
|
||||
|
||||
message.GetOrRegisterExtension(Proto2.TestRequired.Extensions.Multi);
|
||||
|
||||
Assert.True(message.IsInitialized());
|
||||
|
||||
message.GetExtension(Proto2.TestRequired.Extensions.Multi).Add(new Proto2.TestRequired());
|
||||
|
||||
Assert.False(message.IsInitialized());
|
||||
|
||||
extensionMessage = message.GetExtension(Proto2.TestRequired.Extensions.Multi)[0];
|
||||
extensionMessage.A = 1;
|
||||
extensionMessage.B = 2;
|
||||
extensionMessage.C = 3;
|
||||
|
||||
Assert.True(message.IsInitialized());
|
||||
|
||||
message.SetExtension(Proto2.UnittestExtensions.OptionalBoolExtension, true);
|
||||
|
||||
Assert.True(message.IsInitialized());
|
||||
|
||||
message.GetOrRegisterExtension(Proto2.UnittestExtensions.RepeatedBoolExtension).Add(true);
|
||||
|
||||
Assert.True(message.IsInitialized());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void RequiredFieldInNestedMessageMapValue()
|
||||
{
|
||||
var message = new Proto2.TestRequiredMap();
|
||||
message.Foo.Add(0, new Proto2.TestRequiredMap.Types.NestedMessage());
|
||||
|
||||
Assert.False(message.IsInitialized());
|
||||
|
||||
message.Foo[0].RequiredInt32 = 12;
|
||||
|
||||
Assert.True(message.IsInitialized());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void RoundTrip_Empty()
|
||||
{
|
||||
@ -356,56 +203,6 @@ namespace Google.Protobuf
|
||||
Assert.AreEqual(message, parsed);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void RoundTrip_Groups()
|
||||
{
|
||||
var message = new Proto2.TestAllTypes
|
||||
{
|
||||
OptionalGroup = new Proto2.TestAllTypes.Types.OptionalGroup
|
||||
{
|
||||
A = 10
|
||||
},
|
||||
RepeatedGroup =
|
||||
{
|
||||
new Proto2.TestAllTypes.Types.RepeatedGroup { A = 10 },
|
||||
new Proto2.TestAllTypes.Types.RepeatedGroup { A = 20 },
|
||||
new Proto2.TestAllTypes.Types.RepeatedGroup { A = 30 }
|
||||
}
|
||||
};
|
||||
|
||||
byte[] bytes = message.ToByteArray();
|
||||
Proto2.TestAllTypes parsed = Proto2.TestAllTypes.Parser.ParseFrom(bytes);
|
||||
Assert.AreEqual(message, parsed);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void RoundTrip_ExtensionGroups()
|
||||
{
|
||||
var message = new Proto2.TestAllExtensions();
|
||||
message.SetExtension(Proto2.UnittestExtensions.OptionalGroupExtension, new Proto2.OptionalGroup_extension { A = 10 });
|
||||
message.GetOrRegisterExtension(Proto2.UnittestExtensions.RepeatedGroupExtension).AddRange(new[]
|
||||
{
|
||||
new Proto2.RepeatedGroup_extension { A = 10 },
|
||||
new Proto2.RepeatedGroup_extension { A = 20 },
|
||||
new Proto2.RepeatedGroup_extension { A = 30 }
|
||||
});
|
||||
|
||||
byte[] bytes = message.ToByteArray();
|
||||
Proto2.TestAllExtensions extendable_parsed = Proto2.TestAllExtensions.Parser.WithExtensionRegistry(new ExtensionRegistry() { Proto2.UnittestExtensions.OptionalGroupExtension, Proto2.UnittestExtensions.RepeatedGroupExtension }).ParseFrom(bytes);
|
||||
Assert.AreEqual(message, extendable_parsed);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void RoundTrip_NestedExtensionGroup()
|
||||
{
|
||||
var message = new Proto2.TestGroupExtension();
|
||||
message.SetExtension(Proto2.TestNestedExtension.Extensions.OptionalGroupExtension, new Proto2.TestNestedExtension.Types.OptionalGroup_extension { A = 10 });
|
||||
|
||||
byte[] bytes = message.ToByteArray();
|
||||
Proto2.TestGroupExtension extendable_parsed = Proto2.TestGroupExtension.Parser.WithExtensionRegistry(new ExtensionRegistry() { Proto2.TestNestedExtension.Extensions.OptionalGroupExtension }).ParseFrom(bytes);
|
||||
Assert.AreEqual(message, extendable_parsed);
|
||||
}
|
||||
|
||||
// Note that not every map within map_unittest_proto3 is used. They all go through very
|
||||
// similar code paths. The fact that all maps are present is validation that we have codecs
|
||||
// for every type.
|
||||
|
@ -73,8 +73,8 @@ namespace Google.Protobuf.Test.Reflection
|
||||
[Test]
|
||||
public void ScalarOptions()
|
||||
{
|
||||
var options = CustomOptionOtherValues.Descriptor.CustomOptions;
|
||||
var d = CustomOptionOtherValues.Descriptor;
|
||||
var options = d.CustomOptions;
|
||||
AssertOption(-100, options.TryGetInt32, Int32Opt, d.GetOption);
|
||||
AssertOption(12.3456789f, options.TryGetFloat, FloatOpt, d.GetOption);
|
||||
AssertOption(1.234567890123456789d, options.TryGetDouble, DoubleOpt, d.GetOption);
|
||||
@ -86,8 +86,9 @@ namespace Google.Protobuf.Test.Reflection
|
||||
[Test]
|
||||
public void MessageOptions()
|
||||
{
|
||||
var options = VariousComplexOptions.Descriptor.CustomOptions;
|
||||
AssertOption(new ComplexOptionType1 { Foo = 42, Foo4 = { 99, 88 } }, options.TryGetMessage, ComplexOpt1, VariousComplexOptions.Descriptor.GetOption);
|
||||
var d = VariousComplexOptions.Descriptor;
|
||||
var options = d.CustomOptions;
|
||||
AssertOption(new ComplexOptionType1 { Foo = 42, Foo4 = { 99, 88 } }, options.TryGetMessage, ComplexOpt1, d.GetOption);
|
||||
AssertOption(new ComplexOptionType2
|
||||
{
|
||||
Baz = 987,
|
||||
@ -95,8 +96,8 @@ namespace Google.Protobuf.Test.Reflection
|
||||
Fred = new ComplexOptionType4 { Waldo = 321 },
|
||||
Barney = { new ComplexOptionType4 { Waldo = 101 }, new ComplexOptionType4 { Waldo = 212 } }
|
||||
},
|
||||
options.TryGetMessage, ComplexOpt2, VariousComplexOptions.Descriptor.GetOption);
|
||||
AssertOption(new ComplexOptionType3 { Qux = 9 }, options.TryGetMessage, ComplexOpt3, VariousComplexOptions.Descriptor.GetOption);
|
||||
options.TryGetMessage, ComplexOpt2, d.GetOption);
|
||||
AssertOption(new ComplexOptionType3 { Qux = 9 }, options.TryGetMessage, ComplexOpt3, d.GetOption);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@ -132,8 +133,8 @@ namespace Google.Protobuf.Test.Reflection
|
||||
[Test]
|
||||
public void MinValues()
|
||||
{
|
||||
var options = CustomOptionMinIntegerValues.Descriptor.CustomOptions;
|
||||
var d = CustomOptionMinIntegerValues.Descriptor;
|
||||
var options = d.CustomOptions;
|
||||
AssertOption(false, options.TryGetBool, BoolOpt, d.GetOption);
|
||||
AssertOption(int.MinValue, options.TryGetInt32, Int32Opt, d.GetOption);
|
||||
AssertOption(long.MinValue, options.TryGetInt64, Int64Opt, d.GetOption);
|
||||
@ -150,8 +151,8 @@ namespace Google.Protobuf.Test.Reflection
|
||||
[Test]
|
||||
public void MaxValues()
|
||||
{
|
||||
var options = CustomOptionMaxIntegerValues.Descriptor.CustomOptions;
|
||||
var d = CustomOptionMaxIntegerValues.Descriptor;
|
||||
var options = d.CustomOptions;
|
||||
AssertOption(true, options.TryGetBool, BoolOpt, d.GetOption);
|
||||
AssertOption(int.MaxValue, options.TryGetInt32, Int32Opt, d.GetOption);
|
||||
AssertOption(long.MaxValue, options.TryGetInt64, Int64Opt, d.GetOption);
|
||||
|
@ -86,31 +86,112 @@ namespace Google.Protobuf.Reflection
|
||||
var dictionary = (IDictionary) fields[TestMap.MapStringStringFieldNumber].Accessor.GetValue(mapMessage);
|
||||
Assert.AreEqual(mapMessage.MapStringString, dictionary);
|
||||
Assert.AreEqual("value1", dictionary["key1"]);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void GetValue_IncorrectType()
|
||||
{
|
||||
IMessage message = SampleMessages.CreateFullTestAllTypes();
|
||||
var fields = message.Descriptor.Fields;
|
||||
Assert.Throws<InvalidCastException>(() => fields[TestProtos.TestAllTypes.SingleBoolFieldNumber].Accessor.GetValue(new TestMap()));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void GetExtensionValue()
|
||||
public void HasValue_Proto3()
|
||||
{
|
||||
var message = SampleMessages.CreateFullTestAllExtensions();
|
||||
|
||||
// test that the reflector works, since the reflector just runs through IExtendableMessage
|
||||
Assert.AreEqual(message.GetExtension(OptionalBoolExtension), Proto2.TestAllExtensions.Descriptor.FindFieldByNumber(OptionalBoolExtension.FieldNumber).Accessor.GetValue(message));
|
||||
IMessage message = SampleMessages.CreateFullTestAllTypes();
|
||||
var fields = message.Descriptor.Fields;
|
||||
Assert.Throws<InvalidOperationException>(() => fields[TestProtos.TestAllTypes.SingleBoolFieldNumber].Accessor.HasValue(message));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void GetRepeatedExtensionValue()
|
||||
public void HasValue()
|
||||
{
|
||||
// check to make sure repeated accessor uses GetOrRegister
|
||||
var message = new Proto2.TestAllExtensions();
|
||||
IMessage message = new Proto2.TestAllTypes();
|
||||
var fields = message.Descriptor.Fields;
|
||||
var accessor = fields[Proto2.TestAllTypes.OptionalBoolFieldNumber].Accessor;
|
||||
|
||||
Assert.IsNull(message.GetExtension(RepeatedBoolExtension));
|
||||
Assert.IsNotNull(Proto2.TestAllExtensions.Descriptor.FindFieldByNumber(RepeatedBoolExtension.FieldNumber).Accessor.GetValue(message));
|
||||
Assert.IsNotNull(message.GetExtension(RepeatedBoolExtension));
|
||||
Assert.False(accessor.HasValue(message));
|
||||
|
||||
message.ClearExtension(RepeatedBoolExtension);
|
||||
Assert.IsNull(message.GetExtension(RepeatedBoolExtension));
|
||||
accessor.SetValue(message, true);
|
||||
Assert.True(accessor.HasValue(message));
|
||||
|
||||
accessor.Clear(message);
|
||||
Assert.False(accessor.HasValue(message));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SetValue_SingleFields()
|
||||
{
|
||||
// Just a sample (primitives, messages, enums, strings, byte strings)
|
||||
var message = SampleMessages.CreateFullTestAllTypes();
|
||||
var fields = TestProtos.TestAllTypes.Descriptor.Fields;
|
||||
fields[TestProtos.TestAllTypes.SingleBoolFieldNumber].Accessor.SetValue(message, false);
|
||||
fields[TestProtos.TestAllTypes.SingleInt32FieldNumber].Accessor.SetValue(message, 500);
|
||||
fields[TestProtos.TestAllTypes.SingleStringFieldNumber].Accessor.SetValue(message, "It's a string");
|
||||
fields[TestProtos.TestAllTypes.SingleBytesFieldNumber].Accessor.SetValue(message, ByteString.CopyFrom(99, 98, 97));
|
||||
fields[TestProtos.TestAllTypes.SingleForeignEnumFieldNumber].Accessor.SetValue(message, ForeignEnum.ForeignFoo);
|
||||
fields[TestProtos.TestAllTypes.SingleForeignMessageFieldNumber].Accessor.SetValue(message, new ForeignMessage { C = 12345 });
|
||||
fields[TestProtos.TestAllTypes.SingleDoubleFieldNumber].Accessor.SetValue(message, 20150701.5);
|
||||
|
||||
var expected = new TestAllTypes(SampleMessages.CreateFullTestAllTypes())
|
||||
{
|
||||
SingleBool = false,
|
||||
SingleInt32 = 500,
|
||||
SingleString = "It's a string",
|
||||
SingleBytes = ByteString.CopyFrom(99, 98, 97),
|
||||
SingleForeignEnum = ForeignEnum.ForeignFoo,
|
||||
SingleForeignMessage = new ForeignMessage { C = 12345 },
|
||||
SingleDouble = 20150701.5
|
||||
};
|
||||
|
||||
Assert.AreEqual(expected, message);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SetValue_SingleFields_WrongType()
|
||||
{
|
||||
IMessage message = SampleMessages.CreateFullTestAllTypes();
|
||||
var fields = message.Descriptor.Fields;
|
||||
Assert.Throws<InvalidCastException>(() => fields[TestProtos.TestAllTypes.SingleBoolFieldNumber].Accessor.SetValue(message, "This isn't a bool"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SetValue_MapFields()
|
||||
{
|
||||
IMessage message = new TestMap();
|
||||
var fields = message.Descriptor.Fields;
|
||||
Assert.Throws<InvalidOperationException>(() => fields[TestMap.MapStringStringFieldNumber].Accessor.SetValue(message, new Dictionary<string, string>()));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SetValue_RepeatedFields()
|
||||
{
|
||||
IMessage message = SampleMessages.CreateFullTestAllTypes();
|
||||
var fields = message.Descriptor.Fields;
|
||||
Assert.Throws<InvalidOperationException>(() => fields[TestProtos.TestAllTypes.RepeatedDoubleFieldNumber].Accessor.SetValue(message, new double[10]));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Oneof()
|
||||
{
|
||||
var message = new TestAllTypes();
|
||||
var descriptor = TestProtos.TestAllTypes.Descriptor;
|
||||
Assert.AreEqual(1, descriptor.Oneofs.Count);
|
||||
var oneof = descriptor.Oneofs[0];
|
||||
Assert.AreEqual("oneof_field", oneof.Name);
|
||||
Assert.IsNull(oneof.Accessor.GetCaseFieldDescriptor(message));
|
||||
|
||||
message.OneofString = "foo";
|
||||
Assert.AreSame(descriptor.Fields[TestProtos.TestAllTypes.OneofStringFieldNumber], oneof.Accessor.GetCaseFieldDescriptor(message));
|
||||
|
||||
message.OneofUint32 = 10;
|
||||
Assert.AreSame(descriptor.Fields[TestProtos.TestAllTypes.OneofUint32FieldNumber], oneof.Accessor.GetCaseFieldDescriptor(message));
|
||||
|
||||
oneof.Accessor.Clear(message);
|
||||
Assert.AreEqual(TestProtos.TestAllTypes.OneofFieldOneofCase.None, message.OneofFieldCase);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Clear()
|
||||
{
|
||||
@ -144,86 +225,6 @@ namespace Google.Protobuf.Reflection
|
||||
Assert.AreEqual(0, mapMessage.MapStringString.Count);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SetValue_SingleFields()
|
||||
{
|
||||
// Just a sample (primitives, messages, enums, strings, byte strings)
|
||||
var message = SampleMessages.CreateFullTestAllTypes();
|
||||
var fields = TestProtos.TestAllTypes.Descriptor.Fields;
|
||||
fields[TestProtos.TestAllTypes.SingleBoolFieldNumber].Accessor.SetValue(message, false);
|
||||
fields[TestProtos.TestAllTypes.SingleInt32FieldNumber].Accessor.SetValue(message, 500);
|
||||
fields[TestProtos.TestAllTypes.SingleStringFieldNumber].Accessor.SetValue(message, "It's a string");
|
||||
fields[TestProtos.TestAllTypes.SingleBytesFieldNumber].Accessor.SetValue(message, ByteString.CopyFrom(99, 98, 97));
|
||||
fields[TestProtos.TestAllTypes.SingleForeignEnumFieldNumber].Accessor.SetValue(message, ForeignEnum.ForeignFoo);
|
||||
fields[TestProtos.TestAllTypes.SingleForeignMessageFieldNumber].Accessor.SetValue(message, new ForeignMessage { C = 12345 });
|
||||
fields[TestProtos.TestAllTypes.SingleDoubleFieldNumber].Accessor.SetValue(message, 20150701.5);
|
||||
|
||||
var expected = new TestAllTypes(SampleMessages.CreateFullTestAllTypes())
|
||||
{
|
||||
SingleBool = false,
|
||||
SingleInt32 = 500,
|
||||
SingleString = "It's a string",
|
||||
SingleBytes = ByteString.CopyFrom(99, 98, 97),
|
||||
SingleForeignEnum = ForeignEnum.ForeignFoo,
|
||||
SingleForeignMessage = new ForeignMessage { C = 12345 },
|
||||
SingleDouble = 20150701.5
|
||||
};
|
||||
|
||||
Assert.AreEqual(expected, message);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SetValue_SingleFields_WrongType()
|
||||
{
|
||||
IMessage message = SampleMessages.CreateFullTestAllTypes();
|
||||
var fields = message.Descriptor.Fields;
|
||||
Assert.Throws<InvalidCastException>(() => fields[TestProtos.TestAllTypes.SingleBoolFieldNumber].Accessor.SetValue(message, "This isn't a bool"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SetValue_MapFields()
|
||||
{
|
||||
IMessage message = new TestMap();
|
||||
var fields = message.Descriptor.Fields;
|
||||
Assert.Throws<InvalidOperationException>(() => fields[TestMap.MapStringStringFieldNumber].Accessor.SetValue(message, new Dictionary<string, string>()));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SetValue_RepeatedFields()
|
||||
{
|
||||
IMessage message = SampleMessages.CreateFullTestAllTypes();
|
||||
var fields = message.Descriptor.Fields;
|
||||
Assert.Throws<InvalidOperationException>(() => fields[TestProtos.TestAllTypes.RepeatedDoubleFieldNumber].Accessor.SetValue(message, new double[10]));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void GetValue_IncorrectType()
|
||||
{
|
||||
IMessage message = SampleMessages.CreateFullTestAllTypes();
|
||||
var fields = message.Descriptor.Fields;
|
||||
Assert.Throws<InvalidCastException>(() => fields[TestProtos.TestAllTypes.SingleBoolFieldNumber].Accessor.GetValue(new TestMap()));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Oneof()
|
||||
{
|
||||
var message = new TestAllTypes();
|
||||
var descriptor = TestProtos.TestAllTypes.Descriptor;
|
||||
Assert.AreEqual(1, descriptor.Oneofs.Count);
|
||||
var oneof = descriptor.Oneofs[0];
|
||||
Assert.AreEqual("oneof_field", oneof.Name);
|
||||
Assert.IsNull(oneof.Accessor.GetCaseFieldDescriptor(message));
|
||||
|
||||
message.OneofString = "foo";
|
||||
Assert.AreSame(descriptor.Fields[TestProtos.TestAllTypes.OneofStringFieldNumber], oneof.Accessor.GetCaseFieldDescriptor(message));
|
||||
|
||||
message.OneofUint32 = 10;
|
||||
Assert.AreSame(descriptor.Fields[TestProtos.TestAllTypes.OneofUint32FieldNumber], oneof.Accessor.GetCaseFieldDescriptor(message));
|
||||
|
||||
oneof.Accessor.Clear(message);
|
||||
Assert.AreEqual(TestProtos.TestAllTypes.OneofFieldOneofCase.None, message.OneofFieldCase);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void FieldDescriptor_ByName()
|
||||
{
|
||||
@ -240,5 +241,28 @@ namespace Google.Protobuf.Reflection
|
||||
Assert.Throws<KeyNotFoundException>(() => descriptor.Fields[999999].ToString());
|
||||
Assert.Throws<KeyNotFoundException>(() => descriptor.Fields["not found"].ToString());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void GetExtensionValue()
|
||||
{
|
||||
var message = SampleMessages.CreateFullTestAllExtensions();
|
||||
|
||||
// test that the reflector works, since the reflector just runs through IExtendableMessage
|
||||
Assert.AreEqual(message.GetExtension(OptionalBoolExtension), Proto2.TestAllExtensions.Descriptor.FindFieldByNumber(OptionalBoolExtension.FieldNumber).Accessor.GetValue(message));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void GetRepeatedExtensionValue()
|
||||
{
|
||||
// check to make sure repeated accessor uses GetOrRegister
|
||||
var message = new Proto2.TestAllExtensions();
|
||||
|
||||
Assert.IsNull(message.GetExtension(RepeatedBoolExtension));
|
||||
Assert.IsNotNull(Proto2.TestAllExtensions.Descriptor.FindFieldByNumber(RepeatedBoolExtension.FieldNumber).Accessor.GetValue(message));
|
||||
Assert.IsNotNull(message.GetExtension(RepeatedBoolExtension));
|
||||
|
||||
message.ClearExtension(RepeatedBoolExtension);
|
||||
Assert.IsNull(message.GetExtension(RepeatedBoolExtension));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user