Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/api-doc-tools.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Martinez <joelmartinez@gmail.com>2020-03-06 00:37:08 +0300
committerJoel Martinez <joelmartinez@gmail.com>2020-03-06 21:34:30 +0300
commitf867c532572299242d41019dd28b7e6028bcaa84 (patch)
treef4652ac9c4892d17dd0831e9be464d33c17b1a1b
parenta3391fe4141ef37b28a07837e4bea938a51ca3d2 (diff)
[import] fixed issue with xpathmdoc-5.7.5.1
-rw-r--r--mdoc/Mono.Documentation/Updater/DocUtils.cs26
-rw-r--r--mdoc/mdoc.Test/DocUtilsTests.cs35
2 files changed, 57 insertions, 4 deletions
diff --git a/mdoc/Mono.Documentation/Updater/DocUtils.cs b/mdoc/Mono.Documentation/Updater/DocUtils.cs
index 8af7befd..16101987 100644
--- a/mdoc/Mono.Documentation/Updater/DocUtils.cs
+++ b/mdoc/Mono.Documentation/Updater/DocUtils.cs
@@ -5,7 +5,7 @@ using System.IO;
using System.Linq;
using System.Text;
using System.Xml;
-
+using System.Xml.XPath;
using Mono.Cecil;
using Mono.Collections.Generic;
using Mono.Documentation.Util;
@@ -265,6 +265,8 @@ namespace Mono.Documentation.Updater
{
if (n is XmlText && n.InnerText == "To Be Added.")
return false;
+ else if (n is XmlComment)
+ return false;
else
{
bool removed = true;
@@ -272,14 +274,32 @@ namespace Mono.Documentation.Updater
{
if (nchild == null) continue;
+ if (nchild is XmlComment || nchild is XmlText || nchild is XmlCDataSection)
+ {
+ nchild.ParentNode.RemoveChild(nchild);
+ removed = true;
+ continue;
+ }
+
if (depth == 0)
{
// check the first level children to see if there's an incoming node that matches
var avalues = nchild.Attributes?.Cast<XmlAttribute>().Select(a => $"@{a.Name}='{a.Value}'").ToArray();
var nodexpath = $"./{nchild.Name}";
if (avalues?.Length > 0)
- nodexpath += $"[{ string.Join(" AND ", avalues) }]";
- var incomingEquivalent = incoming.SelectSingleNode(nodexpath);
+ nodexpath += $"[{ string.Join(" and ", avalues) }]";
+
+ XmlNode incomingEquivalent;
+
+ try
+ {
+ incomingEquivalent = incoming.SelectSingleNode(nodexpath);
+ }
+ catch (XPathException xex)
+ {
+ throw new MDocException($"xpath error: {nodexpath}. On incoming node {incoming.OuterXml}", xex);
+ }
+
if (incomingEquivalent != null)
{
nchild.ParentNode.RemoveChild(nchild);
diff --git a/mdoc/mdoc.Test/DocUtilsTests.cs b/mdoc/mdoc.Test/DocUtilsTests.cs
index d5f01a05..dad76d0e 100644
--- a/mdoc/mdoc.Test/DocUtilsTests.cs
+++ b/mdoc/mdoc.Test/DocUtilsTests.cs
@@ -65,7 +65,40 @@ namespace mdoc.Test
XmlDocument incomingDoc = new XmlDocument();
incomingDoc.LoadXml(xml2);
DocUtils.ClearNodesIfNotDefault(doc.FirstChild, incomingDoc.FirstChild);
- Assert.IsTrue(doc.FirstChild.ChildNodes.Count == 3) ;
+ Assert.IsTrue(doc.FirstChild.ChildNodes.Count == 3);
+ }
+
+ [Test]
+ public void TestNodeCleaner2()
+ {
+ string xml = @"<Docs>
+ <summary>To be added.</summary>
+ <param name=""one"" name2=""n2"">To be added.</param>
+<!-- this is an xml comment -->
+ <param name=""two"">written docs</param>
+random text
+<param name=""three"">Written but not provided</param>
+<![CDATA[
+ for some reason
+]]>
+</Docs>"; string xml2 = @"<Docs>
+ <summary>new summary</summary>
+<!-- this is another xml comment -->
+ <param name=""one"" name2=""n2"">To be added.</param>
+ random text
+ <param name=""two"">written docs but changed</param>
+<param name=""three"">Written but and</param>
+<![CDATA[
+ for some reason
+]]>
+</Docs>";
+ XmlDocument doc = new XmlDocument();
+ doc.LoadXml(xml);
+
+ XmlDocument incomingDoc = new XmlDocument();
+ incomingDoc.LoadXml(xml2);
+ DocUtils.ClearNodesIfNotDefault(doc.FirstChild, incomingDoc.FirstChild);
+ Assert.IsTrue(doc.FirstChild.ChildNodes.Count == 0);
}
}
} \ No newline at end of file