Skip to content

Commit 0611a9e

Browse files
Merge pull request #34 from Shad0wlife/fix-empty-attrib-interpreting
Make sure empty attribs are recognized as such
2 parents 967f42f + 517fc73 commit 0611a9e

2 files changed

Lines changed: 58 additions & 2 deletions

File tree

src/XmlRepresentation/XmlFileDbConverter.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,11 @@ public IFileDBDocument ToFileDb(XmlDocument xml)
5151
return filedb;
5252
}
5353

54-
private FileDBNode XmlNodeToFileDBNode( XmlNode n, Tag parent)
54+
private FileDBNode XmlNodeToFileDBNode(XmlNode n, Tag parent)
5555
{
5656
//This is the closest we can determine this shit.
57-
if ((n.FirstChild != null && n.FirstChild.NodeType == XmlNodeType.Text))
57+
if ((n.FirstChild != null && n.FirstChild.NodeType == XmlNodeType.Text) ||
58+
(n is XmlElement elem && elem.FirstChild == null && elem.IsEmpty == false))
5859
return XmlNodeToAttrib(n, parent);
5960
else
6061
return XmlNodeToTag(n, parent);

unittests/FileDBReader-Tests/FileDBSerializer/ObjectSerializerTest.cs

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -560,5 +560,60 @@ public void DeSerializePrimitiveArray()
560560
xmlDocument = new FileDbXmlConverter().ToXml(doc);
561561
Assert.AreEqual(testInput, xmlDocument.InnerXml);
562562
}
563+
564+
private class EmptyAttribTestContainer
565+
{
566+
public byte[]? Single { get; set; }
567+
public byte[]? MissingSingle { get; set; }
568+
public string? EmptyString { get; set; }
569+
public List<byte[]>? NonFlat { get; set; }
570+
public object? ThisIsSelfclosing { get; set; }
571+
public int? MissingNullableInt { get; set; }
572+
}
573+
574+
[TestMethod]
575+
public void DeSerializeEmptyPrimitiveArray()
576+
{
577+
static Stream stream(string x) => new MemoryStream(Encoding.Unicode.GetBytes(x));
578+
579+
const string testInput = "<Content>" +
580+
"<Single></Single>" +
581+
"<EmptyString></EmptyString>" +
582+
"<NonFlat><None></None></NonFlat>" +
583+
"<ThisIsSelfclosing />" +
584+
"</Content>";
585+
586+
// load from XML
587+
XmlDocument xmlDocument = new();
588+
xmlDocument.Load(stream(testInput));
589+
IFileDBDocument doc = new XmlFileDbConverter(FileDBDocumentVersion.Version1).ToFileDb(xmlDocument);
590+
591+
// serialize & deserialize
592+
FileDBDocumentDeserializer<EmptyAttribTestContainer> deserializer = new(new() { Version = FileDBDocumentVersion.Version1 });
593+
var obj = deserializer.GetObjectStructureFromFileDBDocument(doc);
594+
595+
Assert.IsNotNull(obj);
596+
597+
Assert.IsNotNull(obj.Single);
598+
Assert.AreEqual(0, obj.Single!.Length);
599+
600+
Assert.IsNotNull(obj.EmptyString);
601+
Assert.AreEqual(0, obj.EmptyString!.Length);
602+
603+
Assert.IsNotNull(obj.NonFlat);
604+
Assert.AreEqual(1, obj.NonFlat?.Count);
605+
Assert.AreEqual(0, obj.NonFlat![0].Length);
606+
607+
Assert.IsNotNull(obj.ThisIsSelfclosing);
608+
609+
Assert.IsNull(obj.MissingNullableInt);
610+
611+
FileDBDocumentSerializer serializer = new(new() { Version = FileDBDocumentVersion.Version1 });
612+
doc = serializer.WriteObjectStructureToFileDBDocument(obj);
613+
614+
// convert back to xml
615+
xmlDocument = new FileDbXmlConverter().ToXml(doc);
616+
Assert.AreEqual(testInput, xmlDocument.InnerXml);
617+
}
563618
}
564619
}

0 commit comments

Comments
 (0)