From d56fbfaa85b12a31cd1f4c388859f9fd3b9717dd Mon Sep 17 00:00:00 2001
From: Ekaterina Bainova
Date: Thu, 23 Dec 2021 17:44:58 +0300
Subject: [PATCH 1/2] Add tests
---
.../Library/XhtmlFormatter.cs | 55 +++++++++++++++++++
1 file changed, 55 insertions(+)
create mode 100644 src/AngleSharp.Core.Tests/Library/XhtmlFormatter.cs
diff --git a/src/AngleSharp.Core.Tests/Library/XhtmlFormatter.cs b/src/AngleSharp.Core.Tests/Library/XhtmlFormatter.cs
new file mode 100644
index 000000000..5dfc2ee28
--- /dev/null
+++ b/src/AngleSharp.Core.Tests/Library/XhtmlFormatter.cs
@@ -0,0 +1,55 @@
+using AngleSharp.Xhtml;
+using NUnit.Framework;
+
+namespace AngleSharp.Core.Tests.Library
+{
+ [TestFixture]
+ public class XhtmlFormatter
+ {
+ [Test]
+ public void XhtmlMarkupFormatter_DoesNotFormatEmptyElementsToSelfClosing_WhenEmptyTagsToSelfClosingIsFalse()
+ {
+ var formatter = new XhtmlMarkupFormatter(false);
+ var input = "" +
+ "" +
+ "" +
+ "test
" +
+ "" +
+ "" +
+ "" +
+ "";
+ var doc = input.ToHtmlDocument();
+
+ var res = doc.ToHtml(formatter);
+
+ Assert.AreEqual(input, res);
+ }
+
+ [Test]
+ public void XhtmlMarkupFormatter_FormatsEmptyElementsToSelfClosing_WhenEmptyTagsToSelfClosingIsTrue()
+ {
+ var formatter = new XhtmlMarkupFormatter(true);
+ var input = "" +
+ "" +
+ "" +
+ "test
" +
+ "" +
+ "" +
+ "" +
+ "";
+ var expected = "" +
+ "" +
+ "
" +
+ "test
" +
+ "" +
+ "" +
+ "" +
+ "";
+ var doc = input.ToHtmlDocument();
+
+ var res = doc.ToHtml(formatter);
+
+ Assert.AreEqual(expected, res);
+ }
+ }
+}
From e9ce87935165b4454ba1c872722de060c4c50ea6 Mon Sep 17 00:00:00 2001
From: Ekaterina Bainova
Date: Thu, 23 Dec 2021 17:45:12 +0300
Subject: [PATCH 2/2] Update formatter
---
src/AngleSharp/Xhtml/XhtmlMarkupFormatter.cs | 32 ++++++++++++++++++--
1 file changed, 30 insertions(+), 2 deletions(-)
diff --git a/src/AngleSharp/Xhtml/XhtmlMarkupFormatter.cs b/src/AngleSharp/Xhtml/XhtmlMarkupFormatter.cs
index 84558715d..762d91cba 100644
--- a/src/AngleSharp/Xhtml/XhtmlMarkupFormatter.cs
+++ b/src/AngleSharp/Xhtml/XhtmlMarkupFormatter.cs
@@ -18,6 +18,34 @@ public class XhtmlMarkupFormatter : IMarkupFormatter
#endregion
+ #region Constructors
+
+ ///
+ /// Default constructor for
+ ///
+ public XhtmlMarkupFormatter() : this(true)
+ {
+
+ }
+
+ ///
+ /// Constructor for
+ ///
+ /// Specify if empty elements like <div></div>
+ /// should be converted to self-closing ones like <div/>
+ public XhtmlMarkupFormatter(Boolean emptyTagsToSelfClosing)
+ {
+ _emptyTagsToSelfClosing = emptyTagsToSelfClosing;
+ }
+
+ #endregion
+
+ #region Private fields
+
+ private readonly Boolean _emptyTagsToSelfClosing;
+
+ #endregion
+
#region Methods
///
@@ -26,7 +54,7 @@ public virtual String CloseTag(IElement element, Boolean selfClosing)
var prefix = element.Prefix;
var name = element.LocalName;
var tag = !String.IsNullOrEmpty(prefix) ? prefix + ":" + name : name;
- return (selfClosing || !element.HasChildNodes) ? String.Empty : String.Concat("", tag, ">");
+ return (selfClosing || _emptyTagsToSelfClosing && !element.HasChildNodes) ? String.Empty : String.Concat("", tag, ">");
}
///
@@ -64,7 +92,7 @@ public virtual String OpenTag(IElement element, Boolean selfClosing)
temp.Append(' ').Append(Attribute(attribute));
}
- if (selfClosing || !element.HasChildNodes)
+ if (selfClosing || _emptyTagsToSelfClosing && !element.HasChildNodes)
{
temp.Append(" /");
}