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(""); + return (selfClosing || _emptyTagsToSelfClosing && !element.HasChildNodes) ? String.Empty : String.Concat(""); } /// @@ -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(" /"); }