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);
}