diff options
author | Joel Martinez <joelmartinez@gmail.com> | 2020-03-20 23:11:48 +0300 |
---|---|---|
committer | Joel Martinez <joelmartinez@gmail.com> | 2020-03-20 23:18:36 +0300 |
commit | abe9fb8da5c28b9c10c24efb44580d7523b24047 (patch) | |
tree | 396a1e9023665814a495bb3c0696a46aa2fe6e15 /mdoc/mdoc.Test/XmlUpdateTests.cs | |
parent | 0f19c449559fb0c1a40c358ba59afbc59db67997 (diff) |
Added DocUtils.AddElementWithFx method
Diffstat (limited to 'mdoc/mdoc.Test/XmlUpdateTests.cs')
-rw-r--r-- | mdoc/mdoc.Test/XmlUpdateTests.cs | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/mdoc/mdoc.Test/XmlUpdateTests.cs b/mdoc/mdoc.Test/XmlUpdateTests.cs index a7746c47..1781f8a6 100644 --- a/mdoc/mdoc.Test/XmlUpdateTests.cs +++ b/mdoc/mdoc.Test/XmlUpdateTests.cs @@ -683,6 +683,127 @@ namespace mdoc.Test Assert.IsTrue (attributes[0].HasAttribute (Consts.FrameworkAlternate)); } + + [Test] + public void FxElementTest() + { + XmlDocument doc = new XmlDocument(); + doc.LoadXml(@"<Parent><X>old value</X></Parent>"); + var context = InitContext<MyClass>(string.Format(typeFrameXml, multiFrameworkXml), 0, forceAlignment: false); + + var fx = context.fx.Frameworks[0]; + FrameworkTypeEntry typeEntry = fx.Types.First(); + + XmlElement parentx = doc.DocumentElement; + + + DocUtils.AddElementWithFx( + typeEntry, + parentx, + clear: parent => + { + parent.RemoveAll(); + }, + findExisting: parent => + { + return parent.SelectSingleNode("X") as XmlElement; + }, + addItem: parent => + { + var item = parent.OwnerDocument.CreateElement("X"); + item.InnerText = "value"; + parent.AppendChild(item); + return item; + }); + + Assert.AreEqual(1, parentx.ChildNodes.Count); + Assert.AreEqual("value", parentx.ChildNodes[0].InnerText); + Assert.AreEqual("One", parentx.ChildNodes[0].Attributes[0].Value); + } + [Test] + public void FxElementTest_Two() + { + XmlDocument doc = new XmlDocument(); + doc.LoadXml(@"<Parent><X>old value</X></Parent>"); + var context = InitContext<MyClass>(string.Format(typeFrameXml, multiFrameworkXml), 0, forceAlignment: false); + + var fx = context.fx.Frameworks[1]; + FrameworkTypeEntry typeEntry = fx.Types.First(); + + XmlElement parentx = doc.DocumentElement; + + System.Func<FrameworkTypeEntry, string, bool> runfx = (te, value) => + { + DocUtils.AddElementWithFx( + te, + parentx, + clear: parent => + { + parent.RemoveAll(); + }, + findExisting: parent => + { + return parent.ChildNodes.Cast<XmlElement>().SingleOrDefault(e => e.Name == "X" && e.Value == value); + }, + addItem: parent => + { + var item = parent.OwnerDocument.CreateElement("X"); + item.InnerText = value; + parent.AppendChild(item); + return item; + }); + return true; + }; + + runfx(context.fx.Frameworks[0].Types.First(), "one"); + runfx(context.fx.Frameworks[1].Types.First(), "two"); + + Assert.AreEqual(parentx.ChildNodes.Count, 2); + Assert.IsTrue(parentx.ChildNodes.Cast<XmlElement>().Any(e => e.HasAttribute(Consts.FrameworkAlternate)), "fx check"); + } + + [Test] + public void FxElementTest_Three() + { + XmlDocument doc = new XmlDocument(); + doc.LoadXml(@"<Parent><X>old value</X></Parent>"); + var context = InitContext<MyClass>(string.Format(typeFrameXml, multiFrameworkXml), 2, forceAlignment: false); + + var fx = context.fx.Frameworks[1]; + FrameworkTypeEntry typeEntry = fx.Types.First(); + + XmlElement parentx = doc.DocumentElement; + + System.Func<FrameworkTypeEntry, bool> runfx = (te) => + { + DocUtils.AddElementWithFx( + te, + parentx, + clear: parent => + { + parent.RemoveAll(); + }, + findExisting: parent => + { + return parent.SelectSingleNode("X") as XmlElement; + }, + addItem: parent => + { + var item = parent.OwnerDocument.CreateElement("X"); + item.InnerText = "value"; + parent.AppendChild(item); + return item; + }); + return true; + }; + + runfx(context.fx.Frameworks[0].Types.First()); + runfx(context.fx.Frameworks[1].Types.First()); + runfx(context.fx.Frameworks[2].Types.First()); + + Assert.AreEqual(parentx.ChildNodes.Count, 1); + } + string Normalize(string xml, bool clearFx = false) { XmlDocument doc = new XmlDocument (); |