Add copy constructor to JsonSerializerSettings (#2676)

Co-authored-by: Matthew Steeples <matthew@ledgerscope.com>
This commit is contained in:
James Newton-King
2022-05-16 09:34:38 +08:00
committed by GitHub
co-authored by Matthew Steeples
parent 7f78562d44
commit 71be691f92
2 changed files with 168 additions and 0 deletions
@@ -48,6 +48,7 @@ using System.Text.RegularExpressions;
using Xunit;
using Test = Xunit.FactAttribute;
using Assert = Newtonsoft.Json.Tests.XUnitAssert;
using TestCase = Xunit.InlineDataAttribute;
#else
using NUnit.Framework;
#endif
@@ -8076,6 +8077,128 @@ This is just junk, though.";
Assert.AreEqual(150, depth);
}
#if DNXCORE50
[Theory]
#endif
[TestCase(true)]
[TestCase(false)]
public void ShallowCopy_CopyAllProperties(bool specifyDateFormatString)
{
var propertyNames = typeof(JsonSerializerSettings).GetProperties().Select(property => property.Name).ToList();
var settings = new JsonSerializerSettings();
if (specifyDateFormatString)
{
settings.DateFormatString = "yyyy";
}
var clone = new JsonSerializerSettings(settings);
Assert.AreEqual(settings.DateFormatString, clone.DateFormatString);
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.DateFormatString)));
Assert.AreEqual(settings.DateFormatHandling, clone.DateFormatHandling);
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.DateFormatHandling)));
Assert.AreEqual(settings.ReferenceLoopHandling, clone.ReferenceLoopHandling);
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.ReferenceLoopHandling)));
Assert.AreEqual(settings.MissingMemberHandling, clone.MissingMemberHandling);
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.MissingMemberHandling)));
Assert.AreEqual(settings.ObjectCreationHandling, clone.ObjectCreationHandling);
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.ObjectCreationHandling)));
Assert.AreEqual(settings.NullValueHandling, clone.NullValueHandling);
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.NullValueHandling)));
Assert.AreEqual(settings.DefaultValueHandling, clone.DefaultValueHandling);
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.DefaultValueHandling)));
Assert.AreEqual(settings.Converters, clone.Converters);
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.Converters)));
Assert.AreEqual(settings.PreserveReferencesHandling, clone.PreserveReferencesHandling);
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.PreserveReferencesHandling)));
Assert.AreEqual(settings.TypeNameHandling, clone.TypeNameHandling);
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.TypeNameHandling)));
Assert.AreEqual(settings.MetadataPropertyHandling, clone.MetadataPropertyHandling);
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.MetadataPropertyHandling)));
#pragma warning disable CS0618 // Type or member is obsolete
Assert.AreEqual(settings.TypeNameAssemblyFormat, clone.TypeNameAssemblyFormat);
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.TypeNameAssemblyFormat)));
#pragma warning restore CS0618 // Type or member is obsolete
Assert.AreEqual(settings.TypeNameAssemblyFormatHandling, clone.TypeNameAssemblyFormatHandling);
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.TypeNameAssemblyFormatHandling)));
Assert.AreEqual(settings.ConstructorHandling, clone.ConstructorHandling);
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.ConstructorHandling)));
Assert.AreEqual(settings.ContractResolver, clone.ContractResolver);
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.ContractResolver)));
Assert.AreEqual(settings.EqualityComparer, clone.EqualityComparer);
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.EqualityComparer)));
#pragma warning disable CS0618 // Type or member is obsolete
Assert.AreEqual(settings.ReferenceResolver, clone.ReferenceResolver);
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.ReferenceResolver)));
#pragma warning restore CS0618 // Type or member is obsolete
Assert.AreEqual(settings.ReferenceResolverProvider, clone.ReferenceResolverProvider);
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.ReferenceResolverProvider)));
Assert.AreEqual(settings.TraceWriter, clone.TraceWriter);
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.TraceWriter)));
#pragma warning disable CS0618 // Type or member is obsolete
Assert.AreEqual(settings.Binder, clone.Binder);
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.Binder)));
#pragma warning restore CS0618 // Type or member is obsolete
Assert.AreEqual(settings.SerializationBinder, clone.SerializationBinder);
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.SerializationBinder)));
Assert.AreEqual(settings.Error, clone.Error);
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.Error)));
Assert.AreEqual(settings.Context, clone.Context);
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.Context)));
Assert.AreEqual(settings.MaxDepth, clone.MaxDepth);
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.MaxDepth)));
Assert.AreEqual(settings.Formatting, clone.Formatting);
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.Formatting)));
Assert.AreEqual(settings.DateTimeZoneHandling, clone.DateTimeZoneHandling);
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.DateTimeZoneHandling)));
Assert.AreEqual(settings.DateParseHandling, clone.DateParseHandling);
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.DateParseHandling)));
Assert.AreEqual(settings.FloatFormatHandling, clone.FloatFormatHandling);
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.FloatFormatHandling)));
Assert.AreEqual(settings.FloatParseHandling, clone.FloatParseHandling);
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.FloatParseHandling)));
Assert.AreEqual(settings.StringEscapeHandling, clone.StringEscapeHandling);
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.StringEscapeHandling)));
Assert.AreEqual(settings.Culture, clone.Culture);
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.Culture)));
Assert.AreEqual(settings.CheckAdditionalContent, clone.CheckAdditionalContent);
Assert.IsTrue(propertyNames.Remove(nameof(JsonSerializerSettings.CheckAdditionalContent)));
Assert.AreEqual(0, propertyNames.Count);
}
private static int GetDepth(JToken o)
{
int depth = 1;