From 4371d8b27d5fc5d83ab137ae2374f5401fe83fb9 Mon Sep 17 00:00:00 2001 From: tempcode Date: Fri, 8 Sep 2023 18:59:22 +0200 Subject: [PATCH 01/12] fix: title empty if AddSegment is not called --- .../Extensions/IHtmlContentExtensions.cs | 15 +++++++++++++++ .../Title/PageTitleBuilder.cs | 4 +++- 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 src/OrchardCore/OrchardCore.DisplayManagement/Extensions/IHtmlContentExtensions.cs diff --git a/src/OrchardCore/OrchardCore.DisplayManagement/Extensions/IHtmlContentExtensions.cs b/src/OrchardCore/OrchardCore.DisplayManagement/Extensions/IHtmlContentExtensions.cs new file mode 100644 index 00000000000..17f6e17a37d --- /dev/null +++ b/src/OrchardCore/OrchardCore.DisplayManagement/Extensions/IHtmlContentExtensions.cs @@ -0,0 +1,15 @@ +using System.Text.Encodings.Web; +using Microsoft.AspNetCore.Html; + + +namespace OrchardCore.DisplayManagement.Extensions; + +public static class IHtmlContentExtensions +{ + public static string GetString(this IHtmlContent content) + { + using var writer = new System.IO.StringWriter(); + content.WriteTo(writer, HtmlEncoder.Default); + return writer.ToString(); + } +} \ No newline at end of file diff --git a/src/OrchardCore/OrchardCore.DisplayManagement/Title/PageTitleBuilder.cs b/src/OrchardCore/OrchardCore.DisplayManagement/Title/PageTitleBuilder.cs index f1654b978cd..4f322692f02 100644 --- a/src/OrchardCore/OrchardCore.DisplayManagement/Title/PageTitleBuilder.cs +++ b/src/OrchardCore/OrchardCore.DisplayManagement/Title/PageTitleBuilder.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using Microsoft.AspNetCore.Html; using OrchardCore.DisplayManagement.Zones; +using OrchardCore.DisplayManagement.Extensions; namespace OrchardCore.DisplayManagement.Title { @@ -48,7 +49,7 @@ public IHtmlContent GenerateTitle(IHtmlContent separator) return _fixedTitle; } - if (_title != null) + if (_title != null && System.String.Empty != _title.GetString()) { return _title; } @@ -82,6 +83,7 @@ public IHtmlContent GenerateTitle(IHtmlContent separator) public void Clear() { _fixedTitle = null; + _title = null; _titleParts.Clear(); } } From 4999f1eb7c10383698cbdd83cb94c00acfa98253 Mon Sep 17 00:00:00 2001 From: tempcode Date: Mon, 11 Sep 2023 08:53:47 +0200 Subject: [PATCH 02/12] style: renamed extension file and class --- .../{IHtmlContentExtensions.cs => HtmlContentExtensions.cs} | 6 ++++-- .../OrchardCore.DisplayManagement/Title/PageTitleBuilder.cs | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) rename src/OrchardCore/OrchardCore.DisplayManagement/Extensions/{IHtmlContentExtensions.cs => HtmlContentExtensions.cs} (72%) diff --git a/src/OrchardCore/OrchardCore.DisplayManagement/Extensions/IHtmlContentExtensions.cs b/src/OrchardCore/OrchardCore.DisplayManagement/Extensions/HtmlContentExtensions.cs similarity index 72% rename from src/OrchardCore/OrchardCore.DisplayManagement/Extensions/IHtmlContentExtensions.cs rename to src/OrchardCore/OrchardCore.DisplayManagement/Extensions/HtmlContentExtensions.cs index 17f6e17a37d..320502b6b9f 100644 --- a/src/OrchardCore/OrchardCore.DisplayManagement/Extensions/IHtmlContentExtensions.cs +++ b/src/OrchardCore/OrchardCore.DisplayManagement/Extensions/HtmlContentExtensions.cs @@ -1,15 +1,17 @@ +using System.IO; using System.Text.Encodings.Web; using Microsoft.AspNetCore.Html; namespace OrchardCore.DisplayManagement.Extensions; -public static class IHtmlContentExtensions +public static class HtmlContentExtensions { public static string GetString(this IHtmlContent content) { - using var writer = new System.IO.StringWriter(); + using var writer = new StringWriter(); content.WriteTo(writer, HtmlEncoder.Default); + return writer.ToString(); } } \ No newline at end of file diff --git a/src/OrchardCore/OrchardCore.DisplayManagement/Title/PageTitleBuilder.cs b/src/OrchardCore/OrchardCore.DisplayManagement/Title/PageTitleBuilder.cs index 4f322692f02..67fb41124d4 100644 --- a/src/OrchardCore/OrchardCore.DisplayManagement/Title/PageTitleBuilder.cs +++ b/src/OrchardCore/OrchardCore.DisplayManagement/Title/PageTitleBuilder.cs @@ -2,6 +2,7 @@ using Microsoft.AspNetCore.Html; using OrchardCore.DisplayManagement.Zones; using OrchardCore.DisplayManagement.Extensions; +using System; namespace OrchardCore.DisplayManagement.Title { @@ -49,7 +50,7 @@ public IHtmlContent GenerateTitle(IHtmlContent separator) return _fixedTitle; } - if (_title != null && System.String.Empty != _title.GetString()) + if (_title != null && String.Empty != _title.GetString()) { return _title; } From 9bc9f6b2a2b54cd8e42d0840cd5185b12354ce03 Mon Sep 17 00:00:00 2001 From: tempcode Date: Mon, 11 Sep 2023 10:17:54 +0200 Subject: [PATCH 03/12] style: sort usign, remove extra line --- .../Extensions/HtmlContentExtensions.cs | 1 - .../OrchardCore.DisplayManagement/Title/PageTitleBuilder.cs | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/OrchardCore/OrchardCore.DisplayManagement/Extensions/HtmlContentExtensions.cs b/src/OrchardCore/OrchardCore.DisplayManagement/Extensions/HtmlContentExtensions.cs index 320502b6b9f..650122acd30 100644 --- a/src/OrchardCore/OrchardCore.DisplayManagement/Extensions/HtmlContentExtensions.cs +++ b/src/OrchardCore/OrchardCore.DisplayManagement/Extensions/HtmlContentExtensions.cs @@ -2,7 +2,6 @@ using System.Text.Encodings.Web; using Microsoft.AspNetCore.Html; - namespace OrchardCore.DisplayManagement.Extensions; public static class HtmlContentExtensions diff --git a/src/OrchardCore/OrchardCore.DisplayManagement/Title/PageTitleBuilder.cs b/src/OrchardCore/OrchardCore.DisplayManagement/Title/PageTitleBuilder.cs index 67fb41124d4..b604ee2a1d9 100644 --- a/src/OrchardCore/OrchardCore.DisplayManagement/Title/PageTitleBuilder.cs +++ b/src/OrchardCore/OrchardCore.DisplayManagement/Title/PageTitleBuilder.cs @@ -1,8 +1,8 @@ +using System; using System.Collections.Generic; using Microsoft.AspNetCore.Html; using OrchardCore.DisplayManagement.Zones; using OrchardCore.DisplayManagement.Extensions; -using System; namespace OrchardCore.DisplayManagement.Title { From b3d751c1d97c1e5ffa5e6740973914a03df39384 Mon Sep 17 00:00:00 2001 From: tempcode Date: Mon, 11 Sep 2023 14:41:33 +0200 Subject: [PATCH 04/12] test: added tests for PageTitleBuilder --- .../Title/PageTitleBuilderTests.cs | 134 ++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 test/OrchardCore.Tests/DisplayManagement/Title/PageTitleBuilderTests.cs diff --git a/test/OrchardCore.Tests/DisplayManagement/Title/PageTitleBuilderTests.cs b/test/OrchardCore.Tests/DisplayManagement/Title/PageTitleBuilderTests.cs new file mode 100644 index 00000000000..5ca4632650f --- /dev/null +++ b/test/OrchardCore.Tests/DisplayManagement/Title/PageTitleBuilderTests.cs @@ -0,0 +1,134 @@ +using OrchardCore.DisplayManagement; +using OrchardCore.DisplayManagement.Extensions; +using OrchardCore.DisplayManagement.Title; +using OrchardCore.Environment.Extensions; +using OrchardCore.Localization; +using OrchardCore.Tests.Stubs; + +namespace OrchardCore.DisplayManagement.Title +{ + public class PageTitleBuilderTests + { + private readonly IServiceProvider _serviceProvider; + + public PageTitleBuilderTests() + { + + IServiceCollection serviceCollection = new ServiceCollection(); + + serviceCollection.AddScoped(); + + _serviceProvider = serviceCollection.BuildServiceProvider(); + } + + [Fact] + public void GenerateTitleEmpty() + { + var pageTitleBuilder = _serviceProvider.GetService(); + + + Assert.Equal("", pageTitleBuilder.GenerateTitle().GetString()); + } + + [Fact] + public void FixedTitleSet() + { + var pageTitleBuilder = _serviceProvider.GetService(); + pageTitleBuilder.SetFixedTitle(new HtmlString("I'm a title")); + + Assert.Equal("I'm a title", pageTitleBuilder.GenerateTitle().GetString()); + } + + [Fact] + public void FixedTitleClearAndCheck() + { + var pageTitleBuilder = _serviceProvider.GetService(); + pageTitleBuilder.SetFixedTitle(new HtmlString("I'm a title")); + pageTitleBuilder.Clear(); + + Assert.Equal("", pageTitleBuilder.GenerateTitle().GetString()); + } + + [Fact] + public void FixedTitleAddSegment() + { + var pageTitleBuilder = _serviceProvider.GetService(); + pageTitleBuilder.SetFixedTitle(new HtmlString("I'm a title")); + + pageTitleBuilder.AddSegment(new HtmlString("you don't see me")); + + Assert.Equal("I'm a title", pageTitleBuilder.GenerateTitle().GetString()); + } + + + [Fact] + public void TitleAddSegment() + { + var pageTitleBuilder = _serviceProvider.GetService(); + pageTitleBuilder.Clear(); + + pageTitleBuilder.AddSegment(new HtmlString("you have to see me"), "after"); + + Assert.Equal("you have to see me", pageTitleBuilder.GenerateTitle().GetString()); + } + + [Fact] + public void TitleMultiAddSegment() + { + var pageTitleBuilder = _serviceProvider.GetService(); + pageTitleBuilder.Clear(); + + pageTitleBuilder.AddSegment(new HtmlString("first part"), "after"); + + Assert.Equal("first part", pageTitleBuilder.GenerateTitle(new HtmlString(" - ")).GetString()); + + pageTitleBuilder.AddSegment(new HtmlString("second part"), "after"); + + Assert.Equal("first part - second part", pageTitleBuilder.GenerateTitle(new HtmlString(" - ")).GetString()); + } + + [Fact] + public void TitleAddAndClear() + { + var pageTitleBuilder = _serviceProvider.GetService(); + pageTitleBuilder.Clear(); + + pageTitleBuilder.AddSegment(new HtmlString("first part"), "after"); + + Assert.Equal("first part", pageTitleBuilder.GenerateTitle(new HtmlString(" - ")).GetString()); + + pageTitleBuilder.Clear(); + + Assert.Equal("", pageTitleBuilder.GenerateTitle(new HtmlString(" - ")).GetString()); + } + + [Fact] + public void TitleMultiGenerateTitle() + { + var pageTitleBuilder = _serviceProvider.GetService(); + pageTitleBuilder.Clear(); + + pageTitleBuilder.AddSegment(new HtmlString("first part"), "after"); + + Assert.Equal("first part", pageTitleBuilder.GenerateTitle(new HtmlString(" - ")).GetString()); + + Assert.Equal("first part", pageTitleBuilder.GenerateTitle(new HtmlString(" - ")).GetString()); + } + + [Fact] + public void TitleAddSegments() + { + var pageTitleBuilder = (PageTitleBuilder)_serviceProvider.GetService(); + pageTitleBuilder.Clear(); + + var elements = new IHtmlContent[] + { + new HtmlString("the first part"), + new HtmlString("the second one") + }; + pageTitleBuilder.AddSegments(elements, "after"); + + Assert.Equal("the first part - the second one", pageTitleBuilder.GenerateTitle(new HtmlString(" - ")).GetString()); + } + } +} From 75d6fe09b26162c84d91a265a74a514745de132f Mon Sep 17 00:00:00 2001 From: tempcode Date: Mon, 11 Sep 2023 18:33:19 +0200 Subject: [PATCH 05/12] test: removed empty lines, String.Empty --- .../Title/PageTitleBuilderTests.cs | 28 ++++++++----------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/test/OrchardCore.Tests/DisplayManagement/Title/PageTitleBuilderTests.cs b/test/OrchardCore.Tests/DisplayManagement/Title/PageTitleBuilderTests.cs index 5ca4632650f..01bb008e4ae 100644 --- a/test/OrchardCore.Tests/DisplayManagement/Title/PageTitleBuilderTests.cs +++ b/test/OrchardCore.Tests/DisplayManagement/Title/PageTitleBuilderTests.cs @@ -1,19 +1,15 @@ -using OrchardCore.DisplayManagement; using OrchardCore.DisplayManagement.Extensions; -using OrchardCore.DisplayManagement.Title; -using OrchardCore.Environment.Extensions; -using OrchardCore.Localization; -using OrchardCore.Tests.Stubs; namespace OrchardCore.DisplayManagement.Title { public class PageTitleBuilderTests { + private const string SEPARATOR = " - "; + private readonly IServiceProvider _serviceProvider; public PageTitleBuilderTests() { - IServiceCollection serviceCollection = new ServiceCollection(); serviceCollection.AddScoped(); @@ -25,9 +21,8 @@ public PageTitleBuilderTests() public void GenerateTitleEmpty() { var pageTitleBuilder = _serviceProvider.GetService(); - - Assert.Equal("", pageTitleBuilder.GenerateTitle().GetString()); + Assert.Equal(String.Empty, pageTitleBuilder.GenerateTitle().GetString()); } [Fact] @@ -46,7 +41,7 @@ public void FixedTitleClearAndCheck() pageTitleBuilder.SetFixedTitle(new HtmlString("I'm a title")); pageTitleBuilder.Clear(); - Assert.Equal("", pageTitleBuilder.GenerateTitle().GetString()); + Assert.Equal(String.Empty, pageTitleBuilder.GenerateTitle().GetString()); } [Fact] @@ -80,11 +75,11 @@ public void TitleMultiAddSegment() pageTitleBuilder.AddSegment(new HtmlString("first part"), "after"); - Assert.Equal("first part", pageTitleBuilder.GenerateTitle(new HtmlString(" - ")).GetString()); + Assert.Equal("first part", pageTitleBuilder.GenerateTitle(new HtmlString(SEPARATOR)).GetString()); pageTitleBuilder.AddSegment(new HtmlString("second part"), "after"); - Assert.Equal("first part - second part", pageTitleBuilder.GenerateTitle(new HtmlString(" - ")).GetString()); + Assert.Equal("first part - second part", pageTitleBuilder.GenerateTitle(new HtmlString(SEPARATOR)).GetString()); } [Fact] @@ -95,11 +90,11 @@ public void TitleAddAndClear() pageTitleBuilder.AddSegment(new HtmlString("first part"), "after"); - Assert.Equal("first part", pageTitleBuilder.GenerateTitle(new HtmlString(" - ")).GetString()); + Assert.Equal("first part", pageTitleBuilder.GenerateTitle(new HtmlString(SEPARATOR)).GetString()); pageTitleBuilder.Clear(); - Assert.Equal("", pageTitleBuilder.GenerateTitle(new HtmlString(" - ")).GetString()); + Assert.Equal(String.Empty, pageTitleBuilder.GenerateTitle(new HtmlString(SEPARATOR)).GetString()); } [Fact] @@ -110,9 +105,8 @@ public void TitleMultiGenerateTitle() pageTitleBuilder.AddSegment(new HtmlString("first part"), "after"); - Assert.Equal("first part", pageTitleBuilder.GenerateTitle(new HtmlString(" - ")).GetString()); - - Assert.Equal("first part", pageTitleBuilder.GenerateTitle(new HtmlString(" - ")).GetString()); + Assert.Equal("first part", pageTitleBuilder.GenerateTitle(new HtmlString(SEPARATOR)).GetString()); + Assert.Equal("first part", pageTitleBuilder.GenerateTitle(new HtmlString(SEPARATOR)).GetString()); } [Fact] @@ -128,7 +122,7 @@ public void TitleAddSegments() }; pageTitleBuilder.AddSegments(elements, "after"); - Assert.Equal("the first part - the second one", pageTitleBuilder.GenerateTitle(new HtmlString(" - ")).GetString()); + Assert.Equal("the first part - the second one", pageTitleBuilder.GenerateTitle(new HtmlString(SEPARATOR)).GetString()); } } } From 9f36465608ceb43f5570287a09442b00f3871718 Mon Sep 17 00:00:00 2001 From: tempcode Date: Wed, 13 Sep 2023 09:19:16 +0200 Subject: [PATCH 06/12] style: added const in test, line and string.Empty --- .../Extensions/HtmlContentExtensions.cs | 2 +- .../Title/PageTitleBuilder.cs | 2 +- .../Title/PageTitleBuilderTests.cs | 46 ++++++++++--------- 3 files changed, 27 insertions(+), 23 deletions(-) diff --git a/src/OrchardCore/OrchardCore.DisplayManagement/Extensions/HtmlContentExtensions.cs b/src/OrchardCore/OrchardCore.DisplayManagement/Extensions/HtmlContentExtensions.cs index 650122acd30..e857575f1d9 100644 --- a/src/OrchardCore/OrchardCore.DisplayManagement/Extensions/HtmlContentExtensions.cs +++ b/src/OrchardCore/OrchardCore.DisplayManagement/Extensions/HtmlContentExtensions.cs @@ -13,4 +13,4 @@ public static string GetString(this IHtmlContent content) return writer.ToString(); } -} \ No newline at end of file +} diff --git a/src/OrchardCore/OrchardCore.DisplayManagement/Title/PageTitleBuilder.cs b/src/OrchardCore/OrchardCore.DisplayManagement/Title/PageTitleBuilder.cs index b604ee2a1d9..6842faf39fa 100644 --- a/src/OrchardCore/OrchardCore.DisplayManagement/Title/PageTitleBuilder.cs +++ b/src/OrchardCore/OrchardCore.DisplayManagement/Title/PageTitleBuilder.cs @@ -50,7 +50,7 @@ public IHtmlContent GenerateTitle(IHtmlContent separator) return _fixedTitle; } - if (_title != null && String.Empty != _title.GetString()) + if (_title != null && string.Empty != _title.GetString()) { return _title; } diff --git a/test/OrchardCore.Tests/DisplayManagement/Title/PageTitleBuilderTests.cs b/test/OrchardCore.Tests/DisplayManagement/Title/PageTitleBuilderTests.cs index 01bb008e4ae..8896ae49e24 100644 --- a/test/OrchardCore.Tests/DisplayManagement/Title/PageTitleBuilderTests.cs +++ b/test/OrchardCore.Tests/DisplayManagement/Title/PageTitleBuilderTests.cs @@ -4,7 +4,11 @@ namespace OrchardCore.DisplayManagement.Title { public class PageTitleBuilderTests { - private const string SEPARATOR = " - "; + private const string Separator = " - "; + private const string SimpleTitle = "I'm a title"; + private const string FirstPartTitle = "first part"; + private const string SecondPartTitle = "second part"; + private readonly IServiceProvider _serviceProvider; @@ -29,16 +33,16 @@ public void GenerateTitleEmpty() public void FixedTitleSet() { var pageTitleBuilder = _serviceProvider.GetService(); - pageTitleBuilder.SetFixedTitle(new HtmlString("I'm a title")); + pageTitleBuilder.SetFixedTitle(new HtmlString(SimpleTitle)); - Assert.Equal("I'm a title", pageTitleBuilder.GenerateTitle().GetString()); + Assert.Equal(SimpleTitle, pageTitleBuilder.GenerateTitle().GetString()); } [Fact] public void FixedTitleClearAndCheck() { var pageTitleBuilder = _serviceProvider.GetService(); - pageTitleBuilder.SetFixedTitle(new HtmlString("I'm a title")); + pageTitleBuilder.SetFixedTitle(new HtmlString(SimpleTitle)); pageTitleBuilder.Clear(); Assert.Equal(String.Empty, pageTitleBuilder.GenerateTitle().GetString()); @@ -48,11 +52,11 @@ public void FixedTitleClearAndCheck() public void FixedTitleAddSegment() { var pageTitleBuilder = _serviceProvider.GetService(); - pageTitleBuilder.SetFixedTitle(new HtmlString("I'm a title")); + pageTitleBuilder.SetFixedTitle(new HtmlString(SimpleTitle)); pageTitleBuilder.AddSegment(new HtmlString("you don't see me")); - Assert.Equal("I'm a title", pageTitleBuilder.GenerateTitle().GetString()); + Assert.Equal(SimpleTitle, pageTitleBuilder.GenerateTitle().GetString()); } @@ -62,9 +66,9 @@ public void TitleAddSegment() var pageTitleBuilder = _serviceProvider.GetService(); pageTitleBuilder.Clear(); - pageTitleBuilder.AddSegment(new HtmlString("you have to see me"), "after"); + pageTitleBuilder.AddSegment(new HtmlString(SimpleTitle), "after"); - Assert.Equal("you have to see me", pageTitleBuilder.GenerateTitle().GetString()); + Assert.Equal(SimpleTitle, pageTitleBuilder.GenerateTitle().GetString()); } [Fact] @@ -73,13 +77,13 @@ public void TitleMultiAddSegment() var pageTitleBuilder = _serviceProvider.GetService(); pageTitleBuilder.Clear(); - pageTitleBuilder.AddSegment(new HtmlString("first part"), "after"); + pageTitleBuilder.AddSegment(new HtmlString(FirstPartTitle), "after"); - Assert.Equal("first part", pageTitleBuilder.GenerateTitle(new HtmlString(SEPARATOR)).GetString()); + Assert.Equal(FirstPartTitle, pageTitleBuilder.GenerateTitle(new HtmlString(Separator)).GetString()); - pageTitleBuilder.AddSegment(new HtmlString("second part"), "after"); + pageTitleBuilder.AddSegment(new HtmlString(SecondPartTitle), "after"); - Assert.Equal("first part - second part", pageTitleBuilder.GenerateTitle(new HtmlString(SEPARATOR)).GetString()); + Assert.Equal($"{FirstPartTitle}{Separator}{SecondPartTitle}", pageTitleBuilder.GenerateTitle(new HtmlString(Separator)).GetString()); } [Fact] @@ -88,13 +92,13 @@ public void TitleAddAndClear() var pageTitleBuilder = _serviceProvider.GetService(); pageTitleBuilder.Clear(); - pageTitleBuilder.AddSegment(new HtmlString("first part"), "after"); + pageTitleBuilder.AddSegment(new HtmlString(FirstPartTitle), "after"); - Assert.Equal("first part", pageTitleBuilder.GenerateTitle(new HtmlString(SEPARATOR)).GetString()); + Assert.Equal(FirstPartTitle, pageTitleBuilder.GenerateTitle(new HtmlString(Separator)).GetString()); pageTitleBuilder.Clear(); - Assert.Equal(String.Empty, pageTitleBuilder.GenerateTitle(new HtmlString(SEPARATOR)).GetString()); + Assert.Equal(String.Empty, pageTitleBuilder.GenerateTitle(new HtmlString(Separator)).GetString()); } [Fact] @@ -103,10 +107,10 @@ public void TitleMultiGenerateTitle() var pageTitleBuilder = _serviceProvider.GetService(); pageTitleBuilder.Clear(); - pageTitleBuilder.AddSegment(new HtmlString("first part"), "after"); + pageTitleBuilder.AddSegment(new HtmlString(FirstPartTitle), "after"); - Assert.Equal("first part", pageTitleBuilder.GenerateTitle(new HtmlString(SEPARATOR)).GetString()); - Assert.Equal("first part", pageTitleBuilder.GenerateTitle(new HtmlString(SEPARATOR)).GetString()); + Assert.Equal(FirstPartTitle, pageTitleBuilder.GenerateTitle(new HtmlString(Separator)).GetString()); + Assert.Equal(FirstPartTitle, pageTitleBuilder.GenerateTitle(new HtmlString(Separator)).GetString()); } [Fact] @@ -117,12 +121,12 @@ public void TitleAddSegments() var elements = new IHtmlContent[] { - new HtmlString("the first part"), - new HtmlString("the second one") + new HtmlString(FirstPartTitle), + new HtmlString(SecondPartTitle) }; pageTitleBuilder.AddSegments(elements, "after"); - Assert.Equal("the first part - the second one", pageTitleBuilder.GenerateTitle(new HtmlString(SEPARATOR)).GetString()); + Assert.Equal($"{FirstPartTitle}{Separator}{SecondPartTitle}", pageTitleBuilder.GenerateTitle(new HtmlString(Separator)).GetString()); } } } From 6f0c0ecc7ade28c978c2b59fde21dd4b3e13fa13 Mon Sep 17 00:00:00 2001 From: tempcode Date: Thu, 14 Sep 2023 10:03:10 +0200 Subject: [PATCH 07/12] fix: use different check for empty title fix: removed HtmlContentExtension, avoid unwant use of it fix: changed tests code to use a private version of extension removed --- .../Extensions/HtmlContentExtensions.cs | 16 -------- .../Title/PageTitleBuilder.cs | 5 +-- .../Title/PageTitleBuilderTests.cs | 37 ++++++++++++------- 3 files changed, 25 insertions(+), 33 deletions(-) delete mode 100644 src/OrchardCore/OrchardCore.DisplayManagement/Extensions/HtmlContentExtensions.cs diff --git a/src/OrchardCore/OrchardCore.DisplayManagement/Extensions/HtmlContentExtensions.cs b/src/OrchardCore/OrchardCore.DisplayManagement/Extensions/HtmlContentExtensions.cs deleted file mode 100644 index e857575f1d9..00000000000 --- a/src/OrchardCore/OrchardCore.DisplayManagement/Extensions/HtmlContentExtensions.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System.IO; -using System.Text.Encodings.Web; -using Microsoft.AspNetCore.Html; - -namespace OrchardCore.DisplayManagement.Extensions; - -public static class HtmlContentExtensions -{ - public static string GetString(this IHtmlContent content) - { - using var writer = new StringWriter(); - content.WriteTo(writer, HtmlEncoder.Default); - - return writer.ToString(); - } -} diff --git a/src/OrchardCore/OrchardCore.DisplayManagement/Title/PageTitleBuilder.cs b/src/OrchardCore/OrchardCore.DisplayManagement/Title/PageTitleBuilder.cs index 6842faf39fa..5e8ff8ceace 100644 --- a/src/OrchardCore/OrchardCore.DisplayManagement/Title/PageTitleBuilder.cs +++ b/src/OrchardCore/OrchardCore.DisplayManagement/Title/PageTitleBuilder.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using Microsoft.AspNetCore.Html; using OrchardCore.DisplayManagement.Zones; -using OrchardCore.DisplayManagement.Extensions; namespace OrchardCore.DisplayManagement.Title { @@ -11,7 +10,7 @@ public class PageTitleBuilder : IPageTitleBuilder private readonly static HtmlString _defaultTitleSeparator = new(" - "); private readonly List _titleParts; - private IHtmlContent _title; + private HtmlContentBuilder _title; private IHtmlContent _fixedTitle; public PageTitleBuilder() @@ -50,7 +49,7 @@ public IHtmlContent GenerateTitle(IHtmlContent separator) return _fixedTitle; } - if (_title != null && string.Empty != _title.GetString()) + if (_title is { Count: > 0 }) { return _title; } diff --git a/test/OrchardCore.Tests/DisplayManagement/Title/PageTitleBuilderTests.cs b/test/OrchardCore.Tests/DisplayManagement/Title/PageTitleBuilderTests.cs index 8896ae49e24..06ed30e550f 100644 --- a/test/OrchardCore.Tests/DisplayManagement/Title/PageTitleBuilderTests.cs +++ b/test/OrchardCore.Tests/DisplayManagement/Title/PageTitleBuilderTests.cs @@ -1,4 +1,4 @@ -using OrchardCore.DisplayManagement.Extensions; +using Cysharp.Text; namespace OrchardCore.DisplayManagement.Title { @@ -25,8 +25,8 @@ public PageTitleBuilderTests() public void GenerateTitleEmpty() { var pageTitleBuilder = _serviceProvider.GetService(); - - Assert.Equal(String.Empty, pageTitleBuilder.GenerateTitle().GetString()); + + Assert.Equal(string.Empty, ToString(pageTitleBuilder.GenerateTitle())); } [Fact] @@ -35,7 +35,7 @@ public void FixedTitleSet() var pageTitleBuilder = _serviceProvider.GetService(); pageTitleBuilder.SetFixedTitle(new HtmlString(SimpleTitle)); - Assert.Equal(SimpleTitle, pageTitleBuilder.GenerateTitle().GetString()); + Assert.Equal(SimpleTitle, ToString(pageTitleBuilder.GenerateTitle())); } [Fact] @@ -45,7 +45,7 @@ public void FixedTitleClearAndCheck() pageTitleBuilder.SetFixedTitle(new HtmlString(SimpleTitle)); pageTitleBuilder.Clear(); - Assert.Equal(String.Empty, pageTitleBuilder.GenerateTitle().GetString()); + Assert.Equal(string.Empty, ToString(pageTitleBuilder.GenerateTitle())); } [Fact] @@ -56,7 +56,7 @@ public void FixedTitleAddSegment() pageTitleBuilder.AddSegment(new HtmlString("you don't see me")); - Assert.Equal(SimpleTitle, pageTitleBuilder.GenerateTitle().GetString()); + Assert.Equal(SimpleTitle, ToString(pageTitleBuilder.GenerateTitle())); } @@ -68,7 +68,7 @@ public void TitleAddSegment() pageTitleBuilder.AddSegment(new HtmlString(SimpleTitle), "after"); - Assert.Equal(SimpleTitle, pageTitleBuilder.GenerateTitle().GetString()); + Assert.Equal(SimpleTitle, ToString(pageTitleBuilder.GenerateTitle())); } [Fact] @@ -79,11 +79,11 @@ public void TitleMultiAddSegment() pageTitleBuilder.AddSegment(new HtmlString(FirstPartTitle), "after"); - Assert.Equal(FirstPartTitle, pageTitleBuilder.GenerateTitle(new HtmlString(Separator)).GetString()); + Assert.Equal(FirstPartTitle, ToString(pageTitleBuilder.GenerateTitle(new HtmlString(Separator)))); pageTitleBuilder.AddSegment(new HtmlString(SecondPartTitle), "after"); - Assert.Equal($"{FirstPartTitle}{Separator}{SecondPartTitle}", pageTitleBuilder.GenerateTitle(new HtmlString(Separator)).GetString()); + Assert.Equal($"{FirstPartTitle}{Separator}{SecondPartTitle}", ToString(pageTitleBuilder.GenerateTitle(new HtmlString(Separator)))); } [Fact] @@ -94,11 +94,11 @@ public void TitleAddAndClear() pageTitleBuilder.AddSegment(new HtmlString(FirstPartTitle), "after"); - Assert.Equal(FirstPartTitle, pageTitleBuilder.GenerateTitle(new HtmlString(Separator)).GetString()); + Assert.Equal(FirstPartTitle, ToString(pageTitleBuilder.GenerateTitle(new HtmlString(Separator)))); pageTitleBuilder.Clear(); - Assert.Equal(String.Empty, pageTitleBuilder.GenerateTitle(new HtmlString(Separator)).GetString()); + Assert.Equal(string.Empty, ToString(pageTitleBuilder.GenerateTitle(new HtmlString(Separator)))); } [Fact] @@ -109,8 +109,8 @@ public void TitleMultiGenerateTitle() pageTitleBuilder.AddSegment(new HtmlString(FirstPartTitle), "after"); - Assert.Equal(FirstPartTitle, pageTitleBuilder.GenerateTitle(new HtmlString(Separator)).GetString()); - Assert.Equal(FirstPartTitle, pageTitleBuilder.GenerateTitle(new HtmlString(Separator)).GetString()); + Assert.Equal(FirstPartTitle, ToString(pageTitleBuilder.GenerateTitle(new HtmlString(Separator)))); + Assert.Equal(FirstPartTitle, ToString(pageTitleBuilder.GenerateTitle(new HtmlString(Separator)))); } [Fact] @@ -126,7 +126,16 @@ public void TitleAddSegments() }; pageTitleBuilder.AddSegments(elements, "after"); - Assert.Equal($"{FirstPartTitle}{Separator}{SecondPartTitle}", pageTitleBuilder.GenerateTitle(new HtmlString(Separator)).GetString()); + Assert.Equal($"{FirstPartTitle}{Separator}{SecondPartTitle}", ToString(pageTitleBuilder.GenerateTitle(new HtmlString(Separator)))); + } + + + private static string ToString(IHtmlContent content) + { + using var writer = new ZStringWriter(); + content.WriteTo(writer, HtmlEncoder.Default); + + return writer.ToString(); } } } From b0be94cfc8324df40e0f7065cd017f374b9b5145 Mon Sep 17 00:00:00 2001 From: tempcode Date: Thu, 28 Sep 2023 19:36:31 +0200 Subject: [PATCH 08/12] fix: moved HtmlContentBuilder in a best position fix: init HtmlContentBuilder with a size --- .../OrchardCore.DisplayManagement/Title/PageTitleBuilder.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/OrchardCore/OrchardCore.DisplayManagement/Title/PageTitleBuilder.cs b/src/OrchardCore/OrchardCore.DisplayManagement/Title/PageTitleBuilder.cs index 5e8ff8ceace..ebad663676b 100644 --- a/src/OrchardCore/OrchardCore.DisplayManagement/Title/PageTitleBuilder.cs +++ b/src/OrchardCore/OrchardCore.DisplayManagement/Title/PageTitleBuilder.cs @@ -58,13 +58,14 @@ public IHtmlContent GenerateTitle(IHtmlContent separator) _titleParts.Sort(FlatPositionComparer.Instance); - var htmlContentBuilder = new HtmlContentBuilder(); - if (_titleParts.Count == 0) { return HtmlString.Empty; } + // _titleParts.Count * 2 because we add a separator for each entry + var htmlContentBuilder = new HtmlContentBuilder(_titleParts.Count * 2); + for (var i = 0; i < _titleParts.Count; i++) { htmlContentBuilder.AppendHtml(_titleParts[i].Value); From ed1cbba4904af4bcf57cf3318bacb98e87df38b4 Mon Sep 17 00:00:00 2001 From: tempcode Date: Mon, 15 Jan 2024 09:29:02 +0100 Subject: [PATCH 09/12] fix: comment, using var --- .../Title/PageTitleBuilderTests.cs | 33 +++++++++++-------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/test/OrchardCore.Tests/DisplayManagement/Title/PageTitleBuilderTests.cs b/test/OrchardCore.Tests/DisplayManagement/Title/PageTitleBuilderTests.cs index 06ed30e550f..845a233ba45 100644 --- a/test/OrchardCore.Tests/DisplayManagement/Title/PageTitleBuilderTests.cs +++ b/test/OrchardCore.Tests/DisplayManagement/Title/PageTitleBuilderTests.cs @@ -9,13 +9,11 @@ public class PageTitleBuilderTests private const string FirstPartTitle = "first part"; private const string SecondPartTitle = "second part"; - private readonly IServiceProvider _serviceProvider; public PageTitleBuilderTests() { - IServiceCollection serviceCollection = new ServiceCollection(); - + var serviceCollection = new ServiceCollection(); serviceCollection.AddScoped(); _serviceProvider = serviceCollection.BuildServiceProvider(); @@ -24,91 +22,99 @@ public PageTitleBuilderTests() [Fact] public void GenerateTitleEmpty() { + // Arrange var pageTitleBuilder = _serviceProvider.GetService(); + // Act & Assert Assert.Equal(string.Empty, ToString(pageTitleBuilder.GenerateTitle())); } [Fact] public void FixedTitleSet() { + // Arrange var pageTitleBuilder = _serviceProvider.GetService(); pageTitleBuilder.SetFixedTitle(new HtmlString(SimpleTitle)); + // Act & Assert Assert.Equal(SimpleTitle, ToString(pageTitleBuilder.GenerateTitle())); } [Fact] public void FixedTitleClearAndCheck() { + // Arrange var pageTitleBuilder = _serviceProvider.GetService(); pageTitleBuilder.SetFixedTitle(new HtmlString(SimpleTitle)); pageTitleBuilder.Clear(); + // Act & Assert Assert.Equal(string.Empty, ToString(pageTitleBuilder.GenerateTitle())); } [Fact] public void FixedTitleAddSegment() { + // Arrange var pageTitleBuilder = _serviceProvider.GetService(); pageTitleBuilder.SetFixedTitle(new HtmlString(SimpleTitle)); + // Act & Assert pageTitleBuilder.AddSegment(new HtmlString("you don't see me")); - Assert.Equal(SimpleTitle, ToString(pageTitleBuilder.GenerateTitle())); } - [Fact] public void TitleAddSegment() { + // Arrange var pageTitleBuilder = _serviceProvider.GetService(); pageTitleBuilder.Clear(); + // Act & Assert pageTitleBuilder.AddSegment(new HtmlString(SimpleTitle), "after"); - Assert.Equal(SimpleTitle, ToString(pageTitleBuilder.GenerateTitle())); } [Fact] public void TitleMultiAddSegment() { + // Arrange var pageTitleBuilder = _serviceProvider.GetService(); pageTitleBuilder.Clear(); + // Act & Assert pageTitleBuilder.AddSegment(new HtmlString(FirstPartTitle), "after"); - Assert.Equal(FirstPartTitle, ToString(pageTitleBuilder.GenerateTitle(new HtmlString(Separator)))); - pageTitleBuilder.AddSegment(new HtmlString(SecondPartTitle), "after"); - Assert.Equal($"{FirstPartTitle}{Separator}{SecondPartTitle}", ToString(pageTitleBuilder.GenerateTitle(new HtmlString(Separator)))); } [Fact] public void TitleAddAndClear() { + // Arrange var pageTitleBuilder = _serviceProvider.GetService(); pageTitleBuilder.Clear(); + // Act & Assert pageTitleBuilder.AddSegment(new HtmlString(FirstPartTitle), "after"); - Assert.Equal(FirstPartTitle, ToString(pageTitleBuilder.GenerateTitle(new HtmlString(Separator)))); - pageTitleBuilder.Clear(); - Assert.Equal(string.Empty, ToString(pageTitleBuilder.GenerateTitle(new HtmlString(Separator)))); } [Fact] public void TitleMultiGenerateTitle() { + // Arrange var pageTitleBuilder = _serviceProvider.GetService(); pageTitleBuilder.Clear(); + // Act pageTitleBuilder.AddSegment(new HtmlString(FirstPartTitle), "after"); + // Assert Assert.Equal(FirstPartTitle, ToString(pageTitleBuilder.GenerateTitle(new HtmlString(Separator)))); Assert.Equal(FirstPartTitle, ToString(pageTitleBuilder.GenerateTitle(new HtmlString(Separator)))); } @@ -116,6 +122,7 @@ public void TitleMultiGenerateTitle() [Fact] public void TitleAddSegments() { + // Arrange var pageTitleBuilder = (PageTitleBuilder)_serviceProvider.GetService(); pageTitleBuilder.Clear(); @@ -126,10 +133,10 @@ public void TitleAddSegments() }; pageTitleBuilder.AddSegments(elements, "after"); + // Act & Assert Assert.Equal($"{FirstPartTitle}{Separator}{SecondPartTitle}", ToString(pageTitleBuilder.GenerateTitle(new HtmlString(Separator)))); } - private static string ToString(IHtmlContent content) { using var writer = new ZStringWriter(); From 42adadb97c1db8dcebcfe2cdba17da6a5e46db49 Mon Sep 17 00:00:00 2001 From: Hisham Bin Ateya Date: Mon, 15 Jan 2024 13:35:11 +0300 Subject: [PATCH 10/12] Update test/OrchardCore.Tests/DisplayManagement/Title/PageTitleBuilderTests.cs --- .../DisplayManagement/Title/PageTitleBuilderTests.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/test/OrchardCore.Tests/DisplayManagement/Title/PageTitleBuilderTests.cs b/test/OrchardCore.Tests/DisplayManagement/Title/PageTitleBuilderTests.cs index 845a233ba45..13f43e26f15 100644 --- a/test/OrchardCore.Tests/DisplayManagement/Title/PageTitleBuilderTests.cs +++ b/test/OrchardCore.Tests/DisplayManagement/Title/PageTitleBuilderTests.cs @@ -136,7 +136,6 @@ public void TitleAddSegments() // Act & Assert Assert.Equal($"{FirstPartTitle}{Separator}{SecondPartTitle}", ToString(pageTitleBuilder.GenerateTitle(new HtmlString(Separator)))); } - private static string ToString(IHtmlContent content) { using var writer = new ZStringWriter(); From ac4158b4ebd2d4904209dd4cf6a50ced924ac1fc Mon Sep 17 00:00:00 2001 From: Hisham Bin Ateya Date: Mon, 15 Jan 2024 13:41:04 +0300 Subject: [PATCH 11/12] Update test/OrchardCore.Tests/DisplayManagement/Title/PageTitleBuilderTests.cs --- .../DisplayManagement/Title/PageTitleBuilderTests.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/test/OrchardCore.Tests/DisplayManagement/Title/PageTitleBuilderTests.cs b/test/OrchardCore.Tests/DisplayManagement/Title/PageTitleBuilderTests.cs index 13f43e26f15..e48f0850e31 100644 --- a/test/OrchardCore.Tests/DisplayManagement/Title/PageTitleBuilderTests.cs +++ b/test/OrchardCore.Tests/DisplayManagement/Title/PageTitleBuilderTests.cs @@ -131,6 +131,7 @@ public void TitleAddSegments() new HtmlString(FirstPartTitle), new HtmlString(SecondPartTitle) }; + pageTitleBuilder.AddSegments(elements, "after"); // Act & Assert From 708a5121ef68bf63e5b630bea46cafc71ca2ac7b Mon Sep 17 00:00:00 2001 From: Hisham Bin Ateya Date: Mon, 15 Jan 2024 13:41:12 +0300 Subject: [PATCH 12/12] Update test/OrchardCore.Tests/DisplayManagement/Title/PageTitleBuilderTests.cs --- .../DisplayManagement/Title/PageTitleBuilderTests.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/test/OrchardCore.Tests/DisplayManagement/Title/PageTitleBuilderTests.cs b/test/OrchardCore.Tests/DisplayManagement/Title/PageTitleBuilderTests.cs index e48f0850e31..6ec26ae27b8 100644 --- a/test/OrchardCore.Tests/DisplayManagement/Title/PageTitleBuilderTests.cs +++ b/test/OrchardCore.Tests/DisplayManagement/Title/PageTitleBuilderTests.cs @@ -137,6 +137,7 @@ public void TitleAddSegments() // Act & Assert Assert.Equal($"{FirstPartTitle}{Separator}{SecondPartTitle}", ToString(pageTitleBuilder.GenerateTitle(new HtmlString(Separator)))); } + private static string ToString(IHtmlContent content) { using var writer = new ZStringWriter();