C# Proto2 feature : Extensions (#5350)
* Compiler changes (extensions)
* Generated changes (extensions)
* Library changes (extensions)
* Adjusted a summary to indicate ContainingType can be null for extensions
* Compiler changes (custom option review + access level review)
* Generated code changes (custom options + access review)
* Library changes (custom options + access review)
* Support C# 6 with library changes
* Access HasValue by property
* Set access level of all extension classes to internal (revert in next PR)
* Added null checks to custom options
* Rebase on master and regenerate Conformance
* Removed second dictionary from ExtensionSet
* Rebased compiler changes
* Rebased generated code changes
* Rebased library changes + review changes
* Add more safety checks to extension accessors
* Remove instances where extension sets were unnecessarily allocated
* Remove cleared items from sets
Empty sets are now made null
IExtensionMessage -> IExtendableMessage
* Remove dead code from IExtensionValue impls
* Clean both repeated and single value extensions
* Add GetOrRegister method for repeated fields and allow clearing repeated extensions
* Add type safe ClearExtension methods, remove non-generic IExtendableMessage interface.
* Simplify ExtensionSet.TryMergeFieldFrom
* Rebase on master to resolve conflicts
* Fix Makefile.am
* Add ObjectIntPair to Makefile.am
diff --git a/csharp/src/Google.Protobuf.Test/Reflection/CustomOptionsTest.cs b/csharp/src/Google.Protobuf.Test/Reflection/CustomOptionsTest.cs
index 68b4d6a..ff4e9a7 100644
--- a/csharp/src/Google.Protobuf.Test/Reflection/CustomOptionsTest.cs
+++ b/csharp/src/Google.Protobuf.Test/Reflection/CustomOptionsTest.cs
@@ -100,66 +100,6 @@
delegate bool OptionFetcher<T>(int field, out T value);
[Test]
- public void EmptyOptionsIsShared()
- {
- var structOptions = Struct.Descriptor.CustomOptions;
- var timestampOptions = Struct.Descriptor.CustomOptions;
- Assert.AreSame(structOptions, timestampOptions);
- }
-
- [Test]
- public void SimpleIntegerTest()
- {
- var stream = new MemoryStream();
- var output = new CodedOutputStream(stream);
- output.WriteTag(MakeTag(1, WireType.Varint));
- output.WriteInt32(1234567);
- output.Flush();
- stream.Position = 0;
- var input = new CodedInputStream(stream);
- input.ReadTag();
-
- var options = CustomOptions.Empty;
- options = options.ReadOrSkipUnknownField(input);
-
- int intValue;
- Assert.True(options.TryGetInt32(1, out intValue));
- Assert.AreEqual(1234567, intValue);
-
- string stringValue;
- // No ByteString stored values
- Assert.False(options.TryGetString(1, out stringValue));
- // Nothing stored for field 2
- Assert.False(options.TryGetInt32(2, out intValue));
- }
-
- [Test]
- public void SimpleStringTest()
- {
- var stream = new MemoryStream();
- var output = new CodedOutputStream(stream);
- output.WriteTag(MakeTag(1, WireType.LengthDelimited));
- output.WriteString("value");
- output.Flush();
- stream.Position = 0;
- var input = new CodedInputStream(stream);
- input.ReadTag();
-
- var options = CustomOptions.Empty;
- options = options.ReadOrSkipUnknownField(input);
-
- string stringValue;
- Assert.True(options.TryGetString(1, out stringValue));
- Assert.AreEqual("value", stringValue);
-
- int intValue;
- // No numeric stored values
- Assert.False(options.TryGetInt32(1, out intValue));
- // Nothing stored for field 2
- Assert.False(options.TryGetString(2, out stringValue));
- }
-
- [Test]
public void ScalarOptions()
{
var options = CustomOptionOtherValues.Descriptor.CustomOptions;
@@ -168,7 +108,7 @@
AssertOption(1.234567890123456789d, options.TryGetDouble, DoubleOpt);
AssertOption("Hello, \"World\"", options.TryGetString, StringOpt);
AssertOption(ByteString.CopyFromUtf8("Hello\0World"), options.TryGetBytes, BytesOpt);
- AssertOption((int) TestEnumType.TestOptionEnumType2, options.TryGetInt32, EnumOpt);
+ AssertOption((int)TestEnumType.TestOptionEnumType2, options.TryGetInt32, EnumOpt);
}
[Test]
@@ -177,11 +117,12 @@
var options = VariousComplexOptions.Descriptor.CustomOptions;
AssertOption(new ComplexOptionType1 { Foo = 42, Foo4 = { 99, 88 } }, options.TryGetMessage, ComplexOpt1);
AssertOption(new ComplexOptionType2
- {
- Baz = 987, Bar = new ComplexOptionType1 { Foo = 743 },
- Fred = new ComplexOptionType4 { Waldo = 321 },
- Barney = { new ComplexOptionType4 { Waldo = 101 }, new ComplexOptionType4 { Waldo = 212 } }
- },
+ {
+ Baz = 987,
+ Bar = new ComplexOptionType1 { Foo = 743 },
+ Fred = new ComplexOptionType4 { Waldo = 321 },
+ Barney = { new ComplexOptionType4 { Waldo = 101 }, new ComplexOptionType4 { Waldo = 212 } }
+ },
options.TryGetMessage, ComplexOpt2);
AssertOption(new ComplexOptionType3 { Qux = 9 }, options.TryGetMessage, ComplexOpt3);
}
@@ -195,7 +136,7 @@
var messageOptions = TestMessageWithCustomOptions.Descriptor.CustomOptions;
AssertOption(-56, messageOptions.TryGetInt32, MessageOpt1);
- var fieldOptions = TestMessageWithCustomOptions.Descriptor.Fields["field1"] .CustomOptions;
+ var fieldOptions = TestMessageWithCustomOptions.Descriptor.Fields["field1"].CustomOptions;
AssertOption(8765432109UL, fieldOptions.TryGetFixed64, FieldOpt1);
var oneofOptions = TestMessageWithCustomOptions.Descriptor.Oneofs[0].CustomOptions;
@@ -213,7 +154,7 @@
AssertOption(-9876543210, serviceOptions.TryGetSInt64, ServiceOpt1);
var methodOptions = service.Methods[0].CustomOptions;
- AssertOption((int) UnitTest.Issues.TestProtos.MethodOpt1.Val2, methodOptions.TryGetInt32, CustomOptionNumber.MethodOpt1);
+ AssertOption((int)UnitTest.Issues.TestProtos.MethodOpt1.Val2, methodOptions.TryGetInt32, CustomOptionNumber.MethodOpt1);
}
[Test]
@@ -264,7 +205,7 @@
private void AssertOption<T>(T expected, OptionFetcher<T> fetcher, CustomOptionNumber field)
{
T actual;
- Assert.IsTrue(fetcher((int) field, out actual));
+ Assert.IsTrue(fetcher((int)field, out actual));
Assert.AreEqual(expected, actual);
}
}