diff --git a/test/Microsoft.AspNetCore.Blazor.Test/RendererTest.cs b/test/Microsoft.AspNetCore.Blazor.Test/RendererTest.cs index e8c5b956e6..cafbb69964 100644 --- a/test/Microsoft.AspNetCore.Blazor.Test/RendererTest.cs +++ b/test/Microsoft.AspNetCore.Blazor.Test/RendererTest.cs @@ -31,7 +31,7 @@ namespace Microsoft.AspNetCore.Blazor.Test renderer.RenderNewBatch(componentId); // Assert - Assert.Collection(renderer.RenderTreesByComponentId[componentId], + Assert.Collection(renderer.Batches.Single().RenderTreesByComponentId[componentId], node => AssertNode.Element(node, "my element", 1), node => AssertNode.Text(node, "some text")); } @@ -52,7 +52,7 @@ namespace Microsoft.AspNetCore.Blazor.Test // Act/Assert var componentId = renderer.AssignComponentId(component); renderer.RenderNewBatch(componentId); - var componentNode = renderer.RenderTreesByComponentId[componentId] + var componentNode = renderer.Batches.Single().RenderTreesByComponentId[componentId] .Single(node => node.NodeType == RenderTreeNodeType.Component); var nestedComponentId = componentNode.ComponentId; @@ -60,7 +60,7 @@ namespace Microsoft.AspNetCore.Blazor.Test Assert.IsType(componentNode.Component); // The nested component was rendered as part of the batch - Assert.Collection(renderer.RenderTreesByComponentId[nestedComponentId], + Assert.Collection(renderer.Batches.Single().RenderTreesByComponentId[nestedComponentId], node => AssertNode.Text(node, "Nested component output")); } @@ -74,13 +74,13 @@ namespace Microsoft.AspNetCore.Blazor.Test // Act/Assert: first render renderer.RenderNewBatch(componentId); - Assert.Collection(renderer.RenderTreesByComponentId[componentId], + Assert.Collection(renderer.Batches.Single().RenderTreesByComponentId[componentId], node => AssertNode.Text(node, "Initial message")); // Act/Assert: second render component.Message = "Modified message"; renderer.RenderNewBatch(componentId); - Assert.Collection(renderer.RenderTreesByComponentId[componentId], + Assert.Collection(renderer.Batches[1].RenderTreesByComponentId[componentId], node => AssertNode.Text(node, "Modified message")); } @@ -96,7 +96,7 @@ namespace Microsoft.AspNetCore.Blazor.Test }); var parentComponentId = renderer.AssignComponentId(parentComponent); renderer.RenderNewBatch(parentComponentId); - var nestedComponentNode = renderer.RenderTreesByComponentId[parentComponentId] + var nestedComponentNode = renderer.Batches.Single().RenderTreesByComponentId[parentComponentId] .Single(node => node.NodeType == RenderTreeNodeType.Component); var nestedComponent = (MessageComponent)nestedComponentNode.Component; var nestedComponentId = nestedComponentNode.ComponentId; @@ -104,13 +104,13 @@ namespace Microsoft.AspNetCore.Blazor.Test // Act/Assert: inital render nestedComponent.Message = "Render 1"; renderer.RenderNewBatch(nestedComponentId); - Assert.Collection(renderer.RenderTreesByComponentId[nestedComponentId], + Assert.Collection(renderer.Batches[1].RenderTreesByComponentId[nestedComponentId], node => AssertNode.Text(node, "Render 1")); // Act/Assert: re-render nestedComponent.Message = "Render 2"; renderer.RenderNewBatch(nestedComponentId); - Assert.Collection(renderer.RenderTreesByComponentId[nestedComponentId], + Assert.Collection(renderer.Batches[2].RenderTreesByComponentId[nestedComponentId], node => AssertNode.Text(node, "Render 2")); } @@ -129,7 +129,7 @@ namespace Microsoft.AspNetCore.Blazor.Test renderer.RenderNewBatch(componentId); var (eventHandlerNodeIndex, _) = FirstWithIndex( - renderer.RenderTreesByComponentId[componentId], + renderer.Batches.Single().RenderTreesByComponentId[componentId], node => node.AttributeValue != null); // Assert: Event not yet fired @@ -157,7 +157,7 @@ namespace Microsoft.AspNetCore.Blazor.Test renderer.RenderNewBatch(parentComponentId); // Arrange: Render nested component - var nestedComponentNode = renderer.RenderTreesByComponentId[parentComponentId] + var nestedComponentNode = renderer.Batches.Single().RenderTreesByComponentId[parentComponentId] .Single(node => node.NodeType == RenderTreeNodeType.Component); var nestedComponent = (EventComponent)nestedComponentNode.Component; nestedComponent.Handler = args => { receivedArgs = args; }; @@ -166,7 +166,7 @@ namespace Microsoft.AspNetCore.Blazor.Test // Find nested component's event handler ndoe var (eventHandlerNodeIndex, _) = FirstWithIndex( - renderer.RenderTreesByComponentId[nestedComponentId], + renderer.Batches[1].RenderTreesByComponentId[nestedComponentId], node => node.AttributeValue != null); // Assert: Event not yet fired @@ -217,12 +217,12 @@ namespace Microsoft.AspNetCore.Blazor.Test // Act/Assert: Render component in renderer1 renderer1.RenderNewBatch(renderer1ComponentId); - Assert.True(renderer1.RenderTreesByComponentId.ContainsKey(renderer1ComponentId)); - Assert.False(renderer2.RenderTreesByComponentId.ContainsKey(renderer2ComponentId)); + Assert.True(renderer1.Batches.Single().RenderTreesByComponentId.ContainsKey(renderer1ComponentId)); + Assert.Empty(renderer2.Batches); // Act/Assert: Render same component in renderer2 renderer2.RenderNewBatch(renderer2ComponentId); - Assert.True(renderer2.RenderTreesByComponentId.ContainsKey(renderer2ComponentId)); + Assert.True(renderer2.Batches.Single().RenderTreesByComponentId.ContainsKey(renderer2ComponentId)); } [Fact] @@ -313,7 +313,7 @@ namespace Microsoft.AspNetCore.Blazor.Test var rootComponentId = renderer.AssignComponentId(component); renderer.RenderNewBatch(rootComponentId); - var nestedComponentInstance = (MessageComponent)renderer.RenderTreesByComponentId[rootComponentId] + var nestedComponentInstance = (MessageComponent)renderer.Batches.Single().RenderTreesByComponentId[rootComponentId] .Single(node => node.NodeType == RenderTreeNodeType.Component) .Component; @@ -322,7 +322,7 @@ namespace Microsoft.AspNetCore.Blazor.Test renderer.RenderNewBatch(rootComponentId); // Assert - Assert.Collection(renderer.RenderTreesByComponentId[rootComponentId], + Assert.Collection(renderer.Batches[1].RenderTreesByComponentId[rootComponentId], node => AssertNode.Text(node, "Modified message"), node => Assert.Same(nestedComponentInstance, node.Component)); } @@ -346,7 +346,7 @@ namespace Microsoft.AspNetCore.Blazor.Test var rootComponentId = renderer.AssignComponentId(component); renderer.RenderNewBatch(rootComponentId); - var originalComponentInstance = (FakeComponent)renderer.RenderTreesByComponentId[rootComponentId] + var originalComponentInstance = (FakeComponent)renderer.Batches.Single().RenderTreesByComponentId[rootComponentId] .Single(node => node.NodeType == RenderTreeNodeType.Component) .Component; @@ -359,7 +359,7 @@ namespace Microsoft.AspNetCore.Blazor.Test firstRender = false; renderer.RenderNewBatch(rootComponentId); - var updatedComponentInstance = (FakeComponent)renderer.RenderTreesByComponentId[rootComponentId] + var updatedComponentInstance = (FakeComponent)renderer.Batches[1].RenderTreesByComponentId[rootComponentId] .Single(node => node.NodeType == RenderTreeNodeType.Component) .Component; @@ -386,23 +386,19 @@ namespace Microsoft.AspNetCore.Blazor.Test var rootComponentId = renderer.AssignComponentId(component); renderer.RenderNewBatch(rootComponentId); - var childComponentId = renderer.RenderTreesByComponentId[rootComponentId] + var childComponentId = renderer.Batches.Single().RenderTreesByComponentId[rootComponentId] .Single(node => node.NodeType == RenderTreeNodeType.Component) .ComponentId; - // This isn't strictly necessary for the test, but it's more common for components - // to be updated after their first render than before it - renderer.RenderNewBatch(childComponentId); - // Act: Second render firstRender = false; renderer.RenderNewBatch(rootComponentId); - var updatedComponentNode = renderer.RenderTreesByComponentId[rootComponentId] + var updatedComponentNode = renderer.Batches[1].RenderTreesByComponentId[rootComponentId] .Single(node => node.NodeType == RenderTreeNodeType.Component); // Assert - Assert.Collection(renderer.RenderTreesByComponentId[updatedComponentNode.ComponentId], + Assert.Collection(renderer.Batches[1].RenderTreesByComponentId[updatedComponentNode.ComponentId], node => AssertNode.Text(node, "second")); } @@ -421,8 +417,8 @@ namespace Microsoft.AspNetCore.Blazor.Test private class TestRenderer : Renderer { - public IDictionary> RenderTreesByComponentId { get; } - = new Dictionary>(); + public List Batches { get; } + = new List(); public new int AssignComponentId(IComponent component) => base.AssignComponentId(component); @@ -435,15 +431,24 @@ namespace Microsoft.AspNetCore.Blazor.Test protected internal override void UpdateDisplay(RenderBatch renderBatch) { - // TODO: Capture the batches and rephrase assertions in terms of those + var capturedBatch = new CapturedBatch(); + Batches.Add(capturedBatch); + for (var i = 0; i < renderBatch.UpdatedComponents.Count; i++) { ref var renderTreeDiff = ref renderBatch.UpdatedComponents.Array[i]; - RenderTreesByComponentId[renderTreeDiff.ComponentId] = renderTreeDiff.CurrentState; + capturedBatch.RenderTreesByComponentId[renderTreeDiff.ComponentId] = + renderTreeDiff.CurrentState.ToArray(); } } } + private class CapturedBatch + { + public IDictionary RenderTreesByComponentId { get; } + = new Dictionary(); + } + private class TestComponent : IComponent { private Action _renderAction;