diff --git a/Gedcomx.Model.Test/FacetTest.cs b/Gedcomx.Model.Test/FacetTest.cs index c5a7865..0430505 100644 --- a/Gedcomx.Model.Test/FacetTest.cs +++ b/Gedcomx.Model.Test/FacetTest.cs @@ -13,7 +13,7 @@ namespace Gedcomx.Model.Test; /// Test calss for /// [TestFixture] -public class FacetTEst +public class FacetTest { [Test] public void FacetEmpty() diff --git a/Gedcomx.Model.Test/FieldTest.cs b/Gedcomx.Model.Test/FieldTest.cs new file mode 100644 index 0000000..f3b06d4 --- /dev/null +++ b/Gedcomx.Model.Test/FieldTest.cs @@ -0,0 +1,66 @@ +using System.Xml.Serialization; + +using Gx.Records; + +using Gx.Types; + +using Newtonsoft.Json; + +using NUnit.Framework; + +namespace Gedcomx.Model.Test; + +/// +/// Test calss for +/// +[TestFixture] +public class FieldTest +{ + [Test] + public void FieldEmpty() + { + Field sut = new(); + + VerifyXmlSerialization(sut); + VerifyJsonSerialization(sut); + } + + [Test] + public void FieldObjectInitialization() + { + Field sut = new() + { + // ExtensibleData + Id = "F-1", + // HypermediaEnabledData + Links = { new(), { "rel", new Uri("https://www.familysearch.org/platform/collections/tree") }, { "rel", "template" } }, + // Field + KnownType = FieldType.Abusua, + Values = { new() } + }; + + VerifyXmlSerialization(sut); + VerifyJsonSerialization(sut); + } + + private static void VerifyXmlSerialization(Field sut) + { + XmlSerializer serializer = new(typeof(Field)); + using MemoryStream stream = new(); + serializer.Serialize(stream, sut); + + stream.Seek(0, SeekOrigin.Begin); + var result = new StreamReader(stream).ReadToEnd(); + result.ShouldContain(sut); + } + + private static void VerifyJsonSerialization(Field sut) + { + JsonSerializerSettings jsonSettings = new() + { + NullValueHandling = NullValueHandling.Ignore + }; + + Assert.DoesNotThrow(() => JsonConvert.DeserializeObject(JsonConvert.SerializeObject(sut, jsonSettings), jsonSettings)); + } +} diff --git a/Gedcomx.Model.Test/XmlAssertions.cs b/Gedcomx.Model.Test/XmlAssertions.cs index a68c5b0..aac734e 100644 --- a/Gedcomx.Model.Test/XmlAssertions.cs +++ b/Gedcomx.Model.Test/XmlAssertions.cs @@ -162,6 +162,16 @@ public static void ShouldContain(this string result, Facet facet) result.ShouldContain(facet as HypermediaEnabledData); } + public static void ShouldContain(this string result, Field field) + { + Assert.That(result, Does.Contain(" +// // // // Generated by Enunciate. // using System; using System.Collections.Generic; +using System.Linq; + +using Gedcomx.Model.Rt; +using Gedcomx.Model.Util; + +using Gx.Types; namespace Gx.Records { @@ -67,13 +70,18 @@ public System.Collections.Generic.List Values { get { - return this._values; + return this._values ?? (_values = new System.Collections.Generic.List()); } set { this._values = value; } } + public bool ShouldSerializeValues() => AnyValues(); + public bool AnyValues() + { + return _values?.Any() ?? false; + } public void Accept(IGedcomxModelVisitor visitor) { @@ -110,26 +118,12 @@ public Field SetType(FieldType type) * @return this. */ public Field SetValue(FieldValue value) - { - AddValue(value); - return this; - } - - /** - * Add a reference to the record value values being used as evidence. - * - * @param value The value to be added. - */ - public void AddValue(FieldValue value) { if (value != null) { - if (_values == null) - { - _values = new List(); - } - _values.Add(value); + Values.Add(value); } + return this; } } } diff --git a/Gedcomx.Model/Rt/GedcomxModelVisitorBase.cs b/Gedcomx.Model/Rt/GedcomxModelVisitorBase.cs index cfe9987..31fbaf5 100644 --- a/Gedcomx.Model/Rt/GedcomxModelVisitorBase.cs +++ b/Gedcomx.Model/Rt/GedcomxModelVisitorBase.cs @@ -191,10 +191,10 @@ public virtual void VisitField(Field field) { this.contextStack.Push(field); - List values = field.Values; - if (values != null) + if (field.AnyValues()) { - foreach (FieldValue value in values) + var values = field.Values; + foreach (var value in values) { value.Accept(this); } diff --git a/Gedcomx.Util/GedcomxModelVisitorBase.cs b/Gedcomx.Util/GedcomxModelVisitorBase.cs index 6a98b27..b76cbcd 100644 --- a/Gedcomx.Util/GedcomxModelVisitorBase.cs +++ b/Gedcomx.Util/GedcomxModelVisitorBase.cs @@ -325,9 +325,9 @@ public virtual void VisitField(Field field) { this.contextStack.Push(field); - if (field.Values != null) + if (field.AnyValues()) { - foreach (FieldValue v in field.Values) + foreach (var v in field.Values) { VisitFieldValue(v); }