From a5b047c68c4e3cb8e4a8e36a53dd55e4417b49bd Mon Sep 17 00:00:00 2001 From: Egil Hansen Date: Thu, 16 Jan 2020 21:27:42 +0000 Subject: [PATCH] Change GetNodes and GetMarkup to Nodes and Markup properties in IRenderedFragment --- .../Components/ThemedButtonTest.razor | 1 - src/Asserting/CompareToDiffingExtensions.cs | 5 +- .../MarkupMatchesAssertExtensions.cs | 9 ++-- .../ShouldBeAdditionAssertExtensions.cs | 2 +- .../ShouldBeRemovalAssertExtensions.cs | 2 +- .../ShouldBeTextChangeAssertExtensions.cs | 2 +- src/Rendering/IRenderedFragment.cs | 10 ++-- src/Rendering/RenderedComponent.cs | 2 +- src/Rendering/RenderedFragment.cs | 2 +- src/Rendering/RenderedFragmentBase.cs | 47 ++++++++++--------- .../CompareToDiffingExtensionsTest.cs | 7 ++- tests/ComponentTestFixtureTest.cs | 8 ++-- ...ntReferencesIncludedInRenderedMarkup.razor | 2 +- ...tAndFragmentFromRazorTestContextTest.razor | 6 +-- tests/RenderComponentTest.cs | 24 +++++----- tests/RenderedFragmentTest.cs | 18 +++---- 16 files changed, 73 insertions(+), 74 deletions(-) diff --git a/sample/tests/RazorTestComponents/Components/ThemedButtonTest.razor b/sample/tests/RazorTestComponents/Components/ThemedButtonTest.razor index 4dc524c95..60cc8d91a 100644 --- a/sample/tests/RazorTestComponents/Components/ThemedButtonTest.razor +++ b/sample/tests/RazorTestComponents/Components/ThemedButtonTest.razor @@ -15,7 +15,6 @@ void Test() { var cut = GetComponentUnderTest(); - var x = cut.GetMarkup(); cut.Find("button").ClassList.ShouldContain("btn"); } } \ No newline at end of file diff --git a/src/Asserting/CompareToDiffingExtensions.cs b/src/Asserting/CompareToDiffingExtensions.cs index 086b429c7..921c732e1 100644 --- a/src/Asserting/CompareToDiffingExtensions.cs +++ b/src/Asserting/CompareToDiffingExtensions.cs @@ -25,10 +25,9 @@ public static IReadOnlyList CompareTo(this IRenderedFragment actual, stri if (actual is null) throw new ArgumentNullException(nameof(actual)); if (expected is null) throw new ArgumentNullException(nameof(expected)); - var actualNodes = actual.GetNodes(); var expectedNodes = actual.TestContext.CreateNodes(expected); - return actualNodes.CompareTo(expectedNodes); + return actual.Nodes.CompareTo(expectedNodes); } /// @@ -43,7 +42,7 @@ public static IReadOnlyList CompareTo(this IRenderedFragment actual, IRen if (actual is null) throw new ArgumentNullException(nameof(actual)); if (expected is null) throw new ArgumentNullException(nameof(expected)); - return actual.GetNodes().CompareTo(expected.GetNodes()); + return actual.Nodes.CompareTo(expected.Nodes); } /// diff --git a/src/Asserting/MarkupMatchesAssertExtensions.cs b/src/Asserting/MarkupMatchesAssertExtensions.cs index 2a672e5ed..5f55c510a 100644 --- a/src/Asserting/MarkupMatchesAssertExtensions.cs +++ b/src/Asserting/MarkupMatchesAssertExtensions.cs @@ -25,10 +25,9 @@ public static void MarkupMatches(this IRenderedFragment actual, string expected, if (actual is null) throw new ArgumentNullException(nameof(actual)); if (expected is null) throw new ArgumentNullException(nameof(expected)); - var actualNodes = actual.GetNodes(); var expectedNodes = actual.TestContext.CreateNodes(expected); - actualNodes.MarkupMatches(expectedNodes, userMessage); + actual.Nodes.MarkupMatches(expectedNodes, userMessage); } /// @@ -44,7 +43,7 @@ public static void MarkupMatches(this IRenderedFragment actual, IRenderedFragmen if (actual is null) throw new ArgumentNullException(nameof(actual)); if (expected is null) throw new ArgumentNullException(nameof(expected)); - actual.GetNodes().MarkupMatches(expected.GetNodes(), userMessage); + actual.Nodes.MarkupMatches(expected.Nodes, userMessage); } /// @@ -61,7 +60,7 @@ public static void MarkupMatches(this INodeList actual, IRenderedFragment expect if (actual is null) throw new ArgumentNullException(nameof(actual)); if (expected is null) throw new ArgumentNullException(nameof(expected)); - actual.MarkupMatches(expected.GetNodes(), userMessage); + actual.MarkupMatches(expected.Nodes, userMessage); } /// @@ -78,7 +77,7 @@ public static void MarkupMatches(this INode actual, IRenderedFragment expected, if (actual is null) throw new ArgumentNullException(nameof(actual)); if (expected is null) throw new ArgumentNullException(nameof(expected)); - actual.MarkupMatches(expected.GetNodes(), userMessage); + actual.MarkupMatches(expected.Nodes, userMessage); } /// diff --git a/src/Asserting/ShouldBeAdditionAssertExtensions.cs b/src/Asserting/ShouldBeAdditionAssertExtensions.cs index fd9aed4ca..2f57c04e6 100644 --- a/src/Asserting/ShouldBeAdditionAssertExtensions.cs +++ b/src/Asserting/ShouldBeAdditionAssertExtensions.cs @@ -55,7 +55,7 @@ public static void ShouldBeAddition(this IDiff actualChange, string expectedChan public static void ShouldBeAddition(this IDiff actualChange, IRenderedFragment expectedChange, string? userMessage = null) { if (expectedChange is null) throw new ArgumentNullException(nameof(expectedChange)); - ShouldBeAddition(actualChange, expectedChange.GetNodes(), userMessage); + ShouldBeAddition(actualChange, expectedChange.Nodes, userMessage); } /// diff --git a/src/Asserting/ShouldBeRemovalAssertExtensions.cs b/src/Asserting/ShouldBeRemovalAssertExtensions.cs index f24a79179..d75498b46 100644 --- a/src/Asserting/ShouldBeRemovalAssertExtensions.cs +++ b/src/Asserting/ShouldBeRemovalAssertExtensions.cs @@ -54,7 +54,7 @@ public static void ShouldBeRemoval(this IDiff actualChange, string expectedChang public static void ShouldBeRemoval(this IDiff actualChange, IRenderedFragment expectedChange, string? userMessage = null) { if (expectedChange is null) throw new ArgumentNullException(nameof(expectedChange)); - ShouldBeRemoval(actualChange, expectedChange.GetNodes(), userMessage); + ShouldBeRemoval(actualChange, expectedChange.Nodes, userMessage); } /// diff --git a/src/Asserting/ShouldBeTextChangeAssertExtensions.cs b/src/Asserting/ShouldBeTextChangeAssertExtensions.cs index a88d40f06..0770046cf 100644 --- a/src/Asserting/ShouldBeTextChangeAssertExtensions.cs +++ b/src/Asserting/ShouldBeTextChangeAssertExtensions.cs @@ -35,7 +35,7 @@ public static void ShouldBeTextChange(this IDiff actualChange, string expectedCh public static void ShouldBeTextChange(this IDiff actualChange, IRenderedFragment expectedChange, string? userMessage = null) { if (expectedChange is null) throw new ArgumentNullException(nameof(expectedChange)); - ShouldBeTextChange(actualChange, expectedChange.GetNodes(), userMessage); + ShouldBeTextChange(actualChange, expectedChange.Nodes, userMessage); } public static void ShouldBeTextChange(this IDiff actualChange, INodeList expectedChange, string? userMessage = null) diff --git a/src/Rendering/IRenderedFragment.cs b/src/Rendering/IRenderedFragment.cs index d60ba1c41..9742bb918 100644 --- a/src/Rendering/IRenderedFragment.cs +++ b/src/Rendering/IRenderedFragment.cs @@ -19,15 +19,13 @@ public interface IRenderedFragment /// /// Gets the HTML markup from the rendered fragment/component. /// - /// - string GetMarkup(); + string Markup { get; } /// /// Gets the AngleSharp based /// on the HTML markup from the rendered fragment/component. /// - /// - INodeList GetNodes(); + INodeList Nodes { get; } /// /// Performs a comparison of the markup produced by the initial rendering of the @@ -60,7 +58,7 @@ public interface IRenderedFragment /// The group of selectors to use. public IElement Find(string cssSelector) { - var result = GetNodes().QuerySelector(cssSelector); + var result = Nodes.QuerySelector(cssSelector); if (result is null) throw new ElementNotFoundException(cssSelector); else @@ -75,7 +73,7 @@ public IElement Find(string cssSelector) /// The group of selectors to use. public IHtmlCollection FindAll(string cssSelector) { - return GetNodes().QuerySelectorAll(cssSelector); + return Nodes.QuerySelectorAll(cssSelector); } } } \ No newline at end of file diff --git a/src/Rendering/RenderedComponent.cs b/src/Rendering/RenderedComponent.cs index f586301b7..e409120cf 100644 --- a/src/Rendering/RenderedComponent.cs +++ b/src/Rendering/RenderedComponent.cs @@ -43,7 +43,7 @@ public RenderedComponent(ITestContext testContext, RenderFragment renderFragment : base(testContext, renderFragment) { (ComponentId, Instance) = Container.GetComponent(); - FirstRenderMarkup = GetMarkup(); + FirstRenderMarkup = Markup; } /// diff --git a/src/Rendering/RenderedFragment.cs b/src/Rendering/RenderedFragment.cs index 724d74daa..130b32d5e 100644 --- a/src/Rendering/RenderedFragment.cs +++ b/src/Rendering/RenderedFragment.cs @@ -26,7 +26,7 @@ public class RenderedFragment : RenderedFragmentBase public RenderedFragment(ITestContext testContext, RenderFragment renderFragment) : base(testContext, renderFragment) { - FirstRenderMarkup = GetMarkup(); + FirstRenderMarkup = Markup; } } } diff --git a/src/Rendering/RenderedFragmentBase.cs b/src/Rendering/RenderedFragmentBase.cs index e90be618d..e02050b5b 100644 --- a/src/Rendering/RenderedFragmentBase.cs +++ b/src/Rendering/RenderedFragmentBase.cs @@ -39,6 +39,28 @@ public abstract class RenderedFragmentBase : IRenderedFragment /// public ITestContext TestContext { get; } + /// + public string Markup + { + get + { + if (_latestRenderMarkup is null) + _latestRenderMarkup = Htmlizer.GetHtml(TestContext.Renderer, ComponentId); + return _latestRenderMarkup; + } + } + + /// + public INodeList Nodes + { + get + { + if (_latestRenderNodes is null) + _latestRenderNodes = TestContext.CreateNodes(Markup); + return _latestRenderNodes; + } + } + /// /// Creates an instance of the class. /// @@ -56,7 +78,7 @@ public RenderedFragmentBase(ITestContext testContext, RenderFragment renderFragm public void SaveSnapshot() { _snapshotNodes = null; - _snapshotMarkup = GetMarkup(); + _snapshotMarkup = Markup; } /// @@ -65,10 +87,10 @@ public IReadOnlyList GetChangesSinceSnapshot() if (_snapshotMarkup is null) throw new InvalidOperationException($"No snapshot exists to compare with. Call {nameof(SaveSnapshot)} to create one."); - if(_snapshotNodes is null) + if (_snapshotNodes is null) _snapshotNodes = TestContext.CreateNodes(_snapshotMarkup); - return GetNodes().CompareTo(_snapshotNodes); + return Nodes.CompareTo(_snapshotNodes); } @@ -77,24 +99,7 @@ public IReadOnlyList GetChangesSinceFirstRender() { if (_firstRenderNodes is null) _firstRenderNodes = TestContext.CreateNodes(FirstRenderMarkup); - return GetNodes().CompareTo(_firstRenderNodes); - } - - - /// - public string GetMarkup() - { - if (_latestRenderMarkup is null) - _latestRenderMarkup = Htmlizer.GetHtml(TestContext.Renderer, ComponentId); - return _latestRenderMarkup; - } - - /// - public INodeList GetNodes() - { - if (_latestRenderNodes is null) - _latestRenderNodes = TestContext.CreateNodes(GetMarkup()); - return _latestRenderNodes; + return Nodes.CompareTo(_firstRenderNodes); } private void ComponentMarkupChanged(in RenderBatch renderBatch) diff --git a/tests/Asserting/CompareToDiffingExtensionsTest.cs b/tests/Asserting/CompareToDiffingExtensionsTest.cs index 7eb34e870..6f2c60448 100644 --- a/tests/Asserting/CompareToDiffingExtensionsTest.cs +++ b/tests/Asserting/CompareToDiffingExtensionsTest.cs @@ -54,7 +54,7 @@ public void Test002() var rf1 = RenderComponent((nameof(Simple1.Header), "FOO")); var rf2 = RenderComponent((nameof(Simple1.Header), "BAR")); - rf1.CompareTo(rf2.GetMarkup()).Count.ShouldBe(1); + rf1.CompareTo(rf2.Markup).Count.ShouldBe(1); } [Fact(DisplayName = "CompareTo with rendered fragment and rendered fragment")] @@ -73,10 +73,9 @@ public void Test004() var rf2 = RenderComponent((nameof(Simple1.Header), "BAR")); var elm = rf1.Find("h1"); - elm.CompareTo(rf2.GetNodes()).Count.ShouldBe(1); + elm.CompareTo(rf2.Nodes).Count.ShouldBe(1); } - [Fact(DisplayName = "CompareTo with INodeList and INode")] public void Test005() { @@ -84,7 +83,7 @@ public void Test005() var rf2 = RenderComponent((nameof(Simple1.Header), "BAR")); var elm = rf1.Find("h1"); - rf2.GetNodes().CompareTo(elm).Count.ShouldBe(1); + rf2.Nodes.CompareTo(elm).Count.ShouldBe(1); } } } diff --git a/tests/ComponentTestFixtureTest.cs b/tests/ComponentTestFixtureTest.cs index 6e3c24f76..fd5ec5e35 100644 --- a/tests/ComponentTestFixtureTest.cs +++ b/tests/ComponentTestFixtureTest.cs @@ -39,8 +39,8 @@ public void Test001() instance.NamedCascadingValue.ShouldBe(1337); Should.Throw(async () => await instance.NonGenericCallback.InvokeAsync(null)).Message.ShouldBe("NonGenericCallback"); Should.Throw(async () => await instance.GenericCallback.InvokeAsync(EventArgs.Empty)).Message.ShouldBe("GenericCallback"); - new RenderedFragment(this, instance.ChildContent!).GetMarkup().ShouldBe(nameof(ChildContent)); - new RenderedFragment(this, instance.OtherContent!).GetMarkup().ShouldBe(nameof(AllTypesOfParams.OtherContent)); + new RenderedFragment(this, instance.ChildContent!).Markup.ShouldBe(nameof(ChildContent)); + new RenderedFragment(this, instance.OtherContent!).Markup.ShouldBe(nameof(AllTypesOfParams.OtherContent)); Should.Throw(() => instance.ItemTemplate!("")(null)).Message.ShouldBe("ItemTemplate"); } @@ -78,8 +78,8 @@ public void Test002() instance.RegularParam.ShouldBe("some value"); Should.Throw(async () => await instance.NonGenericCallback.InvokeAsync(null)).Message.ShouldBe("NonGenericCallback"); Should.Throw(async () => await instance.GenericCallback.InvokeAsync(EventArgs.Empty)).Message.ShouldBe("GenericCallback"); - new RenderedFragment(this, instance.ChildContent!).GetMarkup().ShouldBe(nameof(ChildContent)); - new RenderedFragment(this, instance.OtherContent!).GetMarkup().ShouldBe(nameof(AllTypesOfParams.OtherContent)); + new RenderedFragment(this, instance.ChildContent!).Markup.ShouldBe(nameof(ChildContent)); + new RenderedFragment(this, instance.OtherContent!).Markup.ShouldBe(nameof(AllTypesOfParams.OtherContent)); Should.Throw(() => instance.ItemTemplate!("")(null)).Message.ShouldBe("ItemTemplate"); } diff --git a/tests/Components/TestComponentBaseTest/BlazorElementReferencesIncludedInRenderedMarkup.razor b/tests/Components/TestComponentBaseTest/BlazorElementReferencesIncludedInRenderedMarkup.razor index 6727165a2..3133f8108 100644 --- a/tests/Components/TestComponentBaseTest/BlazorElementReferencesIncludedInRenderedMarkup.razor +++ b/tests/Components/TestComponentBaseTest/BlazorElementReferencesIncludedInRenderedMarkup.razor @@ -13,7 +13,7 @@ { var cut = GetFragment(); - var html = cut.GetMarkup(); + var html = cut.Markup; html.ShouldContain($"=\"{refElm.Id}\""); } diff --git a/tests/Components/TestComponentBaseTest/GettingCutAndFragmentFromRazorTestContextTest.razor b/tests/Components/TestComponentBaseTest/GettingCutAndFragmentFromRazorTestContextTest.razor index 5af2ceb24..fc27ce7f0 100644 --- a/tests/Components/TestComponentBaseTest/GettingCutAndFragmentFromRazorTestContextTest.razor +++ b/tests/Components/TestComponentBaseTest/GettingCutAndFragmentFromRazorTestContextTest.razor @@ -16,7 +16,7 @@ var cut2 = GetComponentUnderTest(); Assert.True(ReferenceEquals(cut1, cut2), "Getting CUT multiple times should return the same instance"); - Assert.Equal("CUT", cut1.GetMarkup()); + Assert.Equal("CUT", cut1.Markup); var firstFragmentNoId1 = GetFragment(); var firstFragmentId1 = GetFragment("first"); @@ -25,13 +25,13 @@ Assert.True(ReferenceEquals(firstFragmentNoId1, firstFragmentId1), "Getting first fragment with and without id should return the same instance"); Assert.True(ReferenceEquals(firstFragmentNoId1, firstFragmentNoId2), "Getting first fragment multiple times should return the same instance"); Assert.True(ReferenceEquals(firstFragmentId1, firstFragmentId2), "Getting first fragment multiple times should return the same instance"); - Assert.Equal("first", firstFragmentNoId1.GetMarkup()); + Assert.Equal("first", firstFragmentNoId1.Markup); var secondFragmentId1 = GetFragment("second"); var secondFragmentId2 = GetFragment("second"); Assert.True(ReferenceEquals(secondFragmentId1, secondFragmentId2), "Getting fragment multiple times should return the same instance"); - Assert.Equal("second", secondFragmentId2.GetMarkup()); + Assert.Equal("second", secondFragmentId2.Markup); } } diff --git a/tests/RenderComponentTest.cs b/tests/RenderComponentTest.cs index 8a1785120..33379530d 100644 --- a/tests/RenderComponentTest.cs +++ b/tests/RenderComponentTest.cs @@ -7,54 +7,54 @@ namespace Egil.RazorComponents.Testing { public class RenderComponentTest : ComponentTestFixture { - [Fact(DisplayName = "GetNodes should return the same instance " + + [Fact(DisplayName = "Nodes should return the same instance " + "when a render has not resulted in any changes")] public void Test003() { var cut = RenderComponent(ChildContent("
")); - var initialNodes = cut.GetNodes(); + var initialNodes = cut.Nodes; cut.Render(); cut.SetParametersAndRender(ChildContent("
")); - Assert.Same(initialNodes, cut.GetNodes()); + Assert.Same(initialNodes, cut.Nodes); } - [Fact(DisplayName = "GetNodes should return new instance " + + [Fact(DisplayName = "Nodes should return new instance " + "when a SetParametersAndRender has caused changes to DOM tree")] public void Tets004() { var cut = RenderComponent(ChildContent("
")); - var initialNodes = cut.GetNodes(); + var initialNodes = cut.Nodes; cut.SetParametersAndRender(ChildContent("

")); - Assert.NotSame(initialNodes, cut.GetNodes()); + Assert.NotSame(initialNodes, cut.Nodes); cut.Find("p").ShouldNotBeNull(); } - [Fact(DisplayName = "GetNodes should return new instance " + + [Fact(DisplayName = "Nodes should return new instance " + "when a Render has caused changes to DOM tree")] public void Tets005() { var cut = RenderComponent(); - var initialNodes = cut.GetNodes(); + var initialNodes = cut.Nodes; cut.Render(); - Assert.NotSame(initialNodes, cut.GetNodes()); + Assert.NotSame(initialNodes, cut.Nodes); } - [Fact(DisplayName = "GetNodes should return new instance " + + [Fact(DisplayName = "Nodes should return new instance " + "when a event handler trigger has caused changes to DOM tree")] public void Tets006() { var cut = RenderComponent(); - var initialNodes = cut.GetNodes(); + var initialNodes = cut.Nodes; cut.Find("button").Click(); - Assert.NotSame(initialNodes, cut.GetNodes()); + Assert.NotSame(initialNodes, cut.Nodes); } diff --git a/tests/RenderedFragmentTest.cs b/tests/RenderedFragmentTest.cs index d68252dcd..ae5474a8f 100644 --- a/tests/RenderedFragmentTest.cs +++ b/tests/RenderedFragmentTest.cs @@ -27,47 +27,47 @@ public void Test002() result.ShouldNotBeNull(); } - [Fact(DisplayName = "GetNodes should return new instance when " + + [Fact(DisplayName = "Nodes should return new instance when " + "async operation during OnInit causes component to re-render")] public void Test003() { var testData = new AsyncNameDep(); Services.AddService(testData); var cut = RenderComponent(); - var initialValue = cut.GetNodes().Find("p").OuterHtml; + var initialValue = cut.Nodes.Find("p").OuterHtml; WaitForNextRender(() => testData.SetResult("Steve Sanderson")); - var steveValue = cut.GetNodes().Find("p").OuterHtml; + var steveValue = cut.Nodes.Find("p").OuterHtml; steveValue.ShouldNotBe(initialValue); } - [Fact(DisplayName = "GetNodes should return new instance when " + + [Fact(DisplayName = "Nodes should return new instance when " + "async operation/StateHasChanged during OnAfterRender causes component to re-render")] public void Test004() { var invocation = Services.AddMockJsRuntime().Setup("getdata"); var cut = RenderComponent(); - var initialValue = cut.GetNodes().Find("p").OuterHtml; + var initialValue = cut.Nodes.Find("p").OuterHtml; WaitForNextRender(() => invocation.SetResult("Steve Sanderson")); - var steveValue = cut.GetNodes().Find("p").OuterHtml; + var steveValue = cut.Nodes.Find("p").OuterHtml; steveValue.ShouldNotBe(initialValue); } - [Fact(DisplayName = "GetNodes on a components with child component returns " + + [Fact(DisplayName = "Nodes on a components with child component returns " + "new instance when the child component has changes")] public void Test005() { var invocation = Services.AddMockJsRuntime().Setup("getdata"); var notcut = RenderComponent(ChildContent()); var cut = RenderComponent(ChildContent()); - var initialValue = cut.GetNodes(); + var initialValue = cut.Nodes; WaitForNextRender(() => invocation.SetResult("Steve Sanderson"), TimeSpan.FromDays(1)); - Assert.NotSame(initialValue, cut.GetNodes()); + Assert.NotSame(initialValue, cut.Nodes); } }