Begin differentiating between rendering as a new batch on in an existing batch (even though batches don't exist yet)

This commit is contained in:
Steve Sanderson 2018-01-29 16:47:52 +00:00
parent 7799c36d50
commit 27d0ce4da9
5 changed files with 41 additions and 34 deletions

View File

@ -35,8 +35,8 @@ namespace Microsoft.AspNetCore.Blazor.Browser.Rendering
internal void DispatchBrowserEvent(int componentId, int renderTreeIndex, UIEventArgs eventArgs)
=> DispatchEvent(componentId, renderTreeIndex, eventArgs);
internal void RenderComponentInternal(int componentId)
=> RenderComponent(componentId);
internal void RenderNewBatchInternal(int componentId)
=> RenderNewBatch(componentId);
/// <summary>
/// Associates the <see cref="IComponent"/> with the <see cref="BrowserRenderer"/>,
@ -54,7 +54,7 @@ namespace Microsoft.AspNetCore.Blazor.Browser.Rendering
componentId);
_rootComponents.Add(component);
RenderComponent(componentId);
RenderNewBatch(componentId);
}
/// <summary>

View File

@ -35,7 +35,7 @@ namespace Microsoft.AspNetCore.Blazor.Browser.Rendering
string componentId)
{
var browserRenderer = BrowserRendererRegistry.Find(int.Parse(browserRendererId));
browserRenderer.RenderComponentInternal(
browserRenderer.RenderNewBatchInternal(
int.Parse(componentId));
}

View File

@ -260,7 +260,7 @@ namespace Microsoft.AspNetCore.Blazor.RenderTree
{
// TODO: Instead, call some OnPropertiesUpdated method on IComponent,
// whose default implementation causes itself to be rerendered
_renderer.RenderComponent(componentId);
_renderer.RenderInExistingBatch(componentId);
}
}

View File

@ -55,8 +55,15 @@ namespace Microsoft.AspNetCore.Blazor.Rendering
/// Updates the rendered state of the specified <see cref="IComponent"/>.
/// </summary>
/// <param name="componentId">The identifier of the <see cref="IComponent"/> to render.</param>
protected internal void RenderComponent(int componentId)
=> GetRequiredComponentState(componentId).Render();
protected internal void RenderNewBatch(int componentId)
{
RenderInExistingBatch(componentId);
}
internal void RenderInExistingBatch(int componentId)
{
GetRequiredComponentState(componentId).Render();
}
/// <summary>
/// Notifies the specified component that an event has occurred.

View File

@ -28,7 +28,7 @@ namespace Microsoft.AspNetCore.Blazor.Test
// Act
var componentId = renderer.AssignComponentId(component);
renderer.RenderComponent(componentId);
renderer.RenderNewBatch(componentId);
// Assert
Assert.Collection(renderer.RenderTreesByComponentId[componentId],
@ -50,7 +50,7 @@ namespace Microsoft.AspNetCore.Blazor.Test
// Act/Assert
var componentId = renderer.AssignComponentId(component);
renderer.RenderComponent(componentId);
renderer.RenderNewBatch(componentId);
var componentNode = renderer.RenderTreesByComponentId[componentId]
.Single(node => node.NodeType == RenderTreeNodeType.Component);
var nestedComponentId = componentNode.ComponentId;
@ -63,7 +63,7 @@ namespace Microsoft.AspNetCore.Blazor.Test
Assert.False(renderer.RenderTreesByComponentId.ContainsKey(nestedComponentId));
// It can be rendered
renderer.RenderComponent(nestedComponentId);
renderer.RenderNewBatch(nestedComponentId);
Assert.Collection(renderer.RenderTreesByComponentId[nestedComponentId],
node => AssertNode.Text(node, "Nested component output"));
}
@ -77,13 +77,13 @@ namespace Microsoft.AspNetCore.Blazor.Test
var componentId = renderer.AssignComponentId(component);
// Act/Assert: first render
renderer.RenderComponent(componentId);
renderer.RenderNewBatch(componentId);
Assert.Collection(renderer.RenderTreesByComponentId[componentId],
node => AssertNode.Text(node, "Initial message"));
// Act/Assert: second render
component.Message = "Modified message";
renderer.RenderComponent(componentId);
renderer.RenderNewBatch(componentId);
Assert.Collection(renderer.RenderTreesByComponentId[componentId],
node => AssertNode.Text(node, "Modified message"));
}
@ -99,7 +99,7 @@ namespace Microsoft.AspNetCore.Blazor.Test
builder.CloseElement();
});
var parentComponentId = renderer.AssignComponentId(parentComponent);
renderer.RenderComponent(parentComponentId);
renderer.RenderNewBatch(parentComponentId);
var nestedComponentNode = renderer.RenderTreesByComponentId[parentComponentId]
.Single(node => node.NodeType == RenderTreeNodeType.Component);
var nestedComponent = (MessageComponent)nestedComponentNode.Component;
@ -107,13 +107,13 @@ namespace Microsoft.AspNetCore.Blazor.Test
// Act/Assert: inital render
nestedComponent.Message = "Render 1";
renderer.RenderComponent(nestedComponentId);
renderer.RenderNewBatch(nestedComponentId);
Assert.Collection(renderer.RenderTreesByComponentId[nestedComponentId],
node => AssertNode.Text(node, "Render 1"));
// Act/Assert: re-render
nestedComponent.Message = "Render 2";
renderer.RenderComponent(nestedComponentId);
renderer.RenderNewBatch(nestedComponentId);
Assert.Collection(renderer.RenderTreesByComponentId[nestedComponentId],
node => AssertNode.Text(node, "Render 2"));
}
@ -130,7 +130,7 @@ namespace Microsoft.AspNetCore.Blazor.Test
Handler = args => { receivedArgs = args; }
};
var componentId = renderer.AssignComponentId(component);
renderer.RenderComponent(componentId);
renderer.RenderNewBatch(componentId);
var (eventHandlerNodeIndex, _) = FirstWithIndex(
renderer.RenderTreesByComponentId[componentId],
@ -158,7 +158,7 @@ namespace Microsoft.AspNetCore.Blazor.Test
builder.CloseElement();
});
var parentComponentId = renderer.AssignComponentId(parentComponent);
renderer.RenderComponent(parentComponentId);
renderer.RenderNewBatch(parentComponentId);
// Arrange: Render nested component
var nestedComponentNode = renderer.RenderTreesByComponentId[parentComponentId]
@ -166,7 +166,7 @@ namespace Microsoft.AspNetCore.Blazor.Test
var nestedComponent = (EventComponent)nestedComponentNode.Component;
nestedComponent.Handler = args => { receivedArgs = args; };
var nestedComponentId = nestedComponentNode.ComponentId;
renderer.RenderComponent(nestedComponentId);
renderer.RenderNewBatch(nestedComponentId);
// Find nested component's event handler ndoe
var (eventHandlerNodeIndex, _) = FirstWithIndex(
@ -191,7 +191,7 @@ namespace Microsoft.AspNetCore.Blazor.Test
// Act/Assert
Assert.Throws<ArgumentException>(() =>
{
renderer.RenderComponent(123);
renderer.RenderNewBatch(123);
});
}
@ -220,12 +220,12 @@ namespace Microsoft.AspNetCore.Blazor.Test
var renderer2ComponentId = renderer2.AssignComponentId(component);
// Act/Assert: Render component in renderer1
renderer1.RenderComponent(renderer1ComponentId);
renderer1.RenderNewBatch(renderer1ComponentId);
Assert.True(renderer1.RenderTreesByComponentId.ContainsKey(renderer1ComponentId));
Assert.False(renderer2.RenderTreesByComponentId.ContainsKey(renderer2ComponentId));
// Act/Assert: Render same component in renderer2
renderer2.RenderComponent(renderer2ComponentId);
renderer2.RenderNewBatch(renderer2ComponentId);
Assert.True(renderer2.RenderTreesByComponentId.ContainsKey(renderer2ComponentId));
}
@ -271,7 +271,7 @@ namespace Microsoft.AspNetCore.Blazor.Test
// Assert
Assert.ThrowsAny<Exception>(() =>
{
renderer.RenderComponent(componentId);
renderer.RenderNewBatch(componentId);
});
}
@ -295,7 +295,7 @@ namespace Microsoft.AspNetCore.Blazor.Test
GC.Collect();
GC.WaitForPendingFinalizers();
renderer.RenderComponent(componentId);
renderer.RenderNewBatch(componentId);
// Assert
Assert.True(didRender);
@ -315,7 +315,7 @@ namespace Microsoft.AspNetCore.Blazor.Test
});
var rootComponentId = renderer.AssignComponentId(component);
renderer.RenderComponent(rootComponentId);
renderer.RenderNewBatch(rootComponentId);
var nestedComponentInstance = (MessageComponent)renderer.RenderTreesByComponentId[rootComponentId]
.Single(node => node.NodeType == RenderTreeNodeType.Component)
@ -323,7 +323,7 @@ namespace Microsoft.AspNetCore.Blazor.Test
// Act: Second render
message = "Modified message";
renderer.RenderComponent(rootComponentId);
renderer.RenderNewBatch(rootComponentId);
// Assert
Assert.Collection(renderer.RenderTreesByComponentId[rootComponentId],
@ -348,7 +348,7 @@ namespace Microsoft.AspNetCore.Blazor.Test
});
var rootComponentId = renderer.AssignComponentId(component);
renderer.RenderComponent(rootComponentId);
renderer.RenderNewBatch(rootComponentId);
var originalComponentInstance = (FakeComponent)renderer.RenderTreesByComponentId[rootComponentId]
.Single(node => node.NodeType == RenderTreeNodeType.Component)
@ -361,7 +361,7 @@ namespace Microsoft.AspNetCore.Blazor.Test
// Act: Second render
firstRender = false;
renderer.RenderComponent(rootComponentId);
renderer.RenderNewBatch(rootComponentId);
var updatedComponentInstance = (FakeComponent)renderer.RenderTreesByComponentId[rootComponentId]
.Single(node => node.NodeType == RenderTreeNodeType.Component)
@ -388,7 +388,7 @@ namespace Microsoft.AspNetCore.Blazor.Test
});
var rootComponentId = renderer.AssignComponentId(component);
renderer.RenderComponent(rootComponentId);
renderer.RenderNewBatch(rootComponentId);
var childComponentId = renderer.RenderTreesByComponentId[rootComponentId]
.Single(node => node.NodeType == RenderTreeNodeType.Component)
@ -396,11 +396,11 @@ namespace Microsoft.AspNetCore.Blazor.Test
// 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.RenderComponent(childComponentId);
renderer.RenderNewBatch(childComponentId);
// Act: Second render
firstRender = false;
renderer.RenderComponent(rootComponentId);
renderer.RenderNewBatch(rootComponentId);
var updatedComponentNode = renderer.RenderTreesByComponentId[rootComponentId]
.Single(node => node.NodeType == RenderTreeNodeType.Component);
@ -415,8 +415,8 @@ namespace Microsoft.AspNetCore.Blazor.Test
public new int AssignComponentId(IComponent component)
=> base.AssignComponentId(component);
public new void RenderComponent(int componentId)
=> base.RenderComponent(componentId);
public new void RenderNewBatch(int componentId)
=> base.RenderNewBatch(componentId);
protected internal override void UpdateDisplay(int componentId, RenderTreeDiff renderTreeDiff)
{
@ -431,8 +431,8 @@ namespace Microsoft.AspNetCore.Blazor.Test
public new int AssignComponentId(IComponent component)
=> base.AssignComponentId(component);
public new void RenderComponent(int componentId)
=> base.RenderComponent(componentId);
public new void RenderNewBatch(int componentId)
=> base.RenderNewBatch(componentId);
public new void DispatchEvent(int componentId, int renderTreeIndex, UIEventArgs args)
=> base.DispatchEvent(componentId, renderTreeIndex, args);