| #region Copyright notice and license | |
| // Protocol Buffers - Google's data interchange format | |
| // Copyright 2008 Google Inc. All rights reserved. | |
| // | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file or at | |
| // https://developers.google.com/open-source/licenses/bsd | |
| #endregion | |
| using Google.Protobuf.Reflection; | |
| using NUnit.Framework; | |
| using System; | |
| using static Google.Protobuf.Reflection.FeatureSet.Types; | |
| namespace Google.Protobuf.Test.Reflection; | |
| public class FeatureSetDescriptorTest | |
| { | |
| // Just selectively test a couple of hard-coded examples. This isn't meant to be exhaustive, | |
| // and we don't expect to add new tests for later editions unless there's a production code change. | |
| [Test] | |
| public void Proto2Defaults() | |
| { | |
| // Note: additional fixed features may be added in future Editions (features which | |
| // have a value set to match preexisting proto2 behavior), so this is not an exhaustive | |
| // list of all proto2 defaults. | |
| var actualDefaults = FeatureSetDescriptor.GetEditionDefaults(Edition.Proto2).Proto; | |
| Assert.AreEqual(EnumType.Closed, actualDefaults.EnumType); | |
| Assert.AreEqual(FieldPresence.Explicit, actualDefaults.FieldPresence); | |
| Assert.AreEqual(JsonFormat.LegacyBestEffort, actualDefaults.JsonFormat); | |
| Assert.AreEqual(MessageEncoding.LengthPrefixed, actualDefaults.MessageEncoding); | |
| Assert.AreEqual(RepeatedFieldEncoding.Expanded, actualDefaults.RepeatedFieldEncoding); | |
| Assert.AreEqual(Utf8Validation.None, actualDefaults.Utf8Validation); | |
| } | |
| [Test] | |
| public void Proto3Defaults() | |
| { | |
| // Note: additional fixed features may be added in future Editions (features which | |
| // have a value set to match preexisting proto2 behavior), so this is not an exhaustive | |
| // list of all proto2 defaults. | |
| var actualDefaults = FeatureSetDescriptor.GetEditionDefaults(Edition.Proto3).Proto; | |
| Assert.AreEqual(EnumType.Open, actualDefaults.EnumType); | |
| Assert.AreEqual(FieldPresence.Implicit, actualDefaults.FieldPresence); | |
| Assert.AreEqual(JsonFormat.Allow, actualDefaults.JsonFormat); | |
| Assert.AreEqual(MessageEncoding.LengthPrefixed, actualDefaults.MessageEncoding); | |
| Assert.AreEqual(RepeatedFieldEncoding.Packed, actualDefaults.RepeatedFieldEncoding); | |
| Assert.AreEqual(Utf8Validation.Verify, actualDefaults.Utf8Validation); | |
| } | |
| [Test] | |
| public void MaxSupportedEdition() | |
| { | |
| // This should be the last piece of code to be changed when updating the C# runtime to support | |
| // a new edition. It should only be changed when you're sure that all the features in the new | |
| // edition are supported. Just changing the configuration for feature set default generation | |
| // will *advertise* that we support the new edition, but that isn't sufficient. | |
| Edition maxSupportedEdition = Edition._2026; | |
| // These lines should not need to be changed. | |
| FeatureSetDescriptor.GetEditionDefaults(maxSupportedEdition); | |
| Edition invalidEdition = (Edition) (maxSupportedEdition + 1); | |
| Assert.Throws<ArgumentOutOfRangeException>(() => FeatureSetDescriptor.GetEditionDefaults(invalidEdition)); | |
| } | |
| } |